Changeset 3123

Show
Ignore:
Timestamp:
06/04/07 16:24:00 (3 weeks ago)
Author:
demian
Message:

bugfix to trunk merge -1

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/SGL/Install/Common.php

    r2355 r3123  
    9898    } 
    9999 
     100    function ensureWebrootSet() 
     101    { 
     102        if (!defined('SGL_BASE_URL')) { 
     103            if (@preg_match('/^(.*)\/.*\.php$/', $_SERVER['SCRIPT_NAME'], $aMatches)) { 
     104                define('SGL_BASE_URL', $aMatches[1]); 
     105            } else { 
     106                die('Could not set webroot'); 
     107            } 
     108        } 
     109    } 
     110 
    100111    /** 
    101112     * Returns html head section of page, only used for 'enter passwd for 
     
    111122            return false; 
    112123        } 
    113         SGL_URL::ensureWebrootSet(); 
     124        SGL_Install_Common::ensureWebrootSet(); 
    114125        $baseUrl = SGL_BASE_URL; 
    115126        $html = <<<HTML 
     
    176187                </div> 
    177188                <span class="error">* </span>Password 
    178                 <input type="password" name="frmPassword" maxlength="24" /> 
     189                <input type="password" name="frmSetupPassword" maxlength="24" /> 
    179190            </div> 
    180191            <p><input type="submit" class="formsubmit" name="submitted" value="Enter" /></p> 
     
    217228        return array('block', 'default', 'navigation', 'user'); 
    218229    } 
     230 
     231    /** 
     232     * This adds default values for the installer form, based on a ini file. 
     233     * 
     234     * @return array 
     235     */ 
     236    function overrideDefaultInstallSettings($aData = array()) 
     237    { 
     238        //  flatten module array if exists 
     239        if (array_key_exists('aModuleList', $aData)) { 
     240            $aData['aModuleList'] = implode(',', $aData['aModuleList']); 
     241        } 
     242        //  read in custom install defaults 
     243        $customConfig = SGL_PATH . '/etc/customInstallDefaults.ini'; 
     244        if (file_exists($customConfig)) { 
     245            $aOverrideData = parse_ini_file($customConfig, true); 
     246        } else { 
     247            $aOverrideData = array(); 
     248        } 
     249        //  override data passed as arg with custom data 
     250        $aRet = array_merge($aData, $aOverrideData); 
     251 
     252        //  explode module data back to array 
     253        if (!empty($aRet['aModuleList'])) { 
     254            $aRet['aModuleList'] = explode(',', $aRet['aModuleList']); 
     255        } 
     256        return $aRet; 
     257    } 
    219258} 
    220259 
  • trunk/lib/SGL/Install/QuickFormOverride.php

    r2355 r3123  
    4040        function init() 
    4141        { 
    42             //  temp measure 
    43             var prefix = document.getElementById('prefix'); 
    44             if (prefix != null) { 
    45                 prefix.disabled = true; 
    46             } 
    47  
    4842            //  disable 'use existing data' by default 
    4943            var useExistingData = document.getElementById('useExistingData'); 
     
    6155            if (dbLoginName != null) { 
    6256                dbLoginName.disabled = true; 
     57            } 
     58 
     59            //  toggle translation setup 
     60            var dbStorageSelected = document.getElementById('storeTranslationsInDB'); 
     61            if (dbStorageSelected != null && dbStorageSelected.checked) { 
     62                document.getElementById('moreOptionsLink').innerHTML = 'Hide'; 
     63                document.getElementById('moreOptionsContainer').style.display = 'block'; 
    6364            } 
    6465        } 
     
    130131 
    131132        } 
     133 
     134        function toggleMysqlCluster(enable) 
     135        { 
     136            var mysqlCluster = document.getElementById('mysqlCluster'); 
     137 
     138            if (enable) { 
     139                mysqlCluster.disabled = false; 
     140            } else { 
     141                mysqlCluster.checked = false; 
     142                mysqlCluster.disabled = true; 
     143            } 
     144        } 
     145 
     146        function toggleMoreOptions(containerName, oTrigger) 
     147        { 
     148            var elem = document.getElementById(containerName); 
     149            if (elem.style.display == 'none') { 
     150                elem.style.display = 'block'; 
     151                oTrigger.innerHTML = 'Hide'; 
     152            } else { 
     153                elem.style.display = 'none'; 
     154                oTrigger.innerHTML = 'Show'; 
     155            } 
     156        } 
    132157    </script> 
    133158</head> 
  • trunk/lib/SGL/Install/WizardCreateAdminUser.php

    r2264 r3123  
    7777                : SGL_PATH . '/www', 
    7878            )); 
    79         $this->setDefaults(overrideDefaultInstallSettings()); 
    80          
     79        $this->setDefaults(SGL_Install_Common::overrideDefaultInstallSettings()); 
     80 
    8181        //  setup admin user 
    8282        $this->addElement('hidden',  'frameworkVersion', ''); 
     
    118118 
    119119        //  set lang 
    120         $aInstalledLanguages =  @$_SESSION["_installationWizard_container"]['values']['page4']['installLangs']; 
     120        $aInstalledLanguages = isset($_SESSION["_installationWizard_container"]['values']['page5']['installLangs']) 
     121            ? $_SESSION["_installationWizard_container"]['values']['page5']['installLangs'] 
     122            : array(); 
     123 
    121124        if (count($aInstalledLanguages)) { 
    122125 
  • trunk/lib/SGL/Install/WizardCreateDb.php

    r2359 r3123  
    7272        : ''; 
    7373    $dsn = $aFormValues['dbType']['type'] . '://' . 
    74         $aFormValues['user'] . ':' . 
    75         $aFormValues['pass'] . '@' . 
     74        $aFormValues['databaseUser'] . ':' . 
     75        $aFormValues['databaseUserPass'] . '@' . 
    7676        $protocol . 
    7777        $host . $port . $dbName; 
     
    128128        $this->setDefaults(array( 
    129129            'name' => 'seagull', 
    130             'prefix' => 'not implemented yet', 
     130            'prefix' => '', 
    131131            'insertSampleData' => false, 
    132132            )); 
    133         $this->setDefaults(overrideDefaultInstallSettings()); 
     133        $this->setDefaults(SGL_Install_Common::overrideDefaultInstallSettings()); 
    134134 
    135135        $this->addElement('header', null, 'Database Setup: page 5 of 6'); 
     
    153153 
    154154        //  db prefix 
    155         $this->addElement('text', 'prefix', 'Table prefix: ', 'id=prefix'); 
     155        $this->addElement('text', 'prefix', 'Table prefix: '); 
     156        $this->addRule('prefix', 'Only letters and digits are allowed, first ' . 
     157            'symbol must be a letter, last symbol can be an underscore', 
     158            'regex', '/^[a-zA-Z]([a-zA-Z0-9]+)?_?$/'); 
    156159 
    157160        //  sample data 
     
    159162 
    160163        if (SGL_MINIMAL_INSTALL == false) { 
     164 
     165            $moreOptionsLinkName = 'Show'; 
     166            $this->addElement('link', null, 'Advanced options', '#', $moreOptionsLinkName, 
     167                array( 
     168                    'onclick' => 'toggleMoreOptions(\'moreOptionsContainer\', this)', 
     169                    'id'      => 'moreOptionsLink' 
     170                )); 
     171            // deprecated method - open container 
     172            $this->addElement('html', ' 
     173                </table> 
     174                <div id="moreOptionsContainer" style="display: none;"> 
     175                    <table border="0" width="800px">'); 
     176 
    161177            $this->addElement('header', null, 'Translation Setup'); 
    162178 
     
    171187 
    172188            //  store translation in db 
    173             $this->addElement('checkbox', 'addMissingTranslationsToDB', 'EXPERIMENTAL - Add missing Translations to Database?', 
    174                 'Yes', "id = addMissingTranslationsToDB"); 
     189            $this->addElement('checkbox', 'addMissingTranslationsToDB', 'Add missing Translations to Database?', 
     190                'Yes (EXPERIMENTAL - use at your own risk)', "id = addMissingTranslationsToDB"); 
     191 
     192            // deprecated method - close container 
     193            $this->addElement('html', ' 
     194                    </table> 
     195                </div> 
     196                </table> 
     197                <table border="0">'); 
     198 
    175199        } else { 
    176200            $this->addElement('hidden', 'a', 'aa', "id = storeTranslationsInDB"); 
  • trunk/lib/SGL/Install/WizardDetectEnv.php

    r2375 r3123  
    6767            'detectEnv' => 1, 
    6868            )); 
    69         $this->setDefaults(overrideDefaultInstallSettings()); 
     69        $this->setDefaults(SGL_Install_Common::overrideDefaultInstallSettings()); 
    7070 
    7171        $this->addElement('header',     null, 'Detect Environment: page 3 of 6'); 
  • trunk/lib/SGL/Install/WizardLicenseAgreement.php

    r2264 r3123  
    6060            'license' => $licenseTxt, 
    6161            )); 
    62         $this->setDefaults(overrideDefaultInstallSettings()); 
     62        $this->setDefaults(SGL_Install_Common::overrideDefaultInstallSettings()); 
    6363 
    6464        $this->addElement('header',     null, 'Seagull License Agreement: page 1 of 6'); 
  • trunk/lib/SGL/Install/WizardTestDbConnection.php

    r2425 r3123  
    6161                : ''; 
    6262    $dsn = $aFormValues['dbType']['type'] . '://' . 
    63         $aFormValues['user'] . ':' . 
    64         $aFormValues['pass'] . '@' . 
     63        $aFormValues['databaseUser'] . ':' . 
     64        $aFormValues['databaseUserPass'] . '@' . 
    6565        $protocol . 
    6666        $host . $port . $dbName; 
     
    107107            'dbName'  => 'not required for MySQL login', 
    108108            )); 
    109         $this->setDefaults(overrideDefaultInstallSettings()); 
     109        $this->setDefaults(SGL_Install_Common::overrideDefaultInstallSettings()); 
    110110 
    111111        //  type 
    112112        $radio[] = &$this->createElement('radio', 'type',     'Database type: ', 
    113             "mysql_SGL (all sequences in one table)", 'mysql_SGL', 'onClick="toggleDbNameForLogin(false);"'); 
     113            "mysql_SGL (all sequences in one table)", 'mysql_SGL', 'onClick="toggleDbNameForLogin(false);toggleMysqlCluster(true);"'); 
    114114        $radio[] = &$this->createElement('radio', 'type',     '', "mysql",  'mysql', 
    115             'onClick="toggleDbNameForLogin(false);"'); 
     115            'onClick="toggleDbNameForLogin(false);toggleMysqlCluster(false);"'); 
    116116 
    117117        if (SGL_MINIMAL_INSTALL == false) { 
    118118            $radio[] = &$this->createElement('radio', 'type',     '', "postgres", 'pgsql', 
    119                 'onClick="toggleDbNameForLogin(true);"'); 
    120             $radio[] = &$this->createElement('radio', 'type',     '', "oci8", 'oci8_SGL', 
    121                 'onClick="toggleDbNameForLogin(true);"'); 
     119                'onClick="toggleDbNameForLogin(true);toggleMysqlCluster(false);"'); 
     120            //$radio[] = &$this->createElement('radio', 'type',     '', "oci8", 'oci8_SGL', 
     121            //    'onClick="toggleDbNameForLogin(true);toggleMysqlCluster(false);"'); 
    122122        } 
    123123        $this->addGroup($radio, 'dbType', 'Database type:', '<br />'); 
    124124        $this->addGroupRule('dbType', 'Please specify a db type', 'required'); 
     125 
     126        //  mysql cluster 
     127        $this->addElement('checkbox', 'mysqlCluster', 'Install on MySQL Cluster', 'Yes (only for mysql cluster installs!)', 'id=mysqlCluster'); 
    125128 
    126129        //  host 
     
    153156 
    154157        //  credentials 
    155         $this->addElement('text',  'user',    'Database username: '); 
    156         $this->addElement('password', 'pass', 'Database password: '); 
     158        $this->addElement('text',  'databaseUser',    'Database username: '); 
     159        $this->addElement('password', 'databaseUserPass', 'Database password: '); 
    157160        $this->addElement('text',  'dbName',    'Database name: ', array( 
    158161            'id' => 'dbLoginNameElement', 'size'=> 25)); 
    159         $this->addRule('user', 'Please specify the db username', 'required'); 
     162        $this->addRule('databaseUser', 'Please specify the db username', 'required'); 
    160163 
    161164        //  test db connect 
    162165        $this->registerRule('canConnectToDbServer','function','canConnectToDbServer'); 
    163         $this->addRule('user', 'cannot connect to the db, please check all credentials', 'canConnectToDbServer'); 
     166        $this->addRule('databaseUser', 'cannot connect to the db, please check all credentials', 'canConnectToDbServer'); 
    164167 
    165168        //  submit 
  • trunk/lib/SGL/Task/CoreProcessor.php

    r1921 r3123  
    1212        SGL::logMessage(null, PEAR_LOG_DEBUG); 
    1313 
    14         $req = $input->getRequest(); 
    15         $mgr = $input->get('manager'); 
    16         $conf = $mgr->conf; 
     14        $req = $input->getRequest(); 
     15        $mgr = $input->get('manager'); 
     16 
    1717        $mgr->validate($req, $input); 
    1818        $input->aggregate($output); 
    1919 
    20         $ok = $mgr->process($input, $output); 
    21         if (PEAR::isError($ok)) { 
    22             //  stop with error page 
    23             SGL::displayStaticPage($ok->getMessage()); 
     20        //  process data if valid 
     21        if ($mgr->isValid()) { 
     22            $ok = $mgr->process($input, $output); 
     23            if (SGL_Error::count()) { 
     24                $mgr->handleError(SGL_Error::getLast(), $output); 
     25            } 
    2426        } 
     27        $mgr->display($output); 
    2528    } 
    2629} 
  • trunk/lib/SGL/Task/CustomBuildOutputData.php

    r1921 r3123  
    11<?php 
     2/** 
     3 * Minimal output setup. 
     4 * 
     5 * @package Task 
     6 * @author  Demian Turner <demian@phpkitchen.com> 
     7 */ 
    28class SGL_Task_CustomBuildOutputData extends SGL_DecorateProcess 
    39{ 
  • trunk/lib/SGL/Task/DetectEnv.php

    r2425 r3123  
    126126            //  exception for php version check 
    127127            if (preg_match("/>.*/", $depValue)) { 
    128                 $comparator = $depValue{0}; 
    129128                $value = substr($depValue, 1); 
    130129                if (version_compare($actual, $value, 'g')) { 
     
    197196        'apc' => array(SGL_FORBIDDEN => 0), 
    198197        'curl' => array(SGL_RECOMMENDED => 1), 
    199         'dom' => array(SGL_RECOMMENDED => 1), 
    200         'domxml' => array(SGL_RECOMMENDED => 1), 
    201198        'gd' => array(SGL_RECOMMENDED => 1), 
    202199        'iconv' => array(SGL_RECOMMENDED => 1), 
     
    221218    function run() 
    222219    { 
     220        if (SGL::isPhp5()) { 
     221            $this->aRequirements['dom'] = array(SGL_RECOMMENDED => 1); 
     222        } else { 
     223            $this->aRequirements['domxml'] = array(SGL_RECOMMENDED => 1); 
     224        } 
    223225        foreach ($this->aRequirements as $m => $dep) { 
    224226            $this->aData[$m] = bool2int(extension_loaded($m)); 
     
    273275    var $key = 'php.ini_settings'; 
    274276    var $aRequirements = array( 
    275         'safe_mode' => array(SGL_RECOMMENDED => 0), 
     277        'safe_mode' => array(SGL_REQUIRED => 0), 
    276278        'register_globals' => array(SGL_RECOMMENDED => 0), 
    277279        'magic_quotes_gpc' => array(SGL_RECOMMENDED => 0), 
     
    285287 
    286288    var $aErrors = array( 
     289        'safe_mode' => "This software will not work correctly if safe_mode is enabled", 
    287290        'memory_limit' => "Please set the option 'memory_limit' in your php.ini to a minimum of 16MB", 
    288291        ); 
  • trunk/lib/SGL/Task/Init.php

    r2475 r3123  
    6868            define('SGL_LIB_PEAR_DIR', '@PHP-DIR@'); 
    6969        } else { 
    70             define('SGL_PATH', dirname(dirname(dirname(dirname(__FILE__))))); 
     70            $path = $GLOBALS['varDir']  . '/INSTALL_COMPLETE.php'; 
     71            if (is_file($path)) { 
     72                $configFile = $GLOBALS['varDir']  . '/' 
     73                    . SGL_Task_SetupPaths::hostnameToFilename() . '.conf.php'; 
     74                require_once $configFile; 
     75                if (!empty($conf['path']['installRoot'])) { 
     76                    define('SGL_PATH', $conf['path']['installRoot']); 
     77                } 
     78            } else { 
     79                define('SGL_PATH', $GLOBALS['rootDir']); 
     80            } 
    7181            define('SGL_LIB_PEAR_DIR', SGL_PATH . '/lib/pear'); 
    7282        } 
     
    7585            define('PATH_SEPARATOR', (substr(PHP_OS, 0, 3) == 'WIN') ? ';' : ':'); 
    7686        } 
    77         $allowed = @ini_set('include_path', '.' . PATH_SEPARATOR 
    78             . SGL_LIB_PEAR_DIR); 
     87        $sglPath = '.' . PATH_SEPARATOR . SGL_LIB_PEAR_DIR; 
     88        $allowed = @ini_set('include_path', $sglPath); 
    7989        if (!$allowed) { 
    8090            //  depends on PHP version being >= 4.3.0 
     
    153163        //  error codes to use with SGL::raiseError() 
    154164        //  start at -100 in order not to conflict with PEAR::DB error codes 
    155         define('SGL_ERROR_INVALIDARGS',         -101);  // wrong args to function 
    156         define('SGL_ERROR_INVALIDCONFIG',       -102);  // something wrong with the config 
    157         define('SGL_ERROR_NODATA',              -103);  // no data available 
    158         define('SGL_ERROR_NOCLASS',             -104);  // no class exists 
    159         define('SGL_ERROR_NOMETHOD',            -105);  // no method exists 
    160         define('SGL_ERROR_NOAFFECTEDROWS',      -106);  // no rows where affected by update/insert/delete 
    161         define('SGL_ERROR_NOTSUPPORTED'  ,      -107);  // limit queries on unsuppored databases 
     165 
     166        /** 
     167         * Wrong args to function. 
     168         */ 
     169        define('SGL_ERROR_INVALIDARGS',         -101); 
     170        /** 
     171         * Something wrong with the config. 
     172         */ 
     173        define('SGL_ERROR_INVALIDCONFIG',       -102); 
     174        /** 
     175         * No data available. 
     176         */ 
     177        define('SGL_ERROR_NODATA',              -103); 
     178        /** 
     179         * No class exists. 
     180         */ 
     181        define('SGL_ERROR_NOCLASS',             -104); 
     182        /** 
     183         * No method exists. 
     184         */ 
     185        define('SGL_ERROR_NOMETHOD',            -105); 
     186        /** 
     187         * No rows were affected by query. 
     188         */ 
     189        define('SGL_ERROR_NOAFFECTEDROWS',      -106); 
     190        /** 
     191         * Limit queries on unsuppored databases. 
     192         */ 
     193        define('SGL_ERROR_NOTSUPPORTED'  ,      -107); 
     194        /** 
     195         * Invalid call. 
     196         */ 
    162197        define('SGL_ERROR_INVALIDCALL',         -108); 
     198        /** 
     199         * Authentication failure. 
     200         */ 
    163201        define('SGL_ERROR_INVALIDAUTH',         -109); 
     202        /** 
     203         * Failed to send email. 
     204         */ 
    164205        define('SGL_ERROR_EMAILFAILURE',        -110); 
     206        /** 
     207         * Failed to connect to DB. 
     208         */ 
    165209        define('SGL_ERROR_DBFAILURE',           -111); 
     210        /** 
     211         * A DB transaction failed. 
     212         */ 
    166213        define('SGL_ERROR_DBTRANSACTIONFAILURE',-112); 
     214        /** 
     215         * User not allow to access site. 
     216         */ 
    167217        define('SGL_ERROR_BANNEDUSER',          -113); 
     218        /** 
     219         * File not found. 
     220         */ 
    168221        define('SGL_ERROR_NOFILE',              -114); 
     222        /** 
     223         * Perms were invalid. 
     224         */ 
    169225        define('SGL_ERROR_INVALIDFILEPERMS',    -115); 
     226        /** 
     227         * Session was invalild. 
     228         */ 
    170229        define('SGL_ERROR_INVALIDSESSION',      -116); 
     230        /** 
     231         * Posted data was invalid. 
     232         */ 
    171233        define('SGL_ERROR_INVALIDPOST',         -117); 
     234        /** 
     235         * Translation invalid. 
     236         */ 
    172237        define('SGL_ERROR_INVALIDTRANSLATION',  -118); 
     238        /** 
     239         * Could not write to the file. 
     240         */ 
    173241        define('SGL_ERROR_FILEUNWRITABLE',      -119); 
     242        /** 
     243         * Method perms were invalid. 
     244         */ 
    174245        define('SGL_ERROR_INVALIDMETHODPERMS',  -120); 
     246        /** 
     247         * Request was invalid. 
     248         */ 
    175249        define('SGL_ERROR_INVALIDREQUEST',      -121); 
     250        /** 
     251         * Type invalid. 
     252         */ 
    176253        define('SGL_ERROR_INVALIDTYPE',         -122); 
     254        /** 
     255         * Excessive recursion occured. 
     256         */ 
    177257        define('SGL_ERROR_RECURSION',           -123); 
     258        /** 
     259         * Resource could not be found. 
     260         */ 
     261        define('SGL_ERROR_RESOURCENOTFOUND',    -404); 
    178262 
    179263        //  message types to use with SGL:raiseMsg($msg, $translation, $msgType) 
     
    201285        define('SGL_STATUS_ARCHIVED',           5); 
    202286 
     287        //  comment status types 
     288        define('SGL_COMMENT_FOR_APPROVAL',      0); 
     289        define('SGL_COMMENT_APPROVED',          1); 
     290        define('SGL_COMMENT_AKISMET_PASSED',    2); 
     291        define('SGL_COMMENT_AKISMET_FAILED',    3); 
     292 
    203293        //  define return types, k/v pairs, arrays, strings, etc 
    204294        define('SGL_RET_NAME_VALUE',            1); 
     
    237327    function run($conf) 
    238328    { 
     329        // On install, $conf is empty let's load it 
     330        if (empty($conf) && file_exists(SGL_ETC_DIR . '/customInstallDefaults.ini')) { 
     331            $c = &SGL_Config::singleton(); 
     332            $conf1 = $c->load(SGL_ETC_DIR . '/customInstallDefaults.ini'); 
     333            if (isset($conf1['path']['moduleDirOverride'])) { 
     334                $conf['path']['moduleDirOverride'] = $conf1['path']['moduleDirOverride']; 
     335            } 
     336        // On re-install or INSTALL_COMPLETE 
     337        } elseif (count($conf)) { 
     338            //  set constant to represent profiling mode so it can be used in Controller 
     339            define('SGL_PROFILING_ENABLED', ($conf['debug']['profiling']) ? true : false); 
     340            define('SGL_SEAGULL_VERSION', $conf['tuples']['version']); 
     341 
     342            //  which degree of error severity before emailing admin 
     343            define('SGL_EMAIL_ADMIN_THRESHOLD', 
     344                SGL_String::pseudoConstantToInt($conf['debug']['emailAdminThreshold'])); 
     345            define('SGL_BASE_URL', $conf['site']['baseUrl']); 
     346 
     347            //  add additional search paths 
     348            if (!empty($conf['path']['additionalIncludePath'])) { 
     349                $ok = ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR 
     350                    . $conf['path']['additionalIncludePath']); 
     351            } 
     352        } 
     353 
    239354        if (isset($conf['path']['webRoot'])) { 
    240355            define('SGL_WEB_ROOT', $conf['path']['webRoot']); 
     
    272387            define('PEAR_LOG_DEBUG',    7);     /** Debug-level messages */ 
    273388        } 
    274  
    275         if (count($conf)) { 
    276  
    277             //  set constant to represent profiling mode so it can be used in Controller 
    278             define('SGL_PROFILING_ENABLED', ($conf['debug']['profiling']) ? true : false); 
    279             define('SGL_SEAGULL_VERSION', $conf['tuples']['version']); 
    280  
    281             //  which degree of error severity before emailing admin 
    282             $const = str_replace("'", "", $conf['debug']['emailAdminThreshold']); 
    283             define('SGL_EMAIL_ADMIN_THRESHOLD', constant($const)); 
    284             define('SGL_BASE_URL', $conf['site']['baseUrl']); 
    285  
    286             //  add additional search paths 
    287             if (!empty($conf['path']['additionalIncludePath'])) { 
    288                 $ok = ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR 
    289                     . $conf['path']['additionalIncludePath']); 
    290             } 
     389    } 
     390
     391 
     392/** 
     393 * @package Task 
     394 */ 
     395class SGL_Task_InitialiseDbDataObject extends SGL_Task 
     396
     397    function run($conf = array()) 
     398    { 
     399        $options = &PEAR::getStaticProperty('DB_DataObject', 'options'); 
     400        $options = array( 
     401            'database'              => SGL_DB::getDsn(SGL_DSN_STRING), 
     402            'schema_location'       => SGL_ENT_DIR, 
     403            'class_location'        => SGL_ENT_DIR, 
     404            'require_prefix'        => SGL_ENT_DIR . '/', 
     405            'class_prefix'          => 'DataObjects_', 
     406            'debug'                 => $conf['debug']['dataObject'], 
     407            'production'            => 0, 
     408            'ignore_sequence_keys'  => 'ALL', 
     409            'generator_strip_schema'=> 1, 
     410            'quote_identifiers'     => 1, 
     411        ); 
     412    } 
     413
     414 
     415/** 
     416 * @package Task 
     417 */ 
     418class SGL_Task_EnsurePlaceholderDbPrefixIsNull extends SGL_Task 
     419
     420    function run($conf) 
     421    { 
     422        // for 0.6.x versions 
     423        if (!empty($conf['db']['prefix']) 
     424                && $conf['db']['prefix'] == 'not implemented yet') { 
     425            $config = &SGL_Config::singleton(); 
     426            $config->set('db', array('prefix' => '')); 
     427            $config->save(); 
    291428        } 
    292429    } 
     
    315452    { 
    316453        //  set PEAR error handler 
     454        #$old_error_handler = set_error_handler("myErrorHandler"); 
    317455        PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'pearErrorHandler')); 
    318456    } 
     
    336474        SGL::logMessage('PEAR' . " :: $message : $debugInfo", PEAR_LOG_ERR); 
    337475 
    338         //  if sesssion debug, send error info to screen 
    339         if (isset($conf['debug']['production']) && !$conf['debug']['production'] || SGL_Session::get('debug')) { 
    340             SGL_Error::push($oError); 
    341             if ($conf['debug']['showBacktrace']) { 
    342                 echo '<pre>'; print_r($oError->getBacktrace()); print '</pre>'; 
    343             } 
     476        //  send error info to screen 
     477        SGL_Error::push($oError); 
     478        if (!empty($conf['debug']['showBacktrace'])) { 
     479            echo '<pre>'; print_r($oError->getBacktrace()); print '</pre>'; 
    344480        } 
    345481    } 
     
    418554        @ini_set('allow_url_fopen',             0); //  this can be quite dangerous if enabled 
    419555        if (count($conf)) { 
    420             @ini_set('error_log',                   SGL_PATH . '/' . $conf['log']['name']); 
     556            @ini_set('error_log', SGL_PATH . '/' . $conf['log']['name']); 
    421557            if (!empty($conf['log']['ignoreRepeated'])) { 
    422558                ini_set('ignore_repeated_errors', true); 
     
    438574            '127.0.0.1', 
    439575        ); 
     576    } 
     577} 
     578 
     579/** 
     580 * @package Task 
     581 */ 
     582class SGL_Task_LoadCustomConfig extends SGL_Task 
     583{ 
     584    function run($conf) 
     585    { 
     586        if (!empty($conf['path']['pathToCustomConfigFile'])) { 
     587            if (is_file($conf['path']['pathToCustomConfigFile'])) { 
     588                require_once realpath($conf['path']['pathToCustomConfigFile']); 
     589            } 
     590        } 
     591    } 
     592} 
     593 
     594/** 
     595 * @package Task 
     596 */ 
     597class SGL_Task_InitialiseModules extends SGL_Task 
     598{ 
     599    function run($conf) 
     600    { 
     601        //  skip if we're in installer 
     602        if (defined('SGL_INSTALLED')) { 
     603            $locator = &SGL_ServiceLocator::singleton(); 
     604            $dbh = $locator->get('DB'); 
     605            if (!$dbh) { 
     606                $dbh = & SGL_DB::singleton(); 
     607                $locator->register('DB', $dbh); 
     608            } 
     609            $query = " 
     610                SELECT  name 
     611                FROM    {$conf['table']['module']} 
     612                "; 
     613            $aRet = $dbh->getAll($query); 
     614            if (is_array($aRet) && count($aRet)) { 
     615                foreach ($aRet as $oModule) { 
     616                    $moduleInitFile = SGL_MOD_DIR . '/' . $oModule->name . '/init.php'; 
     617                    if (is_file($moduleInitFile)) { 
     618                        require_once $moduleInitFile; 
     619                    } 
     620                } 
     621            } 
     622        } 
    440623    } 
    441624} 
     
    459642                    unlink($location); 
    460643                } 
    461                 $fileHandler = fopen ($location, "w"); 
     644                $fileHandler = fopen($location, "w"); 
    462645                fwrite ($fileHandler, $data); 
    463646                fclose ($fileHandler); 
  • trunk/lib/SGL/Task/Install.php

    r2492 r3123  
    9292    { 
    9393        $c = &SGL_Config::singleton($autoLoad = false); 
     94        $oldConf = $c->getAll(); // save old config on re-install 
    9495        $conf = $c->load(SGL_ETC_DIR . '/default.conf.dist.ini'); 
    9596        $c->replace($conf); 
     97        $c->merge($oldConf); // overwrite with old values 
    9698 
    9799        //  admin emails 
     
    100102        $c->set('email', array('support' => $data['adminEmail'])); 
    101103 
     104        // correct db prefix 
     105        if (!empty($data['prefix']) && substr($data['prefix'], -1) != '_') { 
     106            // enforce underscore in prefix 
     107            $data['prefix'] .= '_'; 
     108        } 
     109 
    102110        //  db details 
    103111        $c->set('db', array('prefix' => $data['prefix'])); 
    104112        $c->set('db', array('host' => $data['host'])); 
    105113        $c->set('db', array('name' => $data['name'])); 
    106         $c->set('db', array('user' => $data['user'])); 
    107         $c->set('db', array('pass' => $data['pass'])); 
     114        $c->set('db', array('user' => $data['databaseUser'])); 
     115        $c->set('db', array('pass' => $data['databaseUserPass'])); 
    108116        $c->set('db', array('port' => $data['dbPort']['port'])); 
    109117        $c->set('db', array('protocol' => $data['dbProtocol']['protocol'])); 
     
    111119        $c->set('db', array('type' => $data['dbType']['type'])); 
    112120        $c->set('db', array('postConnect' => $data['postConnect'])); 
     121        $mysqlCluster = isset($data['mysqlCluster']) ? '1' : '0'; 
     122        $c->set('db', array('mysqlCluster' => $mysqlCluster)); 
    113123 
    114124        //  version 
     
    122132        $c->set('path', array('installRoot' => $data['installRoot'])); 
    123133        $c->set('path', array('webRoot' => $data['webRoot'])); 
     134 
     135        //  reset moduleOverride on re-install 
     136        $c->set('path', array('moduleDirOverride' => '')); 
    124137 
    125138        //  various 
     
    133146 
    134147        //  store translations in db 
    135         $storeTransInDbClause = (array_key_exists('storeTranslationsInDB', $data) 
     148        (array_key_exists('storeTranslationsInDB', $data) 
    136149                && $data['storeTranslationsInDB'] == 1) 
    137150            ? $c->set('translation', array('container' => 'db')) 
     
    139152 
    140153        //  add missing translations to db 
    141         $missingTransClause =  (array_key_exists('addMissingTranslationsToDB', $data) 
     154        (array_key_exists('addMissingTranslationsToDB', $data) 
    142155                && $data['addMissingTranslationsToDB'] == 1) 
    143156            ? $c->set('translation', array('addMissingTrans' => true)) 
     
    152165            $c->set('site', array('frontScriptName' => 'index.php?')); 
    153166        } 
    154  
     167        //  parse custom config overrides 
     168        foreach ($data as $k => $v) { 
     169            if (is_array($v)) { 
     170                foreach ($v as $kk => $vv) { 
     171                    if ($c->exists(array($k => $kk))) { 
     172                        $c->set($k, array($kk => $vv)); 
     173                    } 
     174                } 
     175            } 
     176        } 
    155177        //  save 
    156178        $configFile = SGL_VAR_DIR . '/' . SGL_SERVER_NAME . '.conf.php'; 
     
    165187        //  and tz 
    166188        $_SESSION['install_timezone'] = $data['serverTimeOffset']; 
     189 
     190        //  store old prefix for tables drop 
     191        if (isset($oldConf['db']['prefix']) 
     192                && $oldConf['db']['prefix'] != $data['prefix']) { 
     193            $_SESSION['install_dbPrefix'] = $oldConf['db']['prefix']; 
     194        } 
    167195    } 
    168196} 
     
    198226 
    199227        //  setup db type vars 
     228        $this->dbType = $this->conf['db']['type']; 
     229 
    200230        switch ($this->conf['db']['type']) { 
    201231        case 'pgsql': 
    202             $this->dbType = 'pgsql'; 
    203232            $this->filename1 = '/schema.pg.sql'; 
    204233            $this->filename2 = '/data.default.pg.sql'; 
    205234            $this->filename3 = '/data.sample.pg.sql'; 
    206235            $this->filename4 = '/data.block.add.pg.sql'; 
    207             $this->filename5 = '/constraints.pg.sql'; 
     236            $this->filename5 = '/data.custom.pg.sql'; 
     237            $this->filename6 = '/data.test.pg.sql'; 
     238            $this->filename7 = '/constraints.pg.sql'; 
    208239            break; 
    209240 
    210241        case 'mysql': 
    211             $this->dbType = 'mysql'; 
     242        case 'mysqli': 
     243        case 'mysql_SGL': 
     244        case 'mysqli_SGL': 
    212245            $this->filename1 = '/schema.my.sql'; 
    213246            $this->filename2 = '/data.default.my.sql'; 
    214247            $this->filename3 = '/data.sample.my.sql'; 
    215248            $this->filename4 = '/data.block.add.my.sql'; 
    216             $this->filename5 = '/constraints.my.sql'; 
     249            $this->filename5 = '/data.custom.my.sql'; 
     250            $this->filename6 = '/data.test.my.sql'; 
     251            $this->filename7 = '/constraints.my.sql'; 
    217252            break; 
    218253 
    219         case 'mysql_SGL': 
    220             $this->dbType = 'mysql_SGL'; 
    221             $this->filename1 = '/schema.my.sql'; 
    222             $this->filename2 = '/data.default.my.sql'; 
    223             $this->filename3 = '/data.sample.my.sql'; 
    224             $this->filename4 = '/data.block.add.my.sql'; 
    225             $this->filename5 = '/constraints.my.sql'; 
    226             break; 
    227  
    228254        case 'oci8_SGL': 
    229             $this->dbType = 'oci8'; 
     255            $this->dbType = 'oci8'; // exception to dbType naming 
    230256            $this->filename1 = '/schema.oci.sql'; 
    231257            $this->filename2 = '/data.default.oci.sql'; 
    232258            $this->filename3 = '/data.sample.oci.sql'; 
    233259            $this->filename4 = '/data.block.add.oci.sql'; 
    234             $this->filename5 = '/constraints.oci.sql'; 
     260            $this->filename5 = '/data.custom.oci.sql'; 
     261            $this->filename6 = '/data.test.oci.sql'; 
     262            $this->filename7 = '/constraints.oci.sql'; 
    235263            break; 
    236264        } 
     
    251279    { 
    252280        $c = &SGL_Config::singleton(); 
     281 
     282        // get table prefix 
     283        $prefix = $c->get(array('db' => 'prefix')); 
    253284        foreach ($data['aModuleList'] as $module) { 
    254285            $tableAliasIniPath = SGL_MOD_DIR . '/' . $module  . '/data/tableAliases.ini'; 
     
    256287                $aData = parse_ini_file($tableAliasIniPath); 
    257288                foreach ($aData as $k => $v) { 
    258                     $c->set('table', array($k => $v)); 
     289                    $c->set('table', array($k => $prefix . $v)); 
    259290                } 
    260291            } 
     
    282313 
    283314        //  disable fk constraints if mysql (>= 4.1.x) 
    284         if ($this->conf['db']['type'] == 'mysql' || $this->conf['db']['type'] == 'mysql_SGL') { 
     315        if        ($this->conf['db']['type'] == 'mysql_SGL' 
     316                || $this->conf['db']['type'] == 'mysql' 
     317                || $this->conf['db']['type'] == 'mysqli' 
     318                || $this->conf['db']['type'] == 'mysqli_SGL') { 
     319 
    285320            $dbh = & SGL_DB::singleton(); 
    286321            $query = 'SET FOREIGN_KEY_CHECKS=0;'; 
     
    427462            $this->updateHtml('status', $statusText); 
    428463 
     464            $c   = &SGL_Config::singleton(); 
    429465            $dbh = & SGL_DB::singleton(); 
     466 
     467            // set old db prefix if any 
     468            if (isset($_SESSION['install_dbPrefix'])) { 
     469                $currentPrefix = $c->get(array('db' => 'prefix')); 
     470                $c->set('db', array('prefix' => $_SESSION['install_dbPrefix'])); 
     471            } 
    430472 
    431473            //  drop 'sequence' table unless we're installing a module 
     
    471513                    //  remove tablename in Config 
    472514                    if (isset($data['moduleInstall'])) { 
    473                         $c = &SGL_Config::singleton(); 
    474515                        foreach ($aTableNames as $tableName) { 
    475516                            $c->remove(array('table', $tableName)); 
    476517                        } 
    477518                        //  save 
    478                         $configFile = SGL_VAR_DIR . '/' . SGL_SERVER_NAME . '.conf.php'; 
    479                         $ok = $c->save($configFile); 
     519                        $fileName = SGL_VAR_DIR . '/' . SGL_SERVER_NAME . '.conf.php'; 
     520                        $ok = $c->save($fileName); 
    480521 
    481522                        if (PEAR::isError($ok)) { 
     
    488529                } 
    489530            } 
     531            // remove translation tables and lang table 
     532            if (!array_key_exists('moduleInstall', $data)) { 
     533                $conf = $c->getAll(); 
     534                if ($conf['translation']['container'] == 'db') { 
     535                    $statusText = 'dropping translation tables'; 
     536                    $this->updateHtml('status', $statusText); 
     537                    $trans = &SGL_Translation::singleton('admin'); 
     538                    $aLangs = $trans->getLangs('ids'); 
     539                    if (!PEAR::isError($aLangs)) { 
     540                        // removeme 
     541                        if (empty($aLangs)) { 
     542                            // basically $aLangs should be a PEAR_Error instance 
     543                            // in that case, but calling method doesn't 
     544                            // return it 
     545                            SGL_Error::pop(); 
     546                        } 
     547                        // dropping language tables 
     548                        foreach ($aLangs as $langId) { 
     549                            // force to drop translation table 
     550                            $ok = $trans->removeLang($langId, $force = true); 
     551                            if (PEAR::isError($ok, DB_ERROR_NOSUCHTABLE)) { 
     552                                SGL_Error::pop(); 
     553                            } 
     554                        } 
     555                    } elseif (PEAR::isError($aLangs, DB_ERROR_NOSUCHTABLE)) { 
     556                        SGL_Error::pop(); 
     557                    } 
     558                    // drop language table 
     559                    $langTable = &$trans->storage->options['langs_avail_table']; 
     560                    $query = 'DROP TABLE ' . $dbh->quoteIdentifier($langTable); 
     561                    $ok = $dbh->query($query); 
     562                    if (PEAR::isError($ok, DB_ERROR_NOSUCHTABLE)) { 
     563                        SGL_Error::pop(); 
     564                    } 
     565 
     566                    // removeme: it looks like a hack 
     567                    if (isset($currentPrefix)) { 
     568                        $pattern   = "/^{$conf['db']['prefix']}/"; 
     569                        $langTable = preg_replace($pattern, '', $langTable); 
     570                        $langTable = $currentPrefix . $langTable; 
     571                    } 
     572                } 
     573            } 
     574 
     575            // restore db prefix 
     576            if (isset($currentPrefix)) { 
     577                $c->set('db', array('prefix' => $currentPrefix)); 
     578            } 
    490579        } 
    491580    } 
     
    507596 
    508597            //  load 'sequence' table 
    509             if ($this->conf['db']['type'] == 'mysql_SGL') { 
     598            if ($this->conf['db']['type'] == 'mysql_SGL' || $this->conf['db']['type'] == 'mysqli_SGL') { 
     599 
    510600                $result = SGL_Sql::parse(SGL_ETC_DIR . '/sequence.my.sql', 0, array('SGL_Sql', 'execute')); 
    511601            } 
     
    517607                if (file_exists($modulePath . $this->filename1)) { 
    518608                    $result = SGL_Sql::parse($modulePath . $this->filename1, 0, array('SGL_Sql', 'execute')); 
     609#FIXME: should test for PEAR::error 
    519610                    $displayHtml = $result ? $this->success : $this->failure; 
    520611                    $this->updateHtml($module . '_schema', $displayHtml); 
     
    603694 * @package Task 
    604695 */ 
     696class SGL_Task_LoadCustomData extends SGL_UpdateHtmlTask 
     697{ 
     698    function run($data) 
     699    { 
     700        $this->setup(); 
     701        $statusText = 'loading custom data'; 
     702        $this->updateHtml('status', $statusText); 
     703 
     704        //  Go back and load each module's custom data, if there is a custom sql file in /data 
     705        foreach ($data['aModuleList'] as $module) { 
     706            $modulePath = SGL_MOD_DIR . '/' . $module  . '/data'; 
     707            //  Load the module's custom data if exists 
     708            if (file_exists($modulePath . $this->filename5)) { 
     709                $result = SGL_Sql::parse($modulePath . $this->filename5, 0, array('SGL_Sql', 'execute')); 
     710            } 
     711        } 
     712 
     713    } 
     714} 
     715 
     716/** 
     717 * @package Task 
     718 */ 
    605719class SGL_Task_RemoveDefaultData extends SGL_Task 
    606720{ 
    607721    function run($data) 
    608722    { 
    609         require_once SGL_MOD_DIR . '/default/classes/DA_Default.php'; 
    610         $da = & DA_Default::singleton(); 
     723        require_once SGL_MOD_DIR . '/default/classes/DefaultDAO.php'; 
     724        $da = & DefaultDAO::singleton(); 
    611725 
    612726        //  get perms associated with module 
     
    645759                if (file_exists($modulePath . $this->filename4)) { 
    646760                    $result = SGL_Sql::parse($modulePath . $this->filename4, 0, array('SGL_Sql', 'execute')); 
    647                     $displayHtml = $result ? $this->success : $this->failure; 
    648                     $this->updateHtml($module . '_dataBlock', $displayHtml); 
    649                 } else { 
    650                     $this->updateHtml($module . '_dataBlock', $this->noFile); 
    651761                } 
    652762            } 
     
    696806            foreach ($data['aModuleList'] as $module) { 
    697807                $modulePath = SGL_MOD_DIR . '/' . $module  . '/data'; 
    698                 if (file_exists($modulePath . $this->filename5)) { 
    699                     $result = SGL_Sql::parse($modulePath . $this->filename5, 0, array('SGL_Sql', 'execute')); 
     808                if (file_exists($modulePath . $this->filename7)) { 
     809                    $result = SGL_Sql::parse($modulePath . $this->filename7, 0, array('SGL_Sql', 'execute')); 
    700810                    $displayHtml = $result ? $this->success : $this->failure; 
    701811                    $this->updateHtml($module . '_constraints', $displayHtml); 
     
    725835                && (!array_key_exists('useExistingData', $data) || $data['useExistingData'] == 0)) { 
    726836 
    727             require_once SGL_MOD_DIR . '/navigation/classes/DA_Navigation.php'; 
    728             $da = & DA_Navigation::singleton(); 
     837            require_once SGL_MOD_DIR . '/navigation/classes/NavigationDAO.php'; 
     838            $da = & NavigationDAO::singleton(); 
    729839 
    730840            foreach ($data['aModuleList'] as $module) { 
     
    763873    function run($data) 
    764874    { 
    765         require_once SGL_MOD_DIR . '/navigation/classes/DA_Navigation.php'; 
    766         $da = & DA_Navigation::singleton(); 
     875        require_once SGL_MOD_DIR . '/navigation/classes/NavigationDAO.php'; 
     876        $da = & NavigationDAO::singleton(); 
    767877 
    768878        foreach ($data['aModuleList'] as $module) { 
     
    811921    function run($data) 
    812922    { 
    813         $configFile = SGL_VAR_DIR . '/' . SGL_SERVER_NAME . '.conf.php'; 
    814923        $c = &SGL_Config::singleton(); 
    815924        $aLangOptions = SGL_Util::getLangsDescriptionMap(); 
     
    832941                : ''; 
    833942            $c->set('translation', array('installedLanguages' => $langString)); 
    834             $ok = $c->save($configFile); 
    835             if (PEAR::isError($ok)) { 
    836                 SGL_Install_Common::errorPush($ok); 
    837             } 
    838943 
    839944            //  iterate through languages adding to langs table 
     
    841946                $globalLangFile = $availableLanguages[$aLang][1] .'.php'; 
    842947                $langID = str_replace('-', '_', $aLang); 
    843                 $encoding = substr($aLang, strpos('-', $aLang)); 
    844                 $langData  = array( 
    845                     'lang_id' => $langID, 
    846                     'table_name' => $this->conf['table']['translation'] .'_'. $langID, 
    847                     'meta' => '', 
    848                     'name' => $aLangOptions[$aLang], 
    849                     'error_text' => 'not available', 
    850                     'encoding' => $encoding 
    851                      ); 
    852                 $result = $trans->addLang($langData); 
     948 
     949                // skip language creation during module install 
     950                if (empty($data['skipLangTablesCreation'])) { 
     951                    $prefix = $this->conf['db']['prefix'] . 
     952                        $this->conf['translation']['tablePrefix'] . '_'; 
     953                    $encoding = substr($aLang, strpos('-', $aLang)); 
     954                    $langData = array( 
     955                        'lang_id' => $langID, 
     956                        'table_name' => $prefix . $langID, 
     957                        'meta' => '', 
     958                        'name' => $aLangOptions[$aLang], 
     959                        'error_text' => 'not available', 
     960                        'encoding' => $encoding 
     961                    ); 
     962 
     963                    //  switch phptype to mysql when using mysql_SGL otherwise the langs table 
     964                    //  and index's will not be created. 
     965                    if (($oldType = $trans->storage->db->phptype) == 'mysql_SGL') { 
     966                        $trans->storage->db->phptype = 'mysql'; 
     967                    } 
     968                    $result = $trans->addLang($langData); 
     969                    $trans->storage->db->phptype = $oldType; 
     970                } 
    853971 
    854972                //  iterate through modules 
     
    8911009            //  set installed languages 
    8921010            $installedLangs = (is_array($aLangOptions)) 
    893                 ? implode(',', str_replace('-', '_', array_keys($aLangOptions))) 
     1011                ? str_replace('-', '_', implode(',', array_keys($aLangOptions))) 
    8941012                : ''; 
    8951013 
    8961014            $c->set('translation', array('installedLanguages' => $installedLangs)); 
    897             $ok = $c->save($configFile); 
     1015        } 
     1016        $fileName = SGL_VAR_DIR . '/' . SGL_SERVER_NAME . '.conf.php'; 
     1017        $ok = $c->save($fileName); 
     1018        if (PEAR::isError($ok)) { 
     1019            SGL_Install_Common::errorPush($ok); 
    8981020        } 
    8991021    } 
     
    9111033 
    9121034        //  re-enable fk constraints if mysql (>= 4.1.x) 
    913         if ($this->conf['db']['type'] == 'mysql' || $this->conf['db']['type'] == 'mysql_SGL') { 
     1035        if        ($this->conf['db']['type'] == 'mysql_SGL' 
     1036                || $this->conf['db']['type'] == 'mysql' 
     1037                || $this->conf['db']['type'] == 'mysqli' 
     1038                || $this->conf['db']['type'] == 'mysqli_SGL') { 
     1039 
     1040 
    9141041            $dbh = & SGL_DB::singleton(); 
    9151042            $query = 'SET FOREIGN_KEY_CHECKS=1;'; 
     
    9811108        //  pass paths as arrays to avoid widows space parsing prob 
    9821109        //  create cache dir 
    983         $cacheDir = System::mkDir(array(SGL_CACHE_DIR)); 
    984         @chmod($cacheDir, 0777); 
    985  
    986         if (!($cacheDir)) { 
    987             SGL_Install_Common::errorPush(PEAR::raiseError('Problem creating cache dir')); 
     1110        if (!is_dir(SGL_CACHE_DIR)) { 
     1111            $cacheDir = System::mkDir(array(SGL_CACHE_DIR)); 
     1112            if (is_dir($cacheDir)) { 
     1113                @chmod($cacheDir, 0777); 
     1114            } 
     1115            if (!($cacheDir)) { 
     1116                SGL_Install_Common::errorPush(PEAR::raiseError('Problem creating cache dir')); 
     1117            } 
    9881118        } 
    9891119 
    9901120        //  create entities dir 
    991         $entDir = System::mkDir(array(SGL_ENT_DIR)); 
    992         @chmod($entDir, 0777); 
    993         if (!($entDir)) { 
    994             SGL_Install_Common::errorPush(PEAR::raiseError('Problem creating entity dir')); 
     1121        if (!is_dir(SGL_ENT_DIR)) { 
     1122            $entDir = System::mkDir(array(SGL_ENT_DIR)); 
     1123            if (is_dir($cacheDir)) { 
     1124                @chmod($entDir, 0777); 
     1125            } 
     1126            if (!($entDir)) { 
     1127                SGL_Install_Common::errorPush(PEAR::raiseError('Problem creating entity dir')); 
     1128            } 
    9951129        } 
    9961130 
     
    9991133 
    10001134            $tmpDir = System::mkDir(array(SGL_TMP_DIR)); 
     1135            $htAccessContent = <<< EOF 
     1136Order allow,deny 
     1137Deny from all 
     1138EOF; 
     1139            $ok = file_put_contents(SGL_TMP_DIR . '/.htaccess', $htAccessContent); 
    10011140            if (!$tmpDir) { 
    10021141                SGL_Install_Common::errorPush(SGL::raiseError('The tmp directory does not '. 
     
    10181157 
    10191158        //  init DB_DataObject 
    1020         $options = &PEAR::getStaticProperty('DB_DataObject', 'options'); 
    1021         $options = array( 
    1022             'database'              => SGL_DB::getDsn(SGL_DSN_STRING), 
    1023             'schema_location'       => SGL_ENT_DIR, 
    1024             'class_location'        => SGL_ENT_DIR, 
    1025             'require_prefix'        => SGL_ENT_DIR . '/', 
    1026             'class_prefix'          => 'DataObjects_', 
    1027             'debug'                 => 0, 
    1028             'production'            => 0, 
    1029             'ignore_sequence_keys'  => 'ALL', 
    1030             'generator_strip_schema'=> 1, 
    1031         ); 
     1159        $oTask = new SGL_Task_InitialiseDbDataObject(); 
     1160        $ok = $oTask->run($conf); 
    10321161 
    10331162        require_once 'DB/DataObject/Generator.php'; 
     
    10381167            $ok = unlink($keysFile); 
    10391168        } 
    1040  
     1169        // drop old entities on re-install 
     1170        if (isset($_SESSION['install_dbPrefix'])) { 
     1171            if (is_writable(SGL_ENT_DIR)) { 
     1172                if ($dh = opendir(SGL_ENT_DIR)) { 
     1173                    $prefix = $_SESSION['install_dbPrefix']; 
     1174                    while (($file = readdir($dh)) !== false) { 
     1175                        if ($file != '.' && $file != '..' 
     1176                                && substr($file, -3) == 'php' 
     1177                                && substr($file, 0, strlen($prefix)) == ucfirst($prefix)) { 
     1178                            $ok = unlink(SGL_ENT_DIR . '/' . $file); 
     1179                        } 
     1180                    } 
     1181                } 
     1182            } 
     1183        } 
    10411184        $generator = new DB_DataObject_Generator(); 
    10421185        $generator->start(); 
     
    10611204        $conf = $c->getAll(); 
    10621205 
    1063         // remove original dbdo links file 
     1206        // original dbdo links file 
    10641207        $linksFile = SGL_ENT_DIR . '/' . $conf['db']['name'] . '.links.ini'; 
    10651208 
    1066         //  only remove when not installing modules, ie for sgl-rebuild 
    1067         if (empty($data['moduleInstall'])) { 
    1068             if (is_file($linksFile) && is_writable($linksFile)) { 
    1069                 $aOrigData = parse_ini_file($linksFile, true); 
     1209        // read existing data if any 
     1210        if (is_readable($linksFile)) { 
     1211            $aOrigData = parse_ini_file($linksFile, true); 
     1212            // only remove when not installing modules, ie for sgl-rebuild 
     1213            if (empty($data['moduleInstall']) && is_writable($linksFile)) { 
    10701214                unlink($linksFile); 
    10711215            } 
    10721216        } 
     1217 
    10731218        $linkData = ''; 
    10741219        foreach ($data['aModuleList'] as $module) { 
     
    10871232                if (!empty($aOrigData)) { 
    10881233                    foreach ($aNewData as $key => $aValues) { 
    1089                         if (array_key_exists($key, $aOrigData)) { 
     1234                        $tableName = $conf['db']['prefix'] . $key; 
     1235                        if (array_key_exists($tableName, $aOrigData)) { 
    10901236                            //  key already exists, so return instead of adding it 
    10911237                            return; 
     
    10941240                } 
    10951241            } 
    1096             if (is_writable($linksFile)) { 
     1242            // we don't forget about prefixes 
     1243            if (!empty($conf['db']['prefix'])) { 
     1244                // prefix containers 
     1245                $linkData = preg_replace('/\[(\w+)\]/i', 
     1246                    '[' . SGL_Sql::addTablePrefix('$1') . ']',  $linkData); 
     1247                // prefix references 
     1248                $linkData = preg_replace('/(\w+):/i', 
     1249                    SGL_Sql::addTablePrefix('$1') . ':' , $linkData); 
     1250            } 
     1251            if (is_writable($linksFile) || !file_exists($linksFile)) { 
    10971252                if (!$handle = fopen($linksFile, 'a+')) { 
    10981253                    SGL_Install_Common::errorPush( 
     
    11081263} 
    11091264 
     1265/** 
     1266 * @package Task 
     1267 */ 
    11101268class SGL_Task_SymLinkWwwData extends SGL_Task 
    11111269{ 
     
    11161274            if (file_exists($wwwDir)) { 
    11171275                if (is_writable(SGL_WEB_ROOT)) { 
    1118                     if (file_exists(SGL_WEB_ROOT . "/$module")) { 
    1119                         unlink(SGL_WEB_ROOT . "/$module"); 
    1120                     } 
    1121                     $ok = symlink($wwwDir, SGL_WEB_ROOT . "/$module"); 
     1276 
     1277                    // windows 
     1278                    if (strpos(PHP_OS, 'WIN') !== false) { 
     1279 
     1280                        // if linkd binary is present 
     1281                        $ok = symlink($wwwDir, SGL_WEB_ROOT . "/$module"); 
     1282 
     1283                        //  otherwise just copy 
     1284                        if (!$ok) { 
     1285                            require_once SGL_CORE_DIR . '/File.php'; 
     1286                            $success = SGL_File::copyDir($wwwDir, SGL_WEB_ROOT . "/$module"); 
     1287                        } 
     1288                    } elseif (is_link(SGL_WEB_ROOT . "/$module")) { 
     1289                            PEAR::raiseError('A www directory was detected in ' . 
     1290                                ' one of the modules therefore an attempt to create ' . 
     1291                                ' a corresponding symlink was made ' . 
     1292                                ' but the symlink already exists ' . 
     1293                                ' in seagull/www'); 
     1294                    } else { 
     1295                        $ok = symlink($wwwDir, SGL_WEB_ROOT . "/$module"); 
     1296                    } 
     1297 
    11221298                } else { 
    11231299                    PEAR::raiseError('A www directory was detected in one of the modules '. 
     
    11311307} 
    11321308 
     1309/** 
     1310 * @package Task 
     1311 */ 
    11331312class SGL_Task_UnLinkWwwData extends SGL_Task 
    11341313{ 
     
    11371316        foreach ($data['aModuleList'] as $module) { 
    11381317            $wwwDir = SGL_MOD_DIR . '/' . $module  . '/www'; 
    1139             if (file_exists($wwwDir)) { 
     1318            // if we're windows 
     1319            if ((strpos(PHP_OS, 'WIN') !== false) && is_dir(SGL_WEB_ROOT . "/$module")) { 
     1320                require_once SGL_CORE_DIR . '/File.php'; 
     1321                if (readlink(SGL_WEB_ROOT . "/$module")) { 
     1322                    SGL_File::rmDir(SGL_WEB_ROOT . "/$module"); 
     1323                } else { 
     1324                    SGL_File::rmDir(SGL_WEB_ROOT . "/$module", '-r'); 
     1325                } 
     1326            } elseif (file_exists($wwwDir)) { 
    11401327                if (is_writable(SGL_WEB_ROOT)) { 
    1141                     if (file_exists(SGL_WEB_ROOT . "/$module")) { 
     1328                    if (is_link(SGL_WEB_ROOT . "/$module")) { 
    11421329                        unlink(SGL_WEB_ROOT . "/$module"); 
    11431330                    } 
    1144                 } 
    1145             } 
     1331                } else { 
     1332                    PEAR::raiseError('An attempt to remove an existing ' . 
     1333                        ' symlink failed, the webserver no longer has ' . 
     1334                        ' required write perms on seagull/www dir'); 
     1335                } 
     1336            } 
     1337        } 
     1338    } 
     1339
     1340 
     1341 
     1342/** 
     1343 * @package Task 
     1344 */ 
     1345class SGL_Task_AddTestDataToConfig extends SGL_UpdateHtmlTask 
     1346
     1347    /** 
     1348     * Updates test config file. 
     1349     * 
     1350     * 1. Reads ini file with php extension (used for security) 
     1351     * 2. Updates keys in file 
     1352     * 3. Saves file as ini 
     1353     * 4. Modifies file adding security 
     1354     * 5. Changes extension to php 
     1355     * 6. Removes saved ini file 
     1356     * 
     1357     * @param unknown_type $data 
     1358     */ 
     1359    function run($data = null) 
     1360    { 
     1361        $this->setup(); 
     1362 
     1363        //  get relevant module directory 
     1364        $globalConf = SGL_Config::singleton(); 
     1365        $moduleDir = ($globalConf->get(array('path' => 'moduleDirOverride'))) 
     1366            ? $globalConf->get(array('path' => 'moduleDirOverride')) 
     1367            : 'modules'; 
     1368 
     1369        $c = new SGL_Config(); 
     1370        foreach ($data['aModuleList'] as $module) { 
     1371            $dataDir = SGL_MOD_DIR . '/' . $module  . '/data'; 
     1372            //  get available data files 
     1373            $aFiles = array(); 
     1374            if (is_file($dataDir . $this->filename1)) { 
     1375                $aFiles['schema'] = 1; 
     1376            } 
     1377            if (is_file($dataDir . $this->filename2)) { 
     1378                $aFiles['dataDefault'] = 1; 
     1379            } 
     1380            if (is_file($dataDir . $this->filename6)) { 
     1381                $aFiles['dataTest'] = 1; 
     1382            } 
     1383            //  load current test config 
     1384            if (is_file(SGL_VAR_DIR . '/test.conf.ini.php')) { 
     1385                    $aTestData = parse_ini_file(SGL_VAR_DIR . '/test.conf.ini.php', true); 
     1386                    //  and add schema/data files 
     1387                    $update = false; 
     1388                    if (isset($aFiles['schema'])) { 
     1389                        $nextId = $this->getNextKey($aTestData['schemaFiles']); 
     1390                        $aTestData['schemaFiles']['file'.$nextId] =  $moduleDir . '/' . $module  . '/data/schema.my.sql'; 
     1391                        $update = true; 
     1392                    } 
     1393                    if (isset($aFiles['dataDefault'])) { 
     1394                        $nextId = $this->getNextKey($aTestData['dataFiles']); 
     1395                        $aTestData['dataFiles']['file'.$nextId] =  $moduleDir . '/' . $module  . '/data/data.default.my.sql'; 
     1396                        $update = true; 
     1397                    } 
     1398                    if (isset($aFiles['dataTest'])) { 
     1399                        $nextId = $this->getNextKey($aTestData['dataFiles']); 
     1400                        $aTestData['dataFiles']['file'.$nextId] =  $moduleDir . '/' . $module  . '/data/data.test.my.sql'; 
     1401                        $update = true; 
     1402                    } 
     1403                    if ($update) { 
     1404                        $c->replace($aTestData); 
     1405                        $ok = $c->save(SGL_VAR_DIR . '/test.conf.ini'); 
     1406                        SGL_Util::makeIniUnreadable(SGL_VAR_DIR . '/test.conf.ini'); 
     1407                    } 
     1408            } 
     1409        } 
     1410    } 
     1411 
     1412    function getNextKey($aKeys) 
     1413    { 
     1414        $keys = array_keys($aKeys); 
     1415        $out = array(); 
     1416        foreach ($keys as $k) { 
     1417            preg_match("/[0-9].*/", $k, $matches); 
     1418            $out[] = $matches[0]; 
     1419        } 
     1420        return (max($out)) +1; 
     1421    } 
     1422
     1423 
     1424/** 
     1425 * @package Task 
     1426 */ 
     1427class SGL_Task_RemoveTestDataFromConfig extends SGL_UpdateHtmlTask 
     1428
     1429    function run($data = null) 
     1430    { 
     1431        if (is_file(SGL_VAR_DIR . '/test.conf.ini.php')) { 
     1432                $this->setup(); 
     1433                $c = new SGL_Config(); 
     1434                foreach ($data['aModuleList'] as $module) { 
     1435                    //  load current test config 
     1436                    $aTestData = parse_ini_file(SGL_VAR_DIR . '/test.conf.ini.php', true); 
     1437                    //  and add schema/data files 
     1438                    $update = false; 
     1439                    foreach ($aTestData['schemaFiles'] as $k => $line) { 
     1440                        if (preg_match("/$module/", $line)) { 
     1441                            unset($aTestData['schemaFiles'][$k]); 
     1442                            $update = true; 
     1443                        } 
     1444                    } 
     1445                    foreach ($aTestData['dataFiles'] as $k => $line) { 
     1446                        if (preg_match("/$module/", $line)) { 
     1447                            unset($aTestData['dataFiles'][$k]); 
     1448                            $update = true; 
     1449                        } 
     1450                    } 
     1451                    if ($update) { 
     1452                        $c->replace($aTestData); 
     1453                        $ok = $c->save(SGL_VAR_DIR . '/test.conf.ini'); 
     1454                        SGL_Util::makeIniUnreadable(SGL_VAR_DIR . '/test.conf.ini'); 
     1455                    } 
     1456                } 
    11461457        } 
    11471458    } 
     
    11971508                } 
    11981509 
    1199                 $info = $dbh->tableInfo($table); 
     1510                $info = $dbh->tableInfo($dbh->quoteIdentifier($table)); 
    12001511                foreach ($info as $field) { 
    12011512                    if (eregi('primary_key', $field['flags'])) { 
     
    12221533            break; 
    12231534 
     1535        case 'mysqli_SGL': 
    12241536        case 'mysql_SGL': 
    12251537            $data = array(); 
    12261538            $aTables = (count( (array) $tables) > 0) ? (array) $tables :  $dbh->getListOf('tables'); 
     1539 
     1540            //  make sure sequence table exists 
     1541            if (!in_array('sequence',$aTables)) { 
     1542                require_once SGL_CORE_DIR . '/Sql.php'; 
     1543                SGL_Sql::parse(SGL_ETC_DIR . '/sequence.my.sql', 0, array('SGL_Sql', 'execute')); 
     1544            } 
     1545 
    12271546            foreach ($aTables as $table) { 
    12281547                $primary_field = ''; 
    12291548                if ($table != $conf['table']['sequence']) { 
    1230                     $info = $dbh->tableInfo($table); 
     1549                    $info = $dbh->tableInfo($dbh->quoteIdentifier($table)); 
    12311550                    foreach ($info as $field) { 
    1232                         if (eregi('primary_key', $field['flags'])) { 
     1551                        if (isset($field['flags']) && eregi('primary_key', $field['flags'])) { 
    12331552                            $primary_field = $field['name']; 
    12341553                            break; 
     
    12371556                    if ($primary_field != '') { 
    12381557                        $data[] = array($table, $dbh->getOne('SELECT MAX(' . 
    1239                             $primary_field . ') FROM ' . $table . ' WHERE 1')); 
     1558                            $primary_field . ') FROM ' . $dbh->quoteIdentifier($table) . ' WHERE 1')); 
    12401559                    } else { 
    12411560                        $data[] = array($table, 0); 
     
    12531572                $primary_field = ''; 
    12541573                if ($table != $conf['table']['sequence']) { 
    1255                     $info = $dbh->tableInfo($table); 
     1574                    $info = $dbh->tableInfo($dbh->quoteIdentifier($table)); 
    12561575                    foreach ($info as $field) { 
    12571576                        if (eregi('primary_key', $field['flags'])) { 
     
    12931612                // get tablename 
    12941613                if (preg_match("/^(.*)_seq$/",$sequence,$table)) { 
    1295                     $info = $dbh->tableInfo($table[1]); 
     1614                    $info = $dbh->tableInfo($dbh->quoteIdentifier($table[1])); 
    12961615                    foreach ($info as $field) { 
    12971616                        if (eregi('primary_key', $field['flags'])) { 
     
    13381657        $finalErrorCount = SGL_Error::count(); 
    13391658        if ($finalErrorCount > $initialErrorCount) { 
    1340             for ($x = 0; $x <= $numErrors = $finalErrorCount - $initialErrorCount; $x++) { 
     1659            $numErrors = $finalErrorCount - $initialErrorCount; 
     1660            for ($x = 0; $x < $numErrors; $x++) { 
    13411661                SGL_Error::pop(); 
    13421662            } 
     
    13531673    { 
    13541674        if (array_key_exists('createTables', $data) && $data['createTables'] == 1) { 
    1355             require_once SGL_MOD_DIR . '/user/classes/DA_User.php'; 
    1356             $da = & DA_User::singleton(); 
     1675            require_once SGL_MOD_DIR . '/user/classes/UserDAO.php'; 
     1676            $da = & UserDAO::singleton(); 
    13571677            $oUser = $da->getUserById(); 
    13581678 
    1359             $oUser->username = $data['adminUserName']; 
    1360             $oUser->first_name = $data['adminFirstName']; 
    1361             $oUser->last_name = $data['adminLastName']; 
    1362             $oUser->email = $data['adminEmail']; 
    1363             $oUser->passwd = md5($data['adminPassword']); 
     1679            $oUser->username        = $data['adminUserName']; 
     1680            $oUser->first_name      = $data['adminFirstName']; 
     1681            $oUser->last_name       = $data['adminLastName']; 
     1682            $oUser->email           = $data['adminEmail']; 
     1683            $oUser->passwd          = !empty($data['adminPasswordIsHash']) 
     1684                ? $data['adminPassword'] 
     1685                :  md5($data['adminPassword']); 
    13641686            $oUser->organisation_id = 1; 
    1365             $oUser->is_acct_active = 1; 
    1366             $oUser->country = 'GB'; 
    1367             $oUser->role_id = SGL_ADMIN; 
    1368             $oUser->date_created = $oUser->last_updated = SGL_Date::getTime(); 
    1369             $oUser->created_by = $oUser->updated_by = SGL_ADMIN; 
     1687            $oUser->is_acct_active = 1; 
     1688            $oUser->country         = 'GB'; 
     1689            $oUser->role_id         = SGL_ADMIN; 
     1690            $oUser->date_created    = $oUser->last_updated = SGL_Date::getTime(); 
     1691            $oUser->created_by      = $oUser->updated_by = SGL_ADMIN; 
    13701692            $success = $da->addUser($oUser); 
    13711693 
     
    13771699} 
    13781700 
     1701/** 
     1702 * @package Task 
     1703 */ 
    13791704class SGL_Task_CreateMemberUser extends SGL_Task 
    13801705{ 
     
    13821707    { 
    13831708        if (array_key_exists('createTables', $data) && $data['createTables'] == 1) { 
    1384             require_once SGL_MOD_DIR . '/user/classes/DA_User.php'; 
    1385             $da = & DA_User::singleton(); 
     1709            require_once SGL_MOD_DIR . '/user/classes/UserDAO.php'; 
     1710            $da = & UserDAO::singleton(); 
    13861711            $oUser = $da->getUserById(); 
    13871712 
     
    14251750 
    14261751        //  update lang in default prefs 
    1427         require_once SGL_MOD_DIR . '/user/classes/DA_User.php'; 
    1428         $da = & DA_User::singleton(); 
     1752        require_once SGL_MOD_DIR . '/user/classes/UserDAO.php'; 
     1753        $da = & UserDAO::singleton(); 
    14291754        $lang = isset($_SESSION['install_language']) 
    14301755            ? $_SESSION['install_language'] 
    1431             : 'en-iso-8859-15'
     1756            : $data['aPrefs']['language']
    14321757        $ok = $da->updateMasterPrefs(array('language' => $lang)); 
    14331758        if (PEAR::isError($ok)) { 
     
    14441769        $tz = isset($_SESSION['install_timezone']) 
    14451770            ? $_SESSION['install_timezone'] 
    1446             : 'UTC'
     1771            : $data['aPrefs']['timezone']
    14471772        $ok = $da->updateMasterPrefs(array('timezone' => $tz)); 
    14481773        if (PEAR::isError($ok)) { 
     
    14571782    } 
    14581783} 
     1784 
     1785if (strpos(PHP_OS, 'WIN') !== false) { 
     1786    if (!function_exists('symlink')) { 
     1787        function symlink($target, $link) { 
     1788            exec("linkd " . $link . " " . $target, $ret); 
     1789            return $ret; 
     1790        } 
     1791    } 
     1792    if (!function_exists('readlink')) { 
     1793        function readlink($link) { 
     1794            exec('linkd ' . $link, $ret); 
     1795            return $ret; 
     1796        } 
     1797    } 
     1798} 
     1799 
    14591800?> 
  • trunk/lib/SGL/Task/Process.php

    r2468 r3123  
    5353            apd_set_pprof_trace(); 
    5454        } 
    55         // load base utility lib 
    56         require_once SGL_LIB_DIR . '/SGL.php'; 
    57  
    5855        //  start output buffering 
    5956        if ($this->conf['site']['outputBuffering']) { 
     
    7269    function process(&$input, &$output) 
    7370    { 
    74         $options = &PEAR::getStaticProperty('DB_DataObject', 'options'); 
    75         $options = array( 
    76             'database'              => SGL_DB::getDsn(SGL_DSN_STRING), 
    77             'schema_location'       => SGL_ENT_DIR, 
    78             'class_location'        => SGL_ENT_DIR, 
    79             'require_prefix'        => SGL_ENT_DIR . '/', 
    80             'class_prefix'          => 'DataObjects_', 
    81             'debug'                 => $this->conf['debug']['dataObject'], 
    82             'production'            => 0, 
    83             'ignore_sequence_keys'  => 'ALL', 
    84             'generator_strip_schema' => 1, 
    85         ); 
     71        $conf = $input->getConfig(); 
     72        $oTask = new SGL_Task_InitialiseDbDataObject(); 
     73        $ok = $oTask->run($conf); 
    8674 
    8775        $this->processRequest->process($input, $output); 
     
    165153 
    166154        if ($this->conf['site']['extendedLocale'] == false) { 
    167  
    168             $cat = constant(str_replace("'", "", $this->conf['site']['localeCategory'])); 
    169  
    170155            //  The default locale category is LC_ALL, but this will cause probs for 
    171156            //  european users who get their decimal points (.) changed to commas (,) 
     
    173158            //  is to select the LC_TIME category.  For a global effect change this in 
    174159            //  Config. 
    175             if (setlocale($cat, $locale) == false) { 
     160            if (setlocale(SGL_String::pseudoConstantToInt($this->conf['site']['localeCategory']), $locale) == false) { 
    176161                setlocale(LC_TIME, $locale); 
    177162            } 
     
    236221            header('Content-Type: text/html; charset=' . $GLOBALS['_SGL']['CHARSET']); 
    237222            header('X-Powered-By: Seagull http://seagullproject.org'); 
     223            foreach ($output->getHeaders() as $header) { 
     224                header($header); 
     225            } 
    238226        } 
    239227    } 
     
    277265        // check for timeout 
    278266        $session = $input->get('session'); 
    279         $timeout = $session->isTimedOut(); 
     267        $timeout = !$session->updateIdle(); 
    280268 
    281269        //  store request in session 
     
    296284                && $this->conf['debug']['authorisationEnabled']) 
    297285        { 
    298             //  check that session is not invalid or timed out 
     286            //  check that session is valid or timed out 
    299287            if (!$session->isValid() || $timeout) { 
    300288 
     
    339327            SGL::logMessage('perms from cache', PEAR_LOG_DEBUG); 
    340328        } else { 
    341             require_once SGL_MOD_DIR . '/user/classes/DA_User.php'; 
    342             $da = & DA_User::singleton(); 
     329            require_once SGL_MOD_DIR . '/user/classes/UserDAO.php'; 
     330            $da = & UserDAO::singleton(); 
    343331            $aPerms = $da->getPermsByModuleId(); 
    344332            $serialized = serialize($aPerms); 
     
    438426 * Resolves request params into Manager model object. 
    439427 * 
     428 * The module is resolved from Request parameter, if resolution fails, default 
     429 * module is loaded. 
     430 * 
    440431 * @package Task 
    441432 * @author  Demian Turner <demian@phpkitchen.com> 
     
    447438        SGL::logMessage(null, PEAR_LOG_DEBUG); 
    448439 
    449         require_once SGL_MOD_DIR . '/default/classes/DA_Default.php'; 
    450         $da = & DA_Default::singleton(); 
    451440        $req = $input->getRequest(); 
    452441        $moduleName = $req->get('moduleName'); 
    453442        $managerName = $req->get('managerName'); 
    454443        $getDefaultMgr = false; 
    455         $homePageRequest = false; 
    456444 
    457445        if (empty($moduleName) || empty($managerName)) { 
     
    459447            SGL::logMessage('Module and manager names could not be determined from request'); 
    460448            $getDefaultMgr = true; 
    461             $homePageRequest = true; 
    462449 
    463450        } else { 
    464             if (!$da->moduleIsRegistered($moduleName)) { 
    465                 SGL::logMessage('module "'.$moduleName.'"does not appear to be registered'); 
     451            if (!SGL::moduleIsEnabled($moduleName)) { 
     452                SGL::raiseError('module "'.$moduleName.'" does not appear to be registered', 
     453                    SGL_ERROR_RESOURCENOTFOUND); 
    466454                $getDefaultMgr = true; 
    467455            } else { 
     
    469457                $conf = $this->c->ensureModuleConfigLoaded($moduleName); 
    470458 
    471                 if (PEAR::isError($conf)) { 
    472                     SGL::raiseError('could not locate module\'s config file', 
    473                         SGL_ERROR_NOFILE); 
    474                 } else { 
     459                if (!PEAR::isError($conf)) { 
    475460                    //  set $this->conf to contain global and current module config. 
    476461                    $this->conf = $conf; 
    477                 } 
    478  
    479                 //  get manager name if $managerName not correct attempt to load default 
    480                 //  manager w/$moduleName 
    481                 $mgrPath = SGL_MOD_DIR . '/' . $moduleName . '/classes/'; 
    482                 $retMgrName = $this->getManagerName($managerName, $mgrPath); 
    483                 if ($retMgrName === false) { 
    484                     SGL::raiseError("Specified manager '$managerName' could not be found, ". 
    485                         "default loaded, pls ensure full manager name is present in module's conf.ini"); 
    486                 } 
    487                 $managerName = ($retMgrName) 
    488                     ? $retMgrName 
    489                     : $this->getManagerName($moduleName, $mgrPath); 
    490                 if (!empty($managerName)) { 
    491  
    492                     //  build path to manager class 
    493                     $classPath = $mgrPath . $managerName . '.php'; 
    494                     if (@is_file($classPath)) { 
    495                         require_once $classPath; 
    496  
    497                         //  if class exists, instantiate it 
    498                         if (@class_exists($managerName)) { 
    499                             $input->moduleName = $moduleName; 
    500                             $input->set('manager', new $managerName); 
     462                    //  get manager name, if $managerName not correct attempt to load default 
     463                    //  manager w/$moduleName 
     464                    $mgrPath = SGL_MOD_DIR . '/' . $moduleName . '/classes/'; 
     465                    $retMgrName = $this->getManagerName($managerName, $mgrPath); 
     466                    if ($retMgrName === false) { 
     467                        SGL::raiseError("Specified manager '$managerName' could not be found, ". 
     468                            "defaults loaded, pls ensure full manager name is present in module's conf.ini", 
     469                            SGL_ERROR_RESOURCENOTFOUND); 
     470                    } 
     471                    $managerName = ($retMgrName) 
     472                        ? $retMgrName 
     473                        : $this->getManagerName($moduleName, $mgrPath); 
     474                    if (!empty($managerName)) { 
     475 
     476                        //  build path to manager class 
     477                        $classPath = $mgrPath . $managerName . '.php'; 
     478                        if (@is_file($classPath)) { 
     479                            require_once $classPath; 
     480 
     481                            //  if class exists, instantiate it 
     482                            if (@class_exists($managerName)) { 
     483                                $input->moduleName = $moduleName; 
     484                                $input->set('manager', new $managerName); 
     485                            } else { 
     486                                SGL::logMessage("Class $managerName does not exist"); 
     487                                $getDefaultMgr = true; 
     488                            } 
    501489                        } else { 
    502                             SGL::logMessage("Class $managerName does not exist"); 
     490                            SGL::logMessage("Could not find file $classPath"); 
    503491                            $getDefaultMgr = true; 
    504492                        } 
    505493                    } else { 
    506                         SGL::logMessage("Could not find file $classPath"); 
     494                        SGL::logMessage('Manager name could not be determined from '. 
     495                                        'SGL_Process_ResolveManager::getManagerName'); 
    507496                        $getDefaultMgr = true; 
    508497                    } 
    509498                } else { 
    510                     SGL::logMessage('Manager name could not be determined from '. 
    511                                     'SGL_Process_ResolveManager::getManagerName'); 
     499                    //  remove last error and rethrow as SGL_ERROR_RESOURCENOTFOUND 
     500                    //  so can be caught in SGL_Manager 
     501                    SGL_Error::pop(); 
     502                    $msg = $conf->getMessage(); 
     503                    SGL::raiseError($msg, SGL_ERROR_RESOURCENOTFOUND); 
    512504                    $getDefaultMgr = true; 
    513505                } 
     
    515507        } 
    516508        if ($getDefaultMgr) { 
    517             $ok = $this->getDefaultManager($input); 
    518             if (!$homePageRequest || !$ok) { 
    519                 SGL::raiseError("The specified manager could not be found, default loaded", 
    520                     SGL_ERROR_INVALIDCALL); 
    521             } 
     509            $ok = $this->getConfiguredDefaultManager($input); 
     510            if (!$ok) { 
     511                SGL::raiseError("The default manager could not be found", 
     512                    SGL_ERROR_RESOURCENOTFOUND); 
     513            } 
     514            $this->getDefaultManager($input); 
    522515        } 
    523516        $this->processRequest->process($input, $output); 
     
    530523     * @return boolean 
    531524     */ 
    532     function getDefaultManager(&$input) 
     525    function getConfiguredDefaultManager(&$input) 
    533526    { 
    534527        $defaultModule = $this->conf['site']['defaultModule']; 
     
    574567        } 
    575568        $input->setRequest($req); // this ought to take care of itself 
     569        return true; 
     570    } 
     571 
     572    function getDefaultManager(&$input) 
     573    { 
     574        $defaultModule = 'default'; 
     575        $defaultMgr = 'default'; 
     576        $mgrName = SGL_Inflector::caseFix( 
     577            SGL_Inflector::getManagerNameFromSimplifiedName($defaultMgr)); 
     578        $path = SGL_MOD_DIR .'/'.$defaultModule.'/classes/'.$mgrName.'.php'; 
     579        require_once $path; 
     580        $mgr = new $mgrName(); 
     581        $input->moduleName = $defaultModule; 
     582        $input->set('manager', $mgr); 
     583        $req = $input->getRequest(); 
     584        $req->set('moduleName', $defaultModule); 
     585        $req->set('managerName', $defaultMgr); 
     586        $input->setRequest($req); 
    576587        return true; 
    577588    } 
     
    711722        $output->isMinimalInstall = SGL::isMinimalInstall(); 
    712723        $output->conf             = $this->c->getAll(); 
     724        $output->showExecutionTimes = ($_SESSION['aPrefs']['showExecutionTimes'] == 1 ) ? true : false; 
    713725    } 
    714726} 
     
    761773 
    762774/** 
    763  * Collects performance data. 
    764  * 
    765  * @package Task 
    766  * @author  Demian Turner <demian@phpkitchen.com> 
    767  */ 
    768 class SGL_Task_GetPerformanceInfo extends SGL_DecorateProcess 
    769 { 
    770     function process(&$input, &$output) 
    771     { 
    772         SGL::logMessage(null, PEAR_LOG_DEBUG); 
    773  
    774         $this->processRequest->process($input, $output); 
    775         //  get performance info 
    776         if (!empty($_SESSION['aPrefs']['showExecutionTimes']) 
    777                 && $_SESSION['aPrefs']['showExecutionTimes'] == 1) { 
    778  
    779             //  prepare query count 
    780             $output->queryCount = $GLOBALS['_SGL']['QUERY_COUNT']; 
    781  
    782             //  and execution time 
    783             $output->executionTime = getSystemTime() - @SGL_START_TIME; 
    784         } else { 
    785             $output->executionTime = 0; 
    786         } 
    787         //  send memory consumption to output 
    788         if (SGL_PROFILING_ENABLED && function_exists('memory_get_usage')) { 
    789             $output->memoryUsage = number_format(memory_get_usage()); 
    790         } 
    791     } 
    792 } 
    793  
    794 /** 
    795775 * Builds navigation menus. 
    796776 * 
     
    836816 
    837817/** 
    838  * Setup which Graphical User Interface to use. 
     818 * Setup which admin Graphical User Interface to use. 
    839819 * 
    840820 * @package Task 
     
    873853                        SGL_ERROR_NOFILE); 
    874854                } 
    875  
    876855                //  set $this->conf to contain global and current module config. 
    877856                $this->conf = $conf; 
     
    879858 
    880859            // then check if manager requires to switch to adminGUI 
    881             if (isset($this->conf[$mgrName]['adminGuiAllowed']) 
    882                 && $this->conf[$mgrName]['adminGuiAllowed']) { 
     860            if (isset( $this->conf[$mgrName]['adminGuiAllowed']) 
     861                    && $this->conf[$mgrName]['adminGuiAllowed']) { 
    883862                $adminGuiRequested = true; 
    884863 
    885                 // exception 
    886                 // 1. allows to preview articles with default theme 
    887                 if ($mgrName == 'ArticleMgr' && $output->action == 'view') { 
     864                //  check for adminGUI override in action 
     865                if (isset($output->overrideAdminGuiAllowed) && $output->overrideAdminGuiAllowed) { 
    888866                    $adminGuiRequested = false; 
    889867                } 
     
    936914 
    937915/** 
     916 * Builds data for debug block. 
     917 * 
     918 * @package Task 
     919 * @author  Demian Turner <demian@phpkitchen.com> 
     920 */ 
     921class SGL_Task_BuildDebugBlock extends SGL_DecorateProcess 
     922{ 
     923    function process(&$input, &$output) 
     924    { 
     925        SGL::logMessage(null, PEAR_LOG_DEBUG); 
     926 
     927        $this->processRequest->process($input, $output); 
     928        if (!empty($this->conf['debug']['infoBlock'])) { 
     929            $output->debug_request = $output->request; 
     930            $output->debug_session = $_SESSION; 
     931            $output->debug_module = $output->moduleName; 
     932            $output->debug_manager = isset($output->managerName) 
     933                ? $output->managerName 
     934                : ''; 
     935            $output->debug_action = $output->action; 
     936            $output->debug_section = $output->sectionId; 
     937            $output->debug_master_template = $output->masterTemplate; 
     938            $output->debug_template = $output->template; 
     939            $output->debug_theme = $output->theme; 
     940 
     941        } 
     942    } 
     943} 
     944 
     945/** 
    938946 * @package Task 
    939947 */ 
     
    946954        $this->processRequest->process($input, $output); 
    947955 
    948         //  get all html onLoad events 
    949         $output->onLoad = $output->getAllOnLoadEvents(); 
     956        //  get all html onLoad events and js files 
     957        $output->onLoad = $output->getOnLoadEvents(); 
     958        $output->onUnload = $output->getOnUnloadEvents(); 
     959        $output->onReadyDom = $output->getOnReadyDomEvents(); 
     960        $output->javascriptSrc = $output->getJavascriptFiles(); 
    950961 
    951962        //  unset unnecessary objects 
  • trunk/lib/SGL/UrlParser/AliasStrategy.php

    r2052 r3123  
    88 */ 
    99 
    10 require_once SGL_MOD_DIR . '/navigation/classes/DA_Navigation.php'; 
    11 require_once SGL_CORE_DIR . '/UrlParser/SimpleStrategy.php'; 
     10require_once SGL_MOD_DIR . '/navigation/classes/NavigationDAO.php'; 
     11 
     12/** 
     13 * Concrete simple url parser strategy. 
     14 * 
     15 */ 
     16class SGL_UrlParser_SimpleStrategy extends SGL_UrlParserStrategy 
     17
     18    /** 
     19     * Analyzes querystring content and parses it into module/manager/action 
     20     * and params. 
     21     * 
     22     * @param SGL_Url $url 
     23     * @return array        An array to be assigned to SGL_Url::aQueryData 
     24     */ 
     25    function parseQueryString(/*SGL_Url*/$url, $conf) 
     26    { 
     27        $ret = array(); 
     28 
     29        //  catch case for default page, ie, home 
     30        if (empty($url->url)) { 
     31            return $ret; 
     32        } 
     33        $parts = array_filter(explode('/', $url->url), 'strlen'); 
     34        $numElems = count($parts); 
     35 
     36        //  we need at least 1 element 
     37        if ($numElems < 1) { 
     38            return $ret; 
     39        } 
     40        $ret['moduleName'] = $parts[0]; 
     41        $ret['managerName'] = isset($parts[1]) ? $parts[1] : $parts[0]; 
     42        $actionExists = (isset($parts[2]) && $parts[2] == 'action') ? true : false; 
     43        $ret['action'] = ($actionExists) ? $parts[3] : null; 
     44 
     45        //  parse params 
     46        $idx = ($actionExists) ? 4 : 2; 
     47 
     48        //  break out if no params detected 
     49        if ($numElems <= $idx) { 
     50            return $ret; 
     51        } 
     52        $aTmp = array(); 
     53        for ($x = $idx; $x < $numElems; $x++) { 
     54            if ($x % 2) { // if index is odd 
     55                $aTmp['varValue'] = urldecode($parts[$x]); 
     56            } else { 
     57                // parsing the parameters 
     58                $aTmp['varName'] = urldecode($parts[$x]); 
     59            } 
     60            //  if a name/value pair exists, add it to request 
     61            if (count($aTmp) == 2) { 
     62                $ret[$aTmp['varName']] = $aTmp['varValue']; 
     63                $aTmp = array(); 
     64            } 
     65        } 
     66        return $ret; 
     67    } 
     68
    1269 
    1370/** 
     
    1976    function SGL_UrlParser_AliasStrategy() 
    2077    { 
    21         $this->da = & DA_Navigation::singleton(); 
     78        $this->da = & NavigationDAO::singleton(); 
    2279    } 
    2380    /** 
  • trunk/lib/SGL/UrlParser/SefStrategy.php

    r2295 r3123  
    8484        } else { 
    8585            $aParsedUri['moduleName'] = $conf['site']['defaultModule']; 
    86             $aParsedUri['managerName'] = $conf['site']['defaultManager']; 
     86            $aParsedUri['managerName'] = $mgrCopy = $conf['site']['defaultManager']; 
    8787            if (!empty($conf['site']['defaultParams'])) { 
    8888                $aParams = SGL_Url::querystringArrayToHash( 
     
    132132                    } 
    133133                } 
    134             } else { 
    135                 //   we end up here when parsing url resources that don't exist, 
    136                 //  ie example.com/index.php/blah, so raise error silently 
    137                 SGL::raiseError("module's ini file could not be found, expecting file $testPath", 
    138                     SGL_ERROR_NOFILE); 
    139             } 
    140         } 
    141         //  catch case where when manger + mod names are the same, and cookies 
     134            } 
     135        } 
     136        //  catch case where when manager + mod names are the same, and cookies 
    142137        //  disabled, sglsessid gets bumped into wrong slot 
    143138        if (preg_match('/'.strtolower($conf['cookie']['name']).'/', $aParsedUri['managerName'])) { 
    144             @list(,$cookieValue) = split('=', $aParsedUri['managerName']); 
     139            $cookieValue = isset($aParsedUri['managerName'][1]) 
     140                ? $aParsedUri['managerName'][1] 
     141                : ''; 
    145142            $cookieValue = substr($cookieValue, 0, -1); 
    146143            $aParsedUri['managerName'] = $aParsedUri['moduleName']; 
     
    237234                    //  - frmOrgTypeId/0 
    238235                    //  - frmOrgTypeId/1 ... etc 
    239                     } elseif (isset($aList[$idx]) && is_null($listKey)) { 
     236                    } elseif (is_array($aList) && isset($aList[$idx]) && is_null($listKey)) { 
    240237                        $qsParamValue = $idx; 
    241238 
  • trunk/lib/SGL/XML/RPC/Remote.php

    r2061 r3123  
    2222    function call($method) 
    2323    { 
    24         $_args = $args = func_get_args(); 
     24        $args = func_get_args(); 
    2525        $server_host = $this->conf['server_host']; 
    2626 
     
    3333        $password = $this->conf['password']; 
    3434        $eargs = array(); 
    35         foreach($args as $arg) { 
     35        foreach ($args as $arg) { 
    3636            $eargs[] = $this->_encode($arg); 
    3737        }