root/trunk/wifidog-auth/wifidog/classes/DependenciesList.php @ 1287

Revision 1287, 9.3 KB (checked in by benoitg, 7 years ago)
  • Dependencies installation: Improve layout, add embryo of unified install sytem (currently works for tarballs). Improve error output.
  • Add dependencies for future OpenId support
  • AbstractDb?: Make sure to throw an exception, avoiding a blank page when trying to access the index page on a auth server that hasn't been setup. Patch by Mathieu Bruno.
  • Property svn:executable set to *
Line 
1<?php
2
3/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
4
5// +-------------------------------------------------------------------+
6// | WiFiDog Authentication Server                                     |
7// | =============================                                     |
8// |                                                                   |
9// | The WiFiDog Authentication Server is part of the WiFiDog captive  |
10// | portal suite.                                                     |
11// +-------------------------------------------------------------------+
12// | PHP version 5 required.                                           |
13// +-------------------------------------------------------------------+
14// | Homepage:     http://www.wifidog.org/                             |
15// | Source Forge: http://sourceforge.net/projects/wifidog/            |
16// +-------------------------------------------------------------------+
17// | This program is free software; you can redistribute it and/or     |
18// | modify it under the terms of the GNU General Public License as    |
19// | published by the Free Software Foundation; either version 2 of    |
20// | the License, or (at your option) any later version.               |
21// |                                                                   |
22// | This program is distributed in the hope that it will be useful,   |
23// | but WITHOUT ANY WARRANTY; without even the implied warranty of    |
24// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     |
25// | GNU General Public License for more details.                      |
26// |                                                                   |
27// | You should have received a copy of the GNU General Public License |
28// | along with this program; if not, contact:                         |
29// |                                                                   |
30// | Free Software Foundation           Voice:  +1-617-542-5942        |
31// | 59 Temple Place - Suite 330        Fax:    +1-617-542-2652        |
32// | Boston, MA  02111-1307,  USA       gnu@gnu.org                    |
33// |                                                                   |
34// +-------------------------------------------------------------------+
35
36/**
37 * @package    WiFiDogAuthServer
38 * @copyright  2006-2007 Benoit Grégoire, Technologies Coeus inc.
39 * @version    Subversion $Id: $
40 * @link       http://www.wifidog.org/
41 */
42
43 // Detect Gettext support
44 if (!function_exists('gettext')) {
45     /**
46      * Load Locale class if Gettext support is not available
47      */
48      require_once ('classes/Locale.php');
49 }
50
51 /**
52  * This class checks the existence of components required by WiFiDog.
53  * Note that it implicitely depends on the defines in include/path_defines_base.php
54  *
55  * @package    WiFiDogAuthServer
56  * @author     Philippe April
57  * @author     Max Horváth <max.horvath@freenet.de>
58  * @author     Benoit Grégoire <bock@step.polymtl.ca>
59  * @copyright  2005-2007 Philippe April
60  * @copyright  2005-2007 Max Horváth, Horvath Web Consulting
61  * @copyright  2006-2007 Benoit Grégoire, Technologies Coeus inc.
62  */
63
64  /**
65   * Load required classes
66   */
67   /*WARNING:  You must NOT require anything, or extend anything except Dependency.php.  DependenciesList is used from the install script.*/
68   require_once ('classes/Dependency.php');
69   require_once ('classes/GenericDataObject.php');
70
71   class DependenciesList extends GenericDataObject
72   {
73       public static function &getObject($id)
74       {
75           $retval = new self();
76           return $retval;
77       }
78       /** Retreives the admin interface of this object.
79        * @return The HTML fragment for this interface, or null.
80        * If it returns null, this object does not support new object creation */
81       public function getAdminUI($userData = null) {
82           return self::getAdminUIStatic($userData);
83       }
84       /** Retreives the admin interface of this object.
85        * @return The HTML fragment for this interface, or null.
86        * If it returns null, this object does not support new object creation */
87       static public function getAdminUIStatic($userData = null) {
88
89           $html = '';
90           /* PHP version check */
91           $okMsg = '<td ALIGN="CENTER" STYLE="background:lime;">OK</td>';
92           $errorMsg = '<td ALIGN="CENTER" STYLE="background:red;">ERROR</td>';
93           $warningMsg = '<td ALIGN="CENTER" STYLE="background:yellow;">Warning</td>';
94
95           $html .= "<table BORDER=\"1\">";
96
97           /* PHP version check */
98           $requiredPHPVersion = '5.0';
99           $phpVersion = phpversion();
100           $html .= "<tr><td>PHP</td>";
101           if (version_compare($phpVersion, $requiredPHPVersion, ">=")) {
102               $html .= "$okMsg<td>$phpVersion</td>"; // Version 5.0.0 or later
103           }
104           else {
105               $html .= "$errorMsg<td>".sprintf(_("Version %s needed"), $requiredPHPVersion)."</td>"; // Version < 5.0.0
106               $userData['error'] = 1;
107           }
108           $html .= "</tr>";
109
110           if(function_exists('pg_version')){
111               //Be carefull, postgres version check will also fail if there wasn't a db connexion yet.
112               $pgVersionArray = @pg_version();
113               $pgVersionArray?$pgVersion=$pgVersionArray['server']:$pgVersion=null;
114               if($pgVersion){
115                   $postgresRecommendedVersion = '8.0';
116                   $postgresRequiredVersion = '7.4';
117                   $html .= "<tr><td>PostgreSQL</td>";
118                   if (version_compare($pgVersion, $postgresRecommendedVersion, ">=")) {
119                       $html .= "$okMsg<td>$pgVersion</td>"; // Version 5.0.0 or later
120                   }
121                   else if (version_compare($pgVersion, $postgresRequiredVersion, ">=")) {
122                       $html .= "$warningMsg<td>".sprintf(_("%s may work, but version %s is recommended"), $pgVersion, $postgresRecommendedVersion)."</td>"; // Version < 5.0.0
123                   }
124                   else {
125                       $html .= "$errorMsg<td>".sprintf(_("%s is too old, version %s needed"),$pgVersion, $postgresRecommendedVersion)."</td>"; // Version < 5.0.0
126                       $userData['error'] = 1;
127                   }
128                   $html .= "</tr>";
129               }
130           }
131           $html .= "</table>";
132
133           $components = Dependency::getDependency();
134           $html .= "<table BORDER=\"1\">\n";
135           $html .= "<tr><th>"._("Component").'<br/>'._("Click for the component's website")."</th>\n";
136           $html .= "<th>"._("Type")."</th>\n";
137           $html .= "<th>"._("Status")."</th>\n";
138           $html .= "<th>"._("Information")."</th>\n";
139           $html .= "</tr>\n";
140
141           foreach ($components as $dependency) {
142               $html .= "<tr>\n";
143               $websiteUrl = $dependency->getWebsiteURL();
144               $component_key = $dependency->getId();
145               $description = $dependency->getDescription();
146               $mandatory = $dependency->isMandatory();
147               $type = $dependency->getType();
148               if($websiteUrl){
149                   $html .= "<td><A HREF=\"$websiteUrl\">$component_key</A></td>\n";
150               }
151               else{
152                   $html .= "<td>$component_key</td>\n";
153               }
154               $html .= "<td>$type</td>\n";
155               $instalMessage = null;
156               $dependency->processInstallUI($instalMessage);
157               
158               $message = null;
159               $available = Dependency::check($component_key, $message);
160               if ($available) {
161                   $html .=  "$okMsg\n";
162               }
163               else {
164                   if ($mandatory) {
165                       $html .=  "$errorMsg\n";
166                       $error = 1;
167                   }
168                   else {
169                       $html .=  "$warningMsg\n";
170                   }
171               }
172               $html .= "<td>\n";
173               $html .= "<em>"._("Description").":</em> $description<br/>\n";
174               
175               if($instalMessage) {
176                   $html .= "<em>"._("Install message").":</em> $instalMessage<br/>\n";
177               }
178               if($message){
179                   $html .= "<em>"._("Detection message").":</em> $message<br/>\n";
180               }
181               if (!$available) {
182                   $html .= "<em>"._("To install").":</em> ".$dependency->getInstallUI()."<br/>\n";
183               }
184               $html .= "</td></tr>\n";
185           }
186           $html .=  "</table>\n";
187
188           return $html;
189       }
190
191       /** Process admin interface of this object.
192        */
193        public function processAdminUI() {
194            return null;
195        }
196
197        /** Menu hook function */
198        static public function hookMenu() {
199            $items = array();
200            $server = Server::getServer();
201            if(Security::hasPermission(Permission::P('SERVER_PERM_EDIT_SERVER_CONFIG'), $server))
202            {
203                $items[] = array('path' => 'server/dependencies',
204                'title' => _("Dependencies"),
205                'url' => BASE_URL_PATH."admin/generic_object_admin.php?object_class=DependenciesList&action=edit&object_id=DUMMY"
206                );
207            }
208            return $items;
209        }
210   }//End class
211
212   /*
213    * Local variables:
214    * tab-width: 4
215    * c-basic-offset: 4
216    * c-hanging-comment-ender-p: nil
217    * End:
218    */
Note: See TracBrowser for help on using the browser.