linea21-externals
[ class tree: linea21-externals ] [ index: linea21-externals ] [ all elements ]

Source for file Installer.php

Documentation is available at Installer.php

  1. <?php
  2. /**
  3.  * @package linea21.externals
  4.  * @subpackage Class Installer
  5.  * @author Vadim V. Gabriel <vadimg88@gmail.com> - modified by Simon Georget <simon@linea21.com>
  6.  * @link http://www.vadimg.co.il/
  7.  * @version 1.0.0a
  8.  * @license GNU Lesser General Public License
  9.  */
  10.  
  11. /** Load the template class **/
  12. require_once(INSTALLER_PATH '/Installer_Template.php');
  13.  
  14.  
  15. /**
  16.  * Class installer
  17.  *
  18.  */
  19. class Installer
  20. {
  21.   /**
  22.    * Options property
  23.    *
  24.    * @var array 
  25.    */
  26.   protected $_options = array();
  27.  
  28.   /**
  29.    * View object
  30.    *
  31.    * @var object 
  32.    */
  33.   protected $view;
  34.  
  35.   /**
  36.    * Language array
  37.    *
  38.    * @var array 
  39.    */
  40.   protected $lang = array();
  41.  
  42.   protected $default_lang = U_L;
  43.  
  44.   /**
  45.    * Constructor
  46.    *
  47.    */
  48.   public function __construct()
  49.   {
  50.     # Do we have a cookie
  51.     if(isset($_COOKIE['lang']&& $_COOKIE['lang'!= '')
  52.     {
  53.       $this->default_lang = $_COOKIE['lang'];
  54.     }
  55.  
  56.     # Change language
  57.     if(isset($_POST['lang']&& $_POST['lang'!= '' && $this->default_lang != $_POST['lang'])
  58.     {
  59.       $path INSTALLER_PATH DIRECTORY_SEPARATOR 'data' DIRECTORY_SEPARATOR 'lang' DIRECTORY_SEPARATOR $_POST['lang''.php';
  60.  
  61.       $path '../languages/' .$_POST['lang']'/installer.utf-8.php';
  62.  
  63.       if(file_exists($path))
  64.       {
  65.         $this->default_lang = $_POST['lang'];
  66.         @setcookie('lang'$this->default_langtime(60 60 24);
  67.         $_POST['lang'0;
  68.         $this->nextStep('index');
  69.       }
  70.     }
  71.  
  72.     # Load the language file
  73.     require_once'../languages/' .$this->default_lang'/installer.utf-8.php' );
  74.  
  75.     $this->lang = $lang;
  76.  
  77.     # Load the template class
  78.     $this->view = new Installer_Template($this->lang);
  79.  
  80.     # Did we run it again?
  81.     if(file_exists(INSTALLER_PATH DIRECTORY_SEPARATOR 'data' DIRECTORY_SEPARATOR 'installer.lock'))
  82.     {
  83.       $this->view->error($this->lang['L-01']);
  84.     }
  85.  
  86.     $allwed_steps array('index' => 'indexAction''db' => 'dbAction''cfg' => 'configAction''database' => 'dbTables''config' => 'configWrite''finish' => 'finishInstaller');
  87.     if(!in_array($_POST['step']array_keys($allwed_steps)))
  88.     {
  89.       $this->nextStep('index');
  90.     }
  91.  
  92.     # Display the right step
  93.     $this->$allwed_steps[$_POST['step']]($_POST);
  94.   }
  95.  
  96.   /**
  97.    * Show welcome message
  98.    *
  99.    */
  100.   public function indexAction()
  101.   {
  102.     $_SESSION array()// unset session
  103.  
  104.     $options CultureSelectBox('lang'$this->default_lang);
  105.  
  106.     $this->view->vars array('options' => $options);
  107.     $this->view->render('index');
  108.   }
  109.  
  110.   /**
  111.    * Show database setup stuff
  112.    *
  113.    */
  114.   public function dbAction()
  115.   {
  116.     $this->view->render('db');
  117.   }
  118.  
  119.   public function configAction()
  120.   {
  121.     $root_path str_replace('install'''ROOT_PATH);
  122.     $root_url =str_replace('install/install.php'''BASE_URL);
  123.     $this->view->vars array('root_url' => $root_url'path' => $root_path);
  124.     $this->view->render('config');
  125.   }
  126.  
  127.   /**
  128.    * Handle DB table quries
  129.    *
  130.    * @param array $options 
  131.    */
  132.   public function dbTables(array $options)
  133.   {
  134.     # Make sure we have an array of options
  135.     if(!is_array($options))
  136.     {
  137.       $this->view->error($this->lang['L-02']);
  138.     }
  139.     # Make sure we have everything we need!
  140.     $required_db_options array('dbtype''dbname''dbuser''dbpass''dbhost');
  141.     foreach ($required_db_options as $required_db_option)
  142.     {
  143.       // set in session
  144.       if(isset($_SESSION[$required_db_option])) unset ($_SESSION[$required_db_option]);
  145.       $_SESSION[$required_db_option$options[$required_db_option];
  146.  
  147.       if(!isset($options[$required_db_option]))
  148.       {
  149.         $this->view->error($this->lang['L-03']);
  150.       }
  151.     }
  152.  
  153.     # Pass in to the options property
  154.     $this->_options $options;
  155.  
  156.     if($this->_options['dbtype']=='mysql'{
  157.       # First test the connection
  158.       $link mysql_connect($this->_options['dbhost']$this->_options['dbuser']$this->_options['dbpass']);
  159.       if(!$link)
  160.       {
  161.         $this->view->error($this->lang['L-04']);
  162.       }
  163.  
  164.       # Select the DB
  165.       $db_selected mysql_select_db($this->_options['dbname']$link);
  166.       mysql_query("SET NAMES 'utf8'");
  167.       if(!$db_selected && $this->_options['create_database']==0)
  168.       {
  169.         $this->view->error($this->lang['L-05']);
  170.       }
  171.       elseif (!$db_selected && $this->_options['create_database']==1)
  172.       {
  173.         # Create the DB
  174.         $result mysql_query("CREATE DATABASE {$this->_options['dbname']}"$link);
  175.         if (!$result)
  176.         {
  177.           $this->view->error(sprintf($this->lang['L-06']$this->_options['dbname']htmlspecialchars(mysql_error())));
  178.         else {
  179.           $db_selected mysql_select_db($this->_options['dbname']$link);
  180.           mysql_query("SET NAMES 'utf8'");
  181.         }
  182.       }
  183.     elseif($this->_options['dbtype']=='pgsql'{
  184.       $linkpg_connect('host=' .$this->_options['dbhost']' port=5432 dbname=' $this->_options['dbname'' user=' $this->_options['dbuser']' password='  $this->_options['dbpass']);
  185.       if(!$link)
  186.       {
  187.         $this->view->error($this->lang['L-04']);
  188.       }
  189.  
  190.     }
  191.  
  192.     # Load the database stuff
  193.     require_once'../languages/' .$this->default_lang'/installer_input.utf-8.php' );
  194.     $path INSTALLER_PATH DIRECTORY_SEPARATOR 'data' DIRECTORY_SEPARATOR 'database.php' ;
  195.     if(!file_exists($path))
  196.     {
  197.       $this->view->error(sprintf($this->lang['L-07']$path));
  198.     }
  199.  
  200.     $SQL array();
  201.     require_once($path);
  202.  
  203.     $count 0;
  204.     $errors_count 0;
  205.  
  206.     # Loop if we have any
  207.     if(count($SQL))
  208.     {
  209.       # Start the count
  210.  
  211.       $errors array();
  212.       foreach ($SQL as $query)
  213.       {
  214.         if($this->_options['dbtype'== 'mysql')  $result mysql_query($query$link);
  215.         else $result pg_query($link$query);
  216.  
  217.         if (!$result)
  218.         {
  219.           if($this->_options['dbtype'== 'mysql')  $errors[sprintf($this->lang['L-08']htmlspecialchars(mysql_error()));
  220.           else $errors[sprintf($this->lang['L-08']htmlspecialchars(pg_last_error()));
  221.           $errors_count++;
  222.           continue;
  223.         }
  224.  
  225.         # Increase it
  226.         $count++;
  227.       }
  228.     }
  229.  
  230.     $error_string '';
  231.  
  232.     # Did we had any errors?
  233.     if(count($errors))
  234.     {
  235.       $error_string "<br /><br />".sprintf($this->lang['I-14']implode("<br /><br />"$errors));
  236.     }
  237.  
  238.     # Redirect
  239.     $this->view->vars array('message' => sprintf($this->lang['L-09']$count$errors_count$error_string)'button' => $error_string $this->lang['I-16'$this->lang['I-03']);
  240.     $this->view->render('dbdone');
  241.  
  242.   }
  243.  
  244.   /**
  245.    * Display everything
  246.    *
  247.    */
  248.   public function display()
  249.   {
  250.     $this->view->display();
  251.   }
  252.  
  253.   /**
  254.    * Write the configuration File
  255.    *
  256.    */
  257.   public function configWrite()
  258.   {
  259.     include_once('../class/class.config_file.php');
  260.  
  261.     $config_file new config_file;
  262.  
  263.     // update DB settings
  264.     $ini_db=array();
  265.     $ini_db['DB_NAME']=$_SESSION['dbname'];
  266.     $ini_db['DB_USER']=$_SESSION['dbuser'];
  267.     $ini_db['DB_PASS']=$_SESSION['dbpass'];
  268.     $ini_db['DB_HOST']=$_SESSION['dbhost'];
  269.  
  270.     // update main ini file
  271.     $ini_r=array();
  272.  
  273.     $ini_r['LANGUAGE']=$this->default_lang;
  274.     if(substr($this->default_lang02== 'en'$ini_r['DATE_FORMAT']="yyyy-mm-dd";
  275.     else $ini_r['DATE_FORMAT']="dd-mm-yyyy";
  276.     $ini_r['SITE_NAME']=$_POST['SITE_NAME'];
  277.     $ini_r['SITE_PATH']=$_POST['SITE_PATH'];
  278.     $ini_r['SITE_ROOT_URL']=$_POST['SITE_ROOT_URL'];
  279.  
  280.     // mail settings
  281.     $ini_r['SITE_MAIL']=$_POST['MAIL_FROM'];
  282.     $ini_r['MAIL_FROM']=$_POST['MAIL_FROM'];
  283.     $ini_r['MAIL_FROMNAME']=$_POST['MAIL_FROMNAME'];
  284.     $ini_r['MAIL_REPLY']=$_POST['MAIL_FROM'];
  285.     $ini_r['MAIL_REPLYNAME']=$_POST['MAIL_FROMNAME'];
  286.     $ini_r['SQL']=$_SESSION['dbtype'];
  287.  
  288.     $config_file->setParams('define_release',$ini_r);
  289.     $config_file->setParams('define_db',$ini_db);
  290.  
  291.  
  292.     $config_file->writeDbParams();
  293.     $config_file->writeReleaseParams();
  294.  
  295.     $this->finishInstaller();
  296.   }
  297.  
  298.   /**
  299.    * Finish the installer proccess
  300.    *
  301.    */
  302.   public function finishInstaller()
  303.   {
  304.     # Lock the installer
  305.     $path INSTALLER_PATH DIRECTORY_SEPARATOR 'data' DIRECTORY_SEPARATOR 'installer.lock';
  306.     file_put_contents($path"installer lock file");
  307.     $_SESSION array();
  308.     $this->view->render('finish');
  309.   }
  310.  
  311.   /**
  312.    * Redirect to the next step
  313.    *
  314.    * @param string $step 
  315.    */
  316.   public function nextStep($step)
  317.   {
  318.     $url BASE_URL '?step='.$step;
  319.     if(!headers_sent())
  320.     {
  321.       header('Location: '$url);
  322.       exit;
  323.     }
  324.  
  325.     print "<html><body><meta http-equiv='refresh' content='1;url={$url}'></body></html>";
  326.     exit;
  327.   }
  328.  
  329.   /**
  330.    * Redirect screen with a message
  331.    *
  332.    * @param string $message 
  333.    */
  334.   public function redirectScreen($message$step)
  335.   {
  336.     $this->view->redirect($message$step);
  337.   }
  338.  
  339.  
  340.   /**
  341.    * Destructor
  342.    *
  343.    */
  344.   public function __destruct()
  345.   {
  346.  
  347.  
  348.     @mysql_close();
  349.     @pg_close();
  350.     # Clear
  351.     unset($this);
  352.   }
  353.  
  354. }

Documentation generated on Thu, 03 May 2012 15:05:13 +0200 by phpDocumentor 1.4.1