Application->SetVar($event->getPrefixSpecial(true).'_id', $event->Special); parent::OnItemBuild($event); } /** * List with one record if special passed * * @param kEvent $event */ function SetCustomQuery(&$event) { $object =& $event->getObject(); if ($event->Special) { $object->addFilter('current_module', 'Name = '.$event->Special); } $object->addFilter('not_core', '%1$s.Name <> "Core"'); } function mapEvents() { parent::mapEvents(); $this->eventMethods['OnMassApprove'] = 'moduleAction'; $this->eventMethods['OnMassDecline'] = 'moduleAction'; } /** * Disabled modules, but not In-Portal * * @param kEvent $event */ function moduleAction(&$event) { if ($this->Application->CheckPermission('SYSTEM_ACCESS.READONLY', 1)) { return ; } $object =& $event->getObject( Array('skip_autoload' => true) ); $ids = $this->StoreSelectedIDs($event); if (!$ids) { return true; } $status_field = array_shift( $this->Application->getUnitOption($event->Prefix, 'StatusField') ); foreach ($ids as $id) { if (($event->Name == 'OnMassDecline') && ($id == 'In-Portal')) { // don't allow to disable in-portal continue; } if ($id == 'Core') { // don't allow any kind of manupulations with kernel continue; } $object->Load($id); $object->SetDBField($status_field, $event->Name == 'OnMassApprove' ? 1 : 0); if ($object->Update()) { $sql = 'UPDATE ' . TABLE_PREFIX . 'ImportScripts SET Status = ' . ($event->Name == 'OnMassApprove' ? STATUS_ACTIVE : STATUS_DISABLED) . ' WHERE Module = "' . $object->GetDBField('Name') . '"'; $this->Conn->Query($sql); $event->status = erSUCCESS; $event->redirect_params = Array('opener' => 's'); //stay! } else { $event->status = erFAIL; $event->redirect = false; break; } } $this->Application->UnitConfigReader->ResetParsedData(true); //true to reset sections cache also $event->SetRedirectParam('RefreshTree', 1); } /** * Occures after list is queried * * @param kEvent $event */ function OnAfterListQuery(&$event) { parent::OnAfterListQuery($event); $new_modules = $this->_getNewModules(); if (!$new_modules || $this->Application->RecallVar('user_id') != -1) { return ; } require_once FULL_PATH . '/core/install/install_toolkit.php'; $toolkit = new kInstallToolkit(); $object =& $event->getObject(); /* @var $object kDBList */ foreach ($new_modules as $module) { $module_record = Array ( 'Name' => $toolkit->getModuleName($module), 'Path' => $module . '/', 'Version' => $toolkit->GetMaxModuleVersion($module), 'Loaded' => 0, 'BuildDate' => null, ); $object->addRecord($module_record); } } /** * Returns list of modules, that are not installed, but available in file system * * @return Array */ function _getNewModules() { $modules_helper =& $this->Application->recallObject('ModulesHelper'); /* @var $modules_helper kModulesHelper */ $modules = Array (); if ($dir = @opendir(MODULES_PATH)) { while (($file = readdir($dir)) !== false) { if ($file != '.' && $file != '..') { $module_folder = MODULES_PATH . '/' . $file; if (is_dir($module_folder) && $this->_isModule($module_folder)) { // this is module -> check if it's installed already if (!$modules_helper->moduleInstalled($file)) { $install_order = trim( file_get_contents($module_folder . '/install/install_order.txt') ); $modules[$install_order] = $file; } } } } closedir($dir); } // allows to control module install order ksort($modules, SORT_NUMERIC); return $modules; } /** * Checks, that given folder is module root folder * * @param string $folder * @return bool */ function _isModule($folder) { return file_exists($folder . '/install.php') && file_exists($folder . '/install/install_schema.sql'); } }