function Run($aProjname, $aForceUpdate = false)
 {
     $this->iProjname = $aProjname;
     echo "<h3>Scanning files for project '{$aProjname}'</h3>";
     // Find full filename of all project files in the project
     $proj = $this->iDBUtils->GetProject($aProjname);
     $projidx = $proj['fld_key'];
     $q = "SELECT * FROM tbl_projfiles WHERE fld_projidx={$projidx}";
     $res = $this->iDB->Query($q);
     $n = $res->NumRows();
     $ptimer = new JpgTimer();
     while ($n-- > 0) {
         $r = $res->Fetch();
         $fname = $r['fld_name'];
         $modtime = filemtime($fname);
         $dbtime = strtotime($r['fld_dbupdtime']);
         if ($aForceUpdate || $modtime > $dbtime) {
             echo "Parsing file {$fname}...\n";
             flush();
             $dbdriver = new DBDriver($aProjname, $fname, $this->iDB);
             $ptimer->Push();
             $dbdriver->Run();
             $t = round($ptimer->Pop() / 1000, 2);
             $q = "UPDATE tbl_projfiles SET fld_dbupdtime=now() WHERE fld_key=" . $r['fld_key'];
             $this->iDB->Query($q);
             echo "[{$t} s]<br>\n";
         } else {
             echo "DB is up to date with file: '{$fname}'<br>\n";
         }
     }
     echo "<p><h3>Done.</h3>";
     HTMLGenerator::CloseWinButton();
 }
 function Run()
 {
     global $HTTP_POST_VARS;
     global $HTTP_GET_VARS;
     // We should go back to the project file form if we
     // a) either came from that form with a save/delete
     // b) we are going to that form from the project form
     if (empty($HTTP_POST_VARS['show_projects']) && (!empty($HTTP_POST_VARS['show_files']) && !empty($HTTP_POST_VARS['key']) && $HTTP_POST_VARS['key'] > 0 && $HTTP_POST_VARS['_x_formname'] == 'projects' || @$HTTP_POST_VARS['_x_formname'] == 'projfiles')) {
         if (@$HTTP_POST_VARS['_x_formname'] == 'projfiles') {
             $projkey = $HTTP_POST_VARS['projidx'];
         } else {
             if (!empty($HTTP_POST_VARS['_x_allprojects'])) {
                 $projkey = $HTTP_POST_VARS['_x_allprojects'];
             } else {
                 $projkey = $HTTP_POST_VARS['key'];
             }
             $HTTP_POST_VARS = array();
         }
         HTMLGenerator::DocHeader('Edit DDDA Project Files', 'Modify or Add Files To Project');
         HTMLGenerator::DocPreamble();
         GenJavascript::Stroke();
         $e = new EditProjectFiles($this->iDBUtils, $projkey);
         $pname = $this->iDBUtils->GetProjNameForKey($projkey);
         $e->Run($HTTP_POST_VARS, array('projectname' => '<b>' . $pname . '</b>'));
         HTMLGenerator::CloseWinButton();
     } else {
         HTMLGenerator::DocHeader('Edit DDDA Project', 'Modify or create new DDDA projects');
         HTMLGenerator::DocPreamble();
         GenJavascript::Stroke();
         // For the case when we return from prtojfiles we set the current project key
         // so we get back to the same project
         if (@$HTTP_POST_VARS['_x_formname'] == 'projfiles') {
             $key = @$HTTP_POST_VARS['projidx'];
             $HTTP_POST_VARS = array();
             $HTTP_POST_VARS['key'] = $key;
             $HTTP_POST_VARS['_x_allprojects'] = $key;
         }
         // Special case if we open the window to create a new project (start with empty form)
         if (empty($HTTP_GET_VARS['new']) && strlen(trim($this->iProjname)) > 0 && count($HTTP_POST_VARS) == 0) {
             $r = $this->iDBUtils->GetProject($this->iProjname);
             $HTTP_POST_VARS['key'] = $r['fld_key'];
         }
         $e = new EditProjects($this->iDBUtils);
         $e->Run($HTTP_POST_VARS);
         HTMLGenerator::CloseWinButton();
     }
 }
 function End()
 {
     echo "<h3>Successfully generated all documentation.</h3>";
     echo "<hr>";
     HTMLGenerator::CloseWinButton('left');
 }