| 
									
										
										
										
											2009-10-03 17:36:53 +13:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  | /** | 
					
						
							| 
									
										
										
										
											2009-08-25 18:14:12 -04:00
										 |  |  |  * StatusNet - the distributed open-source microblogging tool | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * Copyright (C) 2009, StatusNet, 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-09-15 16:31:09 -07:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-09-13 17:43:02 +12:00
										 |  |  |  * @category Installation | 
					
						
							|  |  |  |  * @package  Installation | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-09-14 19:19:11 +12:00
										 |  |  |  * @author   Adrian Lang <mail@adrianlang.de> | 
					
						
							|  |  |  |  * @author   Brenda Wallace <shiny@cpan.org> | 
					
						
							|  |  |  |  * @author   Brett Taylor <brett@webfroot.co.nz> | 
					
						
							|  |  |  |  * @author   Brion Vibber <brion@pobox.com> | 
					
						
							|  |  |  |  * @author   CiaranG <ciaran@ciarang.com> | 
					
						
							|  |  |  |  * @author   Craig Andrews <candrews@integralblue.com> | 
					
						
							|  |  |  |  * @author   Eric Helgeson <helfire@Erics-MBP.local> | 
					
						
							| 
									
										
										
										
											2009-09-15 22:28:59 -04:00
										 |  |  |  * @author   Evan Prodromou <evan@status.net> | 
					
						
							| 
									
										
										
										
											2009-09-14 19:19:11 +12:00
										 |  |  |  * @author   Robin Millette <millette@controlyourself.ca> | 
					
						
							| 
									
										
										
										
											2009-09-16 11:14:26 +02:00
										 |  |  |  * @author   Sarven Capadisli <csarven@status.net> | 
					
						
							| 
									
										
										
										
											2009-09-14 19:19:11 +12:00
										 |  |  |  * @author   Tom Adams <tom@holizz.com> | 
					
						
							|  |  |  |  * @license  GNU Affero General Public License http://www.gnu.org/licenses/ | 
					
						
							| 
									
										
										
										
											2009-10-03 17:36:53 +13:00
										 |  |  |  * @version  0.9.x | 
					
						
							| 
									
										
										
										
											2009-09-19 16:01:42 +12:00
										 |  |  |  * @link     http://status.net | 
					
						
							| 
									
										
										
										
											2009-04-15 08:38:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | define('INSTALLDIR', dirname(__FILE__)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  | $external_libraries=array( | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'gettext', | 
					
						
							|  |  |  |         'url'=>'http://us.php.net/manual/en/book.gettext.php', | 
					
						
							|  |  |  |         'check_function'=>'gettext' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'PEAR', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/', | 
					
						
							|  |  |  |         'deb'=>'php-pear', | 
					
						
							|  |  |  |         'include'=>'PEAR.php', | 
					
						
							|  |  |  |         'check_class'=>'PEAR' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'DB', | 
					
						
							|  |  |  |         'pear'=>'DB', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/DB', | 
					
						
							|  |  |  |         'deb'=>'php-db', | 
					
						
							|  |  |  |         'include'=>'DB/common.php', | 
					
						
							|  |  |  |         'check_class'=>'DB_common' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'DB_DataObject', | 
					
						
							|  |  |  |         'pear'=>'DB_DataObject', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/DB_DataObject', | 
					
						
							|  |  |  |         'include'=>'DB/DataObject.php', | 
					
						
							|  |  |  |         'check_class'=>'DB_DataObject' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Console_Getopt', | 
					
						
							|  |  |  |         'pear'=>'Console_Getopt', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Console_Getopt', | 
					
						
							|  |  |  |         'include'=>'Console/Getopt.php', | 
					
						
							|  |  |  |         'check_class'=>'Console_Getopt' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Facebook API', | 
					
						
							|  |  |  |         'url'=>'http://developers.facebook.com/', | 
					
						
							|  |  |  |         'include'=>'facebook/facebook.php', | 
					
						
							|  |  |  |         'check_class'=>'Facebook' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'htmLawed', | 
					
						
							|  |  |  |         'url'=>'http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed', | 
					
						
							|  |  |  |         'include'=>'htmLawed/htmLawed.php', | 
					
						
							|  |  |  |         'check_function'=>'htmLawed' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'HTTP_Request', | 
					
						
							|  |  |  |         'pear'=>'HTTP_Request', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/HTTP_Request', | 
					
						
							|  |  |  |         'deb'=>'php-http-request', | 
					
						
							|  |  |  |         'include'=>'HTTP/Request.php', | 
					
						
							|  |  |  |         'check_class'=>'HTTP_Request' | 
					
						
							|  |  |  |     ), | 
					
						
							| 
									
										
										
										
											2009-10-28 15:29:20 -04:00
										 |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'HTTP_Request2', | 
					
						
							|  |  |  |         'pear'=>'HTTP_Request2', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/HTTP_Request2', | 
					
						
							|  |  |  |         'include'=>'HTTP/Request2.php', | 
					
						
							|  |  |  |         'check_class'=>'HTTP_Request2' | 
					
						
							|  |  |  |     ), | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Mail', | 
					
						
							|  |  |  |         'pear'=>'Mail', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Mail', | 
					
						
							|  |  |  |         'deb'=>'php-mail', | 
					
						
							|  |  |  |         'include'=>'Mail.php', | 
					
						
							|  |  |  |         'check_class'=>'Mail' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Mail_mimeDecode', | 
					
						
							|  |  |  |         'pear'=>'Mail_mimeDecode', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Mail_mimeDecode', | 
					
						
							|  |  |  |         'deb'=>'php-mail-mimedecode', | 
					
						
							|  |  |  |         'include'=>'Mail/mimeDecode.php', | 
					
						
							|  |  |  |         'check_class'=>'Mail_mimeDecode' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Mime_Type', | 
					
						
							|  |  |  |         'pear'=>'Mime_Type', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Mime_Type', | 
					
						
							|  |  |  |         'include'=>'MIME/Type.php', | 
					
						
							|  |  |  |         'check_class'=>'Mime_Type' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Net_URL_Mapper', | 
					
						
							|  |  |  |         'pear'=>'Net_URL_Mapper', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Net_URL_Mapper', | 
					
						
							|  |  |  |         'include'=>'Net/URL/Mapper.php', | 
					
						
							|  |  |  |         'check_class'=>'Net_URL_Mapper' | 
					
						
							|  |  |  |     ), | 
					
						
							| 
									
										
										
										
											2009-11-04 13:39:56 -05:00
										 |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Net_LDAP2', | 
					
						
							|  |  |  |         'pear'=>'Net_LDAP2', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Net_LDAP2', | 
					
						
							|  |  |  |         'deb'=>'php-net-ldap2', | 
					
						
							|  |  |  |         'include'=>'Net/LDAP2.php', | 
					
						
							|  |  |  |         'check_class'=>'Net_LDAP2' | 
					
						
							|  |  |  |     ), | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Net_Socket', | 
					
						
							|  |  |  |         'pear'=>'Net_Socket', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Net_Socket', | 
					
						
							|  |  |  |         'deb'=>'php-net-socket', | 
					
						
							|  |  |  |         'include'=>'Net/Socket.php', | 
					
						
							|  |  |  |         'check_class'=>'Net_Socket' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Net_SMTP', | 
					
						
							|  |  |  |         'pear'=>'Net_SMTP', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Net_SMTP', | 
					
						
							|  |  |  |         'deb'=>'php-net-smtp', | 
					
						
							|  |  |  |         'include'=>'Net/SMTP.php', | 
					
						
							|  |  |  |         'check_class'=>'Net_SMTP' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Net_URL', | 
					
						
							|  |  |  |         'pear'=>'Net_URL', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Net_URL', | 
					
						
							|  |  |  |         'deb'=>'php-net-url', | 
					
						
							|  |  |  |         'include'=>'Net/URL.php', | 
					
						
							|  |  |  |         'check_class'=>'Net_URL' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Net_URL2', | 
					
						
							|  |  |  |         'pear'=>'Net_URL2', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Net_URL2', | 
					
						
							|  |  |  |         'include'=>'Net/URL2.php', | 
					
						
							|  |  |  |         'check_class'=>'Net_URL2' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Services_oEmbed', | 
					
						
							|  |  |  |         'pear'=>'Services_oEmbed', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Services_oEmbed', | 
					
						
							|  |  |  |         'include'=>'Services/oEmbed.php', | 
					
						
							|  |  |  |         'check_class'=>'Services_oEmbed' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Stomp', | 
					
						
							|  |  |  |         'url'=>'http://stomp.codehaus.org/PHP', | 
					
						
							|  |  |  |         'include'=>'Stomp.php', | 
					
						
							|  |  |  |         'check_class'=>'Stomp' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'System_Command', | 
					
						
							|  |  |  |         'pear'=>'System_Command', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/System_Command', | 
					
						
							|  |  |  |         'include'=>'System/Command.php', | 
					
						
							|  |  |  |         'check_class'=>'System_Command' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'XMPPHP', | 
					
						
							|  |  |  |         'url'=>'http://code.google.com/p/xmpphp', | 
					
						
							|  |  |  |         'include'=>'XMPPHP/XMPP.php', | 
					
						
							|  |  |  |         'check_class'=>'XMPPHP_XMPP' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'PHP Markdown', | 
					
						
							|  |  |  |         'url'=>'http://www.michelf.com/projects/php-markdown/', | 
					
						
							|  |  |  |         'include'=>'markdown.php', | 
					
						
							|  |  |  |         'check_class'=>'Markdown_Parser' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'OAuth', | 
					
						
							|  |  |  |         'url'=>'http://code.google.com/p/oauth-php', | 
					
						
							|  |  |  |         'include'=>'OAuth.php', | 
					
						
							|  |  |  |         'check_class'=>'OAuthRequest' | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     array( | 
					
						
							|  |  |  |         'name'=>'Validate', | 
					
						
							|  |  |  |         'pear'=>'Validate', | 
					
						
							|  |  |  |         'url'=>'http://pear.php.net/package/Validate', | 
					
						
							|  |  |  |         'include'=>'Validate.php', | 
					
						
							|  |  |  |         'check_class'=>'Validate' | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | ); | 
					
						
							| 
									
										
										
										
											2009-09-13 17:53:15 -07:00
										 |  |  | $dbModules = array( | 
					
						
							|  |  |  |     'mysql' => array( | 
					
						
							|  |  |  |         'name' => 'MySQL', | 
					
						
							|  |  |  |         'check_module' => 'mysql', // mysqli?
 | 
					
						
							|  |  |  |         'installer' => 'mysql_db_installer', | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |     'pgsql' => array( | 
					
						
							|  |  |  |         'name' => 'PostgreSQL', | 
					
						
							|  |  |  |         'check_module' => 'pgsql', | 
					
						
							|  |  |  |         'installer' => 'pgsql_db_installer', | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  | ); | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  | /** | 
					
						
							| 
									
										
										
										
											2009-09-13 17:44:22 +12:00
										 |  |  |  * the actual installation. | 
					
						
							|  |  |  |  * If call libraries are present, then install | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-09-13 17:44:22 +12:00
										 |  |  |  * @return void | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | function main() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-09-13 17:43:48 +12:00
										 |  |  |     if (!checkPrereqs()) { | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (!empty($_GET['checklibs'])) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |         showLibs(); | 
					
						
							| 
									
										
										
										
											2009-09-13 17:43:48 +12:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |         if ($_SERVER['REQUEST_METHOD'] == 'POST') { | 
					
						
							|  |  |  |             handlePost(); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             showForm(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 18:29:10 +12:00
										 |  |  | /** | 
					
						
							|  |  |  |  * checks if an external libary is present | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param string $external_library Name of library | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @return boolean indicates if library present | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  | function haveExternalLibrary($external_library) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-09-24 17:22:51 -04:00
										 |  |  |     if (isset($external_library['include']) && !haveIncludeFile($external_library['include'])) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-09-13 17:43:48 +12:00
										 |  |  |     if (isset($external_library['check_function']) && ! function_exists($external_library['check_function'])) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-09-13 17:43:48 +12:00
										 |  |  |     if (isset($external_library['check_class']) && ! class_exists($external_library['check_class'])) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |     return true; | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 18:15:49 -07:00
										 |  |  | // Attempt to include a PHP file and report if it worked, while
 | 
					
						
							|  |  |  | // suppressing the annoying warning messages on failure.
 | 
					
						
							|  |  |  | function haveIncludeFile($filename) { | 
					
						
							|  |  |  |     $old = error_reporting(error_reporting() & ~E_WARNING); | 
					
						
							|  |  |  |     $ok = include_once($filename); | 
					
						
							|  |  |  |     error_reporting($old); | 
					
						
							|  |  |  |     return $ok; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 18:29:10 +12:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Check if all is ready for installation | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @return void | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | function checkPrereqs() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-09-14 19:05:14 +12: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')) { | 
					
						
							| 
									
										
										
										
											2009-09-14 19:05:14 +12:00
										 |  |  |          printf('<p class="error">Config file "config.php" already exists.</p>'); | 
					
						
							| 
									
										
										
										
											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', '<')) { | 
					
						
							| 
									
										
										
										
											2009-09-14 19:05:14 +12:00
										 |  |  |         printf('<p class="error">Require PHP version 5.2.3 or greater.</p>'); | 
					
						
							|  |  |  |         $pass = false; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-24 04:04:28 +12:00
										 |  |  |     $reqs = array('gd', 'curl', | 
					
						
							| 
									
										
										
										
											2009-09-02 13:33:54 -04:00
										 |  |  |                   'xmlwriter', 'mbstring','tidy'); | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     foreach ($reqs as $req) { | 
					
						
							|  |  |  |         if (!checkExtension($req)) { | 
					
						
							| 
									
										
										
										
											2009-09-14 19:05:14 +12:00
										 |  |  |             printf('<p class="error">Cannot load required extension: <code>%s</code></p>', $req); | 
					
						
							|  |  |  |             $pass = false; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-09-13 17:53:15 -07:00
										 |  |  |     // Make sure we have at least one database module available
 | 
					
						
							|  |  |  |     global $dbModules; | 
					
						
							|  |  |  |     $missingExtensions = array(); | 
					
						
							|  |  |  |     foreach ($dbModules as $type => $info) { | 
					
						
							|  |  |  |         if (!checkExtension($info['check_module'])) { | 
					
						
							|  |  |  |             $missingExtensions[] = $info['check_module']; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 17:53:15 -07:00
										 |  |  |     if (count($missingExtensions) == count($dbModules)) { | 
					
						
							|  |  |  |         $req = implode(', ', $missingExtensions); | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |         printf('<p class="error">Cannot find mysql or pgsql extension. You need one or the other.'); | 
					
						
							| 
									
										
										
										
											2009-09-14 19:05:14 +12:00
										 |  |  |         $pass = false; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-14 19:05:14 +12:00
										 |  |  |     if (!is_writable(INSTALLDIR)) { | 
					
						
							|  |  |  |         printf('<p class="error">Cannot write config file to: <code>%s</code></p>', INSTALLDIR); | 
					
						
							|  |  |  |         printf('<p>On your server, try this command: <code>chmod a+w %s</code>', INSTALLDIR); | 
					
						
							|  |  |  |         $pass = false; | 
					
						
							| 
									
										
										
										
											2009-06-24 04:04:28 +12:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-14 19:05:14 +12:00
										 |  |  |     // Check the subdirs used for file uploads
 | 
					
						
							|  |  |  |     $fileSubdirs = array('avatar', 'background', 'file'); | 
					
						
							|  |  |  |     foreach ($fileSubdirs as $fileSubdir) { | 
					
						
							|  |  |  |         $fileFullPath = INSTALLDIR."/$fileSubdir/"; | 
					
						
							|  |  |  |         if (!is_writable($fileFullPath)) { | 
					
						
							|  |  |  |             printf('<p class="error">Cannot write to %s directory: <code>%s</code></p>', $fileSubdir, $fileFullPath); | 
					
						
							|  |  |  |             printf('<p>On your server, try this command: <code>chmod a+w %s</code></p>', $fileFullPath); | 
					
						
							|  |  |  |             $pass = false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-14 19:05:14 +12:00
										 |  |  |     return $pass; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 18:29:10 +12:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Checks if a php extension is both installed and loaded | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param string $name of extension to check | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @return boolean whether extension is installed and loaded | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  | function checkExtension($name) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-09-01 20:04:36 -03:00
										 |  |  |     if (extension_loaded($name)) { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } elseif (function_exists('dl') && ini_get('enable_dl') && !ini_get('safe_mode')) { | 
					
						
							| 
									
										
										
										
											2009-10-03 17:36:53 +13:00
										 |  |  |         // dl will throw a fatal error if it's disabled or we're in safe mode.
 | 
					
						
							|  |  |  |         // More fun, it may not even exist under some SAPIs in 5.3.0 or later...
 | 
					
						
							|  |  |  |         $soname = $name . '.' . PHP_SHLIB_SUFFIX; | 
					
						
							|  |  |  |         if (PHP_SHLIB_SUFFIX == 'dll') { | 
					
						
							|  |  |  |             $soname = "php_" . $soname; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return @dl($soname); | 
					
						
							| 
									
										
										
										
											2009-09-01 20:04:36 -03:00
										 |  |  |     } else { | 
					
						
							|  |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2009-02-28 21:01:33 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 18:29:10 +12:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Show list of libraries | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @return void | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  | function showLibs() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     global $external_libraries; | 
					
						
							|  |  |  |     $present_libraries=array(); | 
					
						
							|  |  |  |     $absent_libraries=array(); | 
					
						
							| 
									
										
										
										
											2009-09-13 18:31:44 +12:00
										 |  |  |     foreach ($external_libraries as $external_library) { | 
					
						
							| 
									
										
										
										
											2009-09-13 17:43:48 +12:00
										 |  |  |         if (haveExternalLibrary($external_library)) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |             $present_libraries[]=$external_library; | 
					
						
							| 
									
										
										
										
											2009-09-13 17:43:48 +12:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |             $absent_libraries[]=$external_library; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     echo<<<E_O_T | 
					
						
							|  |  |  |     <div class="instructions"> | 
					
						
							| 
									
										
										
										
											2009-10-13 12:13:11 -04:00
										 |  |  |         <p>StatusNet comes bundled with a number of libraries required for the application to work. However, it is best that you use PEAR or you distribution to manage | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |         libraries instead, as they tend to provide security updates faster, and may offer improved performance.</p> | 
					
						
							|  |  |  |         <p>On Debian based distributions, such as Ubuntu, use a package manager (such as "aptitude", "apt-get", and "synaptic") to install the package listed.</p> | 
					
						
							|  |  |  |         <p>On RPM based distributions, such as Red Hat, Fedora, CentOS, Scientific Linux, Yellow Dog Linux and Oracle Enterprise Linux, use a package manager (such as "yum", "apt-rpm", and "up2date") to install the package listed.</p> | 
					
						
							|  |  |  |         <p>On servers without a package manager (such as Windows), or if the library is not packaged for your distribution, you can use PHP's PEAR to install the library. Simply run "pear install <name>".</p> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |     <h2>Absent Libraries</h2> | 
					
						
							|  |  |  |     <ul id="absent_libraries"> | 
					
						
							|  |  |  | E_O_T; | 
					
						
							| 
									
										
										
										
											2009-09-13 18:31:44 +12:00
										 |  |  |     foreach ($absent_libraries as $library) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |         echo '<li>'; | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |         if (isset($library['url'])) { | 
					
						
							| 
									
										
										
										
											2009-10-13 12:13:11 -04:00
										 |  |  |             echo '<a href="'.$library['url'].'">'.htmlentities($library['name']).'</a>'; | 
					
						
							| 
									
										
										
										
											2009-09-13 18:31:44 +12:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |             echo htmlentities($library['name']); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         echo '<ul>'; | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |         if (isset($library['deb'])) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |             echo '<li class="deb package">deb: <a href="apt:' . urlencode($library['deb']) . '">' . htmlentities($library['deb']) . '</a></li>'; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |         if (isset($library['rpm'])) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |             echo '<li class="rpm package">rpm: ' . htmlentities($library['rpm']) . '</li>'; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |         if (isset($library['pear'])) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |             echo '<li class="pear package">pear: ' . htmlentities($library['pear']) . '</li>'; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         echo '</ul>'; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     echo<<<E_O_T | 
					
						
							|  |  |  |     </ul> | 
					
						
							|  |  |  |     <h2>Installed Libraries</h2> | 
					
						
							|  |  |  |     <ul id="present_libraries"> | 
					
						
							|  |  |  | E_O_T; | 
					
						
							| 
									
										
										
										
											2009-09-13 18:31:44 +12:00
										 |  |  |     foreach ($present_libraries as $library) { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |         echo '<li>'; | 
					
						
							| 
									
										
										
										
											2009-09-23 09:45:22 -04:00
										 |  |  |         if (isset($library['url'])) { | 
					
						
							| 
									
										
										
										
											2009-10-13 12:13:11 -04:00
										 |  |  |             echo '<a href="'.$library['url'].'">'.htmlentities($library['name']).'</a>'; | 
					
						
							| 
									
										
										
										
											2009-09-13 18:29:10 +12:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2009-08-26 19:08:30 -04:00
										 |  |  |             echo htmlentities($library['name']); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         echo '</li>'; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     echo<<<E_O_T | 
					
						
							|  |  |  |     </ul> | 
					
						
							|  |  |  | E_O_T; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | function showForm() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-09-13 17:53:15 -07:00
										 |  |  |     global $dbModules; | 
					
						
							|  |  |  |     $dbRadios = ''; | 
					
						
							|  |  |  |     $checked = 'checked="checked" '; // Check the first one which exists
 | 
					
						
							|  |  |  |     foreach ($dbModules as $type => $info) { | 
					
						
							|  |  |  |         if (checkExtension($info['check_module'])) { | 
					
						
							|  |  |  |             $dbRadios .= "<input type=\"radio\" name=\"dbtype\" id=\"dbtype-$type\" value=\"$type\" $checked/> $info[name]<br />\n";
 | 
					
						
							|  |  |  |             $checked = ''; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											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> | 
					
						
							| 
									
										
										
										
											2009-10-13 12:13:11 -04:00
										 |  |  |             <p>StatusNet bundles a number of libraries for ease of installation. <a href="?checklibs=true">You can see what bundled libraries you are using, versus what libraries are installed on your server.</a> | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |         </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-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-24 04:31:52 +12:00
										 |  |  |                 <label for="dbtype">Type</label> | 
					
						
							| 
									
										
										
										
											2009-09-13 17:53:15 -07:00
										 |  |  |                 $dbRadios | 
					
						
							| 
									
										
										
										
											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-09-19 16:01:42 +12:00
										 |  |  |     echo '<li' . ($error ? ' class="error"': '' ) . ">$status</li>"; | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-28 17:42:27 -08:00
										 |  |  | function handlePost() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											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-08-07 14:17:55 +12:00
										 |  |  |     $server = $_SERVER['HTTP_HOST']; | 
					
						
							|  |  |  |     $path = substr(dirname($_SERVER['PHP_SELF']), 1); | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  |     echo <<<STR | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |     <dl class="system_notice"> | 
					
						
							|  |  |  |         <dt>Page notice</dt> | 
					
						
							|  |  |  |         <dd> | 
					
						
							|  |  |  |             <ul> | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  | STR; | 
					
						
							|  |  |  |     $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-09-13 18:22:32 +12:00
										 |  |  |         $fail = true; | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($database)) { | 
					
						
							|  |  |  |         updateStatus("No database specified.", true); | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  |         $fail = true; | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($username)) { | 
					
						
							|  |  |  |         updateStatus("No username specified.", true); | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  |         $fail = true; | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($sitename)) { | 
					
						
							|  |  |  |         updateStatus("No sitename specified.", true); | 
					
						
							| 
									
										
										
										
											2009-09-13 18:31:44 +12:00
										 |  |  |         $fail = true; | 
					
						
							| 
									
										
										
										
											2009-03-01 10:12:16 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 18:31:44 +12:00
										 |  |  |     if ($fail) { | 
					
						
							|  |  |  |         showForm(); | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-13 17:53:15 -07:00
										 |  |  |     global $dbModules; | 
					
						
							| 
									
										
										
										
											2009-09-14 19:08:05 +12:00
										 |  |  |     $db = call_user_func($dbModules[$dbtype]['installer'], $host, $database, $username, $password); | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |     if (!$db) { | 
					
						
							|  |  |  |         // database connection failed, do not move on to create config file.
 | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |     updateStatus("Writing config file..."); | 
					
						
							|  |  |  |     $res = writeConf($sitename, $server, $path, $fancy, $db); | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |     if (!$res) { | 
					
						
							|  |  |  |         updateStatus("Can't write config file.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return; | 
					
						
							| 
									
										
										
										
											2009-03-04 05:47:37 -08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |     /* | 
					
						
							|  |  |  |         TODO https needs to be considered | 
					
						
							|  |  |  |     */ | 
					
						
							|  |  |  |     $link = "http://".$server.'/'.$path; | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |     updateStatus("StatusNet has been installed at $link"); | 
					
						
							|  |  |  |     updateStatus("You can visit your <a href='$link'>new StatusNet site</a>."); | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  | function Pgsql_Db_installer($host, $database, $username, $password) | 
					
						
							| 
									
										
										
										
											2009-09-14 19:08:05 +12:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  |     $connstring = "dbname=$database host=$host user=$username"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //No password would mean trust authentication used.
 | 
					
						
							|  |  |  |     if (!empty($password)) { | 
					
						
							|  |  |  |         $connstring .= " password=$password"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     updateStatus("Starting installation..."); | 
					
						
							|  |  |  |     updateStatus("Checking database..."); | 
					
						
							|  |  |  |     $conn = pg_connect($connstring); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if ($conn ===false) { | 
					
						
							|  |  |  |         updateStatus("Failed to connect to database: $connstring"); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //ensure database encoding is UTF8
 | 
					
						
							|  |  |  |     $record = pg_fetch_object(pg_query($conn, 'SHOW server_encoding')); | 
					
						
							|  |  |  |     if ($record->server_encoding != 'UTF8') { | 
					
						
							|  |  |  |         updateStatus("StatusNet requires UTF8 character encoding. Your database is ". htmlentities($record->server_encoding)); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     updateStatus("Running database script..."); | 
					
						
							|  |  |  |     //wrap in transaction;
 | 
					
						
							|  |  |  |     pg_query($conn, 'BEGIN'); | 
					
						
							|  |  |  |     $res = runDbScript(INSTALLDIR.'/db/statusnet_pg.sql', $conn, 'pgsql'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if ($res === false) { | 
					
						
							|  |  |  |         updateStatus("Can't run database script.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     foreach (array('sms_carrier' => 'SMS carrier', | 
					
						
							| 
									
										
										
										
											2009-06-23 18:01:03 +12:00
										 |  |  |                 'notice_source' => 'notice source', | 
					
						
							|  |  |  |                 'foreign_services' => 'foreign service') | 
					
						
							|  |  |  |           as $scr => $name) { | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  |         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 false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     pg_query($conn, 'COMMIT'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (empty($password)) { | 
					
						
							|  |  |  |         $sqlUrl = "pgsql://$username@$host/$database"; | 
					
						
							| 
									
										
										
										
											2009-09-13 18:31:44 +12:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  |         $sqlUrl = "pgsql://$username:$password@$host/$database"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $db = array('type' => 'pgsql', 'database' => $sqlUrl); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return $db; | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  | function Mysql_Db_installer($host, $database, $username, $password) | 
					
						
							| 
									
										
										
										
											2009-09-14 19:08:05 +12:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12: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 false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     updateStatus("Changing to database..."); | 
					
						
							|  |  |  |     $res = mysql_select_db($database, $conn); | 
					
						
							|  |  |  |     if (!$res) { | 
					
						
							|  |  |  |         updateStatus("Can't change to database.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     updateStatus("Running database script..."); | 
					
						
							|  |  |  |     $res = runDbScript(INSTALLDIR.'/db/statusnet.sql', $conn); | 
					
						
							|  |  |  |     if ($res === false) { | 
					
						
							|  |  |  |         updateStatus("Can't run database script.", true); | 
					
						
							|  |  |  |         showForm(); | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     foreach (array('sms_carrier' => 'SMS carrier', | 
					
						
							| 
									
										
										
										
											2009-06-23 17:43:46 +12:00
										 |  |  |                 'notice_source' => 'notice source', | 
					
						
							|  |  |  |                 'foreign_services' => 'foreign service') | 
					
						
							|  |  |  |           as $scr => $name) { | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  |         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 false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $sqlUrl = "mysqli://$username:$password@$host/$database"; | 
					
						
							|  |  |  |     $db = array('type' => 'mysql', 'database' => $sqlUrl); | 
					
						
							|  |  |  |     return $db; | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function writeConf($sitename, $server, $path, $fancy, $db) | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |     // assemble configuration file in a string
 | 
					
						
							|  |  |  |     $cfg =  "<?php\n". | 
					
						
							| 
									
										
										
										
											2009-08-26 10:41:36 -04:00
										 |  |  |             "if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }\n\n". | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |             // site name
 | 
					
						
							|  |  |  |             "\$config['site']['name'] = '$sitename';\n\n". | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |             // site location
 | 
					
						
							|  |  |  |             "\$config['site']['server'] = '$server';\n". | 
					
						
							|  |  |  |             "\$config['site']['path'] = '$path'; \n\n". | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |             // checks if fancy URLs are enabled
 | 
					
						
							|  |  |  |             ($fancy ? "\$config['site']['fancy'] = true;\n\n":''). | 
					
						
							| 
									
										
										
										
											2009-08-27 08:45:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |             // database
 | 
					
						
							|  |  |  |             "\$config['db']['database'] = '{$db['database']}';\n\n". | 
					
						
							| 
									
										
										
										
											2009-08-28 21:04:15 +12:00
										 |  |  |             ($db['type'] == 'pgsql' ? "\$config['db']['quote_identifiers'] = true;\n\n":''). | 
					
						
							| 
									
										
										
										
											2009-10-30 18:53:45 +13:00
										 |  |  |             "\$config['db']['type'] = '{$db['type']}';\n\n"; | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |     // write configuration file out to install directory
 | 
					
						
							|  |  |  |     $res = file_put_contents(INSTALLDIR.'/config.php', $cfg); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-09-13 18:22:32 +12:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Install schema into the database | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-09-14 19:08:05 +12:00
										 |  |  |  * @param string $filename location of database schema file | 
					
						
							|  |  |  |  * @param dbconn $conn     connection to database | 
					
						
							|  |  |  |  * @param string $type     type of database, currently mysql or pgsql | 
					
						
							| 
									
										
										
										
											2009-09-15 16:31:09 -07:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-09-13 18:22:32 +12:00
										 |  |  |  * @return boolean - indicating success or failure | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2009-09-14 19:19:11 +12:00
										 |  |  | function runDbScript($filename, $conn, $type = 'mysqli') | 
					
						
							| 
									
										
										
										
											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-08-27 08:58:03 -07:00
										 |  |  |         // FIXME: use PEAR::DB or PDO instead of our own switch
 | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |         switch ($type) { | 
					
						
							| 
									
										
										
										
											2009-09-14 19:19:11 +12:00
										 |  |  |         case 'mysqli': | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |             $res = mysql_query($stmt, $conn); | 
					
						
							| 
									
										
										
										
											2009-08-27 08:58:03 -07:00
										 |  |  |             if ($res === false) { | 
					
						
							|  |  |  |                 $error = mysql_error(); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |             break; | 
					
						
							|  |  |  |         case 'pgsql': | 
					
						
							|  |  |  |             $res = pg_query($conn, $stmt); | 
					
						
							| 
									
										
										
										
											2009-08-27 08:58:03 -07:00
										 |  |  |             if ($res === false) { | 
					
						
							|  |  |  |                 $error = pg_last_error(); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-08-07 14:17:55 +12:00
										 |  |  |             break; | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |             updateStatus("runDbScript() error: unknown database type ". $type ." provided."); | 
					
						
							| 
									
										
										
										
											2009-06-23 18:01:03 +12:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2009-02-28 20:33:22 -08:00
										 |  |  |         if ($res === false) { | 
					
						
							| 
									
										
										
										
											2009-08-27 08:58:03 -07:00
										 |  |  |             updateStatus("ERROR ($error) for 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> | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |         <title>Install StatusNet</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="."> | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |                         <img class="logo photo" src="theme/default/logo.png" alt="StatusNet"/> | 
					
						
							|  |  |  |                         <span class="fn org">StatusNet</span> | 
					
						
							| 
									
										
										
										
											2009-05-01 03:50:24 +00:00
										 |  |  |                     </a> | 
					
						
							|  |  |  |                 </address> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |             <div id="core"> | 
					
						
							|  |  |  |                 <div id="content"> | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |                     <h1>Install StatusNet</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> |