⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acinstallation.class.php

📁 ProjectPier 源码 很好的项目管理程序
💻 PHP
字号:
<?php  final class acInstallation {        /**    * Output object    *    * @var Output    */    private $output;        /**    * MySQL connection resource    *    * @var resource    */    private $database_connection;        /**    * Type of the database    *    * @var string    */    private $database_type = 'mysql';        /**    * Database host    *    * @var string    */    private $database_host;        /**    * Database username    *    * @var string    */    private $database_username;        /**    * Database password    *    * @var string    */    private $database_password;        /**    * Database name    *    * @var string    */    private $database_name;        /**    * Table prefix    *    * @var string    */    private $table_prefix;        /**    * Absolute URL    *    * @var string    */    private $absolute_url;      /**    * Constructor    *    * @param Output $output    * @return acInstallation    */    function __construct(Output $output) {      $this->setOutput($output);    } // __construct        /**    * Prepare and process config form    *    * @access public    * @param void    * @return boolean    */    function execute() {      $database_type   = $this->getDatabaseType();      $database_host   = $this->getDatabaseHost();      $database_user   = $this->getDatabaseUsername();      $database_pass   = $this->getDatabasePassword();      $database_name   = $this->getDatabaseName();      $database_prefix = $this->getTablePrefix();      $absolute_url    = $this->getAbsoluteUrl();      $installkey      = sha1(date('l dS \of F Y h:i:s A').$_SERVER['REMOTE_ADDR'].rand(10000,99999));            $connected = false;      if ($this->database_connection = @mysql_connect($database_host, $database_user, $database_pass)) {        $connected = @mysql_select_db($database_name, $this->database_connection);      } // if            if ($connected) {        $this->printMessage('Database connection has been established successfully');      } else {        return $this->breakExecution('Failed to connect to database with data you provided');      } // if            // ---------------------------------------------------      //  Check if we have InnoDB support      // ---------------------------------------------------            if ($this->haveInnoDbSupport()) {        $this->printMessage('InnoDB storage engine is supported');      } else {        return $this->breakExecution('InnoDB storage engine is not supported');      } // if            $constants = array(        'DB_ADAPTER'           => $database_type,        'DB_HOST'              => $database_host,        'DB_USER'              => $database_user,        'DB_PASS'              => $database_pass,        'DB_NAME'              => $database_name,        'DB_PERSIST'           => true,        'TABLE_PREFIX'         => $database_prefix,        'ROOT_URL'             => $absolute_url,        'DEFAULT_LOCALIZATION' => 'en_us',        'DEBUG'                => false,        'PRODUCT_VERSION'      => require INSTALLATION_PATH . '/version.php',        'SHOW_MESSAGE_BODY'    => true,        'SHOW_COMMENT_BODY'    => true,        'SHOW_MILESTONE_BODY'  => true,        'TOKEN_COOKIE_NAME'    => $installkey,      ); // array            tpl_assign('table_prefix', $database_prefix);      tpl_assign('absolute_url', $absolute_url);            // Check MySQL version      $mysql_version = mysql_get_server_info($this->database_connection);      if ($mysql_version && version_compare($mysql_version, '4.1', '>=')) {        $constants['DB_CHARSET'] = 'utf8';        @mysql_query("SET NAMES 'utf8'", $this->database_connection);        tpl_assign('default_collation', 'collate utf8_unicode_ci');        tpl_assign('default_charset', 'DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci');      } else {        tpl_assign('default_collation', '');        tpl_assign('default_charset', '');      } // if            @mysql_query('BEGIN WORK', $this->database_connection);            // Database construction      $total_queries = 0;      $executed_queries = 0;      if ($this->executeMultipleQueries(tpl_fetch(get_template_path('sql/mysql_schema.php')), $total_queries, $executed_queries)) {        $this->printMessage("Tables created in '$database_name'. (Executed queries: $executed_queries)");      } else {        return $this->breakExecution('Failed to import database construction. MySQL said: ' . mysql_error($this->database_connection));      } // if            // Initial data      $total_queries = 0;      $executed_queries = 0;      if ($this->executeMultipleQueries(tpl_fetch(get_template_path('sql/mysql_initial_data.php')), $total_queries, $executed_queries)) {        $this->printMessage("Initial data imported into '$database_name'. (Executed queries: $executed_queries)");      } else {        return $this->breakExecution('Failed to import initial data. MySQL said: ' . mysql_error($this->database_connection));      } // if            @mysql_query('COMMIT', $this->database_connection);            if ($this->writeConfigFile($constants)) {        $this->printMessage('Configuration data has been successfully added to the configuration file');      } else {        return $this->breakExecution('Failed to write config data into config file');      } // if            return true;    } // excute        // ---------------------------------------------------    //  Util methods    // ---------------------------------------------------        /**    * Add error message to all messages and break the execution    *    * @access public    * @param string $error_message Reason why we are breaking execution    * @return boolean    */    function breakExecution($error_message) {      $this->printMessage($error_message, true);      if (is_resource($this->database_connection)) {        @mysql_query('ROLLBACK', $this->database_connection);      } // if      return false;    } // breakExecution        /**    * Write $constants in config file    *    * @access public    * @param array $constants    * @return boolean    */    function writeConfigFile($constants) {      tpl_assign('config_file_constants', $constants);      return file_put_contents(INSTALLATION_PATH . '/config/config.php', tpl_fetch(get_template_path('config_file.php')));    } // writeConfigFile        /**    * This function will return true if server we are connected on has InnoDB support    *    * @param void    * @return boolean    */    function haveInnoDbSupport() {      if ($result = mysql_query("SHOW VARIABLES LIKE 'have_innodb'", $this->database_connection)) {        if ($row = mysql_fetch_assoc($result)) {          return strtolower(array_var($row, 'Value')) == 'yes';        } // if      } // if      return false;    } // haveInnoDBSupport        /**    * Execute multiple queries    *     * This one is really quick and dirty because I want to finish this and catch    * the bus. Need to be redone ASAP    *     * This function returns true if all queries are executed successfully    *    * @access public    * @todo Make a better implementation    * @param string $sql    * @param integer $total_queries Total number of queries in SQL    * @param integer $executed_queries Total number of successfully executed queries    * @return boolean    */    function executeMultipleQueries($sql, &$total_queries, &$executed_queries) {      if (!trim($sql)) {        $total_queries = 0;        $executed_queries = 0;        return true;      } // if            // Make it work on PHP 5.0.4      $sql = str_replace(array("\r\n", "\r"), array("\n", "\n"), $sql);            $queries = explode(";\n", $sql);      if (!is_array($queries) || !count($queries)) {        $total_queries = 0;        $executed_queries = 0;        return true;      } // if            $total_queries = count($queries);      foreach ($queries as $query) {        if (trim($query)) {          if (@mysql_query(trim($query))) {            $executed_queries++;          } else {            return false;          } // if        } // if      } // if            return true;    } // executeMultipleQueries        // ---------------------------------------------------    //  Getters and setters    // ---------------------------------------------------        /**    * Get output    *    * @param null    * @return Output    */    function getOutput() {      return $this->output;    } // getOutput        /**    * Set output value    *    * @param Output $value    * @return null    */    function setOutput(Output $value) {      $this->output = $value;      return $value;    } // setOutput        /**    * Print message through output object    *    * @param string $message    * @param boolean $is_error    * @return null    */    function printMessage($message, $is_error = false) {      if ($this->output instanceof Output) {        $this->output->printMessage($message, $is_error);      } // if    } // printMessage        /**    * Get database_type    *    * @param null    * @return string    */    function getDatabaseType() {      return $this->database_type;    } // getDatabaseType        /**    * Set database_type value    *    * @param string $value    * @return null    */    function setDatabaseType($value) {      $this->database_type = $value;    } // setDatabaseType        /**    * Get database_host    *    * @param null    * @return string    */    function getDatabaseHost() {      return $this->database_host;    } // getDatabaseHost        /**    * Set database_host value    *    * @param string $value    * @return null    */    function setDatabaseHost($value) {      $this->database_host = $value;    } // setDatabaseHost        /**    * Get database_username    *    * @param null    * @return string    */    function getDatabaseUsername() {      return $this->database_username;    } // getDatabaseUsername        /**    * Set database_username value    *    * @param string $value    * @return null    */    function setDatabaseUsername($value) {      $this->database_username = $value;    } // setDatabaseUsername        /**    * Get database_password    *    * @param null    * @return string    */    function getDatabasePassword() {      return $this->database_password;    } // getDatabasePassword        /**    * Set database_password value    *    * @param string $value    * @return null    */    function setDatabasePassword($value) {      $this->database_password = $value;    } // setDatabasePassword        /**    * Get database_name    *    * @param null    * @return string    */    function getDatabaseName() {      return $this->database_name;    } // getDatabaseName        /**    * Set database_name value    *    * @param string $value    * @return null    */    function setDatabaseName($value) {      $this->database_name = $value;    } // setDatabaseName        /**    * Get table_prefix    *    * @param null    * @return string    */    function getTablePrefix() {      return $this->table_prefix;    } // getTablePrefix        /**    * Set table_prefix value    *    * @param string $value    * @return null    */    function setTablePrefix($value) {      $this->table_prefix = $value;    } // setTablePrefix        /**    * Get absolute_url    *    * @param null    * @return string    */    function getAbsoluteUrl() {      return $this->absolute_url;    } // getAbsoluteUrl        /**    * Set absolute_url value    *    * @param string $value    * @return null    */    function setAbsoluteUrl($value) {      $this->absolute_url = $value;    } // setAbsoluteUrl    } // acInstallation?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -