2 if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
3 /*********************************************************************************
4 * SugarCRM Community Edition is a customer relationship management program developed by
5 * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
7 * This program is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU Affero General Public License version 3 as published by the
9 * Free Software Foundation with the addition of the following permission added
10 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
19 * You should have received a copy of the GNU Affero General Public License along with
20 * this program; if not, see http://www.gnu.org/licenses or write to the Free
21 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
27 * The interactive user interfaces in modified source and object code versions
28 * of this program must display Appropriate Legal Notices, as required under
29 * Section 5 of the GNU Affero General Public License version 3.
31 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32 * these Appropriate Legal Notices must retain the display of the "Powered by
33 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34 * technical reasons, the Appropriate Legal Notices must display the words
35 * "Powered by SugarCRM".
36 ********************************************************************************/
41 require_once( 'include/utils/progress_bar_utils.php' );
42 require_once( 'include/utils/zip_utils.php' );
47 if (!is_admin($current_user)) sugar_die("Unauthorized access to administration.");
48 if (isset($GLOBALS['sugar_config']['hide_admin_diagnostics']) && $GLOBALS['sugar_config']['hide_admin_diagnostics'])
50 sugar_die("Unauthorized access to diagnostic tool.");
54 global $skip_md5_diff;
55 $skip_md5_diff = false;
58 // get all needed globals
60 global $app_list_strings;
69 $db = DBManagerFactory::getInstance();
73 if(!is_admin($current_user)){
74 die($mod_strings['LBL_DIAGNOSTIC_ACCESS']);
81 //get sugar version and flavor
82 global $sugar_version;
86 //guid used for directory path
88 $sod_guid = create_guid();
90 //GET CURRENT DATETIME STAMP TO USE IN FILENAME
92 $curdatetime = date("Ymd-His");
95 global $progress_bar_percent;
96 $progress_bar_percent = 0;
101 global $currentitems;
103 define("CONFIG_WEIGHT", 1);
104 define("CUSTOM_DIR_WEIGHT", 1);
105 define("PHPINFO_WEIGHT", 1);
106 define("SQL_DUMPS_WEIGHT", 2);
107 define("SQL_SCHEMA_WEIGHT", 3);
108 define("SQL_INFO_WEIGHT", 1);
109 define("MD5_WEIGHT", 5);
110 define("BEANLISTBEANFILES_WEIGHT", 1);
111 define("SUGARLOG_WEIGHT", 2);
112 define("VARDEFS_WEIGHT", 2);
114 //THIS MUST CHANGE IF THE NUMBER OF DIRECTORIES TRAVERSED TO GET TO
115 // THE DIAGNOSTIC CACHE DIR CHANGES
116 define("RETURN_FROM_DIAG_DIR", "../../../..");
118 global $getDumpsFrom;
119 $getDumpsFrom = Array();
124 function sodUpdateProgressBar($itemweight){
125 global $progress_bar_percent;
128 global $currentitems;
131 if($currentitems == $totalitems)
132 update_progress_bar("diagnostic", 100, 100);
135 $progress_bar_percent += ($itemweight / $GLOBALS['totalweight'] * 100);
136 update_progress_bar("diagnostic", $progress_bar_percent, 100);
142 * Dump table as array
143 * @param $header string table header
144 * @param $values array list of values
147 function array_as_table($header, $values)
149 $contents = "<table border=\"0\" cellpadding=\"0\" class=\"tabDetailView\">";
151 foreach($values as $field) {
152 $keys = array_unique($keys + array_keys($field));
154 $cols = count($keys);
156 $contents .= "<tr colspan=\"$cols\">$header</tr><tr>";
157 foreach($keys as $key) {
158 $contents .= "<th class=\"tabDetailViewDL\"><b>$key</b></th>";
160 $contents .= "</tr>";
161 foreach($values as $field) {
163 foreach($field as $item) {
164 if(is_array($item)) {
165 $item = join(",", $item);
167 $contents .= "<td class=\"tabDetailViewDF\">$item</td>";
169 $contents .= "</tr>";
171 $contents .= "</table>";
175 // expects a string containing the name of the table you would like to get the dump of
176 // expects there to already be a connection to the db and the 'use database_name' to be done
177 // returns a string containing (in html) the dump of all rows
178 function getFullTableDump($tableName){
182 $cols = $db->get_columns($tableName);
183 $indexes = $db->get_indices($tableName);
185 //setting up table header for each file
186 $returnString .= array_as_table("{$db->dbName} $tableName Definitions:", $cols);
187 $returnString .= array_as_table("{$db->dbName} $tableName Keys:", $indexes);
188 $returnString .= "<BR><BR>";
190 $def_count = count($cols);
192 $td_result = $db->query("select * from ".$tableName);
194 return $db->lastError();
196 $returnString .= "<table border=\"0\" cellpadding=\"0\" class=\"tabDetailView\"><tr><th class=\"tabDetailViewDL\">#</th>";
197 $fields = $db->getFieldsArray($td_result);
198 foreach($fields as $field) {
199 $returnString .= "<th class=\"tabDetailViewDL\">$field</th>";
202 $returnString .= "</tr>";
204 while($row = $db->fetchByAssoc($td_result))
206 $row = array_values($row);
207 $returnString .= "<tr>";
208 $returnString .= "<td class=\"tabDetailViewDL\">".$row_counter."</td>";
209 for($counter = 0; $counter < $def_count; $counter++) {
210 $replace_val = false;
211 //perform this check when counter is set to two, which means it is on the 'value' column
213 //if the previous "name" column value was set to smtppass, set replace_val to true
214 if(strcmp($row[$counter - 1], "smtppass") == 0 )
217 //if the previous "name" column value was set to smtppass,
218 //and the "category" value set to ldap, set replace_val to true
219 if (strcmp($row[$counter - 2], "ldap") == 0 && strcmp($row[$counter - 1], "admin_password") == 0)
222 //if the previous "name" column value was set to password,
223 //and the "category" value set to proxy, set replace_val to true
224 if(strcmp($row[$counter - 2], "proxy") == 0 && strcmp($row[$counter - 1], "password") == 0 )
229 $returnString .= "<td class=\"tabDetailViewDF\">********</td>";
231 $returnString .= "<td class=\"tabDetailViewDF\">".($row[$counter] == "" ? " " : $row[$counter])."</td>";
235 $returnString .= "</tr>";
237 $returnString .= "</table>";
239 return $returnString;
242 // Deletes the directory recursively
243 function deleteDir($dir)
245 if (substr($dir, strlen($dir)-1, 1) != '/')
248 if ($handle = opendir($dir))
250 while ($obj = readdir($handle))
252 if ($obj != '.' && $obj != '..')
254 if (is_dir($dir.$obj))
256 if (!deleteDir($dir.$obj))
259 elseif (is_file($dir.$obj))
261 if (!unlink($dir.$obj))
277 function prepareDiag()
279 global $getDumpsFrom;
282 global $progress_bar_percent;
283 global $skip_md5_diff;
287 echo getClassicModuleTitle(
290 "<a href='index.php?module=Administration&action=index'>{$mod_strings['LBL_MODULE_NAME']}</a>",
291 translate('LBL_DIAGNOSTIC_TITLE')
296 echo $mod_strings['LBL_DIAGNOSTIC_EXECUTING'];
300 //determine if files.md5 exists or not
301 if(file_exists('files.md5'))
302 $skip_md5_diff = false;
304 $skip_md5_diff = true;
306 // array of all tables that we need to pull rows from below
307 $getDumpsFrom = array('config' => 'config',
308 'fields_meta_data' => 'fields_meta_data',
309 'upgrade_history' => 'upgrade_history',
310 'versions' => 'versions',
314 //Creates the diagnostic directory in the cache directory
315 $cacheDir = create_cache_directory("diagnostic/");
316 $cacheDir = create_cache_directory("diagnostic/".$sod_guid);
317 $cacheDir = create_cache_directory("diagnostic/".$sod_guid."/diagnostic".$curdatetime."/");
319 display_progress_bar("diagnostic", $progress_bar_percent, 100);
324 function executesugarlog()
326 //BEGIN COPY SUGARCRM.LOG
327 //Copies the Sugarcrm log to our diagnostic directory
329 require_once('include/SugarLogger/SugarLogger.php');
330 $logger = new SugarLogger();
331 if(!copy($logger->getLogFileNameWithPath(), $cacheDir.'/'.$logger->getLogFileName())) {
332 echo "Couldn't copy sugarcrm.log to cacheDir.<br>";
334 //END COPY SUGARCRM.LOG
336 //UPDATING PROGRESS BAR
337 sodUpdateProgressBar(SUGARLOG_WEIGHT);
340 function executephpinfo()
343 //This gets phpinfo, writes to a buffer, then I write to phpinfo.html
348 $phpinfo = ob_get_contents();
351 $handle = sugar_fopen($cacheDir."phpinfo.html", "w");
352 if(fwrite($handle, $phpinfo) === FALSE){
353 echo "Cannot write to file ".$cacheDir."phpinfo.html<br>";
358 //UPDATING PROGRESS BAR
359 sodUpdateProgressBar(PHPINFO_WEIGHT);
362 function executeconfigphp()
364 //BEGIN COPY CONFIG.PHP
365 //store db_password in temp var so we can get config.php w/o making anyone angry
366 global $cacheDir; global $sugar_config;
368 $tempPass = $sugar_config['dbconfig']['db_password'];
369 $sugar_config['dbconfig']['db_password'] = '********';
370 //write config.php to a file
371 write_array_to_file("Diagnostic", $sugar_config, $cacheDir."config.php");
372 //restore db_password so everything still works
373 $sugar_config['dbconfig']['db_password'] = $tempPass;
374 //END COPY CONFIG.PHP
376 //UPDATING PROGRESS BAR
377 sodUpdateProgressBar(CONFIG_WEIGHT);
380 function execute_sql($getinfo, $getdumps, $getschema)
383 global $getDumpsFrom;
388 $sqlInfoDir = create_cache_directory("diagnostic/".$sod_guid."/diagnostic".$curdatetime."/{$db->dbName}/");
391 //create directory for table definitions
393 $tablesSchemaDir = create_cache_directory("diagnostic/".$sod_guid."/diagnostic".$curdatetime."/{$db->dbName}/TableSchema/");
395 //make sure they checked the box to get basic info
398 $info = $db->getDbInfo();
401 foreach($info as $name => $value) {
402 $content .= "$name: $value<BR>";
405 if(!empty($content)) {
406 file_put_contents($sqlInfoDir."{$db->dbName}-General-info.html", $content);
407 sodUpdateProgressBar(SQL_INFO_WEIGHT);
414 border-bottom:2px solid;
415 border-top:2px solid;
418 border-bottom-color:#ABC3D7;
419 border-top-color:#4E8CCF;
422 .tabDetailView td table td
428 .tabDetailView tr.pagination td
432 border-bottom:1px solid #CBDAE6;
435 .tabDetailView tr.pagination td table td
442 background-color:#F6F6F6;
444 border-bottom:1px solid #CBDAE6;
453 background-color:#FFFFFF;
455 border-bottom:1px solid #CBDAE6;
457 padding:5px 10px 5px 8px;
463 background:#EBEBED none repeat scroll 0 0;
464 border-color:#CCCCCC -moz-use-text-color;
465 border-style:solid none;
466 border-width:1px medium;
475 //BEGIN GET ALL TABLES SCHEMAS
476 $all_tables = $db->getTablesArray();
480 foreach($all_tables as $tablename){
481 $cols = $db->get_columns($tablename);
482 $indexes = $db->get_indices($tablename);
483 //setting up table header for each file
484 $contents .= array_as_table("{$db->dbName} $tablename Definitions:", $cols);
485 $contents .= array_as_table("{$db->dbName} $tablename Keys:", $indexes);
486 $contents .= "<BR><BR>";
489 file_put_contents($tablesSchemaDir."{$db->dbName}TablesSchema.html", $contents);
490 //END GET ALL TABLES SCHEMAS
491 //BEGIN UPDATING PROGRESS BAR
492 sodUpdateProgressBar(SQL_SCHEMA_WEIGHT);
493 //END UPDATING PROGRESS BAR
498 //BEGIN GET TABLEDUMPS
499 $tableDumpsDir = create_cache_directory("diagnostic/".$sod_guid."/diagnostic".$curdatetime."/{$db->dbName}/TableDumps/");
502 foreach ($getDumpsFrom as $table)
504 //calling function defined above to get the string for dump
505 $contents = $style .getFullTableDump($table);
506 file_put_contents($tableDumpsDir.$table.".html", $contents);
509 //BEGIN UPDATING PROGRESS BAR
510 sodUpdateProgressBar(SQL_DUMPS_WEIGHT);
511 //END UPDATING PROGRESS BAR
517 function executebeanlistbeanfiles()
519 //BEGIN CHECK BEANLIST FILES ARE AVAILABLE
527 echo $mod_strings['LBL_DIAGNOSTIC_BEANLIST_DESC'];
529 echo "<font color=green>";
530 echo $mod_strings['LBL_DIAGNOSTIC_BEANLIST_GREEN'];
533 echo "<font color=orange>";
534 echo $mod_strings['LBL_DIAGNOSTIC_BEANLIST_ORANGE'];
537 echo "<font color=red>";
538 echo $mod_strings['LBL_DIAGNOSTIC_BEANLIST_RED'];
542 foreach ($beanList as $beanz)
544 if(!isset($beanFiles[$beanz]))
546 echo "<font color=orange>NO! --- ".$beanz." is not an index in \$beanFiles</font><br>";
550 if(file_exists($beanFiles[$beanz]))
551 echo "<font color=green>YES --- ".$beanz." file \"".$beanFiles[$beanz]."\" exists</font><br>";
553 echo "<font color=red>NO! --- ".$beanz." file \"".$beanFiles[$beanz]."\" does NOT exist</font><br>";
557 $content = ob_get_contents();
560 $handle = sugar_fopen($cacheDir."beanFiles.html", "w");
561 if(fwrite($handle, $content) === FALSE){
562 echo "Cannot write to file ".$cacheDir."beanFiles.html<br>";
565 //END CHECK BEANLIST FILES ARE AVAILABLE
566 //BEGIN UPDATING PROGRESS BAR
567 sodUpdateProgressBar(BEANLISTBEANFILES_WEIGHT);
568 //END UPDATING PROGRESS BAR
571 function executecustom_dir()
573 //BEGIN ZIP AND SAVE CUSTOM DIRECTORY
576 zip_dir("custom", $cacheDir."custom_directory.zip");
577 //END ZIP AND SAVE CUSTOM DIRECTORY
578 //BEGIN UPDATING PROGRESS BAR
579 sodUpdateProgressBar(CUSTOM_DIR_WEIGHT);
580 //END UPDATING PROGRESS BAR
583 function executemd5($filesmd5, $md5calculated)
585 //BEGIN ALL MD5 CHECKS
587 global $skip_md5_diff;
589 if(file_exists('files.md5'))
590 include( 'files.md5');
591 //create dir for md5s
592 $md5_directory = create_cache_directory("diagnostic/".$sod_guid."/diagnostic".$curdatetime."/md5/");
594 //skip this if the files.md5 didn't exist
597 //make sure the files.md5
599 if(!copy('files.md5', $md5_directory."files.md5"))
600 echo "Couldn't copy files.md5 to ".$md5_directory."<br>Skipping md5 checks.<br>";
603 $md5_string_calculated = generateMD5array('./');
606 write_array_to_file('md5_string_calculated', $md5_string_calculated, $md5_directory."md5_array_calculated.php");
609 //if the files.md5 didn't exist, we can't do this
612 $md5_string_diff = array_diff($md5_string_calculated, $md5_string);
614 write_array_to_file('md5_string_diff', $md5_string_diff, $md5_directory."md5_array_diff.php");
617 //BEGIN UPDATING PROGRESS BAR
618 sodUpdateProgressBar(MD5_WEIGHT);
619 //END UPDATING PROGRESS BAR
622 function executevardefs()
624 //BEGIN DUMP OF SUGAR SCHEMA (VARDEFS)
626 //END DUMP OF SUGAR SCHEMA (VARDEFS)
627 //BEGIN UPDATING PROGRESS BAR
628 //This gets the vardefs, writes to a buffer, then I write to vardefschema.html
633 global $sugar_version;
634 global $sugar_db_version;
635 global $sugar_flavor;
638 foreach ( $beanList as $beanz ) {
639 // echo "Module: ".$beanz."<br>";
641 $path_parts = pathinfo( $beanFiles[ $beanz ] );
642 $vardefFileName = $path_parts[ 'dirname' ]."/vardefs.php";
643 if( file_exists( $vardefFileName )) {
644 // echo "<br>".$vardefFileName."<br>";
646 include_once( $vardefFileName );
649 echo "<html lang='en'>";
651 echo "<H1>Schema listing based on vardefs</H1>";
652 echo "<P>Sugar version: ".$sugar_version." / Sugar DB version: ".$sugar_db_version." / Sugar flavor: ".$sugar_flavor;
655 echo "<style> th { text-align: left; } </style>";
658 foreach($dictionary as $vardef) {
659 $tables[] = $vardef['table'];
660 $fields[$vardef['table']] = $vardef['fields'];
661 $comments[$vardef['table']] = $vardef['comment'];
666 foreach($tables as $t) {
668 if ( $name == "does_not_exist" )
670 $comment = $comments[$t];
671 echo "<h2>Table: $t</h2>
672 <p><i>{$comment}</i></p>";
673 echo "<table border=\"0\" cellpadding=\"3\" class=\"tabDetailView\">";
674 echo '<TR BGCOLOR="#DFDFDF">
675 <TD NOWRAP ALIGN=left class=\"tabDetailViewDL\">Column</TD>
676 <TD NOWRAP class=\"tabDetailViewDL\">Type</TD>
677 <TD NOWRAP class=\"tabDetailViewDL\">Length</TD>
678 <TD NOWRAP class=\"tabDetailViewDL\">Required</TD>
679 <TD NOWRAP class=\"tabDetailViewDL\">Comment</TD>
682 ksort( $fields[ $t ] );
684 foreach($fields[$t] as $k => $v) {
685 // we only care about physical tables ('source' can be 'non-db' or 'nondb' or 'function' )
686 if ( isset( $v[ 'source' ] ))
688 $columnname = $v[ 'name' ];
689 $columntype = $v[ 'type' ];
690 $columndbtype = $v[ 'dbType' ];
691 $columnlen = $v[ 'len' ];
692 $columncomment = $v[ 'comment' ];
693 $columnrequired = $v[ 'required' ];
695 if ( empty( $columnlen ) ) $columnlen = '<i>n/a</i>';
696 if ( empty( $columncomment ) ) $columncomment = '<i>(none)</i>';
697 if ( !empty( $columndbtype ) ) $columntype = $columndbtype;
698 if ( empty( $columnrequired ) || ( $columnrequired == false ))
699 $columndisplayrequired = 'no';
701 $columndisplayrequired = 'yes';
703 echo '<TR BGCOLOR="#FFFFFF" ALIGN=left>
704 <TD ALIGN=left class=\"tabDetailViewDF\">'.$columnname.'</TD>
705 <TD NOWRAP class=\"tabDetailViewDF\">'.$columntype.'</TD>
706 <TD NOWRAP class=\"tabDetailViewDF\">'.$columnlen.'</TD>
707 <TD NOWRAP class=\"tabDetailViewDF"\">'.$columndisplayrequired.'</TD>
708 <TD WRAP class=\"tabDetailViewDF\">'.$columncomment.'</TD></TR>';
714 echo "</body></html>";
716 $vardefFormattedOutput = ob_get_contents();
719 $handle = sugar_fopen($cacheDir."vardefschema.html", "w");
720 if(fwrite($handle, $vardefFormattedOutput) === FALSE){
721 echo "Cannot write to file ".$cacheDir."vardefschema.html<br>";
724 sodUpdateProgressBar(VARDEFS_WEIGHT);
725 //END UPDATING PROGRESS BAR
728 function finishDiag(){
729 //BEGIN ZIP ALL FILES AND EXTRACT IN CACHE ROOT
736 zip_dir(".", "../diagnostic".$curdatetime.".zip");
737 //END ZIP ALL FILES AND EXTRACT IN CACHE ROOT
738 chdir(RETURN_FROM_DIAG_DIR);
740 deleteDir($cacheDir);
743 print "<a href=\"index.php?module=Administration&action=DiagnosticDownload&guid=$sod_guid&time=$curdatetime&to_pdf=1\">".$mod_strings['LBL_DIAGNOSTIC_DOWNLOADLINK']."</a><BR>";
745 print "<a href=\"index.php?module=Administration&action=DiagnosticDelete&file=diagnostic".$curdatetime."&guid=".$sod_guid."\">".$mod_strings['LBL_DIAGNOSTIC_DELETELINK']."</a><br>";
749 //BEGIN check for what we are executing
750 $doconfigphp = ((empty($_POST['configphp']) || $_POST['configphp'] == 'off') ? false : true);
751 $docustom_dir = ((empty($_POST['custom_dir']) || $_POST['custom_dir'] == 'off') ? false : true);
752 $dophpinfo = ((empty($_POST['phpinfo']) || $_POST['phpinfo'] == 'off') ? false : true);
753 $domysql_dumps = ((empty($_POST['mysql_dumps']) || $_POST['mysql_dumps'] == 'off') ? false : true);
754 $domysql_schema = ((empty($_POST['mysql_schema']) || $_POST['mysql_schema'] == 'off') ? false : true);
755 $domysql_info = ((empty($_POST['mysql_info']) || $_POST['mysql_info'] == 'off') ? false : true);
756 $domd5 = ((empty($_POST['md5']) || $_POST['md5'] == 'off') ? false : true);
757 $domd5filesmd5 = ((empty($_POST['md5filesmd5']) || $_POST['md5filesmd5'] == 'off') ? false : true);
758 $domd5calculated = ((empty($_POST['md5calculated']) || $_POST['md5calculated'] == 'off') ? false : true);
759 $dobeanlistbeanfiles = ((empty($_POST['beanlistbeanfiles']) || $_POST['beanlistbeanfiles'] == 'off') ? false : true);
760 $dosugarlog = ((empty($_POST['sugarlog']) || $_POST['sugarlog'] == 'off') ? false : true);
761 $dovardefs = ((empty($_POST['vardefs']) || $_POST['vardefs'] == 'off') ? false : true);
762 //END check for what we are executing
765 //BEGIN items to calculate progress bar
768 if($doconfigphp) {$totalweight += CONFIG_WEIGHT; $totalitems++;}
769 if($docustom_dir) {$totalweight += CUSTOM_DIR_WEIGHT; $totalitems++;}
770 if($dophpinfo) {$totalweight += PHPINFO_WEIGHT; $totalitems++;}
771 if($domysql_dumps) {$totalweight += SQL_DUMPS_WEIGHT; $totalitems++;}
772 if($domysql_schema) {$totalweight += SQL_SCHEMA_WEIGHT; $totalitems++;}
773 if($domysql_info) {$totalweight += SQL_INFO_WEIGHT; $totalitems++;}
774 if($domd5) {$totalweight += MD5_WEIGHT; $totalitems++;}
775 if($dobeanlistbeanfiles) {$totalweight += BEANLISTBEANFILES_WEIGHT; $totalitems++;}
776 if($dosugarlog) {$totalweight += SUGARLOG_WEIGHT; $totalitems++;}
777 if($dovardefs) {$totalweight += VARDEFS_WEIGHT; $totalitems++;}
778 //END items to calculate progress bar
780 //prepare initial steps
786 echo $mod_strings['LBL_DIAGNOSTIC_GETCONFPHP']."<BR>";
788 echo $mod_strings['LBL_DIAGNOSTIC_DONE']."<BR><BR>";
792 echo $mod_strings['LBL_DIAGNOSTIC_GETCUSTDIR']."<BR>";
794 echo $mod_strings['LBL_DIAGNOSTIC_DONE']."<BR><BR>";
798 echo $mod_strings['LBL_DIAGNOSTIC_GETPHPINFO']."<BR>";
800 echo $mod_strings['LBL_DIAGNOSTIC_DONE']."<BR><BR>";
802 if($domysql_info || $domysql_dumps || $domysql_schema)
804 echo $mod_strings['LBL_DIAGNOSTIC_GETTING'].
805 ($domysql_info ? "... ".$mod_strings['LBL_DIAGNOSTIC_GETMYSQLINFO'] : " ").
806 ($domysql_dumps ? "... ".$mod_strings['LBL_DIAGNOSTIC_GETMYSQLTD'] : " ").
807 ($domysql_schema ? "... ".$mod_strings['LBL_DIAGNOSTIC_GETMYSQLTS'] : "...").
809 execute_sql($domysql_info, $domysql_dumps, $domysql_schema);
810 echo $mod_strings['LBL_DIAGNOSTIC_DONE']."<BR><BR>";
814 echo $mod_strings['LBL_DIAGNOSTIC_GETMD5INFO']."<BR>";
815 executemd5($domd5filesmd5, $domd5calculated);
816 echo $mod_strings['LBL_DIAGNOSTIC_DONE']."<BR><BR>";
818 if($dobeanlistbeanfiles)
820 echo $mod_strings['LBL_DIAGNOSTIC_GETBEANFILES']."<BR>";
821 executebeanlistbeanfiles();
822 echo $mod_strings['LBL_DIAGNOSTIC_DONE']."<BR><BR>";
826 echo $mod_strings['LBL_DIAGNOSTIC_GETSUGARLOG']."<BR>";
828 echo $mod_strings['LBL_DIAGNOSTIC_DONE']."<BR><BR>";
832 echo $mod_strings['LBL_DIAGNOSTIC_VARDEFS']."<BR>";
834 echo $mod_strings['LBL_DIAGNOSTIC_DONE']."<BR><BR>";
837 //finish up the last steps