| 831 | florian | 1 | <?php
 | 
        
           |  |  | 2 |   | 
        
           |  |  | 3 | ////////////////////////////////////////////////////////////////////////////////
 | 
        
           |  |  | 4 | //                                                                            //
 | 
        
           |  |  | 5 | //   Copyright (C) 2006  Phorum Development Team                              //
 | 
        
           |  |  | 6 | //   http://www.phorum.org                                                    //
 | 
        
           |  |  | 7 | //                                                                            //
 | 
        
           |  |  | 8 | //   This program is free software. You can redistribute it and/or modify     //
 | 
        
           |  |  | 9 | //   it under the terms of either the current Phorum License (viewable at     //
 | 
        
           |  |  | 10 | //   phorum.org) or the Phorum License that was distributed with this file    //
 | 
        
           |  |  | 11 | //                                                                            //
 | 
        
           |  |  | 12 | //   This program is distributed in the hope that it will be useful,          //
 | 
        
           |  |  | 13 | //   but WITHOUT ANY WARRANTY, without even the implied warranty of           //
 | 
        
           |  |  | 14 | //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                     //
 | 
        
           |  |  | 15 | //                                                                            //
 | 
        
           |  |  | 16 | //   You should have received a copy of the Phorum License                    //
 | 
        
           |  |  | 17 | //   along with this program.                                                 //
 | 
        
           |  |  | 18 | ////////////////////////////////////////////////////////////////////////////////
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 |     include_once "./include/admin/PhorumInputForm.php";
 | 
        
           |  |  | 21 |   | 
        
           |  |  | 22 |     // The place where our sanity checking modules are.
 | 
        
           |  |  | 23 |     $sanity_checks_dir = "./include/admin/sanity_checks";
 | 
        
           |  |  | 24 |   | 
        
           |  |  | 25 |     // ========================================================================
 | 
        
           |  |  | 26 |     // Load in the available sanity checks.
 | 
        
           |  |  | 27 |     // ========================================================================
 | 
        
           |  |  | 28 |   | 
        
           |  |  | 29 |     $sanity_checks = array();
 | 
        
           |  |  | 30 |     $dh = opendir ($sanity_checks_dir);
 | 
        
           |  |  | 31 |     if (! $dh) die("Could not open sanity checks directory");
 | 
        
           |  |  | 32 |     while ($file = readdir($dh)) {
 | 
        
           |  |  | 33 |         if (preg_match('/^(.+)\.php$/', $file, $m)) {
 | 
        
           |  |  | 34 |             unset($phorum_check);
 | 
        
           |  |  | 35 |             include("$sanity_checks_dir/$file");
 | 
        
           |  |  | 36 |             $func = "phorum_check_$m[1]";
 | 
        
           |  |  | 37 |             if (! isset($phorum_check) || ! function_exists($func)) {
 | 
        
           |  |  | 38 |                 die("$sanity_checks_dir/$file is no valid check file! " .
 | 
        
           |  |  | 39 |                     "Either \$phorum_check is not set or the " .
 | 
        
           |  |  | 40 |                     "function " . htmlspecialchars($func) . " does not exist");
 | 
        
           |  |  | 41 |                 continue;
 | 
        
           |  |  | 42 |             }
 | 
        
           |  |  | 43 |   | 
        
           |  |  | 44 |             $sanity_checks[] = array (
 | 
        
           |  |  | 45 |                 'function'    => $func,
 | 
        
           |  |  | 46 |                 'description' => $phorum_check,
 | 
        
           |  |  | 47 |             );
 | 
        
           |  |  | 48 |         }
 | 
        
           |  |  | 49 |     }
 | 
        
           |  |  | 50 |   | 
        
           |  |  | 51 |     // Give module writers a possiblity to write custom sanity checks.
 | 
        
           |  |  | 52 |     $sanity_checks = phorum_hook("sanity_checks", $sanity_checks);
 | 
        
           |  |  | 53 |   | 
        
           |  |  | 54 |     // ========================================================================
 | 
        
           |  |  | 55 |     // Build the sanity checking page and run all checks.
 | 
        
           |  |  | 56 |     // ========================================================================
 | 
        
           |  |  | 57 |   | 
        
           |  |  | 58 |     // Mapping of status to display representation.
 | 
        
           |  |  | 59 |     $status2display = array(
 | 
        
           |  |  | 60 |     //  STATUS                       BACKGROUND    FONT     TEXT
 | 
        
           |  |  | 61 |         PHORUM_SANITY_OK    => array('green',      'white', 'ALL IS OK'),
 | 
        
           |  |  | 62 |         PHORUM_SANITY_WARN  => array('darkorange', 'white', 'WARNING'),
 | 
        
           |  |  | 63 |         PHORUM_SANITY_CRIT  => array('red',        'white', 'ERROR'),
 | 
        
           |  |  | 64 |     );
 | 
        
           |  |  | 65 |   | 
        
           |  |  | 66 |     $frm = new PhorumInputForm ("", "post", "Restart sanity checks");
 | 
        
           |  |  | 67 |     $frm->hidden("module", "sanity_checks");
 | 
        
           |  |  | 68 |     $frm->addbreak("Phorum System Sanity Checks");
 | 
        
           |  |  | 69 |     $frm->addmessage(
 | 
        
           |  |  | 70 |         "Below you will find the results for a number of sanity checks
 | 
        
           |  |  | 71 |          that have been performed on your system. If you see any
 | 
        
           |  |  | 72 |          warnings or errors, then read the comments for them and
 | 
        
           |  |  | 73 |          try to resolve the issues."
 | 
        
           |  |  | 74 |     );
 | 
        
           |  |  | 75 |   | 
        
           |  |  | 76 |     // Make using $php_errormsg possible for the checks.
 | 
        
           |  |  | 77 |     ini_set('track_errors', 1);
 | 
        
           |  |  | 78 |   | 
        
           |  |  | 79 |     // In the case checks take a little while, we want the user
 | 
        
           |  |  | 80 |     // to have visible feedback.
 | 
        
           |  |  | 81 |     ob_flush();
 | 
        
           |  |  | 82 |   | 
        
           |  |  | 83 |     // Run the sanity checks.
 | 
        
           |  |  | 84 |     foreach ($sanity_checks as $check)
 | 
        
           |  |  | 85 |     {
 | 
        
           |  |  | 86 |         // Call the sanity check function. This function is expected
 | 
        
           |  |  | 87 |         // to return an array containing the following elements:
 | 
        
           |  |  | 88 |         //
 | 
        
           |  |  | 89 |         // [1] A status, which can be one of
 | 
        
           |  |  | 90 |         //     PHORUM_SANITY_OK     No problem found
 | 
        
           |  |  | 91 |         //     PHORUM_SANITY_WARN   Problem found, but no fatal one
 | 
        
           |  |  | 92 |         //     PHORUM_SANITY_CRIT   Critical problem found
 | 
        
           |  |  | 93 |         //
 | 
        
           |  |  | 94 |         // [2] A description of the problem that was found or NULL.
 | 
        
           |  |  | 95 |         //
 | 
        
           |  |  | 96 |         // [3] A solution for the problem or NULL.
 | 
        
           |  |  | 97 |         //
 | 
        
           |  |  | 98 |         list($status, $error, $solution) = call_user_func($check["function"]);
 | 
        
           |  |  | 99 |         if (isset($error)) $error = str_replace("\n", " ", $error);
 | 
        
           |  |  | 100 |         if (isset($solution)) $solution = str_replace("\n", " ", $solution);
 | 
        
           |  |  | 101 |         $display = $status2display[$status];
 | 
        
           |  |  | 102 |         $block = "<div style=\"color:{$display[1]};background-color:{$display[0]};text-align:center;border:1px solid black;\">{$display[2]}</div>";
 | 
        
           |  |  | 103 |         $row = $frm->addrow($check['description'], $block);
 | 
        
           |  |  | 104 |         if (! empty($error)) {
 | 
        
           |  |  | 105 |             if (! empty($solution))
 | 
        
           |  |  | 106 |                 $error .= "<br/><br/>" .
 | 
        
           |  |  | 107 |                           "<strong>Possible solution:</strong>" .
 | 
        
           |  |  | 108 |                           "<br/><br/>" .
 | 
        
           |  |  | 109 |                           $solution;
 | 
        
           |  |  | 110 |             $frm->addhelp($row,"Sanity check failed",$error);
 | 
        
           |  |  | 111 |         }
 | 
        
           |  |  | 112 |     }
 | 
        
           |  |  | 113 |   | 
        
           |  |  | 114 |     $frm->show();
 | 
        
           |  |  | 115 |   | 
        
           |  |  | 116 | ?>
 |