Skip to content
Snippets Groups Projects
class.setup.php 3.35 KiB
Newer Older
Jared Hancock's avatar
Jared Hancock committed
<?php
/*********************************************************************
    class.setup.php

    osTicket setup wizard.

    Peter Rotich <peter@osticket.com>
    Copyright (c)  2006-2013 osTicket
Jared Hancock's avatar
Jared Hancock committed
    http://www.osticket.com

    Released under the GNU General Public License WITHOUT ANY WARRANTY.
    See LICENSE.TXT for details.

    vim: expandtab sw=4 ts=4 sts=4:
**********************************************************************/

Class SetupWizard {

    //Mimimum requirements
    var $prereq = array('php'   => '5.3',
                        'mysql' => '5.0');
Jared Hancock's avatar
Jared Hancock committed

    //Version info - same as the latest version.
Peter Rotich's avatar
Peter Rotich committed
    var $version =THIS_VERSION;
    var $version_verbose = THIS_VERSION;
Jared Hancock's avatar
Jared Hancock committed

    //Errors
    var $errors=array();

    function SetupWizard(){
        $this->errors=array();
        $this->version_verbose = ('osTicket '. strtoupper(THIS_VERSION));
Peter Rotich's avatar
Peter Rotich committed

    function load_sql_file($file, $prefix, $abort=true, $debug=false) {
Jared Hancock's avatar
Jared Hancock committed
        if(!file_exists($file) || !($schema=file_get_contents($file)))
            return $this->abort('Error accessing SQL file '.basename($file), $debug);
        return $this->load_sql($schema, $prefix, $abort, $debug);
Jared Hancock's avatar
Jared Hancock committed
    }

    /*
        load SQL schema - assumes MySQL && existing connection
        */
    function load_sql($schema, $prefix, $abort=true, $debug=false) {
Jared Hancock's avatar
Jared Hancock committed

        # Strip comments and remarks
        $schema=preg_replace('%^\s*(#|--).*$%m', '', $schema);
        $schema = str_replace('%TABLE_PREFIX%', $prefix, $schema);
        if(!($statements = array_filter(array_map('trim',
                // Thanks, http://stackoverflow.com/a/3147901
                preg_split("/;(?=(?:[^']*'[^']*')*[^']*$)/", $schema)))))
            return $this->abort('Error parsing SQL schema', $debug);
        db_query('SET SESSION SQL_MODE =""', false);
Jared Hancock's avatar
Jared Hancock committed
        foreach($statements as $k=>$sql) {
            if(db_query($sql, false)) continue;
            $error = "[$sql] ".db_error();
            if($abort)
                    return $this->abort($error, $debug);
Jared Hancock's avatar
Jared Hancock committed
        }

        return true;
    }

    function getVersion() {
        return $this->version;
    }

    function getVersionVerbose() {
        return $this->version_verbose;
    }

    function getPHPVersion() {
        return $this->prereq['php'];
    }

    function getMySQLVersion() {
        return $this->prereq['mysql'];
    }

    function check_php() {
        return (version_compare(PHP_VERSION, $this->getPHPVersion())>=0);
Jared Hancock's avatar
Jared Hancock committed
    }

    function check_mysql() {
        return (extension_loaded('mysqli'));
    function check_mysql_version() {
        return (version_compare(db_version(), $this->getMySQLVersion())>=0);
    }

Jared Hancock's avatar
Jared Hancock committed
    function check_prereq() {
        return ($this->check_php() && $this->check_mysql());
    }

    /*
        @error is a mixed var.
    */
    function abort($error, $debug=false) {
        if($debug) echo $error;
        $this->onError($error);

        return false; // Always false... It's an abort.
    }
    function setError($error) {
Jared Hancock's avatar
Jared Hancock committed
        if($error && is_array($error))
            $this->errors = array_merge($this->errors, $error);
Jared Hancock's avatar
Jared Hancock committed
        elseif($error)
            $this->errors[] = $error;
    }

    function getErrors(){
        return $this->errors;
    }

    function onError($error) {
       return $this->setError($error);