function main() { switch (gp('gp_action')) { case 'pull': $this->mainPull(); break; case 'over': $this->mainOver(); break; case 'diff': $this->mainDiff(); break; } if (gp('gp_action') != '') { return; } if (gpExists('gp_clearremote')) { SessionSet('remoteUID', ''); SessionSet('remotePWD', ''); SessionSet('remoteNODE', ''); } // Need this basic stuff for everything $skey = gp('gp_skey'); hidden('gp_skey', $skey); hidden('gp_page', 'a_scontrol'); $row = SQL_OneRow("Select * from applications WHERE skey={$skey}"); $App = trim($row['application']); $sApp = SQLFC($App); $node = SQL_OneRow("Select * from nodes WHERE node=" . SQLFC($row['node'])); $this->row = $row; $this->node = $node; // Some file functions execute before showing the screen, because // they affect what is displayed on the screen switch (gp('gpfa')) { case 'patch': $this->Patch(); break; case 'overlocal': $this->OverLocal(); break; case 'servsend': $this->ServerSend(); break; case 'servdel': $this->ServerDel(); break; } $h1 = "?gp_page=a_scontrol" . "&gp_action=pull&gp_url=" . $node['node_url'] . "&gp_app=" . $App; $h2 = "?gp_page=a_scontrol&gp_action=over"; $h3 = "?gp_page=a_scontrol&gp_skey={$skey}"; ?> <h1>Source Code Operations</h1> <p>For application <a href="?gp_page=applications&gp_skey=<?php echo $skey; ?> "><?php echo $App; ?> </a>. </p> <?php echo sourceDeprecated(); ?> <?php if (!$this->CheckRemoteUID($node['node'])) { return; } ?> <p><a href="javascript:formPostString('x=y')">Refresh This Page</a></p> <p>The Authoritative Node for this application is <?php echo $node['node']; ?> at <?php echo $node['node_url']; ?> . You are using username <b><?php echo SessionGet('remoteUID'); ?> </b> on the remote node. <a href="javascript:formPostString('gp_clearremote=1')">Connect as New User</a>. </p> <br> <style>table.sc td { padding: 3px; }</style> <table cellpadding=0 cellspacing=0 class="sc"> <tr><td class="dhead" width=100>Function</td> <td class="dhead">Details</td> <tr><td> <a href="javascript:Popup('<?php echo $h1; ?> ')"> Update Reference</a> <td>Pulls the latest code from the Authoritative Node and puts it into the "ref" directory of the application. Does not modify programs in 'application' or 'appclib' (or 'lib', 'clib', 'root' and 'templates' for the node manager). <!-- <tr><td> <a href="javascript:Popup('< ?=$h2? >')"> Overwrite From Reference</a> <td><font color=red>Unconditionally destroys any code you have for this application</font> and replaces it with the reference code. Before being destroyed, the code is backed up into a directory named "ref-"+current timestamp, so that it can be recovered if necessary. It is the programmer's responsibility to delete these backup directories as desired. --> </table> <?php $hbase = "?gp_page=a_scontrol&gp_app={$App}&gp_skey={$skey}"; $dir = AppDir($App); $dirs = AppDirs($App); $filesL = array(); $filesR = array(); clearstatcache(); // need this before scanning dirs foreach ($dirs as $onedir) { $this->WalkDir($filesL, $dir, trim($onedir)); $this->WalkDir($filesR, $dir . "ref/", trim($onedir)); } // Files they have and we don't. Pretty easy ?> <br><br> <h2>Server Files Not on Local Machine</h2> <table> <tr><td class="dhead">Filename <td class="dhead"> <td class="dhead"> <?php $count = 0; foreach ($filesR as $name => $fileR) { if (!isset($filesL[$name])) { $hlinkC = $hbase . '&gpfa=overlocal' . '&gpfile=' . urlencode($name); $hlinkD = $hbase . '&gpfa=servdel' . '&gpfile=' . urlencode($name); $count++; $row = array($name, "  <a href='{$hlinkC}'>Overwrite Local</a>  ", "  <a href='{$hlinkD}'>Delete From Server</a>  "); echo hTRFromArray('', $row); } } if ($count == 0) { echo hTrFromArray('', array('none', '')); } echo "</table>"; // Files we have and they dont ?> <br><br> <h2>Local Files Not on Server</h2> <table> <tr><td class="dhead">Name <td class="dhead"> <?php $count = 0; foreach ($filesL as $name => $fileL) { if (!isset($filesR[$name])) { $count++; $hlink = $hbase . '&gpfa=servsend' . '&gpfile=' . urlencode($name); $row = array($name, "  <a href='{$hlink}'>Send To Server</a>  "); echo hTRFromArray('', $row); } } if ($count == 0) { echo hTrFromArray('', array('none', '')); } echo "</table>"; ?> <br><br> <h2>Files That Are Different</h2> <table> <tr><td class="dhead">Name <td class="dhead">Differences <td class="dhead"> <td class="dhead"> <td class="dhead"> <?php foreach ($filesR as $name => $fileR) { if (!isset($filesL[$name])) { continue; } $fileL = $filesL[$name]; $diffs = array(); if ($fileL['fsize'] != $fileR['fsize']) { $diffs[] = 'fsize'; } if ($fileL['md5'] != $fileR['md5']) { $diffs[] = 'md5'; } if (count($diffs) != 0) { $hlinkP = $hbase . '&gpfa=patch' . '&gpfile=' . urlencode($name); $hlinkC = $hbase . '&gpfa=overlocal' . '&gpfile=' . urlencode($name); $hlinkD = "javascript:Popup('{$hbase}" . '&gp_action=diff' . '&gpfile=' . urlencode($name) . "')"; $row = array($name . " ", " " . implode(' ', $diffs) . " ", " <a href='{$hlinkP}'>Patch To Server</a> ", " <a href='{$hlinkC}'>Overwrite Local</a> ", " <a href=\"{$hlinkD}\">View Diff</a> "); echo hTRFromArray('', $row); } } echo "</table>"; //hprint_r($filesL); //hprint_r($filesR); /* <table cellpadding=0 cellspacing=0 class="sc"> <tr><td class="dhead">File</td> <td class="dhead">Local</td> <td class="dhead">Reference</td> <td class="dhead">Patch to Server</td> <td class="dhead">New To Server</td> <td class="dhead">Ovewrite Local</td> */ }
function RunTests($pagename, $testtypes, $tests) { if (count($testtypes) == 0) { return ''; } if (count($tests) == 0) { return ''; } // If there are tests to run, do them now $hError = ''; $hTests = ''; foreach ($tests as $test) { // Explode parameters and build a function call $parms = explode(',', $test); if (count($parms) != count($testtypes)) { $hError = "\n\n''There was a column count error in the\n in-line test declarations for this function''\n"; } else { // Turn some of the values into quotes values foreach ($parms as $index => $parm) { if ($testtypes[$index] == 'char') { $parms[$index] = "'" . $parm . "'"; } } // We actually add the evaluated output back onto the // parms array. This lets us then call hTRFromArray, // that's the only reason we do it. $str = 'echo ' . $pagename . "(" . implode(',', $parms) . ");"; ob_start(); eval($str); $result = ob_get_clean(); // Eval again and show this time x_echoFlusH("Test command: {$str}"); eval($str); x_echoFlush(""); x_EchoFlush("Result was {$result}"); $parms[] = $result; $hTests .= "\n" . hTrFromArray('', $parms); } } if ($hTests) { foreach ($testtypes as $index => $testtype) { $htitles[] = 'Parm ' . ($index + 1); } $htitles[] = 'Output'; $hTests = "\n\n==Test output==\n\n" . $hError . "<table border=1>" . hTRFromArray('', $htitles) . $hTests . "\n</table>\n\n"; } return $hTests; }