Rev Author Line No. Line
228 kaklik 1 <?php
2  
3 /**
4 * Contains functions used during the install process.
5 *
6 * @author Tamlyn Rhodes <tam at zenology dot co dot uk>
7 * @license http://opensource.org/licenses/gpl-license.php GNU General Public License
8 * @copyright (c)2003-2005 Tamlyn Rhodes
9 * @version $Id: install.inc.php,v 1.4 2006/01/22 03:25:37 tamlyn Exp $
10 */
11  
12 /**
13 * Test server configuration.
14 * @return bool true if no errors occurred; false otherwise
15 */
16 function testServer()
17 {
18 setupHeader("Testing PHP version");
19 setupMessage("PHP version is ".phpversion());
20 $bits = explode(".",phpversion());
21 if(strcmp($bits[0],"4")<0 || strcmp($bits[0],"4")==0 && strcmp($bits[1],"1")<0)
22 return setupError("singapore requires PHP 4.1.0 or higher ");
23  
24 $success = true;
25  
26 setupHeader("Testing PHP configuration");
27 //setupMessage("If any of these tests fail, you may be able to change the configuration ".
28 // "directive (specified in brackets) either in php.ini or by adding ".
29 // "<code>ini_set(\"<b>directive_name</b>, 1)</code> to <code>includes/header.php</code>");
30  
31 if(!ini_get("safe_mode")) setupMessage("Safe mode disabled");
32 else $success &= setupError("PHP is running in 'safe mode' (<code>safe_mode</code>). Singapore may still function correctly but safe mode operation is not supported");
33  
34 $session_save_path = ini_get("session.save_path");
35 if(!empty($session_save_path) && is_writable($session_save_path) || ini_get("session.save_handler")!="files") setupMessage("Session save path seems to be correctly specified");
36 else $success &= setupError("Session save path does not exist or is not writable (<code>session.save_path</code>). Singapore will function but you may not be able to use the admin interface");
37  
38 if(ini_get("session.use_trans_sid")) setupMessage("Transparent session id support enabled");
39 else setupMessage("Transparent session id support disabled (<code>use_trans_sid</code>). Singapore will function but will <b>require</b> cookies for the admin interface to function");
40  
41 if(ini_get("file_uploads")) setupMessage("File uploading enabled");
42 else $success &= setupError("File uploading disabled (<code>file_uploads</code>). Singapore will function but you will not be able to upload images via the admin interface");
43  
44 $upload_tmp_dir = ini_get("upload_tmp_dir");
45 if(empty($upload_tmp_dir) || is_writable($upload_tmp_dir)) setupMessage("Upload temp directory seems to be correctly specified");
46 else $success &= setupError("Upload directory directory does not exist or is not writable (<code>upload_tmp_dir</code>). Singapore will function but you may not be able to upload images via the admin interface");
47  
48 //setupMessage("Maximum upload size is ".floor(ini_get("upload_max_filesize")/1024)."KB. You will not be able to upload files larger than this via the admin interface");
49  
50 if(ini_get("allow_url_fopen")) setupMessage("Remote file handling enabled");
51 else $success &= setupError("Remote file handling disabled (<code>allow_url_fopen</code>). Singapore will function but you will not be able to generate thumbnails for remotely hosted files");
52  
53 setupHeader("Testing for config file");
54  
55 if(file_exists($GLOBALS['basePath']."singapore.ini")) setupMessage("Config file found");
56 else $success &= setupError("Config file not found - singapore.ini must be located in the root singapore directory");
57  
58 setupHeader("Testing for GD");
59 //get phpinfo data
60 ob_start();
61 phpinfo(8);
62 $phpinfo = ob_get_contents();
63 ob_end_clean();
64  
65 //find gd version
66 $phpinfo = strip_tags($phpinfo);
67 $phpinfo = stristr($phpinfo,"gd version");
68 $phpinfo = stristr($phpinfo,"version");
69  
70 if(!$phpinfo) $success &= setupError("GD not found. You may be able to use ImageMagick instead");
71 else {
72 //extract text version and number version
73 $gd_version_text = substr($phpinfo,0,strpos($phpinfo,"\n"));
74 $gd_version_number = substr($gd_version_text,0,strpos($gd_version_text,"."));
75 $gd_version_number = substr($gd_version_number, strlen($gd_version_number)-1);
76 setupMessage("Found GD: $gd_version_text");
77 if($gd_version_number=="1") setupMessage("Please change the <code>thumbnail_software</code> option in singapore.ini to \"gd1\". Note: GD1 produces very poor quality thumbnails so please use GD2 or ImageMagick if available");
78 }
79  
80  
81 setupHeader("Testing for ImageMagick");
82  
83 $foundIM = exec("mogrify");
84 $whereIM = exec("whereis mogrify");
85 if($foundIM) {
86 if($whereIM) setupMessage("Found ImageMagick at $whereIM");
87 else setupMessage("Found ImageMagick");
88 setupMessage("To take advantage of ImageMagick change the <code>thumbnail_software</code> option in singapore.ini to \"im\"");
89 } else setupMessage("ImageMagick not found but that doesn't mean it's not there. If it really is not available you may be able to install it yourself (even without shell access to the server)");
90  
91 return $success;
92 }
93  
94  
95 /**
96 * Creates cache and logs directories required to run singapore and ensures
97 * all required directories are writeable.
98 * @return bool true if no errors occurred; false otherwise
99 */
100 function createDirectories($config)
101 {
102 $success = true;
103 setupHeader("Creating directories");
104  
105 if(is_writable($config->base_path.$config->pathto_data_dir)) {
106 setupMessage("Data directory is writable");
107 if(file_exists($config->base_path.$config->pathto_cache))
108 if(is_writable($config->base_path.$config->pathto_cache))
109 setupMessage("Cache directory already exists at ".$config->base_path.$config->pathto_cache." and is writable");
110 else
111 $success = setupError("Cache directory already exists at ".$config->base_path.$config->pathto_cache." but is not writable. Please CHMOD to 777");
112 else
113 if(mkdir($config->base_path.$config->pathto_cache, $config->directory_mode)) {
114 @chmod($config->base_path.$config->pathto_cache, $config->directory_mode);
115 setupMessage("Created cache directory at ".$config->base_path.$config->pathto_cache);
116 } else
117 $success = setupError("Could not create cache directory at ".$config->base_path.$config->pathto_cache);
118 if($config->track_views)
119 if(file_exists($config->base_path.$config->pathto_logs))
120 if(is_writable($config->base_path.$config->pathto_logs))
121 setupMessage("Logs directory already exists at ".$config->base_path.$config->pathto_logs." and is writable");
122 else
123 $success = setupError("Logs directory already exists at ".$config->base_path.$config->pathto_logs." but is not writable. Please CHMOD to 777");
124 else
125 if(mkdir($config->base_path.$config->pathto_logs, $config->directory_mode)) {
126 @chmod($config->base_path.$config->pathto_logs, $config->directory_mode);
127 setupMessage("Created logs directory at ".$config->base_path.$config->pathto_logs);
128 } else
129 $success = setupError("Could not create logs directory at ".$config->base_path.$config->pathto_logs);
130 else
131 setupMessage("View logging disabled. Logs directory not created");
132 }
133 else
134 $success = setupError("Data directory (".$config->base_path.$config->pathto_data_dir.") is not writable. Please CHMOD to 777");
135  
136 return $success;
137  
138 }
139  
140 /**
141 * Creates the tables and inserts the default users.
142 * @param sgIO_sql pointer to a singapore SQL backend object
143 */
144 function sqlCreateTables(&$io) {
145 $success = true;
146 setupHeader("Creating tables");
147 if(@$io->query("SELECT * FROM ".$io->config->sql_prefix."galleries"))
148 setupMessage("'".$io->config->sql_prefix."galleries' table already exists - skipped");
149 elseif($io->query("CREATE TABLE ".$io->config->sql_prefix."galleries (".
150 "id varchar(250) NOT NULL, ".
151 "lang varchar(16) NOT NULL DEFAULT '', ".
152 "filename varchar(200), ".
153 "owner varchar(32), ".
154 "groups varchar(64), ".
155 "permissions int UNSIGNED, ".
156 "categories varchar(255), ".
157 "name varchar(255), ".
158 "artist varchar(255), ".
159 "email varchar(255), ".
160 "copyright varchar(255), ".
161 "description text, ".
162 "summary text, ".
163 "date varchar(255),".
164 "hits smallint UNSIGNED,".
165 "lasthit int UNSIGNED,".
166 "PRIMARY KEY (id, lang)".
167 ")")) setupMessage("'".$io->config->sql_prefix."galleries' table created");
168 else
169 $success = setupError("Unable to create '".$io->config->sql_prefix."galleries' table:".$io->error());
170  
171 if(@$io->query("SELECT * FROM ".$io->config->sql_prefix."images"))
172 setupMessage("'".$io->config->sql_prefix."images' table already exists - skipped");
173 elseif($io->query("CREATE TABLE ".$io->config->sql_prefix."images (".
174 "galleryid varchar(250) NOT NULL, ".
175 "filename varchar(200) NOT NULL, ".
176 "lang varchar(16) NOT NULL DEFAULT '', ".
177 "thumbnail varchar(255), ".
178 "owner varchar(32), ".
179 "groups varchar(64), ".
180 "permissions int, ".
181 "categories varchar(64), ".
182 "name varchar(255), ".
183 "artist varchar(255), ".
184 "email varchar(255), ".
185 "copyright varchar(255), ".
186 "description text, ".
187 "width smallint UNSIGNED, ".
188 "height smallint UNSIGNED, ".
189 "type tinyint UNSIGNED, ".
190 "location varchar(255), ".
191 "date varchar(255), ".
192 "camera varchar(255), ".
193 "lens varchar(255), ".
194 "film varchar(255), ".
195 "darkroom text, ".
196 "digital text, ".
197 "hits smallint UNSIGNED,".
198 "lasthit int UNSIGNED,".
199 "PRIMARY KEY (galleryid, filename, lang)".
200 ")")) setupMessage("'".$io->config->sql_prefix."images' table created");
201 else
202 $success = setupError("Unable to create '".$io->config->sql_prefix."images' table:".$io->error());
203  
204 if(@$io->query("SELECT * FROM ".$io->config->sql_prefix."users"))
205 setupMessage("'".$io->config->sql_prefix."users' table already exists - skipped");
206 elseif($io->query("CREATE TABLE ".$io->config->sql_prefix."users (".
207 "username varchar(32) NOT NULL, ".
208 "userpass char(32) NOT NULL, ".
209 "permissions int UNSIGNED, ".
210 "groups varchar(64), ".
211 "email varchar(255), ".
212 "fullname varchar(255), ".
213 "description varchar(255), ".
214 "stats varchar(255), ".
215 "PRIMARY KEY (username)".
216 ")")) {
217 setupMessage("'".$io->config->sql_prefix."users' table created");
218 if($io->query("INSERT INTO ".$io->config->sql_prefix."users VALUES".
219 '("admin", "5f4dcc3b5aa765d61d8327deb882cf99", 1024, "", "", "Administrator", "Default administrator account", "")') &&
220 $io->query("INSERT INTO ".$io->config->sql_prefix."users VALUES".
221 '("guest", "5f4dcc3b5aa765d61d8327deb882cf99", 0, "", "", "Guest", "Restricted use account for guests who do not have a user account", "")'))
222 setupMessage("Inserted default users into '".$io->config->sql_prefix."users' table");
223 else
224 $success = setupError("Unable to insert default users into '".$io->config->sql_prefix."users' table:".$io->error());
225 } else
226 $success = setupError("Unable to create '".$io->config->sql_prefix."users' table:".$io->error());
227  
228 return $success;
229 }
230  
231  
232 //output functions
233 function setupHeader($var)
234 {
235 echo "\n</p>\n\n<h2>{$var}</h2>\n\n<p>\n";
236 }
237  
238 /**
239 * Print an information message. Always returns true.
240 * @return true
241 */
242 function setupMessage($var)
243 {
244 echo "{$var}.<br />\n";
245 return true;
246 }
247  
248 /**
249 * Print an error message. Always returns false.
250 * @return false
251 */
252 function setupError($var)
253 {
254 echo "<span class=\"error\">{$var}</span>.<br />\n";
255 return false;
256 }
257  
258 ?>