2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< ? php  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  StatusNet  -  the  distributed  open - source  microblogging  tool 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 14:49:05 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Copyright  ( C )  2009 - 2010 ,  StatusNet ,  Inc . 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07: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 />. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ category  Installation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ package   Installation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ 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 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Evan  Prodromou  < evan @ status . net > 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-12 13:08:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ author    Mikael  Nordfeldth  < mmn @ hethane . se > 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *  @ author    Robin  Millette  < millette @ controlyourself . ca > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Sarven  Capadisli  < csarven @ status . net > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Tom  Adams  < tom @ holizz . com > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @ author    Zach  Copley  < zach @ status . net > 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 14:49:05 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ copyright  2009 - 2010  StatusNet ,  Inc  http :// status . net 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 14:14:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ copyright  2009 - 2014  Free  Software  Foundation ,  Inc  http :// www . fsf . org 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *  @ license   GNU  Affero  General  Public  License  http :// www . gnu . org / licenses / 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 14:49:05 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  @ version   1.0 . x 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *  @ link      http :// status . net 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								abstract  class  Installer  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** Web site info */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-12 13:08:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $sitename ,  $server ,  $path ,  $fancy ,  $siteProfile ,  $ssl ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** DB info */ 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-28 12:38:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $host ,  $database ,  $dbtype ,  $username ,  $password ,  $db ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** Administrator info */ 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-19 14:53:11 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  $adminNick ,  $adminPass ,  $adminEmail ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** Should we skip writing the configuration file? */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  $skipConfig  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  static  $dbModules  =  array ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        'mysql'  =>  array ( 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 02:47:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'name'  =>  'MariaDB (or MySQL 5.5+)' , 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-19 20:57:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'check_module'  =>  'mysqli' , 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'scheme'  =>  'mysqli' ,  // DSN prefix for PEAR::DB
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        ), 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 02:47:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*         'pgsql'  =>  array (  
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            'name'  =>  'PostgreSQL' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'check_module'  =>  'pgsql' , 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'scheme'  =>  'pgsql' ,  // DSN prefix for PEAR::DB
 
							 
						 
					
						
							
								
									
										
										
										
											2014-05-01 02:47:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        ), */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Attempt  to  include  a  PHP  file  and  report  if  it  worked ,  while 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  suppressing  the  annoying  warning  messages  on  failure . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    private  function  haveIncludeFile ( $filename )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $old  =  error_reporting ( error_reporting ()  &  ~ E_WARNING ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ok  =  include_once ( $filename ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        error_reporting ( $old ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $ok ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Check  if  all  is  ready  for  installation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  void 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  checkPrereqs () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $pass  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-06-03 10:13:28 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $config  =  INSTALLDIR . '/config.php' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( file_exists ( $config ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! is_writable ( $config )  ||  filesize ( $config )  >  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-12 13:00:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                if  ( filesize ( $config )  ==  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $this -> warning ( 'Config file "config.php" already exists and is empty, but is not writable.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    $this -> warning ( 'Config file "config.php" already exists.' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2010-06-03 10:13:28 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $pass  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 16:19:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( version_compare ( PHP_VERSION ,  '5.3.2' ,  '<' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> warning ( 'Require PHP version 5.3.2 or greater.' ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            $pass  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-02-18 00:47:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $reqs  =  array ( 'gd' ,  'curl' ,  'intl' ,  'json' , 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                      'xmlwriter' ,  'mbstring' ,  'xml' ,  'dom' ,  'simplexml' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $reqs  as  $req )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $this -> checkExtension ( $req ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $this -> warning ( sprintf ( 'Cannot load required extension: <code>%s</code>' ,  $req )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $pass  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Make sure we have at least one database module available
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $missingExtensions  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( self :: $dbModules  as  $type  =>  $info )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $this -> checkExtension ( $info [ 'check_module' ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $missingExtensions []  =  $info [ 'check_module' ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( count ( $missingExtensions )  ==  count ( self :: $dbModules ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $req  =  implode ( ', ' ,  $missingExtensions ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> warning ( sprintf ( 'Cannot find a database extension. You need at least one of %s.' ,  $req )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $pass  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-05-11 12:16:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // @fixme this check seems to be insufficient with Windows ACLs
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        if  ( ! is_writable ( INSTALLDIR ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> warning ( sprintf ( 'Cannot write config file to: <code>%s</code></p>' ,  INSTALLDIR ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           sprintf ( 'On your server, try this command: <code>chmod a+w %s</code>' ,  INSTALLDIR )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $pass  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Check the subdirs used for file uploads
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $fileSubdirs  =  array ( 'avatar' ,  'background' ,  'file' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $fileSubdirs  as  $fileSubdir )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fileFullPath  =  INSTALLDIR . " / $fileSubdir / " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! is_writable ( $fileFullPath ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $this -> warning ( sprintf ( 'Cannot write to %s directory: <code>%s</code>' ,  $fileSubdir ,  $fileFullPath ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                               sprintf ( 'On your server, try this command: <code>chmod a+w %s</code>' ,  $fileFullPath )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $pass  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $pass ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  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 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  checkExtension ( $name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( extension_loaded ( $name ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  elseif  ( function_exists ( 'dl' )  &&  ini_get ( 'enable_dl' )  &&  ! ini_get ( 'safe_mode' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // 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 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Basic  validation  on  the  database  paramters 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Side  effects :  error  output  if  not  valid 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ return  boolean  success 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  validateDb () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $fail  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $this -> host ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( " No hostname specified. " ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fail  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $this -> database ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( " No database specified. " ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fail  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $this -> username ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( " No username specified. " ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fail  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $this -> sitename ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( " No sitename specified. " ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fail  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ! $fail ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Basic  validation  on  the  administrator  user  paramters 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Side  effects :  error  output  if  not  valid 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ return  boolean  success 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  validateAdmin () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $fail  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $this -> adminNick ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 14:14:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> updateStatus ( " No initial user nickname specified. " ,  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            $fail  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> adminNick  &&  ! preg_match ( '/^[0-9a-z]{1,64}$/' ,  $this -> adminNick ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( 'The user nickname "'  .  htmlspecialchars ( $this -> adminNick )  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         '" is invalid; should be plain letters and numbers no longer than 64 characters.' ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fail  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-16 14:58:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // @fixme hardcoded list; should use Nickname::isValid()
 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        // if/when it's safe to have loaded the infrastructure here
 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-09 17:07:24 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $blacklist  =  array ( 'main' ,  'panel' ,  'twitter' ,  'settings' ,  'rsd.xml' ,  'favorited' ,  'featured' ,  'favoritedrss' ,  'featuredrss' ,  'rss' ,  'getfile' ,  'api' ,  'groups' ,  'group' ,  'peopletag' ,  'tag' ,  'user' ,  'message' ,  'conversation' ,  'notice' ,  'attachment' ,  'search' ,  'index.php' ,  'doc' ,  'opensearch' ,  'robots.txt' ,  'xd_receiver.html' ,  'facebook' ,  'activity' ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        if  ( in_array ( $this -> adminNick ,  $blacklist ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( 'The user nickname "'  .  htmlspecialchars ( $this -> adminNick )  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         '" is reserved.' ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $fail  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( empty ( $this -> adminPass ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 14:14:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> updateStatus ( " No initial user password specified. " ,  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            $fail  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  ! $fail ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Make  sure  a  site  profile  was  selected 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  type  boolean  success 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  validateSiteProfile () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 16:22:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $this -> siteProfile ))   { 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $this -> updateStatus ( " No site profile selected. " ,  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 16:22:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 16:22:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Set  up  the  database  with  the  appropriate  function  for  the  selected  type ... 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Saves  database  info  into  $this -> db . 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ fixme  escape  things  in  the  connection  string  in  case  we  have  a  funny  pass  etc 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ return  mixed  array  of  database  connection  params  on  success ,  false  on  failure 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  setupDatabase () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> db )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  Exception ( " Bad order of operations: DB already set up. " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $this -> updateStatus ( " Starting installation... " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 13:47:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( empty ( $this -> password ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $auth  =  '' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $auth  =  " : $this->password " ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $scheme  =  self :: $dbModules [ $this -> dbtype ][ 'scheme' ]; 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 13:47:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $dsn  =  " { $scheme } :// { $this -> username } { $auth } @ { $this -> host } / { $this -> database } " ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> updateStatus ( " Checking database... " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $conn  =  $this -> connectDatabase ( $dsn ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // ensure database encoding is UTF8
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> dbtype  ==  'mysql' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // @fixme utf8m4 support for mysql 5.5?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Force the comms charset to utf8 for sanity
 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 13:47:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // This doesn't currently work. :P
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            //$conn->executes('set names utf8');
 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        }  else  if  ( $this -> dbtype  ==  'pgsql' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $record  =  $conn -> getRow ( 'SHOW server_encoding' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $record -> server_encoding  !=  'UTF8' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 14:14:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $this -> updateStatus ( " GNU social requires UTF8 character encoding. Your database is  " .  htmlentities ( $record -> server_encoding )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-08-18 09:39:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $conn  instanceof  DB_common )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Is not the right instance
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            throw  new  Exception ( 'Cannot connect to database: '  .  $conn -> getMessage ()); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $res  =  $this -> updateStatus ( " Creating database tables... " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! $this -> createCoreTables ( $conn ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( " Error creating tables. " ,  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        foreach  ( array ( 'sms_carrier'  =>  'SMS carrier' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    'notice_source'  =>  'notice source' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    'foreign_services'  =>  'foreign service' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              as  $scr  =>  $name )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( sprintf ( " Adding %s data to database... " ,  $name )); 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $res  =  $this -> runDbScript ( $scr . '.sql' ,  $conn ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            if  ( $res  ===  false )  { 
							 
						 
					
						
							
								
									
										
										
										
											2012-04-02 21:41:37 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                $this -> updateStatus ( sprintf ( " Can't run %s script. " ,  $name ),  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $db  =  array ( 'type'  =>  $this -> dbtype ,  'database'  =>  $dsn ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  $db ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Open  a  connection  to  the  database . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  < type >  $dsn 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ return  < type > 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  connectDatabase ( $dsn ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-04 20:49:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        global  $_DB ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $_DB -> connect ( $dsn ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Create  core  tables  on  the  given  database  connection . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  DB_common  $conn 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  createCoreTables ( DB_common  $conn ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $schema  =  Schema :: get ( $conn ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $tableDefs  =  $this -> getCoreSchema (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $tableDefs  as  $name  =>  $def )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 13:47:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            if  ( defined ( 'DEBUG_INSTALLER' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                echo  "   $name   " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $schema -> ensureTable ( $name ,  $def ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-29 16:26:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Fetch  the  core  table  schema  definitions . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array  of  table  names  =>  table  def  arrays 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  getCoreSchema () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $schema  =  array (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        include  INSTALLDIR  .  '/db/core.php' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $schema ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-14 16:25:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Return  a  parseable  PHP  literal  for  the  given  value . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  This  will  include  quotes  for  strings ,  etc . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  mixed  $val 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  phpVal ( $val ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  var_export ( $val ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Return  an  array  of  parseable  PHP  literal  for  the  given  values . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  These  will  include  quotes  for  strings ,  etc . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  mixed  $val 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  array 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  phpVals ( $map ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  array_map ( array ( $this ,  'phpVal' ),  $map ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Write  a  stock  configuration  file . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  boolean  success 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ fixme  escape  variables  in  output  in  case  we  have  funny  chars ,  apostrophes  etc 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  writeConf () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-14 16:25:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $vals  =  $this -> phpVals ( array ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'sitename'  =>  $this -> sitename , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'server'  =>  $this -> server , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'path'  =>  $this -> path , 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-12 13:08:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'ssl'  =>  in_array ( $this -> ssl ,  array ( 'never' ,  'sometimes' ,  'always' )) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     ?  $this -> ssl 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     :  'never' , 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-14 16:25:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'db_database'  =>  $this -> db [ 'database' ], 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-27 16:02:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            'db_type'  =>  $this -> db [ 'type' ] 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-14 16:25:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        // assemble configuration file in a string
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cfg  =   " <?php \n " . 
							 
						 
					
						
							
								
									
										
										
										
											2013-09-18 00:35:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                " if (!defined('GNUSOCIAL'))  {  exit(1); } \n \n " . 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // site name
 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-14 16:25:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                " \$ config['site']['name'] =  { $vals [ 'sitename' ] } ; \n \n " . 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // site location
 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-14 16:25:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                " \$ config['site']['server'] =  { $vals [ 'server' ] } ; \n " . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " \$ config['site']['path'] =  { $vals [ 'path' ] } ;  \n \n " . 
							 
						 
					
						
							
								
									
										
										
										
											2013-08-12 13:08:14 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                " \$ config['site']['ssl'] =  { $vals [ 'ssl' ] } ;  \n \n " . 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // checks if fancy URLs are enabled
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ( $this -> fancy  ?  " \$ config['site']['fancy'] = true; \n \n " : '' ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // database
 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-14 16:25:43 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                " \$ config['db']['database'] =  { $vals [ 'db_database' ] } ; \n \n " . 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                ( $this -> db [ 'type' ]  ==  'pgsql'  ?  " \$ config['db']['quote_identifiers'] = true; \n \n " : '' ) . 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-03 23:07:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                " \$ config['db']['type'] =  { $vals [ 'db_type' ] } ; \n \n " . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " // Uncomment below for better performance. Just remember you must run \n " . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " // php scripts/checkschema.php whenever your enabled plugins change! \n " . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                " // \$ config['db']['schemacheck'] = 'script'; \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-27 16:02:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Normalize line endings for Windows servers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cfg  =  str_replace ( " \n " ,  PHP_EOL ,  $cfg ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-27 16:02:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // write configuration file out to install directory
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $res  =  file_put_contents ( INSTALLDIR . '/config.php' ,  $cfg ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $res ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Write  the  site  profile .  We  do  this  after  creating  the  initial  user 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  in  case  the  site  profile  is  set  to  single  user .  This  gets  around  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  'chicken-and-egg'  problem  of  the  system  requiring  a  valid  user  for 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  single  user  mode ,  before  the  intial  user  is  actually  created .  Yeah , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  we  should  probably  do  this  in  smarter  way . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  int  res  number  of  bytes  written 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  writeSiteProfile () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $vals  =  $this -> phpVals ( array ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'site_profile'  =>  $this -> siteProfile , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            'nickname'  =>  $this -> adminNick 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cfg  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // site profile
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        " \$ config['site']['profile'] =  { $vals [ 'site_profile' ] } ; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-27 14:25:12 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> siteProfile  ==  " singleuser " )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $cfg  .=  " \$ config['singleuser']['nickname'] =  { $vals [ 'nickname' ] } ; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $cfg  .=  " \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-11 12:16:13 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Normalize line endings for Windows servers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $cfg  =  str_replace ( " \n " ,  PHP_EOL ,  $cfg ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        // write configuration file out to install directory
 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-27 16:02:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $res  =  file_put_contents ( INSTALLDIR . '/config.php' ,  $cfg ,  FILE_APPEND ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  $res ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Install  schema  into  the  database 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  @ param  string     $filename  location  of  database  schema  file 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  DB_common  $conn      connection  to  database 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  boolean  -  indicating  success  or  failure 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 12:20:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    function  runDbScript ( $filename ,  DB_common  $conn ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $sql  =  trim ( file_get_contents ( INSTALLDIR  .  '/db/'  .  $filename )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $stmts  =  explode ( ';' ,  $sql ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach  ( $stmts  as  $stmt )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $stmt  =  trim ( $stmt ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! mb_strlen ( $stmt ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-29 16:26:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $res  =  $conn -> simpleQuery ( $stmt ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $error  =  $e -> getMessage (); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                $this -> updateStatus ( " ERROR ( $error ) for SQL ' $stmt ' " ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-29 16:26:45 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Create  the  initial  admin  user  account . 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 14:14:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     *  Side  effect :  may  load  portions  of  GNU  social  framework . 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  Side  effect :  outputs  program  info 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  registerInitialUser () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        require_once  INSTALLDIR  .  '/lib/common.php' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $data  =  array ( 'nickname'  =>  $this -> adminNick , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      'password'  =>  $this -> adminPass , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                      'fullname'  =>  $this -> adminNick ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $this -> adminEmail )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $data [ 'email' ]  =  $this -> adminEmail ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-01 12:36:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $user  =  User :: register ( $data ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // give initial user carte blanche
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $user -> grantRole ( 'owner' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $user -> grantRole ( 'moderator' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $user -> grantRole ( 'administrator' ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  The  beef  of  the  installer ! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Create  database ,  config  file ,  and  admin  user . 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  Prerequisites :  validation  of  input  data . 
							 
						 
					
						
							
								
									
										
										
										
											2011-08-26 21:10:24 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								     *  @ return  boolean  success 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    function  doInstall () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 16:22:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        global  $config ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 13:47:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> updateStatus ( " Initializing... " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ini_set ( 'display_errors' ,  1 ); 
							 
						 
					
						
							
								
									
										
										
										
											2014-07-10 13:16:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        error_reporting ( E_ALL  &  ~ E_STRICT  &  ~ E_NOTICE ); 
							 
						 
					
						
							
								
									
										
										
										
											2013-09-18 00:35:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! defined ( 'GNUSOCIAL' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            define ( 'GNUSOCIAL' ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-28 12:38:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! defined ( 'STATUSNET' ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-09-18 00:35:49 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            define ( 'STATUSNET' ,  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2011-04-28 12:38:07 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 16:22:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 13:47:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        require_once  INSTALLDIR  .  '/lib/framework.php' ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-02-27 12:44:15 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        GNUsocial :: initDefaults ( $this -> server ,  $this -> path ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 13:47:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-28 16:22:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( $this -> siteProfile  ==  " singleuser " )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Until we use ['site']['profile']==='singleuser' everywhere
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $config [ 'singleuser' ][ 'enabled' ]  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-15 13:47:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> db  =  $this -> setupDatabase (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $this -> db )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // database connection failed, do not move on to create config file.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        }  catch  ( Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Lower-level DB error!
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( " Database error:  "  .  $e -> getMessage (),  true ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-27 16:02:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        // Make sure we can write to the file twice
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $oldUmask  =  umask ( 000 );  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        if  ( ! $this -> skipConfig )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( " Writing config file... " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $res  =  $this -> writeConf (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $res )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $this -> updateStatus ( " Can't write config file. " ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! empty ( $this -> adminNick ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            // Okay, cross fingers and try to register an initial user
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $this -> registerInitialUser ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $this -> updateStatus ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    " An initial user with the administrator role has been created. " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $this -> updateStatus ( 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 14:14:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                    " Could not create initial user account. " , 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                    true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-08-27 16:02:00 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! $this -> skipConfig )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $this -> updateStatus ( " Setting site profile... " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $res  =  $this -> writeSiteProfile (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! $res )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $this -> updateStatus ( " Can't write to config file. " ,  true ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Restore original umask
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        umask ( $oldUmask ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Set permissions back to something decent
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        chmod ( INSTALLDIR . '/config.php' ,  0644 ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        
							 
						 
					
						
							
								
									
										
										
										
											2013-10-18 18:17:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $scheme  =  $this -> ssl  ===  'always'  ?  'https'  :  'http' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $link  =  " { $scheme } :// { $this -> server } / { $this -> path } " ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 14:14:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $this -> updateStatus ( " GNU social has been installed at  $link " ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        $this -> updateStatus ( 
							 
						 
					
						
							
								
									
										
										
										
											2014-03-01 14:14:39 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            '<strong>DONE!</strong> You can visit your <a href="' . htmlspecialchars ( $link ) . '">new GNU social site</a> (log in as "' . htmlspecialchars ( $this -> adminNick ) . '"). If this is your first GNU social install, make your experience the best possible by visiting our resource site to join the mailing list and <a href="http://gnu.io/resources/">good documentation</a>.' 
							 
						 
					
						
							
								
									
										
										
										
											2010-04-07 17:47:08 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Output  a  pre - install - time  warning  message 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $message  HTML  ok ,  but  should  be  plaintext - able 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $submessage  HTML  ok ,  but  should  be  plaintext - able 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    abstract  function  warning ( $message ,  $submessage = '' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Output  an  install - time  progress  message 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string  $message  HTML  ok ,  but  should  be  plaintext - able 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  boolean  $error  true  if  this  should  be  marked  as  an  error  condition 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    abstract  function  updateStatus ( $status ,  $error = false ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}