/** * Extensions view * * @return void */ function render_content() { $extension = ''; $extension_status = 'all'; if (isset($_GET['extension_status'])) { if (in_array($_GET['extension_status'], array('all', 'active', 'inactive', 'core'))) { $extension_status = $_GET['extension_status']; } } if (isset($_GET['extension'])) { $extension = $_GET['extension']; } $view = isset($_GET['action']) && $_GET['action'] == 'view'; $extensions_active = Extensions_Util::get_active_extensions($this->_config); if ($extension && $view) { $all_settings = $this->_config->get_array('extensions.settings'); $meta = $extensions_active[$extension]; $sub_view = 'settings'; } else { $extensions_all = Extensions_Util::get_extensions($this->_config); $extensions_inactive = Extensions_Util::get_inactive_extensions($this->_config); $var = "extensions_{$extension_status}"; $extensions = ${$var}; $extension_keys = array_keys($extensions); sort($extension_keys); $sub_view = 'list'; $page = 1; } $config = Dispatcher::config(); include W3TC_INC_OPTIONS_DIR . '/extensions.php'; }
/** * * * @param unknown $extension * @param Config $w3_config * @return bool */ public static function activate_extension($extension, $w3_config) { $all_extensions = Extensions_Util::get_extensions($w3_config); $extensions = $w3_config->get_array('extensions.active'); if (!$w3_config->is_extension_active($extension)) { $meta = $all_extensions[$extension]; $filename = W3TC_EXTENSION_DIR . '/' . trim($meta['path'], '/'); if (!file_exists($filename)) { return false; } include $filename; $extensions[$extension] = $meta['path']; ksort($extensions, SORT_STRING); $w3_config->set('extensions.active', $extensions); // if extensions doesnt want to control frontend activity - // activate it there too if (!isset($meta['active_frontend_own_control']) || !$meta['active_frontend_own_control']) { $w3_config->set_extension_active_frontend($extension, true); } try { $w3_config->save(); return true; } catch (\Exception $ex) { } } return false; }
function w3tc_extensions_activate() { $config = Dispatcher::config(); $extension = Util_Request::get_string('w3tc_extensions_activate'); $ext = Extensions_Util::get_extension($config, $extension); if (!is_null($ext)) { if (Extensions_Util::activate_extension($extension, $config)) { Util_Admin::redirect_with_custom_messages2(array('notes' => array(sprintf(__('Extension <strong>%s</strong> has been successfully activated.', 'w3-total-cache'), $ext['name'])))); return; } } Util_Admin::redirect(array()); }
/** * Alters the active state of an extension */ public function change_extension_status() { $action = Util_Request::get_string('action'); if (in_array($action, array('activate', 'deactivate'))) { $extension = Util_Request::get_string('extension'); if ('activate' == $action) { Extensions_Util::activate_extension($extension, $this->_config); wp_redirect(Util_Ui::admin_url(sprintf('admin.php?page=w3tc_extensions&activated=%s', $extension))); } elseif ('deactivate' == $action) { Extensions_Util::deactivate_extension($extension, $this->_config); wp_redirect(Util_Ui::admin_url(sprintf('admin.php?page=w3tc_extensions&deactivated=%s', $extension))); } } }
private function _w3tc_save_options_process() { $data = array('old_config' => $this->_config, 'response_query_string' => array(), 'response_actions' => array(), 'response_errors' => array(), 'response_notes' => array('config_save')); // if we are on extension settings page - stay on the same page if (Util_Request::get_string('page') == 'w3tc_extensions') { $data['response_query_string']['page'] = Util_Request::get_string('page'); $data['response_query_string']['extension'] = Util_Request::get_string('extension'); $data['response_query_string']['action'] = Util_Request::get_string('action'); } $capability = apply_filters('w3tc_capability_config_save', 'manage_options'); if (!current_user_can($capability)) { wp_die(__('You do not have the rights to perform this action.', 'w3-total-cache')); } /** * Read config * We should use new instance of WP_Config object here */ $config = new Config(); $this->read_request($config); if ($this->_page == 'w3tc_dashboard') { if (Util_Request::get_boolean('maxcdn')) { $config->set('cdn.enabled', true); $config->set('cdn.engine', 'maxcdn'); } } /** * General tab */ if ($this->_page == 'w3tc_general') { $file_nfs = Util_Request::get_boolean('file_nfs'); $file_locking = Util_Request::get_boolean('file_locking'); $config->set('pgcache.file.nfs', $file_nfs); $config->set('minify.file.nfs', $file_nfs); $config->set('dbcache.file.locking', $file_locking); $config->set('objectcache.file.locking', $file_locking); $config->set('pgcache.file.locking', $file_locking); $config->set('minify.file.locking', $file_locking); if (is_network_admin()) { if ($this->_config->get_boolean('common.force_master') !== $config->get_boolean('common.force_master')) { // blogmap is wrong so empty it @unlink(W3TC_CACHE_BLOGMAP_FILENAME); $blogmap_dir = dirname(W3TC_CACHE_BLOGMAP_FILENAME) . '/' . basename(W3TC_CACHE_BLOGMAP_FILENAME, '.php') . '/'; if (@is_dir($blogmap_dir)) { Util_File::rmdir($blogmap_dir); } } } /** * Check permalinks for page cache */ if ($config->get_boolean('pgcache.enabled') && $config->get_string('pgcache.engine') == 'file_generic' && !get_option('permalink_structure')) { $config->set('pgcache.enabled', false); $data['response_errors'][] = 'fancy_permalinks_disabled_pgcache'; } if (!Util_Environment::is_w3tc_pro($this->_config)) { delete_transient('w3tc_license_status'); } } /** * Minify tab */ if ($this->_page == 'w3tc_minify' && !$this->_config->get_boolean('minify.auto')) { $js_groups = array(); $css_groups = array(); $js_files = Util_Request::get_array('js_files'); $css_files = Util_Request::get_array('css_files'); foreach ($js_files as $theme => $templates) { foreach ($templates as $template => $locations) { foreach ((array) $locations as $location => $types) { foreach ((array) $types as $files) { foreach ((array) $files as $file) { if (!empty($file)) { $js_groups[$theme][$template][$location]['files'][] = Util_Environment::normalize_file_minify($file); } } } } } } foreach ($css_files as $theme => $templates) { foreach ($templates as $template => $locations) { foreach ((array) $locations as $location => $files) { foreach ((array) $files as $file) { if (!empty($file)) { $css_groups[$theme][$template][$location]['files'][] = Util_Environment::normalize_file_minify($file); } } } } } $config->set('minify.js.groups', $js_groups); $config->set('minify.css.groups', $css_groups); $js_theme = Util_Request::get_string('js_theme'); $css_theme = Util_Request::get_string('css_theme'); $data['response_query_string']['js_theme'] = $js_theme; $data['response_query_string']['css_theme'] = $css_theme; } /** * Browser Cache tab */ if ($this->_page == 'w3tc_browsercache') { if ($config->get_boolean('browsercache.enabled') && $config->get_boolean('browsercache.no404wp') && !get_option('permalink_structure')) { $config->set('browsercache.no404wp', false); $data['response_errors'][] = 'fancy_permalinks_disabled_browsercache'; } // todo: move to cdn module if (in_array($engine = $this->_config->get_string('cdn.engine'), array('netdna', 'maxcdn'))) { require_once W3TC_LIB_NETDNA_DIR . '/NetDNA.php'; $keys = explode('+', $this->_config->get_string('cdn.' . $engine . '.authorization_key')); if (sizeof($keys) == 3) { list($alias, $consumerkey, $consumersecret) = $keys; try { $api = new \NetDNA($alias, $consumerkey, $consumersecret); $disable_cooker_header = $config->get_boolean('browsercache.other.nocookies') || $config->get_boolean('browsercache.cssjs.nocookies'); $api->update_pull_zone($this->_config->get_string('cdn.' . $engine . '.zone_id'), array('ignore_setcookie_header' => $disable_cooker_header)); } catch (\Exception $ex) { } } } } /** * Mobile tab */ if ($this->_page == 'w3tc_mobile') { $groups = Util_Request::get_array('mobile_groups'); $mobile_groups = array(); $cached_mobile_groups = array(); foreach ($groups as $group => $group_config) { $group = strtolower($group); $group = preg_replace('~[^0-9a-z_]+~', '_', $group); $group = trim($group, '_'); if ($group) { $theme = isset($group_config['theme']) ? trim($group_config['theme']) : 'default'; $enabled = isset($group_config['enabled']) ? (bool) $group_config['enabled'] : true; $redirect = isset($group_config['redirect']) ? trim($group_config['redirect']) : ''; $agents = isset($group_config['agents']) ? explode("\r\n", trim($group_config['agents'])) : array(); $mobile_groups[$group] = array('theme' => $theme, 'enabled' => $enabled, 'redirect' => $redirect, 'agents' => $agents); $cached_mobile_groups[$group] = $agents; } } /** * Allow plugins modify WPSC mobile groups */ $cached_mobile_groups = apply_filters('cached_mobile_groups', $cached_mobile_groups); /** * Merge existent and delete removed groups */ foreach ($mobile_groups as $group => $group_config) { if (isset($cached_mobile_groups[$group])) { $mobile_groups[$group]['agents'] = (array) $cached_mobile_groups[$group]; } else { unset($mobile_groups[$group]); } } /** * Add new groups */ foreach ($cached_mobile_groups as $group => $agents) { if (!isset($mobile_groups[$group])) { $mobile_groups[$group] = array('theme' => '', 'enabled' => true, 'redirect' => '', 'agents' => $agents); } } /** * Allow plugins modify W3TC mobile groups */ $mobile_groups = apply_filters('w3tc_mobile_groups', $mobile_groups); /** * Sanitize mobile groups */ foreach ($mobile_groups as $group => $group_config) { $mobile_groups[$group] = array_merge(array('theme' => '', 'enabled' => true, 'redirect' => '', 'agents' => array()), $group_config); $mobile_groups[$group]['agents'] = array_unique($mobile_groups[$group]['agents']); $mobile_groups[$group]['agents'] = array_map('strtolower', $mobile_groups[$group]['agents']); sort($mobile_groups[$group]['agents']); } $enable_mobile = false; foreach ($mobile_groups as $group_config) { if ($group_config['enabled']) { $enable_mobile = true; break; } } $config->set('mobile.enabled', $enable_mobile); $config->set('mobile.rgroups', $mobile_groups); } /** * Referrer tab */ if ($this->_page == 'w3tc_referrer') { $groups = Util_Request::get_array('referrer_groups'); $referrer_groups = array(); foreach ($groups as $group => $group_config) { $group = strtolower($group); $group = preg_replace('~[^0-9a-z_]+~', '_', $group); $group = trim($group, '_'); if ($group) { $theme = isset($group_config['theme']) ? trim($group_config['theme']) : 'default'; $enabled = isset($group_config['enabled']) ? (bool) $group_config['enabled'] : true; $redirect = isset($group_config['redirect']) ? trim($group_config['redirect']) : ''; $referrers = isset($group_config['referrers']) ? explode("\r\n", trim($group_config['referrers'])) : array(); $referrer_groups[$group] = array('theme' => $theme, 'enabled' => $enabled, 'redirect' => $redirect, 'referrers' => $referrers); } } /** * Allow plugins modify W3TC referrer groups */ $referrer_groups = apply_filters('w3tc_referrer_groups', $referrer_groups); /** * Sanitize mobile groups */ foreach ($referrer_groups as $group => $group_config) { $referrer_groups[$group] = array_merge(array('theme' => '', 'enabled' => true, 'redirect' => '', 'referrers' => array()), $group_config); $referrer_groups[$group]['referrers'] = array_unique($referrer_groups[$group]['referrers']); $referrer_groups[$group]['referrers'] = array_map('strtolower', $referrer_groups[$group]['referrers']); sort($referrer_groups[$group]['referrers']); } $enable_referrer = false; foreach ($referrer_groups as $group_config) { if ($group_config['enabled']) { $enable_referrer = true; break; } } $config->set('referrer.enabled', $enable_referrer); $config->set('referrer.rgroups', $referrer_groups); } /** * CDN tab */ if ($this->_page == 'w3tc_cdn') { $cdn_cnames = Util_Request::get_array('cdn_cnames'); $cdn_domains = array(); foreach ($cdn_cnames as $cdn_cname) { $cdn_cname = trim($cdn_cname); /** * Auto expand wildcard domain to 10 subdomains */ $matches = null; if (preg_match('~^\\*\\.(.*)$~', $cdn_cname, $matches)) { $cdn_domains = array(); for ($i = 1; $i <= 10; $i++) { $cdn_domains[] = sprintf('cdn%d.%s', $i, $matches[1]); } break; } if ($cdn_cname) { $cdn_domains[] = $cdn_cname; } } switch ($this->_config->get_string('cdn.engine')) { case 'ftp': $config->set('cdn.ftp.domain', $cdn_domains); break; case 's3': case 's3_compatible': $config->set('cdn.s3.cname', $cdn_domains); break; case 'cf': $config->set('cdn.cf.cname', $cdn_domains); break; case 'cf2': $config->set('cdn.cf2.cname', $cdn_domains); break; case 'rackspace_cdn': $config->set('cdn.rackspace_cdn.domains', $cdn_domains); break; case 'rscf': $config->set('cdn.rscf.cname', $cdn_domains); break; case 'azure': $config->set('cdn.azure.cname', $cdn_domains); break; case 'mirror': $config->set('cdn.mirror.domain', $cdn_domains); break; case 'maxcdn': $config->set('cdn.maxcdn.domain', $cdn_domains); break; case 'netdna': $config->set('cdn.netdna.domain', $cdn_domains); break; case 'cotendo': $config->set('cdn.cotendo.domain', $cdn_domains); break; case 'edgecast': $config->set('cdn.edgecast.domain', $cdn_domains); break; case 'att': $config->set('cdn.att.domain', $cdn_domains); break; case 'akamai': $config->set('cdn.akamai.domain', $cdn_domains); break; case 'highwinds': $config->set('cdn.highwinds.host.domains', $cdn_domains); break; } } $old_ext_settings = $this->_config->get_array('extensions.settings', array()); $new_ext_settings = $old_ext_settings; $modified = false; $extensions = Extensions_Util::get_extensions($config); foreach ($extensions as $extension => $descriptor) { $request = Util_Request::get_as_array('extensions.settings.' . $extension . '.'); if (count($request) > 0) { if (!isset($new_ext_settings[$extension])) { $new_ext_settings[$extension] = array(); } foreach ($request as $key => $value) { if (!isset($old_ext_settings[$extension]) || !isset($old_ext_settings[$extension][$key]) || $old_ext_settings[$extension][$key] != $value) { $new_ext_settings[$extension][$key] = $value; $modified = true; } } } } if ($modified) { $config->set("extensions.settings", $new_ext_settings); } $data['new_config'] = $config; $data = apply_filters('w3tc_save_options', $data); $config = $data['new_config']; do_action('w3tc_config_ui_save', $config, $this->_config); do_action("w3tc_config_ui_save-{$this->_page}", $config, $this->_config); Util_Admin::config_save($this->_config, $config); if ($this->_page == 'w3tc_cdn') { /** * Handle Set Cookie Domain */ $set_cookie_domain_old = Util_Request::get_boolean('set_cookie_domain_old'); $set_cookie_domain_new = Util_Request::get_boolean('set_cookie_domain_new'); if ($set_cookie_domain_old != $set_cookie_domain_new) { if ($set_cookie_domain_new) { if (!$this->enable_cookie_domain()) { Util_Admin::redirect(array_merge($data['response_query_string'], array('w3tc_error' => 'enable_cookie_domain'))); } } else { if (!$this->disable_cookie_domain()) { Util_Admin::redirect(array_merge($data['response_query_string'], array('w3tc_error' => 'disable_cookie_domain'))); } } } } return array('query_string' => $data['response_query_string'], 'actions' => $data['response_actions'], 'errors' => $data['response_errors'], 'notes' => $data['response_notes']); }
/** * Upgrade a module. * * @param array $args All parameters passed to this function. * numeric $args['id'] The module ID. * boolean $args['interactive_upgrade'] Whether or not to upgrade in interactive mode. * * @return boolean True on success, false on failure. */ public function upgrade($args) { // Argument check if (!isset($args['id']) || !is_numeric($args['id'])) { return LogUtil::registerArgsError(); } // Get module information $modinfo = ModUtil::getInfo($args['id']); if (empty($modinfo)) { return LogUtil::registerError($this->__('Error! No such module ID exists.')); } switch ($modinfo['state']) { case ModUtil::STATE_NOTALLOWED: return LogUtil::registerError($this->__f('Error! No permission to upgrade %s.', $modinfo['name'])); break; default: if ($modinfo['state'] > 10) { return LogUtil::registerError($this->__f('Error! %s is not compatible with this version of Zikula.', $modinfo['name'])); } } $osdir = DataUtil::formatForOS($modinfo['directory']); ModUtil::dbInfoLoad($modinfo['name'], $osdir); $modpath = $modinfo['type'] == ModUtil::TYPE_SYSTEM ? 'system' : 'modules'; // load module maintainence functions $oomod = ModUtil::isOO($modinfo['name']); if ($oomod) { ZLoader::addAutoloader($osdir, "{$modpath}/{$osdir}/lib"); } $bootstrap = "{$modpath}/{$osdir}/bootstrap.php"; if (file_exists($bootstrap)) { include_once $bootstrap; } if ($modinfo['type'] == ModUtil::TYPE_MODULE) { if (is_dir("modules/{$osdir}/locale")) { ZLanguage::bindModuleDomain($modinfo['name']); } } if (!$oomod && file_exists($file = "{$modpath}/{$osdir}/pninit.php")) { if (!(include_once $file)) { LogUtil::registerError($this->__f("Error! Could not load a required file: '%s'.", $file)); } } if ($oomod) { $className = ucwords($modinfo['name']) . '_Installer'; $reflectionInstaller = new ReflectionClass($className); if (!$reflectionInstaller->isSubclassOf('Zikula_AbstractInstaller')) { LogUtil::registerError($this->__f("%s must be an instance of Zikula_AbstractInstaller", $className)); } $installer = $reflectionInstaller->newInstanceArgs(array($this->serviceManager)); $interactiveClass = ucwords($modinfo['name']) . '_Controller_Interactiveinstaller'; $interactiveController = null; if (class_exists($interactiveClass)) { $reflectionInteractive = new ReflectionClass($interactiveClass); if (!$reflectionInteractive->isSubclassOf('Zikula_Controller_AbstractInteractiveInstaller')) { LogUtil::registerError($this->__f("%s must be an instance of Zikula_Controller_AbstractInteractiveInstaller", $className)); } $interactiveController = $reflectionInteractive->newInstance($this->serviceManager); } } // perform the actual upgrade of the module $func = $oomod ? array($installer, 'upgrade') : $modinfo['name'] . '_upgrade'; $interactive_func = $oomod ? array($interactiveController, 'upgrade') : $modinfo['name'] . '_init_interactiveupgrade'; // allow bypass of interactive upgrade during a new installation only. if (System::isInstalling() && is_callable($interactive_func) && !is_callable($func)) { return; // return void here } if (isset($args['interactive_upgrade']) && $args['interactive_upgrade'] == false && is_callable($interactive_func)) { if (is_array($interactive_func)) { // This must be an OO controller since callable is an array. // Because interactive installers extend the Zikula_AbstractController, is_callable will always return true because of the __call() // so we must check if the method actually exists by reflection - drak if ($reflectionInteractive->hasMethod('upgrade')) { SessionUtil::setVar('interactive_upgrade', true); return call_user_func($interactive_func, array('oldversion' => $modinfo['version'])); } } else { // this is enclosed in the else so that if both conditions fail, execution will pass onto the non-interactive execution below. SessionUtil::setVar('interactive_upgrade', true); return call_user_func($interactive_func, array('oldversion' => $modinfo['version'])); } } // non-interactive if (is_callable($func)) { $result = call_user_func($func, $modinfo['version']); if (is_string($result)) { if ($result != $modinfo['version']) { // update the last successful updated version $modinfo['version'] = $result; $obj = DBUtil::updateObject($modinfo, 'modules', '', 'id', true); } return false; } elseif ($result != true) { return false; } } $modversion['version'] = '0'; $modversion = Extensions_Util::getVersionMeta($osdir, $modpath); $version = $modversion['version']; // Update state of module $result = $this->setState(array('id' => $args['id'], 'state' => ModUtil::STATE_ACTIVE)); if ($result) { LogUtil::registerStatus($this->__("Done! Module has been upgraded. Its status is now 'Active'.")); } else { return false; } // Note the changes in the database... // Get module database info ModUtil::dbInfoLoad('Extensions'); $obj = array('id' => $args['id'], 'version' => $version); DBUtil::updateObject($obj, 'modules'); // legacy to be removed from 1.4 - remove hooks during upgrade since we cannot rely on // module authors to do this - drak if ($oomod) { $tables = DBUtil::getTables(); $hooksCol = $tables['hooks_column']; $where = "{$hooksCol['smodule']} = '{$modinfo['name']}' OR {$hooksCol['tmodule']} = '{$modinfo['name']}'"; $hooks = DBUtil::selectObjectArray('hooks', $where); if ($hooks) { foreach ($hooks as $hook) { DBUtil::deleteObject($hook, 'hooks'); } LogUtil::registerStatus($this->__f("NOTICE! Legacy hook configurations for %s have been removed.", $modinfo['name'])); } } // Upgrade succeeded, issue event. $event = new Zikula_Event('installer.module.upgraded', null, $modinfo); $this->eventManager->notify($event); // Success return true; }
</a> | <a href="#advanced"><?php _e('Advanced', 'w3-total-cache'); ?> </a> </p> <p> Fragment caching via <strong><?php echo Cache::engine_name($config->get_string(array('fragmentcache', 'engine'))); ?> </strong> is currently <?php if ($config->is_extension_active_frontend('fragmentcache')) { echo '<span class="w3tc-enabled">enabled</span>'; } else { echo '<span class="w3tc-disabled">disabled</span>'; $ext = Extensions_Util::get_extension($config, 'fragmentcache'); if (!empty($ext['requirements'])) { echo ' (<span class="description">' . $ext['requirements'] . '</span>)'; } } ?> . <p> <form action="admin.php?page=w3tc_fragmentcache" method="post"> <p> <?php echo Util_Ui::nonce_field('w3tc'); ?> <input type="submit" name="w3tc_flush_fragmentcache" value="<?php _e('Empty the entire cache', 'w3-total-cache');
/** * Initialise a module. * * @param int 'id' module id * @return bool true */ public function initialise() { $csrftoken = FormUtil::getPassedValue('csrftoken'); $this->checkCsrfToken($csrftoken); // Get parameters from whatever input we need $id = (int) FormUtil::getPassedValue('id', 0); $objectid = (int) FormUtil::getPassedValue('objectid', 0); $confirmation = (bool) FormUtil::getPassedValue('confirmation', false); $startnum = (int) FormUtil::getPassedValue('startnum'); $letter = FormUtil::getPassedValue('letter'); $state = (int)FormUtil::getPassedValue('state'); if ($objectid) { $id = $objectid; } // assign any dependencies - filtering out non-active module dependents // when getting here without a valid id we are in interactive init mode and then // the dependencies checks have been done before already $fataldependency = false; if ($id != 0) { $dependencies = ModUtil::apiFunc('Extensions', 'admin', 'getdependencies', array('modid' => $id)); $modulenotfound = false; if (!$confirmation && $dependencies) { foreach ($dependencies as $key => $dependency) { $dependencies[$key]['insystem'] = true; $modinfo = ModUtil::getInfoFromName($dependency['modname']); $base = ($modinfo['type'] == ModUtil::TYPE_MODULE) ? 'modules' : 'system'; if (is_dir("$base/$dependency[modname]")) { $minok = 0; $maxok = 0; $modversion = Extensions_Util::getVersionMeta($dependency['modname'], $base); if (!empty($dependency['minversion'])) { $minok = version_compare($modversion['version'], $dependency['minversion']); } if (!empty($dependency['maxversion'])) { $maxok = version_compare($dependency['maxversion'], $modversion['version']); } if ($minok == -1 || $maxok == -1) { if ($dependency['status'] == ModUtil::DEPENDENCY_REQUIRED) { $fataldependency = true; } else { unset($dependencies[$key]); } } else { $dependencies[$key] = array_merge($dependencies[$key], $modinfo); // if this module is already installed, don't display it in the list of dependencies. if (isset($dependencies[$key]['state']) && ($dependencies[$key]['state'] > ModUtil::STATE_UNINITIALISED && $dependencies[$key]['state'] < ModUtil::STATE_NOTALLOWED)) { unset($dependencies[$key]); } } } elseif (!empty($modinfo)) { $dependencies[$key] = array_merge($dependencies[$key], $modinfo); } else { $dependencies[$key]['insystem'] = false; $modulenotfound = true; if ($dependency['status'] == ModUtil::DEPENDENCY_REQUIRED) { $fataldependency = true; } } } $this->view->assign('fataldependency', $fataldependency); // we have some dependencies so let's warn the user about these if (!empty($dependencies)) { return $this->view->assign('id', $id) ->assign('dependencies', $dependencies) ->assign('modulenotfound', $modulenotfound) ->fetch('extensions_admin_initialise.tpl'); } } else { $dependencies = (array)$this->request->request->get('dependencies', array()); } } $interactive_init = SessionUtil::getVar('interactive_init'); $interactive_init = (empty($interactive_init)) ? false : true; if ($interactive_init == false) { SessionUtil::setVar('modules_id', $id); SessionUtil::setVar('modules_startnum', $startnum); SessionUtil::setVar('modules_letter', $letter); SessionUtil::setVar('modules_state', $state); $activate = false; } else { $id = SessionUtil::getVar('modules_id'); $startnum = SessionUtil::getVar('modules_startnum'); $letter = SessionUtil::getVar('modules_letter'); $state = SessionUtil::getVar('modules_state'); $activate = (bool) FormUtil::getPassedValue('activate'); } if (empty($id) || !is_numeric($id)) { return LogUtil::registerError($this->__('Error! No module ID provided.'), 404, ModUtil::url('Extensions', 'admin', 'view')); } // initialise and activate any dependencies if (isset($dependencies) && is_array($dependencies)) { foreach ($dependencies as $dependency) { if (!ModUtil::apiFunc('Extensions', 'admin', 'initialise', array('id' => $dependency))) { $this->redirect(ModUtil::url('Extensions', 'admin', 'view', array( 'startnum' => $startnum, 'letter' => $letter, 'state' => $state))); } if (!ModUtil::apiFunc('Extensions', 'admin', 'setstate', array('id' => $dependency, 'state' => ModUtil::STATE_ACTIVE))) { $this->redirect(ModUtil::url('Extensions', 'admin', 'view', array( 'startnum' => $startnum, 'letter' => $letter, 'state' => $state))); } } } // Now we've initialised the dependencies initialise the main module $res = ModUtil::apiFunc('Extensions', 'admin', 'initialise', array('id' => $id, 'interactive_init' => $interactive_init)); if (is_bool($res) && $res == true) { // Success SessionUtil::delVar('modules_id'); SessionUtil::delVar('modules_startnum'); SessionUtil::delVar('modules_letter'); SessionUtil::delVar('modules_state'); SessionUtil::delVar('interactive_init'); LogUtil::registerStatus($this->__('Done! Installed module.')); if ($activate == true) { if (ModUtil::apiFunc('Extensions', 'admin', 'setstate', array('id' => $id, 'state' => ModUtil::STATE_ACTIVE))) { // Success LogUtil::registerStatus($this->__('Done! Activated module.')); } } $this->redirect(ModUtil::url('Extensions', 'admin', 'view', array('startnum' => $startnum, 'letter' => $letter, 'state' => $state))); } elseif (is_bool($res)) { $this->redirect(ModUtil::url('Extensions', 'admin', 'view', array('startnum' => $startnum, 'letter' => $letter, 'state' => $state))); } else { return $res; } }