Application->SetVar($event->getPrefixSpecial(true).'_id', $event->Special); parent::OnItemBuild($event); } /** * Apply any custom changes to list's sql query * * @param kEvent $event * @return void * @access protected * @see kDBEventHandler::OnListBuild() */ protected function SetCustomQuery(&$event) { $object =& $event->getObject(); /* @var $object kDBList */ if ($event->Special) { $object->addFilter('current_module', '%1$s.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)) { $event->status = kEvent::erFAIL; return ; } $object =& $event->getObject( Array('skip_autoload' => true) ); /* @var $object kDBItem */ $ids = $this->StoreSelectedIDs($event); if (!$ids) { return ; } $updated = 0; $status_field = $this->Application->getUnitOption($event->Prefix, 'StatusField'); $status_field = array_shift($status_field); foreach ($ids as $id) { $object->Load($id); if (in_array($id, Array ('In-Portal', 'Core')) || !$object->isLoaded()) { // don't allow any kind of manupulations with kernel // approve/decline on not installed module continue; } $enabled = $event->Name == 'OnMassApprove' ? 1 : 0; $object->SetDBField($status_field, $enabled); if (!$object->GetChangedFields()) { // no changes -> skip continue; } if ($object->Update()) { $updated++; $sql = 'UPDATE ' . TABLE_PREFIX . 'ImportScripts SET Status = ' . $enabled . ' WHERE Module = "' . $object->GetDBField('Name') . '"'; $this->Conn->Query($sql); } else { $event->status = kEvent::erFAIL; $event->redirect = false; break; } } if ($updated) { $event->status = kEvent::erSUCCESS; $event->setRedirectParams(Array ('opener' => 's'), true); $this->Application->DeleteUnitCache(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); $modules_helper =& $this->Application->recallObject('ModulesHelper'); /* @var $modules_helper kModulesHelper */ $new_modules = $modules_helper->getModules(kModulesHelper::NOT_INSTALLED); if (!$new_modules || $this->Application->RecallVar('user_id') != USER_ROOT) { 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' => 'modules/' . $module . '/', 'Version' => $toolkit->GetMaxModuleVersion('modules/' . $module . '/'), 'Loaded' => 0, 'BuildDate' => null, ); $object->addRecord($module_record); } } }