source: genappalpha/languages/html5/base.php @ 1495

Last change on this file since 1495 was 1495, checked in by ehb, 3 years ago

Docker runs locally thru genapp with run directory mounted on container

File size: 42.0 KB
RevLine 
[1]1<?php
2header('Content-type: application/json');
[96]3# setup php session
[939]4__~debug:basemylog{error_log( "startup __application__ __menu:id__ __menu:modules:id__\n", 3, "/tmp/mylog" );}
[96]5session_start();
6if (!isset($_SESSION['count'])) {
7  $_SESSION['count'] = 0;
8} else {
9  $_SESSION['count']++;
10}
11
[98]12if ( !sizeof( $_REQUEST ) )
13{
[379]14    session_write_close();
15    require_once "../mail.php";
[380]16    $msg = "[PHP code received no \$_REQUEST] Possibly total upload file size exceeded limit.\nLimit is currently set to " . ini_get( 'post_max_size' ) . ".\n";
17    error_mail( $msg . "Error occured in __menu:id__ __menu:modules:id__.\n" );
18    $results = array("error" => $msg . "Please contact the administrators via feedback if you feel this is in error or if you have need to process total file sizes greater than this limit.\n" );
[225]19    $results[ '_status' ] = 'failed';
20    echo (json_encode($results));
[98]21    exit();
22}
23
24$do_logoff = 0;
[107]25
[200]26$window = "";
27if ( isset( $_REQUEST[ '_window' ] ) )
[98]28{
[200]29   $window = $_REQUEST[ '_window' ];
30}
31if ( !isset( $_SESSION[ $window ] ) )
32{
33   $_SESSION[ $window ] = array( "logon" => "", "project" => "" );
34}
35
[910]36if ( isset( $_REQUEST[ "_logon" ] ) && 
37   ( !isset( $_SESSION[ $window ][ 'logon' ] ) || $_REQUEST[ "_logon" ] != $_SESSION[ $window ][ 'logon' ] ) ) {
[107]38   $do_logoff = 1;
[200]39   unset( $_SESSION[ $window ][ 'logon' ] );
[225]40   $results[ '_logon' ] = "";
[98]41}
42
[203]43if ( !isset( $_REQUEST[ '_uuid' ] ) )
44{
[225]45    $results[ "error" ] = "No _uuid specified in the request";
46    $results[ '_status' ] = 'failed';
47    echo (json_encode($results));
[203]48    exit();
49}
[98]50
[422]51$cmd = isset( $_REQUEST[ '_docrootexecutable' ] ) ? "__docroot:html5__/__application__/" . $_REQUEST[ '_docrootexecutable' ] : "__executable_path:html5__/__executable__";
[1]52if ( !is_executable( $cmd ) )
53{
[422]54    $results[ "error" ] = "command not found or not executable $cmd";
[225]55    $results[ '_status' ] = 'failed';
56    echo (json_encode($results));
[1]57    exit();
58}
59
[203]60require_once "../joblog.php";
61
[1161]62if ( isset( $_REQUEST[ "numproc" ] ) ) {
63   $GLOBALS[ 'numproc' ] = $_REQUEST[ "numproc" ];
64}
[1263]65if ( isset( $_REQUEST[ "_xsedeproject" ] ) ) {
66   $GLOBALS[ 'xsedeproject' ] = $_REQUEST[ "_xsedeproject" ];
67}
[1161]68
[898]69$GLOBALS[ 'module'    ] = "__menu:modules:id__";
70$GLOBALS[ 'jobweight' ] = floatval( "__jobweight__" );
71$GLOBALS[ 'menu'      ] = "__menu:id__";
72$GLOBALS[ 'logon'     ] = isset( $_SESSION[ $window ][ 'logon' ] ) ? $_SESSION[ $window ][ 'logon' ] : 'not logged in';
73$GLOBALS[ 'project'   ] = isset( $_REQUEST[ '_project' ] ) ? $_REQUEST[ '_project' ] : 'not in a project';
74$GLOBALS[ 'command'   ] = $cmd;
[221]75$GLOBALS[ 'REMOTE_ADDR' ] = isset( $_SERVER[ 'REMOTE_ADDR' ] ) ? $_SERVER[ 'REMOTE_ADDR' ] : "not from an ip";
[203]76
[128]77// if user based, use alternate directory structure
78__~uniquedir{$uniquedir = "__uniquedir__";}
[203]79
[422]80__~nojobcontrol{$nojobcontrol = 1;$GLOBALS[ 'modal' ] = true;}
[1039]81__~notify{$GLOBALS[ 'notify' ] = "__notify__";}
[322]82$bdir = "";
83
[476]84$adir = "__docroot:html5__/__application__";
85
[128]86if ( !isset( $uniquedir ) &&
[200]87     isset( $_SESSION[ $window ][ 'logon' ] ) &&
88     strlen( $_SESSION[ $window ][ 'logon' ] ) > 1 )
[77]89{
[200]90   $dir = "__docroot:html5__/__application__/results/users/" . $_SESSION[ $window ][ 'logon' ] . "/";
[322]91   $bdir = $dir;
[128]92   if ( isset( $_REQUEST[ '_project' ] ) &&
93        strlen( $_REQUEST[ '_project' ] ) > 1 )
[77]94   {
[128]95      $dir .= $_REQUEST[ '_project' ];
96   } else {
97      $dir .= 'no_project_specified';
[77]98   }
[203]99   $checkrunning     = $dir;
[201]100// connect
101   if ( !isset( $nojobcontrol ) )
102   {
[203]103      db_connect( true );
104      $coll = $use_db->__application__->joblock;
[201]105      if ( $doc = $coll->findOne( array( "name" => $checkrunning ) ) )
106      {
107          $results[ 'error' ] = "A job is already running in this project, please wait until it completes or change projects";
[225]108          $results[ '_status' ] = 'failed';
[201]109          echo (json_encode($results));
110          exit();
111      }
112      try {
[898]113          $coll->insert( array( "name" => $checkrunning, "jobweight" => $GLOBALS[ 'jobweight' ], "user" => $GLOBALS[ 'logon' ] )__~mongojournal{, array("j" => true )});
[201]114      } catch(MongoCursorException $e) {
[279]115          $results[ 'error' ] = "A job is already running in this project, please wait until it completes or change projects. " . $e->getMessage();
[225]116          $results[ '_status' ] = 'failed';
[201]117          echo (json_encode($results));
118          exit();
119      }
120   }
[77]121} else {
122   do {
123       $dir = uniqid( "__docroot:html5__/__application__/results/" );
124   } while( file_exists( $dir ) );
125}
[203]126$GLOBALS[ 'dir' ] = $dir;
[27]127
[288]128$logdir = "$dir__~logdirectory{/__logdirectory__}";
129$GLOBALS[ 'logdir' ] = $logdir; 
130
[77]131if ( !file_exists( $dir ) )
132{
133   ob_start();
[27]134
[77]135   if ( !mkdir( $dir, 0777, true ) )
136   { 
137      $cont = ob_get_contents();
138      ob_end_clean();
[201]139      if ( isset( $checkrunning ) )
140      {
141         try {
[279]142             $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{ "j" => true,} "justOne" => true ));
[201]143         } catch(MongoCursorException $e) {
[279]144             $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]145         }
146      }
[225]147      $results[ "error" ] .= "Could not create directory " . $dir . " " . $cont;
148      $results[ '_status' ] = 'failed';
149      echo (json_encode($results));
[77]150      exit();
151   }
[126]152   chmod( $dir, 0775 );
[27]153   ob_end_clean();
[305]154   $results[ "_fs_clear" ] = "#";
[52]155}
[27]156
[288]157if ( !file_exists( $logdir ) )
158{
159   ob_start();
160
161   if ( !mkdir( $logdir, 0777, true ) )
162   { 
163      $cont = ob_get_contents();
164      ob_end_clean();
165      if ( isset( $checkrunning ) )
166      {
167         try {
168             $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{ "j" => true,} "justOne" => true ));
169         } catch(MongoCursorException $e) {
170             $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
171         }
172      }
173      $results[ "error" ] .= "Could not create directory " . $logdir . " " . $cont;
174      $results[ '_status' ] = 'failed';
175      echo (json_encode($results));
176      exit();
177   }
178   chmod( $logdir, 0775 );
179   ob_end_clean();
[305]180   $results[ "_fs_clear" ] = "#";
[288]181}
182
[52]183$_REQUEST[ '_base_directory' ] = $dir;
[288]184$_REQUEST[ '_log_directory' ] = $logdir;
[52]185
[913]186$app_json = json_decode( file_get_contents( "__appconfig__" ) );
[551]187
[913]188if ( $app_json == NULL ) {
189    if ( isset( $checkrunning ) )
190    {
191        try {
192            $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{ "j" => true,} "justOne" => true ));
193        } catch(MongoCursorException $e) {
194            $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
195        }
196    }
197    $results[ "_message" ] = [ "icon" => "toast.png",
198                               "text" => "<p>There appears to be an error with the appconfig.json file.</p>"
199                               . "<p>This is a serious error which should be forwarded to the site adiminstrator.</p>" 
200                               . "<p>Do not expect much to work properly until this is fixed.</p>" 
201        ];
202    $results[ "error" ] .= "appconfig.json is invalid";
203    $results[ '_status' ] = 'failed';
204    echo (json_encode($results));
205    exit();
206}   
207
208$_SESSION[ $window ][ 'udphost'         ] = $app_json->messaging->udphostip;
209$_SESSION[ $window ][ 'udpport'         ] = $app_json->messaging->udpport;
210$_SESSION[ $window ][ 'resources'       ] = $app_json->resources;
211$_SESSION[ $window ][ 'resourcedefault' ] = $app_json->resourcedefault;
212$_SESSION[ $window ][ 'submitpolicy'    ] = $app_json->submitpolicy;
213
[126]214session_write_close();
215
[1373]216if ( isset( $app_json->messaging->tcphostip ) &&
217     isset( $app_json->messaging->tcpport ) ) {
218    $_REQUEST[ '_tcphost' ] = $app_json->messaging->tcphostip;
219    $_REQUEST[ '_tcpport' ] = $app_json->messaging->tcpport;
220}
221
[382]222$_REQUEST[ '_udphost' ] =  $_SESSION[ $window ][ 'udphost' ];
223$_REQUEST[ '_udpport' ] =  $_SESSION[ $window ][ 'udpport' ];
224$_REQUEST[ 'resourcedefault' ] = $_SESSION[ $window ][ 'resourcedefault' ];
[1192]225$_REQUEST[ '_webroot' ] = "__docroot:html5__";
[1196]226$_REQUEST[ '_application' ] = "__application__";
[126]227
[127]228__~resource{$useresource = "__resource__";}
229__~submitpolicy{$submitpolicy = "__submitpolicy__";}
230
231if ( !isset( $submitpolicy ) )
232{
[382]233   if ( isset( $_SESSION[ $window ][ 'submitpolicy' ] ) &&
234        $_SESSION[ $window ][ 'submitpolicy' ] == "login" &&
[200]235        ( !isset( $_SESSION[ $window ][ 'logon' ] ) ||
236          strlen( $_SESSION[ $window ][ 'logon' ] ) == 0 ) )
[127]237   {
[201]238         if ( isset( $checkrunning ) )
239         {
240            try {
[279]241                $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]242            } catch(MongoCursorException $e) {
[279]243                $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]244            }
245         }
246
[225]247         $results[ "error" ] .= "You must be logged on to submit";
248         $results[ '_status' ] = 'failed';
249         echo (json_encode($results));
[127]250         exit();
251   }
252} else {
253   if ( $submitpolicy == "login" &&
[200]254        ( !isset( $_SESSION[ $window ][ 'logon' ] ) ||
255          strlen( $_SESSION[ $window ][ 'logon' ] ) == 0 ) )
[127]256   {
[201]257         if ( isset( $checkrunning ) )
258         {
259            try {
[279]260                $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]261            } catch(MongoCursorException $e) {
[279]262                $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]263            }
264         }
265
[225]266         $results[ "error" ] .= "You must be logged on to submit";
267         $results[ '_status' ] = 'failed';
268         echo (json_encode($results));
[127]269         exit();
270   }
271}
272
[126]273$cmdprefix = "";
274
[382]275if ( isset( $_SESSION[ $window ][ 'resourcedefault' ] ) &&
276     $_SESSION[ $window ][ 'resourcedefault' ] == "disabled" )
[169]277{
[201]278      if ( isset( $checkrunning ) )
279      {
280         try {
[279]281             $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]282         } catch(MongoCursorException $e) {
[279]283             $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]284         }
285      }
[225]286      $results[ "error" ] .= "Job submission is currently disabled";
287      $results[ '_status' ] = 'failed';
288      echo (json_encode($results));
[169]289      exit();
290}
[126]291
292if ( isset( $useresource ) &&
[382]293     !isset( $_SESSION[ $window ][ 'resources' ]->$useresource ) )
[126]294{
[201]295      if ( isset( $checkrunning ) )
296      {
297         try {
[279]298             $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]299         } catch(MongoCursorException $e) {
[279]300             $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]301         }
302      }
303
[225]304      $results[ "error" ] .= "module specified resource " . $useresource . " is not defined in appconfig";
305      $results[ '_status' ] = 'failed';
306      echo (json_encode($results));
[126]307      exit();
308}
309
[382]310if ( !isset( $_SESSION[ $window ][ 'resources' ]->$_SESSION[ $window ][ 'resourcedefault' ] ) &&
[126]311     !isset( $useresource ) )
312{
[201]313     if ( isset( $checkrunning ) )
314     {
315        try {
[279]316            $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]317        } catch(MongoCursorException $e) {
[279]318            $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]319        }
320     }
[551]321     $results[ "error" ] .= "No default resource specified in appconfig and no resource defined in module. This could be the result of an invalid appconfig.json";
[225]322     $results[ '_status' ] = 'failed';
323     echo (json_encode($results));
[126]324     exit();
325} else {
326   if ( isset( $useresource ) )
327   {
[382]328      $cmdprefix = $_SESSION[ $window ][ 'resources' ]->$useresource;
[434]329      $GLOBALS[ 'resource' ] = $useresource;
[126]330   } else {
[382]331      $cmdprefix = $_SESSION[ $window ][ 'resources' ]->$_SESSION[ $window ][ 'resourcedefault' ];
332      $GLOBALS[ 'resource' ] = $_SESSION[ $window ][ 'resourcedefault' ];
[126]333   }
[574]334   if(isset($cmdprefix->run)){
335      $cmdprefix = $cmdprefix->run;
336   }
[1180]337   if ( strlen( $cmdprefix ) > 1 ) {
[126]338      $fileargs = 1;
[1495]339      $cmdprefix = str_replace( "_" . "_application__", "__application__", $cmdprefix );
340      $cmdprefix = str_replace( "_" . "_menu:id__", "__menu:id__", $cmdprefix );
341      $cmdprefix = str_replace( "_" . "_menu:modules:id__", "__menu:modules:id__", $cmdprefix );
342      $cmdprefix = str_replace( "_" . "_rundir__", $dir, $cmdprefix );
[126]343   }
344}
345
[913]346if ( isset( $app_json->submitblock ) ) {
347    __~debug:submitblock{error_log( "base.php submitblock found\n", 3, "/tmp/mylog" );}
348    $blocked = 0;
349    $bypass = 0;
350    $blocked_msg = [];
351    if ( isset( $app_json->submitblock->{"all"} ) &&
352         isset( $app_json->submitblock->{"all"}->active ) &&
353         $app_json->submitblock->{"all"}->active == 1 ) {
354        $blocked = 1;
355        $blocked_msg = 
356            [ "icon" => "warning.png",
357              "text" => isset( $app_json->submitblock->{"all"}->text ) 
358              ? $app_json->submitblock->{"all"}->text 
359              : "Submission of jobs to $k is currently disabled."
360            ];
361        if ( isset( $app_json->submitblock->{"all"}->allow ) &&
362             isset( $app_json->restricted ) &&
363             in_array( $app_json->submitblock->{"all"}->allow, $app_json->restricted ) &&
364             in_array( $GLOBALS[ 'logon' ], $app_json->restricted->{$app_json->submitblock->{"all"}->allow} ) ) {
365            $blocked = 0;
366            $bypass = 1;
367        }
368    } else {
369        if ( isset( $app_json->submitblock->{$GLOBALS['resource']} ) &&
370             isset( $app_json->submitblock->{$GLOBALS['resource']}->active ) &&
371             $app_json->submitblock->{$GLOBALS['resource']}->active == 1 ) {
372            $blocked = 1;
373            $blocked_msg = 
374                [ "icon" => "warning.png",
375                  "text" => "<p>" . ( isset( $app_json->submitblock->{$GLOBALS['resource']}->text ) 
376                                      ? $app_json->submitblock->{$GLOBALS['resource']}->text 
377                                      : ( "Submission of jobs to " . $GLOBALS['resource'] . " is currently disabled." ) ) . "</p>"
378                ];
379            if (  isset( $app_json->submitblock->{$GLOBALS['resource']}->allow ) &&
380                  isset( $app_json->restricted ) &&
381                  isset( $app_json->restricted->{ $app_json->submitblock->{$GLOBALS['resource']}->allow } ) &&
382                  in_array( $GLOBALS[ 'logon' ], $app_json->restricted->{$app_json->submitblock->{$GLOBALS['resource']}->allow} ) ) {
383                $blocked = 0;
384                $bypass = 1;
385            }
386        }                   
387    }
388    if ( $blocked ) {
389        __~debug:submitblock{error_log( "base.php submit block blocked\n", 3, "/tmp/mylog" );}
390        $results[ "_message" ] = $blocked_msg;
391        if ( isset( $checkrunning ) ) {
392            try {
393                $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
394            } catch(MongoCursorException $e) {
395                $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
396            }
397        }
398        $results[ '_status' ] = 'failed';
399        echo (json_encode($results));
400        exit();
401    }
402    if ( $bypass ) {
403        __~debug:submitblock{error_log( "base.php submit block bypassed\n", 3, "/tmp/mylog" );}
404        $blocked_msg[ 'text' ] .= "<p>Your permissions allowed submission anyway.</p>";
405        $results[ "_message" ] = $blocked_msg;
406    }       
407} else {
[1154]408    __~debug:submitblock{error_log( "submitblock not found\n" . json_encode( $app_json, JSON_PRETTY_PRINT ) . "\n", 3, "/tmp/mylog" );}
[913]409}
410             
411
[599]412__~debug:basemylog{error_log( "cmdprefix $cmdprefix\n", 3, "/tmp/mylog" );}
413__~debug:basemylog{error_log( "globals resource " . $GLOBALS['resource'] . "\n", 3, "/tmp/mylog" );}
414
[420]415$org_request = $_REQUEST;
416
417// date_default_timezone_set("UTC");
418// $org_request[ '_datetime' ] = date( "Y M d H:i:s T", time() );
419
[322]420function fileerr_msg($code)
421{
422    switch ($code) {
423        case UPLOAD_ERR_INI_SIZE:
424            $message = "The uploaded file exceeds the upload_max_filesize directive in php.ini";
425            break;
426        case UPLOAD_ERR_FORM_SIZE:
427            $message = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form";
428            break;
429        case UPLOAD_ERR_PARTIAL:
430            $message = "The uploaded file was only partially uploaded";
431            break;
432        case UPLOAD_ERR_NO_FILE:
433            $message = "No file was uploaded";
434            break;
435        case UPLOAD_ERR_NO_TMP_DIR:
436            $message = "Missing a temporary folder";
437            break;
438        case UPLOAD_ERR_CANT_WRITE:
439            $message = "Failed to write file to disk";
440            break;
441        case UPLOAD_ERR_EXTENSION:
442            $message = "File upload stopped by extension";
443            break;
444         default:
445            $message = "Unknown upload error";
446            break;
447    }
448    return $message;
449} 
450
[398]451__~debug:basemylog{error_log( "request\n" . print_r( $_REQUEST, true ) . "\n", 3, "/tmp/mylog" );}
[341]452
[653]453// special fake _FILES creation for strange bug
454if ( !sizeof( $_FILES ) ) {
455   $selalt = "_selaltval_";
456   $lenselalt = strlen( $selalt );
457   $found_selalt = false;
458   foreach ( $_REQUEST as $k=>$v ) {
459      if ( !strncmp( $k, $selalt, $lenselalt ) ) {
460          $found_selalt = true;
461          $tmp_key = substr( $k, $lenselalt );
462          $_FILES[ $tmp_key ] = json_decode( '{"name":"","type":"","tmp_name":"","error":4,"size":0}', true );
463          error_log( "__executable__ no files but found _selaltval_ with key $tmp_key\n", 3, "/tmp/mylog_selalt" );
464      }
465   }
466   if ( $found_selalt ) {
467       error_log( "__executable__ request\n" . print_r( $_REQUEST, true ) . "\n", 3, "/tmp/mylog_selalt" );
468       error_log( "files\n" . print_r( $_FILES, true ) . "\n", 3, "/tmp/mylog_selalt" );
469   }
470}
471
[701]472if ( sizeof( $_FILES ) ) {
473
474    $module_json = json_decode( '__modulejson__' );
475    $required_files = [];
476
477    if ( isset( $module_json->fields ) ) {
478        foreach ( $module_json->fields as $k=>$v ) {
479            __~debug:trimfiles{error_log( "module json field $k\n" . print_r( json_encode( $v, JSON_PRETTY_PRINT ), true ) . "\n", 3, "/tmp/mylog" );}
480            if ( 
481                isset( $v->id ) 
482                && isset( $v->role )     && $v->role == "input"
[702]483                && isset( $v->type )     && substr( $v->type, -4 ) == "file"
[701]484                && isset( $v->required ) && strtolower( $v->required ) != "false" ) {
485                $required_files[ $v->id ] = 1;
486            }
487        }
488    }
489    __~debug:trimfiles{error_log( "required_files:\n" . print_r( json_encode( $required_files, JSON_PRETTY_PRINT ), true ) . "\n", 3, "/tmp/mylog" );}
490
491    // trim missing non-required
492    __~debug:trimfiles{error_log( "files:\n" . print_r( json_encode( $_FILES, JSON_PRETTY_PRINT ), true ) . "\n", 3, "/tmp/mylog" );}
493   
494    foreach ( $_FILES as $k=>$v ) {
[715]495        if ( isset( $v[ 'name' ] ) && 
496             is_string( $v[ 'name' ] ) && 
497             !strlen( $v[ 'name' ] ) && 
498             !isset( $required_files[ $k ] ) &&
499             ( isset( $_REQUEST[ "_selaltval_$k" ] ) 
500               ? !isset( $_REQUEST[ $_REQUEST[ "_selaltval_$k" ] ] ) || empty( $_REQUEST[ $_REQUEST[ "_selaltval_$k" ] ] )
501               : 1 )
502              ) {
[701]503            unset( $_FILES[ $k ] );
504        }
505    }
506    __~debug:trimfiles{error_log( "files after trim:\n" . print_r( json_encode( $_FILES, JSON_PRETTY_PRINT ), true ) . "\n", 3, "/tmp/mylog" );}
507
508   __~debug:basemylog{error_log( "files\n" . print_r( $_FILES, true ) . "\n", 3, "/tmp/mylog" );}
[1]509   foreach ( $_FILES as $k=>$v )
510   {
511      if ( is_array( $v[ 'error' ] ) )
512      {
513         foreach ( $v[ 'error' ] as $k1=>$v1 )
514         {
515            if ( $v[ 'error' ][ $k1 ] )
516            {
[201]517               if ( isset( $checkrunning ) )
518               {
519                  try {
[279]520                      $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]521                  } catch(MongoCursorException $e) {
[279]522                      $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]523                  }
524               }
[322]525               if ( !isset( $results[ "error" ] ) )
526               {
527                   $results[ "error" ] = "";
528               }
[1]529               if ( is_string( $v[ 'name' ][ $k1 ] ) && !strlen( $v[ 'name' ][ $k1 ] ) )
530               {
[225]531                  $results[ "error" ] .= "Missing file input for identifier " . $k;
[1]532               } else {
[322]533                  $results[ "error" ] .= "Error uploading file " . $v[ 'name' ][ $k1 ] . " Error code:" . $v[ 'error' ][ $k1 ] . " " . fileerr_msg( $v[ 'error' ][ $k1 ] );
[1]534               }
[225]535               $results[ '_status' ] = 'failed';
536               echo (json_encode($results));
[1]537               exit();
538            }
[146]539//            error_log( "move_uploaded_file( " . $v[ 'tmp_name' ][ $k1 ] . ',' .  $dir . '/' . $v[ 'name' ][ $k1 ] . "\n", 3, "/var/tmp/my-errors.log");
[1]540            if ( !move_uploaded_file( $v[ 'tmp_name' ][ $k1 ], $dir . '/' . $v[ 'name' ][ $k1 ] ) )
541            {
[201]542               if ( isset( $checkrunning ) )
543               {
544                  try {
[279]545                      $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]546                  } catch(MongoCursorException $e) {
[279]547                      $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]548                  }
549               }
[322]550               if ( !isset( $results[ "error" ] ) )
551               {
552                   $results[ "error" ] = "";
553               }
[225]554               $results[ "error" ] .= "Could not move file " . $v[ 'name' ][ $k1 ];
555               $results[ '_status' ] = 'failed';
556               echo (json_encode($results));
[1]557               exit();
558            }
[420]559            if ( !isset( $_REQUEST[ $k ] ) || !is_array( $_REQUEST[ $k ] ) )
560            {
561               $_REQUEST[ $k ] = array();
562            }
[1]563            $_REQUEST[ $k ][] = $dir . '/' . $v[ 'name' ][ $k1 ];
[420]564            if ( !isset( $org_request[ $k ] ) || !is_array( $org_request[ $k ] ) )
565            {
566               $org_request[ $k ] = array();
567            }
568            $org_request[ $k ][] = $v[ 'name' ][ $k1 ];
[1]569         }
570      } else {
[322]571         if ( $v[ 'error' ] == 4 &&
572              isset( $_REQUEST[ '_selaltval_' . $k ] ) &&
573              isset( $_REQUEST[ $_REQUEST[ '_selaltval_' . $k ] ] ) &&
574              count( $_REQUEST[ $_REQUEST[ '_selaltval_' . $k ] ] ) == 1 ) 
[1]575         {
[322]576            $f = $bdir . substr( base64_decode( $_REQUEST[ $_REQUEST[ '_selaltval_' . $k ] ][ 0 ] ), 2 );
577            if ( !file_exists( $f ) )
[201]578            {
[322]579               if ( isset( $checkrunning ) )
580               {
581                  try {
582                      $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
583                  } catch(MongoCursorException $e) {
584                      $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
585                  }
[201]586               }
[701]587               $results[ "error" ] = "Missing file input for identifier " . $k;
[322]588               $results[ '_status' ] = 'failed';
589               echo (json_encode($results));
590               exit();
[201]591            }
[322]592
[382]593            if ( !isset( $_REQUEST[ $k ] ) || !is_array( $_REQUEST[ $k ] ) )
[1]594            {
[322]595               $_REQUEST[ $k ] = array();
[1]596            }
[322]597            $_REQUEST[ $k ][] = $f;
598            unset( $_REQUEST[ $_REQUEST[ '_selaltval_' . $k ] ] );
599            unset( $_REQUEST[ '_selaltval_' . $k ] );
600         } else {
601            if ( $v[ 'error' ] )
602            {
603               if ( isset( $checkrunning ) )
604               {
605                  try {
606                      $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
607                  } catch(MongoCursorException $e) {
608                      $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
609                  }
610               }
611               if ( !isset( $results[ "error" ] ) )
612               {
613                   $results[ "error" ] = "";
614               }
615               if ( is_string( $v[ 'name' ] ) && !strlen( $v[ 'name' ] ) )
616               {
[701]617                  $results[ "error" ] .= "Missing file input for identifier " . $k;
[322]618               } else {
619                  $results[ "error" ] .= "Error uploading file " . $v[ 'name' ] . " Error code:" . $v[ 'error' ] . " " . fileerr_msg( $v[ 'error' ] );
620               }
621               $results[ '_status' ] = 'failed';
622               echo (json_encode($results));
623               exit();
624            }
[146]625//         error_log( "move_uploaded_file( " . $v[ 'tmp_name' ] . ',' .  $dir . '/' . $v[ 'name' ] . "\n", 3, "/var/tmp/my-errors.log");
[322]626            if ( !move_uploaded_file( $v[ 'tmp_name' ], $dir . '/' . $v[ 'name' ] ) )
[201]627            {
[322]628               if ( isset( $checkrunning ) )
629               {
630                  try {
631                      $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
632                  } catch(MongoCursorException $e) {
633                      $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
634                  }
[201]635               }
[322]636               $results[ "error" ] .= "Could not move file " . $v[ 'name' ];
637               $results[ '_status' ] = 'failed';
638               echo (json_encode($results));
639               exit();
[201]640            }
[382]641            if ( !isset( $_REQUEST[ $k ] ) || !is_array( $_REQUEST[ $k ] ) )
[322]642            {
643               $_REQUEST[ $k ] = array();
644            }
645            $_REQUEST[ $k ][] = $dir . '/' . $v[ 'name' ];
[420]646            if ( !isset( $org_request[ $k ] ) || !is_array( $org_request[ $k ] ) )
647            {
648               $org_request[ $k ] = array();
649            }
650            $org_request[ $k ][] = $v[ 'name' ];
[1]651         }
652      }
653   }
654}
655
[961]656function only_numerics( $a ) {
657    $b = [];
658    foreach ( $a as $v ) {
659        if ( ctype_digit( $v ) ) {
660            $b[] = $v;
661        }
662    }
663    __~debug:basemylog{error_log( "only numerics from:\n" . json_encode( $a, JSON_PRETTY_PRINT ) . "\nto:\n" . json_encode( $b, JSON_PRETTY_PRINT ) . "\n", 3, "/tmp/mylog" );}
664    return $b;
665}
666
667function last_nonnumeric( $a ) {
668    $i = count( $a ) - 1;
669    while ( $i >= 0 && ctype_digit( $a[ $i ] ) ) {
670        --$i;
671    }
672    if ( $i < 0 ) {
673        error_log( "__application__ __menu:id__ __menu:modules:id__ last_nonnumeric could not find one\n" . json_encode( $a, JSON_PRETTY_PRINT ) . "\n", 3, "/tmp/php_errors" );
674        return $a[ 0 ];
675    }
676    __~debug:basemylog{error_log( "last non numeric from:\n" . json_encode( $a, JSON_PRETTY_PRINT ) . "\n is " . $a[$i] . "\n", 3, "/tmp/mylog" );}
677    return $a[ $i ];
678}   
679
680
[27]681if ( sizeof( $_REQUEST ) )
682{
[420]683    ob_start();
684    if ( !file_put_contents( "$logdir/_input_" . $_REQUEST[ '_uuid' ], json_encode( $org_request  ) ) )
685    {
686        $cont = ob_get_contents();
687        ob_end_clean();
688        if ( isset( $checkrunning ) )
689        {
690            try {
691                $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
692            } catch(MongoCursorException $e) {
693                $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
694            }
695        }
696        $results[ "error" ] .= "Could not write _input file data " . $cont;
697        $results[ '_status' ] = 'failed';
698        echo (json_encode($results));
699        exit();
700    }
701    ob_end_clean();
702    unset( $org_request );
703
[341]704    $decodekeys = preg_grep( '/^_decodepath_/', array_keys( $_REQUEST ) );
[398]705__~debug:basemylog{    error_log( "decode keys\n" . print_r( $decodekeys, true ) . "\n", 3, "/tmp/mylog" );}
[341]706    foreach ( $decodekeys as $v ) {                     
707        $v1 = substr( $v, 12 );
[398]708__~debug:basemylog{        error_log( "decode key $v -> $v1\n", 3, "/tmp/mylog" );}
[341]709        if ( isset( $_REQUEST[ $v1 ] ) ) {
[398]710__~debug:basemylog{            error_log( "is set request $v1\n", 3, "/tmp/mylog" );}
[341]711            foreach ( $_REQUEST[ $v1 ] as $k2=>$v2 ) {
[398]712__~debug:basemylog{                error_log( "foreach set request $v1: $k2 => $v2\n", 3, "/tmp/mylog" );}
[341]713                $_REQUEST[ $v1 ][ $k2 ] = $bdir . substr( base64_decode( $v2 ), 2 );
714            }
715        } else {
[398]716__~debug:basemylog{            error_log( "is NOT set request $v1\n", 3, "/tmp/mylog" );}
[341]717        }
718    }
719
[950]720    __~debug:basemylog{error_log( "old repeaters __oldrepeaters__ newrepeaters __newrepeaters__\n", 3, "/tmp/mylog" );}
[63]721    $keys = preg_grep( "/-/", array_keys( $_REQUEST ) );
[950]722    foreach ( $keys as $k => $v ) {
723        if ( !preg_match( "/^_/", $v ) ) {
724            $a = preg_split( "/-/", $v );
[955]725            if ( !__~extendedjsoninputtags{1}0 ) {
[961]726                if ( 1 ) {
727                    $b = only_numerics( $a );
728                    $tag = last_nonnumeric( $a );
729                    if ( count( $b ) ) {
730                        if ( !isset( $_REQUEST[ $tag ] ) || !is_array( $_REQUEST[ $tag ] ) ) {
731                            $_REQUEST[ $tag ] = [];
732                        }
733                        if ( !is_array( $_REQUEST[ $tag ] ) ) {
734                            error_log( "__application__ __menu:id__ __menu:modules:id__ target tag $tag in not an array in request v $v\n" . json_encode( $_REQUEST, JSON_PRETTY_PRINT ) . "\n", 3, "/tmp/php_errors" );
735                        } else {
736                            $obj = &$_REQUEST[ $tag ];
737                            foreach ( $b as $v2 ) {
738                                if ( !isset( $obj[ $v2 ] ) ) {
739                                    $obj[ $v2 ] = [];
740                                }
741                                if ( !is_array( $obj[ $v2 ] ) ) {
742                                    error_log( "__application__ __menu:id__ __menu:modules:id__ target tag $tag in not an array in request v $v object\n" . json_encode( $obj, JSON_PRETTY_PRINT ) . "\n", 3, "/tmp/php_errors" );
743                                    break;
744                                }
[969]745                                if ( count( $obj ) <= $v2 ) {
746                                    __~debug:basemylog{error_log( "for $v ... v2 is $v2 filling upto $v2\n", 3, "/tmp/mylog" );}
747                                    $obj += array_fill( 0, $v2 + 1, null );
748                                    ksort( $obj );
749                                }
[961]750                                $obj = &$obj[ $v2 ];
751                            }
752                            $obj = $_REQUEST[ $v ];
753                        }
754                    } else {
755                        $_REQUEST[ $tag ] = $_REQUEST[ $v ];
[950]756                    }
757                } else {
[961]758                    $i = count( $a ) - 1;
759                    $isdigit = ctype_digit( $a[ $i ] );
760                    __~debug:basemylog{error_log( "old repeaters style used isdigit=$isdigit i=$i key=" . $a[$i] . " value $v\n", 3, "/tmp/mylog" );}
761                    if ( $isdigit && $i > 0 ) {
762                        __~debug:basemylog{error_log( "array add $v\n", 3, "/tmp/mylog" );}
763                        if ( !is_array( $_REQUEST[ $a[ $i - 1 ] ] ) ) {
764                            $_REQUEST[ $a[ $i - 1 ] ] = [];
765                        }
766                        $_REQUEST[ $a[ $i - 1 ] ][ $a[ $i ] ] = $_REQUEST[ $v ];
[950]767                    } else {
[961]768                        if ( !$isdigit ) {
769                            __~debug:basemylog{error_log( "not array add $v\n", 3, "/tmp/mylog" );}
770                            $_REQUEST[ $a[ $i ] ] = $_REQUEST[ $v ];
771                        } else {
772                            __~debug:basemylog{error_log( "not array add $v and skipped\n", 3, "/tmp/mylog" )};
773                        }
[950]774                    }
775                }
776                unset( $_REQUEST[ $v ] );
777            } else { // old new way of long tags
778                __~debug:basemylog{error_log( "new repeaters style used\n", 3, "/tmp/mylog" );}
779                __~debug:basemylog{error_log( "preg_split of $v:\n" . json_encode( $a, JSON_PRETTY_PRINT ) . "\n", 3, "/tmp/mylog" );}
780                if ( !isset( $_REQUEST[ $a[ 0 ] ] ) || !is_array( $_REQUEST[ $a[ 0 ] ] ) ) {
781                    $_REQUEST[ $a[ 0 ] ] = [];
782                }
783                $obj = &$_REQUEST[ $a[ 0 ] ];
784                for ( $i = 1; $i < count( $a ) - 1; ++$i ) {
785                    if ( !isset( $obj[ $a[ $i ] ] ) || !is_array( $obj[ $a[ $i ] ] ) ) {
786                        $obj[ $a[ $i ] ] = [];
787                    }
[970]788                    if ( ctype_digit( $a[ $i ] ) && count( $obj ) <= $a[ $i ] ) {
789                        __~debug:basemylog{error_log( "for $v ...\$a[\$i] is $a[$i] filling upto $a[$i]\n", 3, "/tmp/mylog" );}
790                        $obj += array_fill( 0, $a[ $i ] + 1, null );
791                        ksort( $obj );
792                    }
[950]793                    $obj = &$obj[ $a[ $i ] ];
794                }
795                $obj[ $a[ count( $a ) - 1 ] ] = $_REQUEST[ $v ];
796                // $_REQUEST[ $a[ 0 ] ][ $a[ 1 ] - 1 ] = $_REQUEST[ $v ];
797                unset( $_REQUEST[ $v ] );
[937]798            }
799        }
[63]800    }
801
[939]802    __~debug:basemylog{error_log( "request ready to jsonize\n" . print_r( $_REQUEST, true ) . "\n", 3, "/tmp/mylog" );}
803    __~debug:basemylog{error_log( "request in json" . json_encode( $_REQUEST, JSON_PRETTY_PRINT ) . "\n", 3, "/tmp/mylog" );}
[27]804    $json = json_encode( $_REQUEST );
805    $json = str_replace( "'", "_", $json );
[126]806    ob_start();
807    if ( !chdir( $dir ) )
808    {
809      $cont = ob_get_contents();
810      ob_end_clean();
[201]811      if ( isset( $checkrunning ) )
812      {
813         try {
[279]814             $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]815         } catch(MongoCursorException $e) {
[279]816             $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]817         }
818      }
[225]819      $results[ "error" ] .= "Could not create directory " . $dir . " " . $cont;
820      $results[ '_status' ] = 'failed';
821      echo (json_encode($results));
[126]822      exit();
823    }
824    ob_end_clean();
[1180]825    if ( strlen( $json ) > 129000 ) {
826        $fileargs = 1;
827        $bigargs = 1;
828    }
[126]829    if ( isset( $fileargs ) )
830    {
831      ob_start();
[289]832      if (!file_put_contents( "$logdir/_args_" . $_REQUEST[ '_uuid' ], $json ) )
[126]833      {
834         $cont = ob_get_contents();
835         ob_end_clean();
[201]836         if ( isset( $checkrunning ) )
837         {
838            try {
[279]839                $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]840            } catch(MongoCursorException $e) {
[279]841                $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]842            }
843         }
[225]844         $results[ "error" ] .= "Could not write _args for remote submission " . $cont;
845         $results[ '_status' ] = 'failed';
846         echo (json_encode($results));
[126]847         exit();
848      }
849      ob_end_clean();
[574]850      // this is overriding too much, needs correction
[1153]851      if( $cmdprefix == "airavatarun" ||
852          $cmdprefix == "oscluster" ) { 
[574]853         $cmd = "$adir/$cmdprefix";
[1158]854         $cmd .= $cmdprefix == "oscluster" ? " __executable__" : " __menu:modules:id__";
[574]855         $cmd .= " '$json'"; 
856      } else {
[1495]857          if ( substr( $cmdprefix, 0, 6 ) == "docker" ) {
858              $cmd = "$cmdprefix '$json'";
859          } else {
860              if ( strlen( $cmdprefix ) ) {
861                  $register = "perl $adir/util/ga_regpid_udp.pl __application__ " . 
862                      $GLOBALS['resource'] . " " . 
863                      $_REQUEST[ '_udphost' ] . " " .
864                      $_REQUEST[ '_udpport' ] . " " .
865                      $_REQUEST[ '_uuid' ] . " " .
866                      '$$';
[476]867
[1495]868                  if ( isset( $bigargs ) ) {
869                      $cmd = "$cmdprefix '$register;cd $dir;$cmd @$logdir/_args_" . $_REQUEST[ '_uuid' ] . "'";
870                  } else {
871                      $cmd = "$cmdprefix '$register;cd $dir;$cmd \"\$(< $logdir/_args_" . $_REQUEST[ '_uuid' ] . ")\"'";
872                  }                 
[1180]873              } else {
[1495]874                  if ( isset( $bigargs ) ) {
875                      $cmd = "$cmd @$logdir/_args_" . $_REQUEST[ '_uuid' ];
876                  } else {
877                      $cmd = "$cmd \"\$(< $logdir/_args_" . $_REQUEST[ '_uuid' ] . ")\"";
878                  }
[1180]879              }
[1495]880          }
[574]881      }
[126]882    } else {
883      $cmd .= " '$json'";
884    }
[193]885
[288]886    $cmd .= " 2> $logdir/_stderr_" . $_REQUEST[ '_uuid' ] . " | head -c50000000";
[599]887    __~debug:basemylog{error_log( "\tcmd: <$cmd>\n", 3, "/tmp/mylog" );}
[193]888
[288]889    $cmdfile = "$logdir/_cmds_" . $_REQUEST[ '_uuid' ];
[221]890
891    ob_start();
892    if ( !file_put_contents( $cmdfile, $cmd ) )
893    {
894       $cont = ob_get_contents();
895       ob_end_clean();
896       if ( isset( $checkrunning ) )
897       {
898          try {
[279]899              $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[221]900          } catch(MongoCursorException $e) {
[279]901              $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[221]902          }
903       }
[225]904       $results[ "error" ] .= "Could not write _cmds_ for remote submission " . $cont;
905       $results[ '_status' ] = 'failed';
906       echo (json_encode($results));
[221]907       exit();
908    }
909    ob_end_clean();
910
[625]911    logjobstart(__~cache{ false, "__cache__" });
[203]912
[914]913    $altcmd = "nohup /usr/local/bin/php __docroot:html5__/__application__/util/jobrun.php '" . $GLOBALS[ 'logon' ] . "' " . $_REQUEST[ '_uuid' ] . " " . ( isset( $checkrunning ) ? "1" : "0" ) . " 2>&1 >> /tmp/php_errors &";
[221]914
915//    error_log( "\taltcmd:\n$altcmd\n", 3, "/tmp/mylog" );
916
[501]917    __~debug:runjob{error_log( "base.php exec nohup jobrun\n", 3, "/tmp/php_errors" );}
918     
[221]919    exec( $altcmd );
[306]920
[913]921    $results[ "_status" ] = "started";
922    __~debug:job{$results[ "jobrun" ] = "started";}
923   
924    if ( $do_logoff == 1 ) {
[914]925        $results[ '_logon' ] = "";
[913]926    }
927
928    echo json_encode( $results );
929    exit;
930
[306]931    if ( isset( $results[ "_fs_clear" ] ) )
932    {
933        $fsc = $results[ "_fs_clear" ];
[398]934        $results = '{"_status":"started"__~debug:job{,"jobrun":"started"},"_fs_clear":"' . $fsc . '"}';
[306]935    } else {
[398]936        $results = '{"_status":"started"__~debug:job{,"jobrun":"started"}}';
[306]937    }
[221]938   
939    if ( $do_logoff == 1 )
940    {   
[914]941        $results = substr( trim( $results ), 0, -1 ) . ",\"_logon\":\"\"}";
[221]942    }
943
944    echo $results;
945    exit;
946
[27]947    $results = exec( $cmd );
[193]948
[203]949    logjobupdate( "finished", true );
950
[66]951    $results = str_replace( "__docroot:html5__/__application__/", "", $results );
[98]952    if ( $do_logoff == 1 )
953    {   
[914]954        $results = substr( trim( $results ), 0, -1 ) + ",\"_logon\":\"\"}";
[98]955    }
[164]956
957    ob_start();
[288]958    file_put_contents( "$logdir/_stdout_" . $_REQUEST[ '_uuid' ], $results );
[193]959    ob_end_clean();
960
961    ob_start();
[164]962    $test_json = json_decode( $results );
963    if ( $test_json == NULL )
964    {   
965        $cont = ob_get_contents();
966        ob_end_clean();
[201]967
968        if ( isset( $checkrunning ) )
969        {
970           try {
[279]971               $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]972           } catch(MongoCursorException $e) {
[279]973               $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]974           }
975        }
976
[195]977        if ( strlen( $results ) )
[193]978        {
[225]979            $results[ "error" ] = "Malformed JSON returned from executable $cont";
[195]980            if ( strlen( $results ) > 1000 )
981            {
[225]982                $results[ "executable_returned_end" ] = substr( $results, 0, 450  ) . " .... " . substr( $results, -450 );
[288]983                $results[ "notice" ] = "The executable return string was greater than 1000 characters, so only the first 450 and the last 450 are shown above.  Check $logdir/_stdout for the full output";
[195]984            } else {
[225]985                $results[ "executable_returned" ] = substr( $results, 0, 1000 );
[195]986            }
987        } else {
[225]988            $results[ "error" ] = "Empty JSON returned from executable $cont";
[193]989        }
[195]990
991        ob_start();
[288]992        $stderr = trim( file_get_contents( "$logdir/_stderr_" . $_REQUEST[ '_uuid' ] ) );
[195]993        $cont = ob_get_contents();
994        ob_end_clean();
[225]995        $results[ "error_output" ] = ( strlen( $stderr ) > 0 ) ? $stderr : "EMPTY";
[195]996        if ( strlen( $cont ) )
997        {
[225]998            $results[ "error_output_issue" ] = "reading _stderr reported $cont";
[195]999        }           
1000
[225]1001        echo (json_encode($results));
[164]1002        exit();
1003    }
1004    ob_end_clean();
[201]1005    if ( isset( $checkrunning ) )
1006    {
1007       try {
[279]1008           $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]1009       } catch(MongoCursorException $e) {
[279]1010           $test_json[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]1011       }
1012       $results = json_encode( $test_json );
1013    }
[27]1014} else {
[201]1015    if ( isset( $checkrunning ) )
1016    {
1017       try {
[279]1018           $coll->remove( array( "name" => $checkrunning ), array(__~mongojournal{"j" => true,} "justOne" => true ));
[201]1019       } catch(MongoCursorException $e) {
[279]1020           $results[ 'error' ] = "Error removing running project record from database.  This project is now locked. " . $e->getMessage();
[201]1021       }
1022    }
[225]1023    $results[ "error" ] .= "PHP code received no \$_REQUEST?";
1024    echo (json_encode($results));
[27]1025    exit();
1026}
[1]1027
1028// cleanup CURRENTLY DISABLED!
1029if ( sizeof( $_FILES ) )
1030{
1031   $files = new RecursiveIteratorIterator(
1032       new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
1033       RecursiveIteratorIterator::CHILD_FIRST
1034   );
1035
1036   foreach ($files as $fileinfo) {
1037      $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
1038//      $todo( $fileinfo->getRealPath() );
1039   }
1040//   rmdir( $dir );
1041}
1042echo $results;
1043?>
Note: See TracBrowser for help on using the repository browser.