/** * Installs the required and optional modules * * @return void */ private function installModules() { // get port $port = SpoonSession::exists('db_port') && SpoonSession::get('db_port') != '' ? SpoonSession::get('db_port') : 3306; // database instance $this->db = new SpoonDatabase('mysql', SpoonSession::get('db_hostname'), SpoonSession::get('db_username'), SpoonSession::get('db_password'), SpoonSession::get('db_database'), $port); // utf8 compliance & MySQL-timezone $this->db->execute('SET CHARACTER SET utf8, NAMES utf8, time_zone = "+0:00"'); /** * First we need to install the core. All the linked modules, settings and sql tables are * being installed. */ require_once PATH_WWW . '/backend/core/installer/install.php'; // install the core $install = new CoreInstall($this->db, SpoonSession::get('languages'), SpoonSession::get('interface_languages'), SpoonSession::get('example_data'), array('default_language' => SpoonSession::get('default_language'), 'default_interface_language' => SpoonSession::get('default_interface_language'), 'spoon_debug_email' => SpoonSession::get('email'), 'api_email' => SpoonSession::get('email'), 'site_domain' => isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'fork.local', 'site_title' => 'Fork CMS', 'smtp_server' => '', 'smtp_port' => '', 'smtp_username' => '', 'smtp_password' => '')); // variables passed to module installers $variables = array(); $variables['email'] = SpoonSession::get('email'); $variables['default_interface_language'] = SpoonSession::get('default_interface_language'); // loop required modules foreach ($this->modules['required'] as $module) { // install exists if (SpoonFile::exists(PATH_WWW . '/backend/modules/' . $module . '/installer/install.php')) { // users module needs custom variables if ($module == 'users') { $variables['password'] = SpoonSession::get('password'); } // load file require_once PATH_WWW . '/backend/modules/' . $module . '/installer/install.php'; // class name $class = SpoonFilter::toCamelCase($module) . 'Install'; // execute installer $install = new $class($this->db, SpoonSession::get('languages'), SpoonSession::get('interface_languages'), SpoonSession::get('example_data'), $variables); } } // optional modules foreach (SpoonSession::get('modules') as $module) { if (!in_array($module, $this->modules['required'])) { // install exists if (SpoonFile::exists(PATH_WWW . '/backend/modules/' . $module . '/installer/install.php')) { // load file require_once PATH_WWW . '/backend/modules/' . $module . '/installer/install.php'; // class name $class = SpoonFilter::toCamelCase($module) . 'Install'; // execute installer $install = new $class($this->db, SpoonSession::get('languages'), SpoonSession::get('interface_languages'), SpoonSession::get('example_data'), $variables); } } } }
/** * Installs the required and optional modules */ private function installModules() { // The default extras to add to every page after installation of all modules and to add to the default templates. $defaultExtras = array(); // init var $warnings = array(); /** * First we need to install the core. All the linked modules, settings and sql tables are * being installed. */ require_once PATH_WWW . '/backend/core/installer/installer.php'; // create the core installer $installer = new CoreInstaller($this->db, SpoonSession::get('languages'), SpoonSession::get('interface_languages'), SpoonSession::get('example_data'), array('default_language' => SpoonSession::get('default_language'), 'default_interface_language' => SpoonSession::get('default_interface_language'), 'spoon_debug_email' => SpoonSession::get('email'), 'api_email' => SpoonSession::get('email'), 'site_domain' => isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'fork.local', 'site_title' => 'Fork CMS', 'smtp_server' => '', 'smtp_port' => '', 'smtp_username' => '', 'smtp_password' => '')); // install the core $installer->install(); // add the warnings $moduleWarnings = $installer->getWarnings(); if (!empty($moduleWarnings)) { $warnings[] = array('module' => 'core', 'warnings' => $moduleWarnings); } // add the default extras $moduleDefaultExtras = $installer->getDefaultExtras(); if (!empty($moduleDefaultExtras)) { array_merge($defaultExtras, $moduleDefaultExtras); } // variables passed to module installers $variables = array(); $variables['email'] = SpoonSession::get('email'); $variables['default_interface_language'] = SpoonSession::get('default_interface_language'); // modules to install (required + selected) $modules = array_unique(array_merge($this->modules['required'], SpoonSession::get('modules'))); // loop required modules foreach ($modules as $module) { // install exists if (SpoonFile::exists(PATH_WWW . '/backend/modules/' . $module . '/installer/installer.php')) { // users module needs custom variables if ($module == 'users') { $variables['password'] = SpoonSession::get('password'); } // load installer file require_once PATH_WWW . '/backend/modules/' . $module . '/installer/installer.php'; // build installer class name $class = SpoonFilter::toCamelCase($module) . 'Installer'; // create installer $installer = new $class($this->db, SpoonSession::get('languages'), SpoonSession::get('interface_languages'), SpoonSession::get('example_data'), $variables); // install the module $installer->install(); // add the warnings $moduleWarnings = $installer->getWarnings(); if (!empty($moduleWarnings)) { $warnings[] = array('module' => $module, 'warnings' => $moduleWarnings); } // add the default extras $moduleDefaultExtras = $installer->getDefaultExtras(); if (!empty($moduleDefaultExtras)) { $defaultExtras = array_merge($defaultExtras, $moduleDefaultExtras); } } } // loop default extras foreach ($defaultExtras as $extra) { // get pages without this extra $revisionIds = $this->db->getColumn('SELECT i.revision_id FROM pages AS i WHERE i.revision_id NOT IN ( SELECT DISTINCT b.revision_id FROM pages_blocks AS b WHERE b.extra_id = ? GROUP BY b.revision_id )', array($extra['id'])); // build insert array for this extra $insertExtras = array(); foreach ($revisionIds as $revisionId) { $insertExtras[] = array('revision_id' => $revisionId, 'position' => $extra['position'], 'extra_id' => $extra['id'], 'created_on' => gmdate('Y-m-d H:i:s'), 'edited_on' => gmdate('Y-m-d H:i:s'), 'visible' => 'Y'); } // insert block $this->db->insert('pages_blocks', $insertExtras); } // parse the warnings $this->tpl->assign('warnings', $warnings); }