| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Laconica - a distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-06-20 16:00:04 -07:00
										 |  |  |  * Copyright (C) 2009, Control Yourself, Inc. | 
					
						
							| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This program is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU Affero General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU Affero General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU Affero General Public License | 
					
						
							|  |  |  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | define('INSTALLDIR', dirname(__FILE__)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | function main() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |     if (!checkPrereqs()) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  |     if ($_SERVER['REQUEST_METHOD'] == 'POST') { | 
					
						
							|  |  |  |         handlePost(); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | function checkPrereqs() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 	$pass = true; | 
					
						
							| 
									
										
										
										
											2009-06-18 16:21:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |     if (file_exists(INSTALLDIR.'/config.php')) { | 
					
						
							|  |  |  |          ?><p class="error">Config file "config.php" already exists.</p>
 | 
					
						
							| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  |          <?php | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  |         $pass = false; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-17 17:54:37 -04:00
										 |  |  |     if (version_compare(PHP_VERSION, '5.2.3', '<')) { | 
					
						
							|  |  |  |             ?><p class="error">Require PHP version 5.2.3 or greater.</p><?php
 | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 		    $pass = false; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-24 04:04:28 +12:00
										 |  |  |     $reqs = array('gd', 'curl', | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |                   'xmlwriter', 'mbstring', | 
					
						
							|  |  |  |                   'gettext'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     foreach ($reqs as $req) { | 
					
						
							|  |  |  |         if (!checkExtension($req)) { | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |             ?><p class="error">Cannot load required extension: <code><?php echo $req; ?></code></p><?php
 | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 		    $pass = false; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-06-24 04:04:28 +12:00
										 |  |  |     if (!checkExtension('pgsql') && !checkExtension('mysql')) { | 
					
						
							| 
									
										
										
										
											2009-06-24 04:07:15 +12:00
										 |  |  |       ?><p class="error">Cannot find mysql or pgsql extension. You need one or the other: <code><?php echo $req; ?></code></p><?php
 | 
					
						
							| 
									
										
										
										
											2009-06-24 04:04:28 +12:00
										 |  |  |                     $pass = false; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (!is_writable(INSTALLDIR)) { | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |          ?><p class="error">Cannot write config file to: <code><?php echo INSTALLDIR; ?></code></p>
 | 
					
						
							|  |  |  | 	       <p>On your server, try this command: <code>chmod a+w <?php echo INSTALLDIR; ?></code>
 | 
					
						
							| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  |          <?php | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 	     $pass = false; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-07-21 13:59:34 -04:00
										 |  |  | 	// Check the subdirs used for file uploads
 | 
					
						
							|  |  |  | 	$fileSubdirs = array('avatar', 'background', 'file'); | 
					
						
							|  |  |  | 	foreach ($fileSubdirs as $fileSubdir) { | 
					
						
							|  |  |  | 		$fileFullPath = INSTALLDIR."/$fileSubdir/"; | 
					
						
							|  |  |  | 		if (!is_writable($fileFullPath)) { | 
					
						
							|  |  |  |     	     ?><p class="error">Cannot write <?php echo $fileSubdir; ?> directory: <code><?php echo $fileFullPath; ?></code></p>
 | 
					
						
							|  |  |  | 		       <p>On your server, try this command: <code>chmod a+w <?php echo $fileFullPath; ?></code></p>
 | 
					
						
							|  |  |  |     	     <? | 
					
						
							|  |  |  | 		     $pass = false; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2009-06-26 22:42:52 +12:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 	return $pass; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function checkExtension($name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (!extension_loaded($name)) { | 
					
						
							|  |  |  |         if (!dl($name.'.so')) { | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return true; | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | function showForm() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-05-17 00:05:07 -04:00
										 |  |  |     echo<<<E_O_T | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |         </ul> | 
					
						
							|  |  |  |     </dd> | 
					
						
							|  |  |  | </dl> | 
					
						
							|  |  |  | <dl id="page_notice" class="system_notice"> | 
					
						
							|  |  |  |     <dt>Page notice</dt> | 
					
						
							|  |  |  |     <dd> | 
					
						
							|  |  |  |         <div class="instructions"> | 
					
						
							|  |  |  |             <p>Enter your database connection information below to initialize the database.</p> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |     </dd> | 
					
						
							|  |  |  | </dl> | 
					
						
							|  |  |  | <form method="post" action="install.php" class="form_settings" id="form_install"> | 
					
						
							|  |  |  |     <fieldset> | 
					
						
							|  |  |  |         <legend>Connection settings</legend> | 
					
						
							|  |  |  |         <ul class="form_data"> | 
					
						
							|  |  |  |             <li> | 
					
						
							|  |  |  |                 <label for="sitename">Site name</label> | 
					
						
							|  |  |  |                 <input type="text" id="sitename" name="sitename" /> | 
					
						
							|  |  |  |                 <p class="form_guide">The name of your site</p> | 
					
						
							|  |  |  |             </li> | 
					
						
							|  |  |  |             <li> | 
					
						
							| 
									
										
										
										
											2009-05-17 00:05:07 -04:00
										 |  |  |                 <label for="fancy-enable">Fancy URLs</label> | 
					
						
							|  |  |  |                 <input type="radio" name="fancy" id="fancy-enable" value="enable" checked='checked' /> enable<br /> | 
					
						
							|  |  |  |                 <input type="radio" name="fancy" id="fancy-disable" value="" /> disable<br /> | 
					
						
							|  |  |  |                 <p class="form_guide" id='fancy-form_guide'>Enable fancy (pretty) URLs. Auto-detection failed, it depends on Javascript.</p> | 
					
						
							|  |  |  |             </li> | 
					
						
							| 
									
										
										
										
											2009-05-25 16:49:32 +00:00
										 |  |  |             <li> | 
					
						
							|  |  |  |                 <label for="host">Hostname</label> | 
					
						
							|  |  |  |                 <input type="text" id="host" name="host" /> | 
					
						
							|  |  |  |                 <p class="form_guide">Database hostname</p> | 
					
						
							|  |  |  |             </li> | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |             <li> | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |              | 
					
						
							| 
									
										
										
										
											2009-06-24 04:31:52 +12:00
										 |  |  |                 <label for="dbtype">Type</label> | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |                 <input type="radio" name="dbtype" id="fancy-mysql" value="mysql" checked='checked' /> MySQL<br /> | 
					
						
							|  |  |  |                 <input type="radio" name="dbtype" id="dbtype-pgsql" value="pgsql" /> PostgreSQL<br /> | 
					
						
							| 
									
										
										
										
											2009-06-24 04:31:52 +12:00
										 |  |  |                 <p class="form_guide">Database type</p> | 
					
						
							| 
									
										
										
										
											2009-05-25 16:49:32 +00:00
										 |  |  |             </li> | 
					
						
							| 
									
										
										
										
											2009-06-24 04:31:52 +12:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |             <li> | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |                 <label for="database">Name</label> | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |                 <input type="text" id="database" name="database" /> | 
					
						
							|  |  |  |                 <p class="form_guide">Database name</p> | 
					
						
							|  |  |  |             </li> | 
					
						
							|  |  |  |             <li> | 
					
						
							|  |  |  |                 <label for="username">Username</label> | 
					
						
							|  |  |  |                 <input type="text" id="username" name="username" /> | 
					
						
							|  |  |  |                 <p class="form_guide">Database username</p> | 
					
						
							|  |  |  |             </li> | 
					
						
							|  |  |  |             <li> | 
					
						
							|  |  |  |                 <label for="password">Password</label> | 
					
						
							|  |  |  |                 <input type="password" id="password" name="password" /> | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |                 <p class="form_guide">Database password (optional)</p> | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |             </li> | 
					
						
							|  |  |  |         </ul> | 
					
						
							|  |  |  |         <input type="submit" name="submit" class="submit" value="Submit" /> | 
					
						
							|  |  |  |     </fieldset> | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | </form> | 
					
						
							| 
									
										
										
										
											2009-05-17 00:05:07 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | E_O_T; | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | function updateStatus($status, $error=false) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | ?>
 | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |                 <li <?php echo ($error) ? 'class="error"': ''; ?>><?print $status;?></li>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <?php | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | function handlePost() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | ?>
 | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | <?php | 
					
						
							| 
									
										
										
										
											2009-05-17 00:05:07 -04:00
										 |  |  |     $host     = $_POST['host']; | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |     $dbtype   = $_POST['dbtype']; | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |     $database = $_POST['database']; | 
					
						
							|  |  |  |     $username = $_POST['username']; | 
					
						
							|  |  |  |     $password = $_POST['password']; | 
					
						
							|  |  |  |     $sitename = $_POST['sitename']; | 
					
						
							| 
									
										
										
										
											2009-05-17 00:05:07 -04:00
										 |  |  |     $fancy    = !empty($_POST['fancy']); | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  | ?>
 | 
					
						
							|  |  |  |     <dl class="system_notice"> | 
					
						
							|  |  |  |         <dt>Page notice</dt> | 
					
						
							|  |  |  |         <dd> | 
					
						
							|  |  |  |             <ul> | 
					
						
							|  |  |  | <?php | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 	$fail = false; | 
					
						
							| 
									
										
										
										
											2009-06-18 16:21:03 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     if (empty($host)) { | 
					
						
							|  |  |  |         updateStatus("No hostname specified.", true); | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 		$fail = true; | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($database)) { | 
					
						
							|  |  |  |         updateStatus("No database specified.", true); | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 		$fail = true; | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($username)) { | 
					
						
							|  |  |  |         updateStatus("No username specified.", true); | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 		$fail = true; | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  | //     if (empty($password)) {
 | 
					
						
							|  |  |  | //         updateStatus("No password specified.", true);
 | 
					
						
							|  |  |  | // 		$fail = true;
 | 
					
						
							|  |  |  | //     }
 | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (empty($sitename)) { | 
					
						
							|  |  |  |         updateStatus("No sitename specified.", true); | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  | 		$fail = true; | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  |     if($fail){ | 
					
						
							| 
									
										
										
										
											2009-03-04 05:53:04 -08:00
										 |  |  |             showForm(); | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |     switch($dbtype) { | 
					
						
							|  |  |  |       case 'mysql':    mysql_db_installer($host, $database, $username, $password, $sitename); | 
					
						
							|  |  |  |       break; | 
					
						
							|  |  |  |       case 'pgsql':    pgsql_db_installer($host, $database, $username, $password, $sitename); | 
					
						
							|  |  |  |       break; | 
					
						
							|  |  |  |       default: | 
					
						
							| 
									
										
										
										
											2009-03-04 05:47:37 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-05-17 00:05:07 -04:00
										 |  |  |     if ($path) $path .= '/'; | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  |     updateStatus("You can visit your <a href='/$path'>new Laconica site</a>."); | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | ?>
 | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | <?php | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  | function pgsql_db_installer($host, $database, $username, $password, $sitename) { | 
					
						
							|  |  |  |   $connstring = "dbname=$database host=$host user=$username"; | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  |   //No password would mean trust authentication used.
 | 
					
						
							|  |  |  |   if (!empty($password)) { | 
					
						
							|  |  |  |     $connstring .= " password=$password"; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   updateStatus("Starting installation..."); | 
					
						
							|  |  |  |   updateStatus("Checking database..."); | 
					
						
							|  |  |  |   $conn = pg_connect($connstring); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-23 18:01:03 +12:00
										 |  |  |   updateStatus("Running database script..."); | 
					
						
							|  |  |  |   //wrap in transaction;
 | 
					
						
							|  |  |  |   pg_query($conn, 'BEGIN'); | 
					
						
							|  |  |  |   $res = runDbScript(INSTALLDIR.'/db/laconica_pg.sql', $conn, 'pgsql'); | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   if ($res === false) { | 
					
						
							|  |  |  |       updateStatus("Can't run database script.", true); | 
					
						
							|  |  |  |       showForm(); | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   foreach (array('sms_carrier' => 'SMS carrier', | 
					
						
							|  |  |  |                 'notice_source' => 'notice source', | 
					
						
							|  |  |  |                 'foreign_services' => 'foreign service') | 
					
						
							|  |  |  |           as $scr => $name) { | 
					
						
							|  |  |  |       updateStatus(sprintf("Adding %s data to database...", $name)); | 
					
						
							|  |  |  |       $res = runDbScript(INSTALLDIR.'/db/'.$scr.'.sql', $conn, 'pgsql'); | 
					
						
							|  |  |  |       if ($res === false) { | 
					
						
							|  |  |  |           updateStatus(sprintf("Can't run %d script.", $name), true); | 
					
						
							|  |  |  |           showForm(); | 
					
						
							|  |  |  |           return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   pg_query($conn, 'COMMIT'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   updateStatus("Writing config file..."); | 
					
						
							|  |  |  |   if (empty($password)) { | 
					
						
							|  |  |  |     $sqlUrl = "pgsql://$username@$host/$database"; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   else { | 
					
						
							|  |  |  |     $sqlUrl = "pgsql://$username:$password@$host/$database"; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2009-06-26 21:53:37 +12:00
										 |  |  |   $res = writeConf($sitename, $sqlUrl, $fancy, 'pgsql'); | 
					
						
							| 
									
										
										
										
											2009-06-23 18:01:03 +12:00
										 |  |  |   if (!$res) { | 
					
						
							|  |  |  |       updateStatus("Can't write config file.", true); | 
					
						
							|  |  |  |       showForm(); | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   updateStatus("Done!"); | 
					
						
							|  |  |  |        | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function mysql_db_installer($host, $database, $username, $password, $sitename) { | 
					
						
							|  |  |  |   updateStatus("Starting installation..."); | 
					
						
							|  |  |  |   updateStatus("Checking database..."); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   $conn = mysql_connect($host, $username, $password); | 
					
						
							|  |  |  |   if (!$conn) { | 
					
						
							|  |  |  |       updateStatus("Can't connect to server '$host' as '$username'.", true); | 
					
						
							|  |  |  |       showForm(); | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   updateStatus("Changing to database..."); | 
					
						
							|  |  |  |   $res = mysql_select_db($database, $conn); | 
					
						
							|  |  |  |   if (!$res) { | 
					
						
							|  |  |  |       updateStatus("Can't change to database.", true); | 
					
						
							|  |  |  |       showForm(); | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   updateStatus("Running database script..."); | 
					
						
							|  |  |  |   $res = runDbScript(INSTALLDIR.'/db/laconica.sql', $conn); | 
					
						
							|  |  |  |   if ($res === false) { | 
					
						
							|  |  |  |       updateStatus("Can't run database script.", true); | 
					
						
							|  |  |  |       showForm(); | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   foreach (array('sms_carrier' => 'SMS carrier', | 
					
						
							|  |  |  |                 'notice_source' => 'notice source', | 
					
						
							|  |  |  |                 'foreign_services' => 'foreign service') | 
					
						
							|  |  |  |           as $scr => $name) { | 
					
						
							|  |  |  |       updateStatus(sprintf("Adding %s data to database...", $name)); | 
					
						
							|  |  |  |       $res = runDbScript(INSTALLDIR.'/db/'.$scr.'.sql', $conn); | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |       if ($res === false) { | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  |           updateStatus(sprintf("Can't run %d script.", $name), true); | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |           showForm(); | 
					
						
							|  |  |  |           return; | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2009-06-23 17:37:01 +12:00
										 |  |  |        | 
					
						
							|  |  |  |       updateStatus("Writing config file..."); | 
					
						
							|  |  |  |       $sqlUrl = "mysqli://$username:$password@$host/$database"; | 
					
						
							|  |  |  |       $res = writeConf($sitename, $sqlUrl, $fancy); | 
					
						
							|  |  |  |       if (!$res) { | 
					
						
							|  |  |  |           updateStatus("Can't write config file.", true); | 
					
						
							|  |  |  |           showForm(); | 
					
						
							|  |  |  |           return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       updateStatus("Done!"); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-06-26 21:49:44 +12:00
										 |  |  | function writeConf($sitename, $sqlUrl, $fancy, $type='mysql') | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | { | 
					
						
							|  |  |  |     $res = file_put_contents(INSTALLDIR.'/config.php', | 
					
						
							| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  |                              "<?php\n". | 
					
						
							| 
									
										
										
										
											2009-05-20 16:39:08 -05:00
										 |  |  |                              "if (!defined('LACONICA')) { exit(1); }\n\n". | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |                              "\$config['site']['name'] = \"$sitename\";\n\n".
 | 
					
						
							| 
									
										
										
										
											2009-05-17 00:05:07 -04:00
										 |  |  |                              ($fancy ? "\$config['site']['fancy'] = true;\n\n":''). | 
					
						
							| 
									
										
										
										
											2009-05-20 15:14:04 -05:00
										 |  |  |                              "\$config['db']['database'] = \"$sqlUrl\";\n\n".
 | 
					
						
							| 
									
										
										
										
											2009-06-26 21:49:44 +12:00
										 |  |  |                              ($type == 'pgsql' ? "\$config['db']['quote_identifiers'] = true;\n\n" . | 
					
						
							| 
									
										
										
										
											2009-06-26 21:53:37 +12:00
										 |  |  |                              "\$config['db']['type'] = \"$type\";\n\n" : '').
 | 
					
						
							| 
									
										
										
										
											2009-05-20 15:14:04 -05:00
										 |  |  |                              "?>"); | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |     return $res; | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-23 18:01:03 +12:00
										 |  |  | function runDbScript($filename, $conn, $type='mysql') | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | { | 
					
						
							|  |  |  |     $sql = trim(file_get_contents($filename)); | 
					
						
							|  |  |  |     $stmts = explode(';', $sql); | 
					
						
							|  |  |  |     foreach ($stmts as $stmt) { | 
					
						
							|  |  |  |         $stmt = trim($stmt); | 
					
						
							|  |  |  |         if (!mb_strlen($stmt)) { | 
					
						
							|  |  |  |             continue; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-06-23 18:01:03 +12:00
										 |  |  |         if ($type == 'mysql') { | 
					
						
							|  |  |  |           $res = mysql_query($stmt, $conn); | 
					
						
							|  |  |  |         } elseif ($type=='pgsql') { | 
					
						
							|  |  |  |           $res = pg_query($conn, $stmt); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |         if ($res === false) { | 
					
						
							| 
									
										
										
										
											2009-06-23 18:01:03 +12:00
										 |  |  |             updateStatus("FAILED SQL: $stmt"); | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |             return $res; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | ?>
 | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  | <?php echo"<?"; ?> xml version="1.0" encoding="UTF-8" <?php echo "?>"; ?>
 | 
					
						
							|  |  |  | <!DOCTYPE html | 
					
						
							|  |  |  | PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | 
					
						
							|  |  |  |        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | 
					
						
							|  |  |  | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US"> | 
					
						
							|  |  |  |     <head> | 
					
						
							|  |  |  |         <title>Install Laconica</title> | 
					
						
							| 
									
										
										
										
											2009-05-22 16:38:06 +00:00
										 |  |  | 	<link rel="shortcut icon" href="favicon.ico"/> | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |         <link rel="stylesheet" type="text/css" href="theme/default/css/display.css?version=0.8" media="screen, projection, tv"/> | 
					
						
							|  |  |  |         <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/base/css/ie.css?version=0.8" /><![endif]--> | 
					
						
							|  |  |  |         <!--[if lte IE 6]><link rel="stylesheet" type="text/css" theme/base/css/ie6.css?version=0.8" /><![endif]-->
 | 
					
						
							| 
									
										
										
										
											2009-05-22 16:38:06 +00:00
										 |  |  |         <!--[if IE]><link rel="stylesheet" type="text/css" href="theme/default/css/ie.css?version=0.8" /><![endif]--> | 
					
						
							|  |  |  |         <script src="js/jquery.min.js"></script> | 
					
						
							|  |  |  |         <script src="js/install.js"></script> | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |     </head> | 
					
						
							|  |  |  |     <body id="install"> | 
					
						
							|  |  |  |         <div id="wrap"> | 
					
						
							|  |  |  |             <div id="header"> | 
					
						
							|  |  |  |                 <address id="site_contact" class="vcard"> | 
					
						
							|  |  |  |                     <a class="url home bookmark" href="."> | 
					
						
							|  |  |  |                         <img class="logo photo" src="theme/default/logo.png" alt="Laconica"/> | 
					
						
							|  |  |  |                         <span class="fn org">Laconica</span> | 
					
						
							|  |  |  |                     </a> | 
					
						
							|  |  |  |                 </address> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |             <div id="core"> | 
					
						
							|  |  |  |                 <div id="content"> | 
					
						
							|  |  |  |                     <h1>Install Laconica</h1> | 
					
						
							| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  | <?php main(); ?>
 | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |                 </div> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |     </body> | 
					
						
							| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  | </html> |