| <?php |
| |
| $isEMFserver = (preg_match("/^emf(?:\.torolab\.ibm\.com)$/", $_SERVER["SERVER_NAME"])); |
| require_once ($_SERVER['DOCUMENT_ROOT'] . "/modeling/includes/scripts.php"); |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/modeling/emf/emf/build/_common.php"); |
| |
| internalUseOnly(); |
| |
| $pre = "../"; |
| |
| require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); |
| require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); |
| require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); |
| $App = new App(); |
| $Nav = new Nav(); |
| $Menu = new Menu(); |
| include ($App->getProjectCommon()); |
| ob_start(); |
| |
| $debug = isset ($_GET["debug"]) ? 1 : 0; |
| $previewOnly = isset ($_GET["previewOnly"]) ? 1 : 0; |
| $PR = "emf"; |
| ?> |
| |
| <div id="midcolumn"> |
| |
| <div class="homeitem3col"> |
| <h3>Building |
| <a style="color:white" href="?project=emf<?php print ($debug?"&debug=1":"").($previewOnly?"&previewOnly=1":""); ?>">EMF</a></h3> |
| |
| <?php |
| |
| |
| if (!isset ($_POST["process"]) || !$_POST["process"] == "build") |
| { // page one, the form |
| print "<p>To run a build, please complete the following form and click the Build button.</p>"; |
| } else |
| { |
| print "<p>Your build is " . ($previewOnly ? "<b>NOT</b> " : "") . "in progress" . ($previewOnly ? ", but the command is displayed below for preview" : "") . |
| ". <a href=\"?project=$PR" . ($debug ? "&debug=1" : "") . ($previewOnly ? "&previewOnly=1" : "") . "\">Build another?</a></p>"; |
| } |
| |
| $workDir = "/home/www-data/build/" . $PR; |
| |
| /** customization options here **/ |
| $dependenciesURLsFile = is_file($workDir . "/../requests/dependencies.urls.txt") ? $workDir . "/../requests/dependencies.urls.txt" : "requests/dependencies.urls.txt"; // read-write, one shared file |
| |
| /** done customizing, shouldn't have to change anything below here **/ |
| |
| if (!isset($options)) |
| { |
| $options = array(); |
| } |
| else |
| { |
| $options = array_merge($options, loadOptionsFromFile($dependenciesURLsFile)); |
| } |
| $options["BranchIES"] = array ("HEAD","R3_3_maintenance"); |
| $options["BuildType"] = array("Release=R","Stable=S","Integration=I","Maintenance=M","Nightly=N|selected"); |
| $options["TagBuild"] = array ("Yes", "No|selected"); |
| $options["RunTests20"] = array ( "JUnit Tests=JUnit", "JDK 5.0 & Standalone=JDK50", "Old Tests=Old" ); |
| $options["RunTests21"] = array ( "JUnit Tests=JUnit", "JDK 1.4 & Standalone=JDK14", "JDK 5.0 & Standalone=JDK50", "Old Tests=Old" ); |
| $options["RunTests22"] = array ( "JUnit Tests=JUnit", "JDK 1.4 & Standalone=JDK14", "JDK 5.0 & Standalone=JDK50", "Old Tests=Old" ); |
| $options["RunTests23"] = array ( "JUnit Tests=JUnit", "JDK 5.0 & Standalone=JDK50", "Old Tests=Old" ); |
| $options["RunTests24"] = array ( "JUnit Tests=JUnit", "JDK 6.0 & Standalone=JDK60", "JDK 5.0 & Standalone=JDK50", "Old Tests=Old" ); |
| $options["RunTests25"] = array ( "JUnit Tests=JUnit", "JDK 6.0 & Standalone=JDK60", "JDK 5.0 & Standalone=JDK50", "Old Tests=Old" ); |
| #"Binary Compatibility=Binary", "Source Compatibility=Source", |
| |
| // bug 222298: this will probably break on some servers |
| $selectedDepsList = array(); |
| exec($workDir . "/../modeling/scripts/start_cron.sh -sub $projct -noSearchCVS -depsOnly", $selectedDepsList); |
| $selectedDepsList2 = array(); |
| foreach($selectedDepsList as $i => $row) |
| { |
| $bits = explode("=",$row); |
| $selectedDepsList2[$bits[0]] = $bits[1]; |
| } |
| $selectedDepsList = $selectedDepsList2; unset($selectedDepsList2); //print_r($selectedDepsList); |
| if (!isset ($_POST["process"]) || !$_POST["process"] == "build") |
| { // page one, the form |
| ?> |
| |
| <table> |
| <form method=POST name="buildForm"> |
| <input type="hidden" name="process" value="build" /> |
| <tr> |
| <td colspan="4"></td> |
| <td colspan="2"> |
| <div id="note" name="note" style="border:0;font-style:italic;font-weight:bold" readonly="readonly"> </div> |
| </td> |
| </tr> |
| |
| <tr> |
| <td><img src="/emf/images/numbers/1.gif" /></td> |
| <td> </td> |
| <td><b>Branch, Subproject & Type</b></td> |
| <td> </td> |
| <input name="build_Branch" type="hidden" size="8" maxlength="10" onchange="this.value=this.value.replace(/[^0-9\.]/g,'');"/> |
| <input name="build_Java_Home" type="hidden" size="20"/> |
| <td colspan=3><select name="build_CVS_Branch" onchange="doBranchSelected(this,document.forms.buildForm.build_Build_Type)"> |
| <?php displayOptionsTriplet($options["BranchAndJDK"]); ?> |
| </select> <br/> |
| <select name="build_Project" onchange="document.location.href='?project='+this.options[this.selectedIndex].value+'<?php |
| |
| |
| print ($debug ? "&debug=1" : "") . ($previewOnly ? "&previewOnly=1" : ""); |
| ?>'"> |
| <option <?php print $PR == "emf" ? "selected " : ""; ?>value="emf">EMF</option> |
| </select> |
| <select name="build_Build_Type" onchange="pickDefaults(this.options[this.selectedIndex].value)"> |
| <?php displayOptions($options["BuildType"]); ?> |
| </select></td> |
| </tr> |
| |
| <tr> |
| <td colspan="6" align="right"> |
| <div name="fullURL" id="fullURL" style="border:0;font-size:9px;" readonly="readonly"> </div> |
| </td> |
| </tr> |
| <tr> |
| <td colspan="4"></td> |
| <td colspan="2"> |
| <small><acronym title="Show all deps / show only selected deps"><a href="javascript:toggleDependencies()">Toggle Selection</a></acronym> | <acronym title="Define a regex in _common.php to use this"><a href="javascript:resetLatestDependencies()">Reset Latest Dependencies</a></acronym></small> |
| </td> |
| </tr> |
| |
| <tr valign="top"> |
| <td><img src="/modeling/images/numbers/2.gif" /></td> |
| <td> </td> |
| <td><b>Dependency URLs</b><br> |
| |
| <small> |
| choose URLs (use <em>CTRL</em> <br> |
| for multiple selections)</small> |
| <table> |
| <tr><td><b>Public</b></td><td><b>Mirror</b></td></tr> |
| <?php $buildServer = array("www.eclipse.org","emf.torolab.ibm.com","emft.eclipse.org","download.eclipse.org"); ?> |
| <tr> |
| <td> • <a href="http://download.eclipse.org/eclipse/downloads/">Eclipse</a></td> |
| <td> • <a href="http://fullmoon/downloads/">Eclipse</a></td> |
| </tr> |
| </table> |
| <p><small>  -- AND/OR --</small></p> |
| </td> |
| <td> </td> |
| <td colspan=2> |
| <small> |
| <select multiple="multiple" style="font-size:9px" name="build_Dependencies_URL[]" size="5" onchange="showfullURL(this.options[this.selectedIndex].value);"> |
| <?php displayURLs($options["DependenciesURL"]); ?> |
| </select></td> |
| </tr> |
| <tr valign="top"> |
| <td colspan=2> </td> |
| <td><small> |
| paste full URL(s), one per<br> |
| line or comma separated<br> |
| (new values will be stored)</small> |
| </td> |
| <td> </td> |
| <td colspan=2> |
| <textarea name="build_Dependencies_URL_New" cols="50" rows="1"></textarea> |
| </td> |
| </tr> |
| <tr><td colspan="6"> </td></tr> |
| |
| <tr> |
| <td rowspan="2" valign="top"><img src="/modeling/images/numbers/3.gif" /></td> |
| <td rowspan="2"> </td> |
| <td colspan=1><a href="http://wiki.eclipse.org/index.php/Platform-releng-basebuilder">Basebuilder</a> Branch:</td> |
| <td> </td> |
| <td><input size="20" name="build_debug_basebuilder_branch" value="<?php echo $options["BaseBuilderBranch"]; ?>"></td> |
| <td width="350"><small><a id="divToggle_relengBasebuilder" name="divToggle_relengBasebuilder" href="javascript:toggleDetails('relengBasebuilder')">[+]</a></small> |
| <div id="divDetail_relengBasebuilder" name="divDetail_relengBasebuilder" style="display:none;border:0"> |
| <small> |
| Enter Tag or Branch, eg., |
| <acronym title="Eclipse 3.4.x">RC1_34</acronym>, |
| <acronym title="Eclipse 3.3.x">v20070614</acronym>, |
| <acronym title="Eclipse 3.2.x">r322_v20070104</acronym>, |
| <acronym title="Eclipse 3.1.x">R3_1_maintenance</acronym> :: <a href="http://wiki.eclipse.org/index.php/Platform-releng-basebuilder">wiki</a> |
| </small> |
| </div> |
| </td> |
| </tr> |
| <tr><td colspan="6"> </td></tr> |
| |
| <tr> |
| <td valign="top" rowspan="2" valign="top"><img src="/modeling/images/numbers/4.gif" /></td> |
| <td rowspan="2"> </td> |
| <td><b>Build Alias</b><br><small>required for S and R builds</small></td> |
| <td> </td> |
| <td><input name="build_Build_Alias" size=8></td> |
| <td width="300"><small><a id="divToggle_buildAlias" name="divToggle_buildAlias" href="javascript:toggleDetails('buildAlias')">[+]</a></small> |
| <div id="divDetail_buildAlias" name="divDetail_buildAlias" style="display:none;border:0"> |
| <small> |
| Eg., to label a milestone as "0.7.0M4" instead of "S200712120000". You must include the version -- "M4" is not valid. |
| </small> |
| </div> |
| </td> |
| </tr> |
| |
| <tr> |
| <td><b>Tag Build</b><br><small> |
| optional</small></td> |
| <td> </td> |
| <td><select name="build_Tag_Build" size=1> |
| <?php displayOptions($options["TagBuild"]); ?> |
| </select></td> |
| <td><small><a id="divToggle_MapfileRule" name="divToggle_MapfileRule" href="javascript:toggleDetails('MapfileRule')">[+]</a></small> |
| <div id="divDetail_MapfileRule" name="divDetail_MapfileRule" style="display:none;border:0"> |
| <small>If Yes, this tag will appear in CVS as "build_200405061234".<br/>If No, CVS will NOT be tagged with this build's ID</small> |
| </td> |
| </tr> |
| |
| <tr><td colspan="6"> </td></tr> |
| |
| |
| <tr valign="top"> |
| <td><img src="/emf/images/numbers/5.gif" /></td> |
| <td> </td> |
| <td><b>Run Tests</b><br><small> |
| optional</small></td> |
| <td> </td> |
| |
| <td colspan="1"> |
| <div name="divRunTests25" id="divRunTests25" style="display:none;border:0"> |
| <?php displayCheckboxes("build_Run_Tests",$options["RunTests25"],"_25"); ?> |
| </div> |
| <div name="divRunTests24" id="divRunTests24" style="display:none;border:0"> |
| <?php displayCheckboxes("build_Run_Tests",$options["RunTests24"],"_24"); ?> |
| </div> |
| <div name="divRunTests23" id="divRunTests23" style="display:none;border:0"> |
| <?php displayCheckboxes("build_Run_Tests",$options["RunTests23"],"_23"); ?> |
| </div> |
| <div name="divRunTests22" id="divRunTests22" style="display:none;border:0"> |
| <?php displayCheckboxes("build_Run_Tests",$options["RunTests22"],"_22"); ?> |
| </div> |
| <div name="divRunTests21" id="divRunTests21" style="display:none;border:0"> |
| <?php displayCheckboxes("build_Run_Tests",$options["RunTests21"],"_21"); ?> |
| </div> |
| <div name="divRunTests20" id="divRunTests20" style="display:none;border:0"> |
| <?php displayCheckboxes("build_Run_Tests",$options["RunTests20"],"_20"); ?> |
| </div> |
| </td> |
| <td width="300"><small><a id="divToggle_RunTests" name="divToggle_RunTests" href="javascript:toggleDetails('RunTests')">[+]</a></small> |
| <div id="divDetail_RunTests" name="divDetail_RunTests" style="display:none;border:0"> |
| <small> |
| If yes to JUnit Tests, tests will be performed during build to |
| validate results and will be refected in build results on download |
| page and build detail pages. |
| <p> |
| If yes to JDK x.x Tests, EMF will be build using IBM JDK x.x, then |
| the EMF zips built with 1.4 will be run (and tested using the above |
| JUnit tests using IBM JRE x.x. For Standalone tests, the EMF |
| Standalone on runtime zip(s) will be used instead of the SDK for |
| running the same standalone JUnit tests as are used by the JDK tests. |
| <p> |
| Old tests include: BVT, FVT, SVT. If yes to Old Tests, when build |
| completes old tests will be run with new SDK zip & selected eclipse SDK. |
| </small> |
| </div> |
| </td> |
| </tr> |
| |
| <tr> |
| <td><img src="/emf/images/numbers/6.gif" /></td> |
| <td> </td> |
| <td><b>Email Address</b><br><small>optional</small></td> |
| <td> </td> |
| <td colspan="1"><input name="build_Email" size="20" maxlength="80"/></td> |
| <td width="300"><small><a id="divToggle_email" name="divToggle_email" href="javascript:toggleDetails('email')">[+]</a></small> |
| <div id="divDetail_email" name="divDetail_email" style="display:none;border:0"> |
| <small>Add your email (or comma-separated emails) to be notified when done. See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=210396">bug 210396</a>. |
| </small> |
| </div> |
| </td> |
| </tr> |
| |
| <?php if ($debug) { ?> |
| <tr> |
| <td colspan="6"><hr noshade size=1/></td> |
| </tr> |
| <tr> |
| <td> </td> |
| <td colspan="6"><table> |
| <tr> |
| <td colspan=3><b>Debug Options:</b></td> |
| </tr> |
| <tr> |
| <td colspan=1>org.eclipse.<?php print $PR; ?> branch:<br><small>-branch</small></td> |
| <td> </td> |
| <td><input size="15" name="build_debug_CVS_Branch" value=""></td> |
| <td><small> Override value above; enter Tag/Branch/Version, eg., build_200409171617, R2_0_maintenance</small></td> |
| </tr> |
| <tr> |
| <td colspan=1>org.eclipse.<?php print $PR; ?>.releng branch:<br><small>-projRelengBranch</small></td> |
| <td> </td> |
| <td><input size="15" name="build_debug_proj_releng_branch" value=""></td> |
| <td><small> Enter Tag/Branch/Version, eg., build_200409171617, R2_0_maintenance</small></td> |
| </tr> |
| <?php if ($PR == "emf") { ?> |
| <tr> |
| <td colspan=1>old tests branch:<br><small>-emfOldTestsBranch</small></td> |
| <td> </td> |
| <td><input size="15" name="build_debug_emf_old_tests_branch" value=""></td> |
| <td><small> Enter Tag/Branch/Version, eg., R2_0_maintenance</small></td> |
| </tr> |
| <?php } ?> |
| <tr> |
| <td colspan=1>Keep tempfiles?<br><small>-noclean</small></td> |
| <td> </td> |
| <td><input type="checkbox" name="build_debug_noclean" value="Y" checked></td> |
| </tr> |
| </table></td> |
| </tr> |
| <?php } ?> |
| |
| <tr> |
| <td> </td> |
| <td colspan=2 align=center><input type="button" value="<?php if ($previewOnly) { print "Preview Only"; } else { print "Build"; } ?>" onclick="doSubmit()"></td> |
| </tr> |
| <tr> |
| <td> </td> |
| </tr> |
| </form> |
| </table> |
| <script language="javascript"> |
| |
| function showfullURL(val) |
| { |
| fullURL = document.getElementById('fullURL'); |
| fullURL.innerHTML = val ? " --> " + val + " <--" : " "; |
| } |
| |
| <?php |
| /* pull list of deps from $options[regex], if defined; see $selectedDepsList above */ |
| if (isset($selectedDepsList) && sizeof($selectedDepsList)>0) |
| { |
| $numDeps = sizeof($selectedDepsList); |
| $theDeps = implode(", ", array_keys($selectedDepsList)); |
| print <<<EOT |
| function setNote(val) |
| { |
| // defined dynamically in _common.php using \$options[regex] |
| note = document.getElementById('note'); |
| note.innerHTML = "Requires $numDeps SDKs: $theDeps"; |
| } |
| EOT; |
| } |
| else |
| { ?> |
| function setNote(val) |
| { |
| // defined statically -- replace this in _common.php using \$options[regex] |
| note = document.getElementById('note'); |
| note.innerHTML = "Requires 1 SDK: Eclipse" |
| } <?php |
| } ?> |
| |
| function pickDefaults(val) { |
| document.forms.buildForm.build_Tag_Build.selectedIndex=(val=='N'?1:0); // Nightly = No; others = Yes |
| divNum=branchToDivNum(); |
| if (val=='N') { |
| setCheckbox("build_Run_Tests_JUnit",true,divNum); |
| setCheckbox("build_Run_Tests_JDK14",false,divNum); |
| setCheckbox("build_Run_Tests_JDK50",false,divNum); |
| setCheckbox("build_Run_Tests_JDK60",false,divNum); |
| /*setCheckbox("build_Run_Tests_Binary",false,divNum); |
| setCheckbox("build_Run_Tests_Source",false,divNum);*/ |
| setCheckbox("build_Run_Tests_Old",false,divNum); |
| } else { |
| setCheckbox("build_Run_Tests_JUnit",true,divNum); |
| setCheckbox("build_Run_Tests_JDK14",true,divNum); |
| setCheckbox("build_Run_Tests_JDK50",true,divNum); |
| setCheckbox("build_Run_Tests_JDK60",true,divNum); |
| /*setCheckbox("build_Run_Tests_Binary",true,divNum); |
| setCheckbox("build_Run_Tests_Source",true,divNum);*/ |
| setCheckbox("build_Run_Tests_Old",true,divNum); |
| } |
| } |
| |
| function branchToDivNum() |
| { |
| return document.forms.buildForm.build_Branch.value.substring(0,3).replace(".",""); |
| } |
| |
| function setCheckbox(field,bool,divNum) |
| { |
| if (document.forms.buildForm && document.forms.buildForm.elements[field] && document.forms.buildForm.elements[field].type=="checkbox") |
| { |
| document.forms.buildForm.elements[field].checked=bool; |
| } else { |
| elem = document.getElementById(field+(divNum?"_"+divNum:"")); |
| if (elem && elem.style.display != "none") { |
| elem.checked=bool; |
| } |
| } |
| } |
| |
| function doBranchSelected(field,field2) { |
| val=field.options[field.selectedIndex].text; |
| br=pickDefaultBranch(val); |
| pickDefaultJavaHome(val); |
| toggleCheckboxes(br); |
| val2=field2.options[field2.selectedIndex].value; |
| pickDefaults(val2) |
| } |
| |
| function pickDefaultBranch(val) { |
| with (document.forms.buildForm) { |
| if (val.indexOf(" | ")>0) { |
| build_Branch.value=val.substring(val.indexOf(" | ")+3,val.lastIndexOf(" | ")); // since the text label shown in the select box is not available for POST, store it here |
| } else { |
| build_Branch.value=val; // since the text label shown in the select box is not available for POST, store it here |
| } |
| return build_Branch.value; |
| } |
| } |
| |
| function pickDefaultJavaHome(val) { |
| with (document.forms.buildForm) { |
| if (val.indexOf(" | ")>0) { |
| build_Java_Home.value=val.substring(3+val.lastIndexOf(" | ")); // since the text label shown in the select box is not available for POST, store it here |
| } else { |
| build_Java_Home.value=val; // since the text label shown in the select box is not available for POST, store it here |
| } |
| return build_Java_Home.value; |
| } |
| } |
| |
| function toggleDetails(id) |
| { |
| toggle=document.getElementById("divToggle_" + id); |
| detail=document.getElementById("divDetail_" + id); |
| if (toggle.innerHTML=="[+]") |
| { |
| toggle.innerHTML="[-]"; |
| detail.style.display=""; |
| } |
| else |
| { |
| toggle.innerHTML="[+]"; |
| detail.style.display="none"; |
| } |
| } |
| |
| function toggleCheckboxes(val) { |
| divs = new Array( |
| "divRunTests25", |
| "divRunTests24", |
| "divRunTests23", |
| "divRunTests22", |
| "divRunTests21", |
| "divRunTests20", |
| "divRunTests" |
| ); |
| divNum=branchToDivNum(); |
| for (i=0; i<divs.length; i++) { |
| elem = document.getElementById(divs[i]); |
| if (elem) |
| { |
| elem.style.display = divs[i] == "divRunTests"+divNum ? "" : "none"; |
| } |
| } |
| } |
| |
| function doSubmit() { |
| answer = true; |
| divNum=branchToDivNum(); |
| with (document.forms.buildForm) { |
| tofocus="build_Run_Tests_JUnit"+(divNum?"_"+divNum:""); |
| if (!elements[tofocus]){ |
| tofocus="build_Run_Tests_JUnit"; |
| } |
| if (elements[tofocus] && elements[tofocus].checked==false // if not running JUnit tests |
| && build_Build_Type.options[build_Build_Type.selectedIndex].value!='N' // and not a Nightly |
| ) { |
| answer = confirm( |
| 'Are you sure you want to run a '+build_Build_Type.options[build_Build_Type.selectedIndex].text+"\n"+ |
| 'build without running JUnit tests?'); |
| } else { |
| tofocus=null; |
| } |
| } |
| if (answer) { |
| document.forms.buildForm.submit(); |
| } else if (tofocus) { |
| document.forms.buildForm.elements[tofocus].focus(); |
| } |
| } |
| |
| selectedDepsList = new Array(); |
| <?php $cnt=-1; foreach ($selectedDepsList as $key => $url) print "selectedDepsList[" . (++$cnt) . "] = '$url';\n"; ?> |
| |
| allDependencies = new Array(); |
| field=document.forms.buildForm.elements["build_Dependencies_URL[]"]; |
| for (i=0; i<field.options.length; i++) |
| { |
| allDependencies[i] = [field.options[i].text, field.options[i].value, field.options[i].selected]; |
| } |
| |
| |
| /* onload of the page, pick the regex-specified defaults */ |
| function selectLatestDependencies() |
| { |
| field=document.forms.buildForm.elements["build_Dependencies_URL[]"]; |
| for (j=0;j<selectedDepsList.length;j++) |
| { |
| for (i=0;i<field.options.length;i++) |
| { |
| if (field.options[i].value == selectedDepsList[j]) |
| { |
| //alert('Match: ' + selectedDepsList[j]); |
| field.options[i].selected=true; |
| break; |
| } |
| } |
| } |
| refreshAllDependencies(); |
| } |
| |
| function refreshAllDependencies() |
| { |
| field=document.forms.buildForm.elements["build_Dependencies_URL[]"]; |
| for (i=0;i<field.options.length;i++) |
| { |
| for (j=0;j<allDependencies.length;j++) |
| { |
| if (allDependencies[j][0] == field.options[i].text && allDependencies[j][1] == field.options[i].value) |
| { |
| allDependencies[j][2] = field.options[i].selected; |
| } |
| } |
| } |
| } |
| |
| /* use this to purge any user-selected values and to only pick the latest deps */ |
| function resetLatestDependencies() |
| { |
| if (selectedDepsList.length) |
| { |
| field=document.forms.buildForm.elements["build_Dependencies_URL[]"]; |
| for (i=0;i<field.options.length;i++) |
| { |
| field.options[i].selected = false; |
| } |
| selectLatestDependencies(); |
| } |
| else |
| { |
| alert("No latest dependencies specified in\n\$options[\"regex\"] in _common.php.") |
| } |
| } |
| |
| /* toggle showing all deps and only the selected ones */ |
| function toggleDependencies() |
| { |
| field=document.forms.buildForm.elements["build_Dependencies_URL[]"]; |
| if (allDependencies.length==field.options.length) |
| { |
| j=0; |
| for (i=field.options.length-1;i>=0;i--) |
| { |
| allDependencies[i][2] = field.options[i].selected; |
| if (!field.options[i].selected) |
| { |
| field.remove(i); |
| } |
| } |
| } |
| else |
| { |
| field.options.length=0 |
| for (i=0;i<allDependencies.length;i++) |
| { |
| field.options[field.options.length] = new Option(allDependencies[i][0], allDependencies[i][1], false, allDependencies[i][2]); |
| } |
| //selectLatestDependencies() |
| } |
| } |
| |
| function doOnLoadDefaults() { |
| doBranchSelected(document.forms.buildForm.build_CVS_Branch,document.forms.buildForm.build_Build_Type); |
| field=document.forms.buildForm.build_Build_Type; |
| pickDefaults(field.options[field.selectedIndex].value); |
| selectLatestDependencies(); |
| if (selectedDepsList.length) { toggleDependencies(); } |
| } |
| |
| setTimeout('doOnLoadDefaults()',500); |
| |
| </script> |
| <?php |
| |
| |
| } else |
| { // page two, form submission results |
| |
| /****************************** END OF PAGE ONE / START OF PAGE TWO **********************************/ |
| |
| $newDependencies = splitDependencies(isset ($_POST["build_Dependencies_URL_New"]) ? $_POST["build_Dependencies_URL_New"] : ""); |
| $dependencyURLs = getDependencyURLs(isset ($_POST["build_Dependencies_URL"]) ? $_POST["build_Dependencies_URL"] : "", $newDependencies, $dependenciesURLsFile); |
| |
| $buildTimestamp = date("YmdHi"); |
| |
| $ID = $_POST["build_Build_Type"] . $buildTimestamp; |
| $BR = $_POST["build_Branch"]; |
| $PR = isset ($_GET["project"]) && $_GET["project"] ? $_GET["project"] : (isset ($_POST["build_Project"]) ? $_POST["build_Project"] : ""); |
| |
| $BR_suffix = "_" . str_replace(".", "", substr($BR, 0, 3)); |
| |
| $logfile = '/downloads/drops/' . $BR . '/' . $ID . '/buildlog.txt'; |
| |
| if ($PR == "emf") |
| { |
| if ($_POST["build_CVS_Branch"] == "R2_0_maintenance") |
| { |
| if ($_POST["build_debug_basebuilder_branch"] == "") |
| { |
| $_POST["build_debug_basebuilder_branch"] = "R3_0_maintenance"; |
| } |
| if ($_POST["build_debug_emf_releng_branch"] == "") |
| { |
| $_POST["build_debug_emf_releng_branch"] = "R2_0_maintenance"; |
| } |
| if ($_POST["build_debug_emf_old_tests_branch"] == "") |
| { |
| $_POST["build_debug_emf_old_tests_branch"] = "R2_0_maintenance"; |
| } |
| } |
| if ($_POST["build_CVS_Branch"] == "R2_1_maintenance") |
| { |
| if ($_POST["build_debug_basebuilder_branch"] == "") |
| { |
| $_POST["build_debug_basebuilder_branch"] = "R3_1_maintenance"; |
| } |
| if ($_POST["build_debug_emf_releng_branch"] == "") |
| { |
| $_POST["build_debug_emf_releng_branch"] = "R2_1_maintenance"; |
| } |
| if ($_POST["build_debug_emf_old_tests_branch"] == "") |
| { |
| $_POST["build_debug_emf_old_tests_branch"] = "R2_1_maintenance"; |
| } |
| } |
| if ($_POST["build_CVS_Branch"] == "R2_2_maintenance") |
| { |
| if ($_POST["build_debug_basebuilder_branch"] == "") |
| { |
| $_POST["build_debug_basebuilder_branch"] = "R3_2_maintenance"; |
| } |
| if ($_POST["build_debug_emf_releng_branch"] == "") |
| { |
| $_POST["build_debug_emf_releng_branch"] = "R2_2_maintenance"; |
| } |
| if ($_POST["build_debug_emf_old_tests_branch"] == "") |
| { |
| $_POST["build_debug_emf_old_tests_branch"] = "R2_2_maintenance"; |
| } |
| } |
| } else |
| { |
| // ...? |
| } |
| ?> |
| |
| <?php |
| |
| |
| if (!$previewOnly) |
| { |
| ?> |
| <p>Logfile is <a href="<?php print '/tools/'.$PR.$logfile; ?>"><?php print $workDir.$logfile; ?></a></p> |
| |
| <?php } ?> |
| |
| <ul> |
| <li><a href="/modeling/<?php print $PR == "emf" ? $PR : "mdt"; ?>/downloads/?project=emf&sortBy=date&hlbuild=0#latest">You can view, explore, or download your build here</a>. |
| Here's what you submitted:</li> |
| |
| <?php |
| |
| |
| print "<ul>\n"; |
| foreach ($_POST as $k => $v) |
| { |
| if (strstr($k, "build_") && !strstr($k, "_Sel")) |
| { |
| if ((is_array($v) && sizeof($v) > 0) || (!is_array($v) && $v != "")) |
| { |
| $lab = preg_replace("/\_/", " ", substr($k, 6)); |
| $val = $k == "build_Dependencies_URL_New" ? $newDependencies : $v; |
| print "<li>"; |
| print (is_array($val) ? "<b>" . |
| $lab . ":</b>" . "<ul>\n<li><small>" . join("</small></li>\n<li><small>", $val) . "</small></li>\n</ul>\n" : "<div>" . |
| $val . "</div>" . "<b>" . $lab . ":</b>"); |
| print "</li>\n"; |
| } |
| } |
| } |
| |
| print "<li><div>" . $_SERVER["REMOTE_ADDR"] . "</div><b>Your IP:</b></li>\n"; |
| print "</ul>\n"; |
| print "</ul>\n"; |
| |
| $branches = getBranches($options); |
| //foreach ($branches as $k => $b) { print "$k => $b<br>"; } |
| |
| if (isset ($branches["HEAD"]) && isset ($_POST["build_CVS_Branch"]) && $branches["HEAD"] == $_POST["build_CVS_Branch"]) |
| { |
| $_POST["build_CVS_Branch"] = "HEAD"; |
| } |
| |
| // fire the shell script... |
| |
| /** see http://ca3.php.net/manual/en/function.exec.php **/ |
| |
| // create the log dir before trying to log to it |
| $preCmd = 'mkdir -p ' . $workDir . '/downloads/drops/' . $BR . '/' . $ID . '/eclipse ;'; |
| |
| $cmd = '/bin/bash -c "exec /usr/bin/nohup /usr/bin/setsid ' . $workDir . '/scripts/start.sh -proj ' . $PR . |
| ' -branch ' . (isset ($_POST["build_debug_CVS_Branch"]) && $_POST["build_debug_CVS_Branch"] != "" ? $_POST["build_debug_CVS_Branch"] : (isset ($_POST["build_CVS_Branch"]) ? $_POST["build_CVS_Branch"] : "")) . |
| $dependencyURLs . |
| ((isset ($_POST["build_Run_Tests_JUnit"]) && $_POST["build_Run_Tests_JUnit"] == "Y") || (isset ($_POST["build_Run_Tests_JUnit" . $BR_suffix]) && $_POST["build_Run_Tests_JUnit" . $BR_suffix] == "Y") ? ' -antTarget run' : ' -antTarget runWithoutTest') . |
| ($_POST["build_Build_Alias"] ? ' -buildAlias ' . $_POST["build_Build_Alias"] : "") . // 2.0.2, for example |
| ' -tagBuild ' . ($_POST["build_Tag_Build"] == "Yes" ? "true" : "false") . // new, 04/07/12 |
| ' -buildDir ' . $workDir . '/downloads/drops/' . $BR . '/' . $ID . |
| ' -buildTimestamp ' . $buildTimestamp . |
| ' -buildType ' . $_POST["build_Build_Type"] . ' -javaHome ' . $_POST["build_Java_Home"] . |
| ' -downloadsDir /home/www-data/build/downloads'; |
| // /home/www-data/build/downloads |
| |
| $fields = array ( |
| "-runJDK13Tests" => "build_Run_Tests_JDK13", |
| "-runJDK14Tests" => "build_Run_Tests_JDK14", |
| "-runJDK50Tests" => "build_Run_Tests_JDK50", |
| "-runJDK60Tests" => "build_Run_Tests_JDK60", |
| "-runOldTests" => "build_Run_Tests_Old" |
| // TODO: add build_Run_Tests_Binary & build_Run_Tests_Source |
| ); |
| foreach ($fields as $flag => $field) |
| { |
| // $_POST["build_Run_Tests_JDK50"] or $_POST["build_Run_Tests_JDK50_23"] == "Y" |
| if ((isset ($_POST[$field]) && $_POST[$field] == "Y") || (isset ($_POST[$field . $BR_suffix]) && $_POST[$field . $BR_suffix] == "Y")) |
| { |
| $cmd .= ' ' . $flag . ' ' . $BR; // -runJDK50Tests M200612341234 |
| } |
| } |
| |
| $fields = array ( |
| "-basebuilderBranch" => "build_debug_basebuilder_branch", |
| "-projRelengBranch" => "build_debug_proj_releng_branch", |
| "-emfOldTestsBranch" => "build_debug_emf_old_tests_branch", |
| "-email" => "build_Email" |
| ); |
| foreach ($fields as $flag => $field) |
| { |
| // $_POST["build_debug_basebuilder_branch"] != "" |
| if (isset ($_POST[$field]) && $_POST[$field] != "") |
| { |
| $cmd .= ' ' . $flag . ' ' . $_POST[$field]; // -basebuilderBranch foo |
| } |
| } |
| |
| $cmd .= (isset ($_POST["build_debug_noclean"]) && $_POST["build_debug_noclean"] == "Y" ? ' -noclean' : '') . |
| ' >> ' . $workDir . $logfile . ' 2>&1 &"'; // logging to unique files |
| |
| if ($previewOnly) |
| { |
| print '</div><div class="homeitem3col">' . "\n"; |
| print "<h3>Build Command (Preview Only)</h3>\n"; |
| print "<p><small><code>$preCmd</code></small></p>"; |
| } else |
| { |
| exec($preCmd); |
| } |
| |
| if ($previewOnly) |
| { |
| print "<p><small><code>" . preg_replace("/\ \-/", "<br> -", $cmd) . "</code></small></p>"; |
| } else |
| { |
| exec($cmd); |
| } |
| |
| } // end else |
| |
| print "</div>\n</div>\n"; |
| |
| print "<div id=\"rightcolumn\">\n"; |
| |
| print "<div class=\"sideitem\">\n"; |
| print "<h6>Options</h6>\n"; |
| print "<ul>\n"; |
| print "<li><a href=\"?project=$PR&debug=1\">debug build</a></li>\n"; |
| print "<li><a href=\"?project=$PR&previewOnly=1\">preview build</a></li>\n"; |
| print "<li><a href=\"?project=$PR&debug=1&previewOnly=1\">preview debug build</a></li>\n"; |
| print "<li><a href=\"?project=$PR\">normal build</a></li>\n"; |
| print "</ul>\n"; |
| print "</div>\n"; |
| |
| if ($isEMFserver) |
| { |
| include_once $pre . "build/sideitems-common.php"; |
| } |
| |
| print "</div>\n"; |
| |
| $html = ob_get_contents(); |
| ob_end_clean(); |
| |
| $pageTitle = "EMF - New Build"; |
| $pageKeywords = ""; |
| $pageAuthor = "Nick Boldt"; |
| |
| $App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="' . $pre . 'includes/downloads.css"/>' . "\n"); |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); |
| |
| /************************** METHODS *****************************************/ |
| |
| // if user submitted values by text entry, split them on newline, space or comma and return as an array |
| function splitDependencies($entered) |
| { |
| if (false !== strpos($entered, "\n")) |
| { |
| $entered = explode("\n", $entered); |
| } else |
| if (false !== strpos($entered, " ")) |
| { |
| $entered = explode(" ", $entered); |
| } else |
| if (false !== strpos($entered, ",")) |
| { |
| $entered = explode(",", $entered); |
| } else |
| { |
| $entered = array ( |
| $entered |
| ); // cast to array |
| } |
| return $entered; |
| } |
| |
| // if user submitted values by selection, collect them |
| // if user submitted values by text entry, collect them and write back into file for storage |
| // return a string in the form "-URL http://... -URL http://..." |
| function getDependencyURLs($chosen, $entered, $file) |
| { |
| if (!$chosen) |
| $chosen = array (); |
| if (!is_array($chosen)) |
| $chosen = array ( |
| $chosen |
| ); // cast to array if not already |
| |
| $origSize = 0; |
| $newSize = 0; |
| |
| // load values from $entered into $chosen |
| if ($entered) |
| { |
| $lines = trimmed_read($file); |
| $origSize = sizeof($lines); |
| // foreach ($lines as $line) print "<i>. $line</i><br/>\n"; |
| foreach ($entered as $url) |
| { |
| // add to $chosen |
| $urlFixed = trim($url); |
| if ($urlFixed) |
| { |
| $urlFixed = preg_replace("#.+://((fullmoon|fullmoon.+|emf.torolab.ibm.com|emft.eclipse.org|build.eclipse.org)[^/]+)/#","http://download.eclipse.org/",$urlFixed); |
| $urlFixed = preg_replace("#.+&url=([^&=]+).*#","$1",$urlFixed); |
| $urlFixed = preg_replace("#http://www.eclipse.org/downloads/download.php\?(dropFile|file)=/#","http://download.eclipse.org/",$urlFixed); |
| $urlFixed = preg_replace("#download.php\?(dropFile|file)=#","",$urlFixed); |
| $chosen[] = $urlFixed; |
| } |
| // add to file, if it exists and is writable |
| if (is_writable($file) && sizeof($lines) > 0 && !in_array($url, $lines)) |
| { |
| $catg = findCatg($urlFixed); |
| if ($catg && $urlFixed) |
| { |
| $lines[] = "$catg=$urlFixed"; // don't add a blank entry! |
| } |
| } |
| } |
| $newSize = sizeof($lines); |
| } |
| |
| $lines = array_unique($lines); // remove duplicate entries |
| |
| // foreach ($chosen as $e) print "<i>. $e</i><br/>\n"; |
| updateDependenciesFile($file, $lines, $newSize, $origSize); |
| |
| $ret = ""; |
| foreach ($chosen as $choice) |
| { |
| if ($choice) |
| $ret .= " -URL " . $choice; |
| } |
| return $ret; |
| } |
| |
| function findCatg($url) { |
| $matches = array( |
| "11gmf" => "GMF-", |
| "10gef" => "GEF-", |
| "09net4j" => "emft-net4j-", |
| "08validation" => "emft-validation-", |
| "07transaction" => "emft-transaction-", |
| "06query" => "emft-query-", |
| "05ocl" => "mdt-ocl-|emft-ocl-", |
| "04orbit" => "orbit-|orbitBundles-", |
| "03uml2" => "uml2-", |
| "02emf" => "emf-sdo-xsd-", |
| "01eclipse" => "eclipse-", |
| "99other" => "/" |
| ); |
| foreach ($matches as $catg => $match) { |
| if (false!==strpos($url,$match) || preg_match("#(".$match.")#",$url)) { |
| return $catg; |
| } |
| } |
| } |
| |
| function updateDependenciesFile($file, $lines, $newSize, $origSize) |
| { |
| if (is_writable($file) && $lines && sizeof($lines) > 0 && $newSize > $origSize) |
| { |
| $f = fopen($file, "w"); |
| foreach ($lines as $line) |
| { |
| fwrite($f, $line . "\n"); |
| } |
| fclose($f); |
| } |
| } |
| |
| function displayCheckboxes($label, $options, $divSuffix = "") |
| { |
| $matches = null; |
| if (isset ($options["reversed"]) && $options["reversed"]) |
| { |
| // pop that item out |
| array_shift($options); |
| $options = array_reverse($options); |
| } |
| |
| foreach ($options as $o => $option) |
| { |
| $opt = $option; |
| $isSelected = false; |
| if (!preg_match("/\-\=[\d\.]+/", $opt)) |
| { |
| if (strstr($opt, "=")) |
| { // split line so that foo=bar becomes <input type="checkbox" name="bar" value="Y">foo |
| $matches = null; |
| preg_match("/([^\=]+)\=([^\=]*)/", $opt, $matches); |
| print "\n\t<input id=\"" . $label . "_" . trim($matches[2]) . $divSuffix . "\" type=\"checkbox\" " . "name=\"" . $label . "_" . trim($matches[2]) . $divSuffix . "\" value=\"Y\">" . trim($matches[1]); |
| } else |
| { // turn foo into <input type="checkbox" name="foo" value="Y">foo</option> |
| print "\n\t<input id=\"" . $label . "_" . $opt . $divSuffix . "\" type=\"checkbox\" " . "name=\"" . $label . "_" . $opt . $divSuffix . "\" value=\"Y\">" . $opt; |
| } |
| print "<br/>\n"; |
| } |
| } |
| } |
| |
| function displayOptions($options, $verbose = false) |
| { |
| $matches = null; |
| if ($options["reversed"]) |
| { |
| // pop that item out |
| array_shift($options); |
| $options = array_reverse($options); |
| } |
| |
| foreach ($options as $o => $option) |
| { |
| $opt = $option; |
| $isSelected = false; |
| if (!preg_match("/\-\=[\d\.]+/", $opt)) |
| { |
| if (strstr($opt, "|selected")) |
| { // remove the |selected keyword |
| $isSelected = true; |
| $opt = substr($opt, 0, strpos($opt, "|selected")); |
| } |
| if (strstr($opt, "=")) |
| { // split line so that foo=bar becomes <option value="bar">foo</option> |
| $matches = null; |
| preg_match("/([^\=]+)\=([^\=]*)/", $opt, $matches); |
| print "\n\t<option " . ($isSelected ? "selected " : "") . "value=\"" . trim($matches[2]) . "\">" . |
| ($verbose ? trim($matches[2]) . " | " : "") . trim($matches[1]) . |
| "</option>"; |
| } else |
| if (strstr($opt, "http") && strstr($opt, "drops")) |
| { // turn http://foo/bar.zip into <option value="http://foo/bar.zip">bar.zip</option> |
| print "\n\t<option " . ($isSelected ? "selected " : "") . "value=\"" . $opt . "\">" . |
| substr($opt, 6 + strpos($opt, "drops")) . "</option>"; |
| } else |
| { // turn foo into <option value="foo">foo</option> |
| print "\n\t<option " . ($isSelected ? "selected " : "") . "value=\"" . $opt . "\">" . $opt . "</option>"; |
| } |
| } |
| } |
| } |
| |
| function displayOptionsTriplet($options) { |
| $matches = null; |
| if (isset($options["reversed"]) && $options["reversed"]) { |
| // pop that item out |
| array_shift($options); |
| $options = array_reverse($options); |
| } |
| |
| $showValues = true; |
| foreach ($options as $o => $option) { |
| $opt = $option; |
| $isSelected = false; |
| if (!preg_match("/\-\=[\d\.]+/",$opt)) { |
| if (strstr($opt,"|selected")) { // remove the |selected keyword |
| $isSelected=true; |
| $opt = substr($opt,0,strpos($opt,"|selected")); |
| } |
| if (false!==substr($opt,"=")) { // split line so that foo=bar becomes <option value="bar">foo</option> |
| $matches = null; |
| preg_match("/([^\=]+)\=([^\=]+)\,([^\,]+)/",$opt,$matches); |
| if (false !== strpos($matches[2],"--")) |
| { |
| $showValues = ($matches[1] == $_SERVER["SERVER_NAME"]); |
| } |
| else if ($showValues) |
| { |
| print "\n\t<option ".($isSelected?"selected ":"")."value=\"".trim($matches[2])."\">". |
| trim($matches[2])." | ".trim($matches[1])." | ".trim($matches[3])."</option>"; |
| } |
| } else { // turn foo into <option value="foo">foo</option> |
| print "\n\t<option ".($isSelected?"selected ":"")."value=\"".$opt."\">".$opt."</option>"; |
| } |
| } |
| } |
| } |
| |
| // compare project index, then datestamps |
| function compareURLs($a, $b) |
| { |
| $aPF = substr($a, 0, strpos($a, "=")); |
| $bPF = substr($b, 0, strpos($b, "=")); |
| $aDS = preg_replace("/.+([0-9]{12}|[0-9]{8}\-[0-9]{4}).+/", "$1", $a); |
| $bDS = preg_replace("/.+([0-9]{12}|[0-9]{8}\-[0-9]{4}).+/", "$1", $b); |
| return $aPF == $bPF ? ($aDS < $bDS ? 1 : -1) : ($aPF > $bPF ? 1 : -1); |
| } |
| |
| function displayURLs($options, $verbose = false) |
| { |
| if ($options["reversed"]) |
| { |
| // pop that item out |
| array_shift($options); |
| $options = array_reverse($options); |
| } |
| |
| usort($options, "compareURLs"); |
| reset($options); |
| //sort($options); reset($options); |
| |
| $matches = null; |
| $currCatg = ""; |
| foreach ($options as $o => $option) |
| { |
| $opt = $option; |
| if (strstr($opt, "=")) |
| { // split line so that foo=bar becomes <option value="bar">foo</option> |
| $matches = null; |
| preg_match("/([^\=]+)\=([^\=]*)/", $opt, $matches); |
| $catg = substr(trim($matches[1]), 2); |
| if ($catg != $currCatg) |
| { |
| if ($currCatg != "") |
| print "\n\t<option " . "value=\"" . "\"></option>"; |
| print "\n\t<option " . "value=\"" . "\"> -- " . $catg . " -- </option>"; |
| $currCatg = $catg; |
| } |
| print "\n\t<option " . "value=\"" . trim($matches[2]) . "\">" . substr(trim($matches[2]), 6 + strpos(trim($matches[2]), "drops")) . "</option>"; |
| } else |
| if (strstr($opt, "http") && strstr($opt, "drops")) |
| { // turn http://foo/bar.zip into <option value="http://foo/bar.zip">bar.zip</option> |
| print "\n\t<option " . "value=\"" . $opt . "\">" . |
| substr($opt, 6 + strpos($opt, "drops")) . "</option>"; |
| } else |
| { // turn foo into <option value="foo">foo</option> |
| print "\n\t<option " . "value=\"" . $opt . "\">" . $opt . "</option>"; |
| } |
| } |
| } |
| |
| function trimmed_read($file) |
| { |
| $lines = array (); |
| if (is_writable($file) && is_readable($file)) |
| { |
| $f = fopen($file, "r"); |
| if ($f) |
| { |
| while (!feof($f) && ($line = trim(fgets($f, 4096)))) |
| $lines[] = $line; |
| fclose($f); |
| } else |
| die("Problem reading from: $file"); |
| } |
| return $lines; |
| } |
| |
| function loadOptionsFromFile($file1) |
| { // fn not used |
| $sp = array (); |
| if (is_file($file1)) |
| { |
| $sp = file($file1); |
| } |
| $options = loadOptionsFromArray($sp); |
| return $options; |
| } |
| |
| function loadOptionsFromArray($sp) |
| { |
| $matches = null; |
| $options = array (); |
| $debug = -1; |
| $doSection = ""; |
| |
| foreach ($sp as $s) |
| { |
| if (strpos($s, "#") === 0) |
| { // skip, comment line |
| } else |
| if (preg_match("/\[([a-zA-Z0-9\_\|]+)\]/", $s, $matches)) |
| { // section starts |
| if (strlen($s) > 2) |
| { |
| $isReversed = false; |
| if (strstr($s, "|reversed")) |
| { // remove the |reversed keyword |
| $isReversed = true; |
| $doSection = trim($matches[1]); |
| $doSection = substr($doSection, 0, strpos($doSection, "|reversed")); |
| } else |
| { |
| $doSection = trim($matches[1]); |
| } |
| if ($debug > 0) |
| print "Section: $s --> $doSection<br>"; |
| |
| $options[$doSection] = array (); |
| if ($isReversed) |
| { |
| $options[$doSection]["reversed"] = $isReversed; |
| } |
| } |
| } else |
| if (!preg_match("/\[([a-zA-Z\_]+)\]/", $s, $matches)) |
| { |
| if (strlen($s) > 2) |
| { |
| if ($debug > 0) |
| print "Loading: $s<br>"; |
| $options[$doSection][] = trim($s); |
| } |
| } |
| } |
| |
| return $options; |
| } |
| |
| function getBranches($options) |
| { |
| foreach ($options["BranchAndJDK"] as $br => $branch) |
| { |
| $arr[getValueFromOptionsString($branch, "name")] = getValueFromOptionsString($branch, "value"); |
| } |
| return $arr; |
| } |
| |
| function getValueFromOptionsString($opt, $nameOrValue) |
| { |
| if (strstr($opt, "|selected")) |
| { // remove the |selected keyword |
| $opt = substr($opt, 0, strpos($opt, "|selected")); |
| } |
| if (strstr($opt, "=")) |
| { // split the name=value pairs, if present |
| if ($nameOrValue == "name" || $nameOrValue === 0) |
| { |
| $opt = substr($opt, 0, strpos($opt, "=")); |
| } else |
| if ($nameOrValue == "value" || $nameOrValue == 1) |
| { |
| $opt = substr($opt, strpos($opt, "=") + 1); |
| } |
| } |
| return $opt; |
| } |
| ?> |