| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | <? | 
					
						
							| 
									
										
										
										
											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-02-28 21:01:33 -08:00
										 |  |  |     if (file_exists(INSTALLDIR.'/config.php')) { | 
					
						
							|  |  |  |          ?><p class="error">Config file "config.php" already exists.</p>
 | 
					
						
							|  |  |  |          <? | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (version_compare(PHP_VERSION, '5.0.0', '<')) { | 
					
						
							|  |  |  |             ?><p class="error">Require PHP version 5 or greater.</p><?
 | 
					
						
							|  |  |  | 		    return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $reqs = array('gd', 'mysql', 'curl', | 
					
						
							|  |  |  |                   'xmlwriter', 'mbstring', | 
					
						
							|  |  |  |                   'gettext'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     foreach ($reqs as $req) { | 
					
						
							|  |  |  |         if (!checkExtension($req)) { | 
					
						
							|  |  |  |             ?><p class="error">Cannot load required extension "<?= $req ?>".</p><?
 | 
					
						
							|  |  |  | 		    return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!is_writable(INSTALLDIR)) { | 
					
						
							|  |  |  |          ?><p class="error">Cannot write config file to "<?= INSTALLDIR ?>".</p>
 | 
					
						
							|  |  |  | 	       <p>On your server, try this command:</p> | 
					
						
							|  |  |  | 	       <blockquote>chmod a+w <?= INSTALLDIR ?></blockquote>
 | 
					
						
							|  |  |  |          <? | 
					
						
							|  |  |  | 	     return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!is_writable(INSTALLDIR.'/avatar/')) { | 
					
						
							|  |  |  |          ?><p class="error">Cannot write avatar directory "<?= INSTALLDIR ?>/avatar/".</p>
 | 
					
						
							|  |  |  | 	       <p>On your server, try this command:</p> | 
					
						
							|  |  |  | 	       <blockquote>chmod a+w <?= INSTALLDIR ?>/avatar/</blockquote>
 | 
					
						
							|  |  |  |          <? | 
					
						
							|  |  |  | 	     return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | ?>
 | 
					
						
							|  |  |  | <p>Enter your database connection information below to initialize the database.</p> | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | <form method='post' action='install.php'> | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | 	<fieldset> | 
					
						
							|  |  |  | 	<ul class='form_data'> | 
					
						
							|  |  |  | 	<li> | 
					
						
							|  |  |  | 	<label for='sitename'>Site name</label> | 
					
						
							|  |  |  | 	<input type='text' id='sitename' name='sitename' /> | 
					
						
							|  |  |  | 	<p>The name of your site</p> | 
					
						
							|  |  |  | 	</li> | 
					
						
							|  |  |  | 	<li> | 
					
						
							|  |  |  | 	<li> | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | 	<label for='host'>Hostname</label> | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | 	<input type='text' id='host' name='host' /> | 
					
						
							|  |  |  | 	<p>Database hostname</p> | 
					
						
							|  |  |  | 	</li> | 
					
						
							|  |  |  | 	<li> | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | 	<label for='host'>Database</label> | 
					
						
							|  |  |  | 	<input type='text' id='database' name='database' /> | 
					
						
							|  |  |  | 	<p>Database name</p> | 
					
						
							|  |  |  | 	</li> | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | 	<li> | 
					
						
							|  |  |  | 	<label for='username'>Username</label> | 
					
						
							|  |  |  | 	<input type='text' id='username' name='username' /> | 
					
						
							|  |  |  | 	<p>Database username</p> | 
					
						
							|  |  |  | 	</li> | 
					
						
							|  |  |  | 	<li> | 
					
						
							|  |  |  | 	<label for='password'>Password</label> | 
					
						
							|  |  |  | 	<input type='password' id='password' name='password' /> | 
					
						
							|  |  |  | 	<p>Database password</p> | 
					
						
							|  |  |  | 	</li> | 
					
						
							|  |  |  | 	</ul> | 
					
						
							|  |  |  | 	<input type='submit' name='submit' value='Submit'> | 
					
						
							|  |  |  | 	</fieldset> | 
					
						
							|  |  |  | </form> | 
					
						
							|  |  |  | <? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | function updateStatus($status, $error=false) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | ?>
 | 
					
						
							|  |  |  | 	<li> | 
					
						
							|  |  |  | <? | 
					
						
							|  |  |  |     print $status; | 
					
						
							|  |  |  | ?>
 | 
					
						
							|  |  |  | 	</li> | 
					
						
							|  |  |  | <? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | function handlePost() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | ?>
 | 
					
						
							|  |  |  | 	<ul> | 
					
						
							|  |  |  | <? | 
					
						
							|  |  |  |     $host = $_POST['host']; | 
					
						
							|  |  |  |     $database = $_POST['database']; | 
					
						
							|  |  |  |     $username = $_POST['username']; | 
					
						
							|  |  |  |     $password = $_POST['password']; | 
					
						
							|  |  |  |     $sitename = $_POST['sitename']; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     if (empty($host)) { | 
					
						
							|  |  |  |         updateStatus("No hostname specified.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($database)) { | 
					
						
							|  |  |  |         updateStatus("No database specified.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($username)) { | 
					
						
							|  |  |  |         updateStatus("No username specified.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($password)) { | 
					
						
							|  |  |  |         updateStatus("No password specified.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($sitename)) { | 
					
						
							|  |  |  |         updateStatus("No sitename specified.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |     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; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-03-04 05:53:04 -08:00
										 |  |  |     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); | 
					
						
							|  |  |  |         if ($res === false) { | 
					
						
							|  |  |  |             updateStatus(sprintf("Can't run %d script.", $name), true); | 
					
						
							|  |  |  |             showForm(); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-03-04 05:47:37 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |     updateStatus("Writing config file..."); | 
					
						
							|  |  |  |     $sqlUrl = "mysqli://$username:$password@$host/$database"; | 
					
						
							|  |  |  |     $res = writeConf($sitename, $sqlUrl); | 
					
						
							|  |  |  |     if (!$res) { | 
					
						
							|  |  |  |         updateStatus("Can't write config file.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     updateStatus("Done!"); | 
					
						
							|  |  |  | ?>
 | 
					
						
							|  |  |  | 	</ul> | 
					
						
							|  |  |  | <? | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function writeConf($sitename, $sqlUrl) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     $res = file_put_contents(INSTALLDIR.'/config.php', | 
					
						
							|  |  |  |                              "<?\n". | 
					
						
							|  |  |  |                              "\$config['site']['name'] = \"$sitename\";\n\n".
 | 
					
						
							|  |  |  |                              "\$config['db']['database'] = \"$sqlUrl\";\n\n");
 | 
					
						
							|  |  |  |     return $res; | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | function runDbScript($filename, $conn) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     $sql = trim(file_get_contents($filename)); | 
					
						
							|  |  |  |     $stmts = explode(';', $sql); | 
					
						
							|  |  |  |     foreach ($stmts as $stmt) { | 
					
						
							|  |  |  |         $stmt = trim($stmt); | 
					
						
							|  |  |  |         if (!mb_strlen($stmt)) { | 
					
						
							|  |  |  |             continue; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $res = mysql_query($stmt, $conn); | 
					
						
							|  |  |  |         if ($res === false) { | 
					
						
							|  |  |  |             return $res; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | ?>
 | 
					
						
							|  |  |  | <html> | 
					
						
							|  |  |  | <head> | 
					
						
							|  |  |  | 	<title>Install Laconica</title> | 
					
						
							|  |  |  | 	<link rel="stylesheet" type="text/css" href="theme/base/css/display.css?version=0.7.1" media="screen, projection, tv"/> | 
					
						
							|  |  |  | 	<link rel="stylesheet" type="text/css" href="theme/base/css/modal.css?version=0.7.1" media="screen, projection, tv"/> | 
					
						
							|  |  |  | 	<link rel="stylesheet" type="text/css" href="theme/default/css/display.css?version=0.7.1" media="screen, projection, tv"/> | 
					
						
							|  |  |  | </head> | 
					
						
							|  |  |  | <body> | 
					
						
							|  |  |  | 	<div id="wrap"> | 
					
						
							|  |  |  | 	<div id="core"> | 
					
						
							|  |  |  | 	<div id="content"> | 
					
						
							|  |  |  | 	<h1>Install Laconica</h1> | 
					
						
							|  |  |  | <? main() ?>
 | 
					
						
							|  |  |  | 	</div> | 
					
						
							|  |  |  | 	</div> | 
					
						
							|  |  |  | 	</div> | 
					
						
							|  |  |  | </body> | 
					
						
							|  |  |  | </html> |