/** * Register an event handler * * @param Mixed $event The event to register * @param EventHandler $handler The EventHandler in charge of the event. */ static function register($event, EventHandler $handler) { if (!arr::hasKey(self::$_handlers, strtolower($event))) { self::$_handlers[$event] = array(); } self::$_handlers[$event][$handler->getUniqueId()] = $handler; }
/** * @see CacheBuilder::getData() */ public function getData($cacheResource) { $sql = "SELECT *\r\n\t\t\t\tFROM ugml_spec"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $this->data[$row['specID']] = $row; } // requirements $sql = "SELECT *\r\n\t\t\t\tFROM ugml_spec_requirement"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $this->data[$row['specID']]['requirement'][$row['requirement']] = $row; } foreach ($this->data as $specID => $spec) { if (!isset($spec['requirement'])) { $this->data[$specID]['requirement'] = array(); } } flush(); EventHandler::fireAction($this, 'getData'); // sort $this->data = array('bySpecID' => $this->data, 'bySpecType' => array()); // add arrays with spectypeid foreach ($this->data['bySpecID'] as $specID => $spec) { $this->data['bySpecType'][$spec['specType']][$specID] = $spec; } return $this->data; }
/** * Returns the object of the active session. * Tries to find an existing session. * Otherwise creates a new session. * * @return Session $session */ public function get() { // get session id $this->sessionID = $this->readSessionID(); $this->session = null; // get existing session if (!empty($this->sessionID)) { $this->session = $this->getExistingSession($this->sessionID); } // create new session if ($this->session == null) { $this->session = $this->create(); } self::$activeSession = $this->session; // call shouldInit event if (!defined('NO_IMPORTS')) { EventHandler::fireAction($this, 'shouldInit'); } // init session $this->session->init(); // call didInit event if (!defined('NO_IMPORTS')) { EventHandler::fireAction($this, 'didInit'); } return $this->session; }
/** * @see TreeMenu::loadCache() */ protected function loadCache() { parent::loadCache(); WCF::getCache()->addResource('userProfileMenu-' . PACKAGE_ID, WCF_DIR . 'cache/cache.userProfileMenu-' . PACKAGE_ID . '.php', WCF_DIR . 'lib/system/cache/CacheBuilderUserProfileMenu.class.php'); $this->menuItems = WCF::getCache()->get('userProfileMenu-' . PACKAGE_ID); EventHandler::fireAction($this, 'loadedCache'); }
/** * @see CacheBuilder::getData() */ public function getData($cacheResource) { list($cache, $packageID) = explode('-', $cacheResource['cache']); $data = array('actions' => array('user' => array(), 'admin' => array()), 'inheritedActions' => array('user' => array(), 'admin' => array())); // get all listeners and filter options with low priority $sql = "SELECT\t\tlistener.*, package.packageDir\n\t\t\tFROM\t\twcf" . WCF_N . "_package_dependency package_dependency,\n\t\t\t\t\twcf" . WCF_N . "_event_listener listener\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_package package\n\t\t\tON\t\t(package.packageID = listener.packageID)\n\t\t\tWHERE \t\tlistener.packageID = package_dependency.dependency\n\t\t\t\t\tAND package_dependency.packageID = " . $packageID . "\n\t\t\tORDER BY\tpackage_dependency.priority"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $row['listenerClassName'] = StringUtil::getClassName($row['listenerClassFile']); // distinguish between inherited actions and non-inherited actions if (!$row['inherit']) { $data['actions'][$row['environment']][EventHandler::generateKey($row['eventClassName'], $row['eventName'])][] = $row; } else { if (!isset($data['inheritedActions'][$row['environment']][$row['eventClassName']])) { $data['inheritedActions'][$row['eventClassName']] = array(); } $data['inheritedActions'][$row['environment']][$row['eventClassName']][$row['eventName']][] = $row; } } // sort data by class name foreach ($data['actions'] as $environment => $listenerMap) { foreach ($listenerMap as $key => $listeners) { uasort($data['actions'][$environment][$key], array('CacheBuilderEventListener', 'sortListeners')); } } foreach ($data['inheritedActions'] as $environment => $listenerMap) { foreach ($listenerMap as $class => $listeners) { foreach ($listeners as $key => $val) { uasort($data['inheritedActions'][$environment][$class][$key], array('CacheBuilderEventListener', 'sortListeners')); } } } return $data; }
/** * @see Form::submit() */ public function submit() { EventHandler::fireAction($this, 'submit'); $this->readFormParameters(); try { // attachment handling if ($this->showAttachments) { $this->attachmentsEditor->handleRequest(); } // preview if ($this->preview || $this->upload) { require_once WCF_DIR . 'lib/data/message/bbcode/AttachmentBBCode.class.php'; AttachmentBBCode::setAttachments($this->attachmentsEditor->getSortedAttachments()); $this->wantedPosterPreview = MessageParser::getInstance()->parse($this->text, $this->enableSmilies, $this->enableHtml, $this->enableBBCodes, false); if ($this->preview) { $this->validate(); } } else { $this->validate(); $this->save(); } } catch (UserInputException $e) { $this->errorField = $e->getField(); $this->errorType = $e->getType(); } }
/** * @see PackageInstallationPlugin::uninstall() */ public function uninstall() { // call uninstall event EventHandler::fireAction($this, 'uninstall'); // get all style of this package $isDefault = false; require_once WCF_DIR . 'lib/data/style/StyleEditor.class.php'; $sql = "SELECT\t*\n\t\t\tFROM\twcf" . WCF_N . "_style\n\t\t\tWHERE\tpackageID = " . $this->installation->getPackageID(); $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { // delete style $style = new StyleEditor(null, $row); $style->delete(); $isDefault = $isDefault || $style->isDefault; } // default style deleted if ($isDefault) { $sql = "SELECT\t\t*\n\t\t\t\tFROM\t\twcf" . WCF_N . "_style\n\t\t\t\tORDER BY\tstyleID"; $row = WCF::getDB()->getFirstRow($sql); if (!empty($row['styleID'])) { $style = new StyleEditor(null, $row); $style->setAsDefault(); } } }
/** * Creates a new OptionTypeMemberslistcolumns object. * Calls the construct event. */ public function __construct() { if (MODULE_AVATAR != 1) { unset($this->staticColumns['avatar']); } // call construct event EventHandler::fireAction($this, 'construct'); }
public function getFormattedContent() { $this->formattedContent = WCF::getLanguage()->getDynamicVariable('wcf.sketchbook.sketchContents.' . SketchbookUtil::nameToLangVar($this->name)); EventHandler::fireAction($this, 'shouldParseMessage'); MessageParser::getInstance()->setOutputType('text/html'); $this->formattedContent = MessageParser::getInstance()->parse($this->formattedContent, $this->enableSmilies, $this->enableHTML, $this->enableBBCodes); EventHandler::fireAction($this, 'didParseMessage'); return $this->formattedContent; }
/** * @see PM::getOutstandingNotifications() */ public function getOutstandingNotifications() { if ($this->outstandingNotifications === null) { // fire event EventHandler::fireAction($this, 'readOutstandingNotifications'); /* require_once(WCF_DIR.'lib/data/message/pm/PM.class.php'); $this->outstandingNotifications = PM::getOutstandingNotifications(WCF::getUser()->userID); */ } return $this->outstandingNotifications; }
public static function fire($eventName, $parameter) { if (self::$_eventManager === false) { global $adb; self::$_eventManager = new VTEventsManager($adb); // Initialize Event trigger cache self::$_eventManager->initTriggerCache(); } self::$_eventManager->triggerEvent($eventName, $parameter); }
/** * Validates the given sort order parameter. */ public function validateSortOrder() { // call validateSortOrder event EventHandler::fireAction($this, 'validateSortOrder'); switch ($this->sortOrder) { case 'ASC': case 'DESC': break; default: $this->sortOrder = $this->defaultSortOrder; } }
/** * @see Form::submit() */ public function submit() { EventHandler::fireAction($this, 'submit'); $this->readFormParameters(); try { $this->preview = MessageParser::getInstance()->parse($this->text, $this->enableSmilies, $this->enableHtml, $this->enableBBCodes, false); $this->validate(); } catch (UserInputException $e) { $this->errorField = $e->getField(); $this->errorType = $e->getType(); } }
/** * @see CronInterface::run() */ public static function run() { if (self::check() == true) { $last_run_daily_datetime = Registry::get_value("base_cron_last_run_daily_datetime"); $last_run_weekly_datetime = Registry::get_value("base_cron_last_run_weekly_datetime"); $last_run_daily_datetime_handler = new DatetimeHandler($last_run_daily_datetime); $last_run_weekly_datetime_handler = new DatetimeHandler($last_run_weekly_datetime); $current_datetime_handler = new DatetimeHandler(date("Y-m-d H:i:s")); if ($last_run_daily_datetime_handler->distance($current_datetime_handler) >= 86400) { $daily = true; } else { $daily = false; } if ($last_run_weekly_datetime_handler->distance($current_datetime_handler) >= 604800) { $weekly = true; } else { $weekly = false; } $cron_event = new CronEvent(self::$last_run_id, $daily, $weekly); $event_handler = new EventHandler($cron_event); if ($event_handler->get_success() == true) { if (self::$last_run_id + 1 > 256) { Registry::set_value("base_cron_last_run_id", 1); self::$last_run_id = 1; } else { Registry::set_value("base_cron_last_run_id", self::$last_run_id + 1); self::$last_run_id = self::$last_run_id + 1; } Registry::set_value("base_cron_last_run_datetime", date("Y-m-d H:i:s")); self::$last_run_datetime = date("Y-m-d H:i:s"); if ($daily == true) { Registry::set_value("base_cron_last_run_daily_datetime", date("Y-m-d H:i:s")); } if ($weekly == true) { Registry::set_value("base_cron_last_run_weekly_datetime", date("Y-m-d H:i:s")); } } } }
/** * Builds the menu. */ protected function buildMenu() { // get menu items from cache $this->loadCache(); // check item permissions $this->checkPermissions(); // check item options $this->checkOptions(); // parse menu items $this->parseMenuItems(); // call buildMenu event EventHandler::fireAction($this, 'buildMenu'); }
/** * Returns an instance of the enabled user auth class. * * @return UserAuth */ public static function getInstance() { if (self::$instance === null) { // call loadInstance event if (!defined('NO_IMPORTS')) { EventHandler::fireAction('UserAuth', 'loadInstance'); } if (self::$instance === null) { self::$instance = new UserAuthDefault(); } } return self::$instance; }
/** * @return void * @uses \Event * @uses \EventHandler * @uses \DI * @uses \DataFilter * @todo get teacher for mysql in GlobalEvents for Crontab */ public static function startup() { $cronevent = new \Event('cron.run'); $cronevent->call(function () { // do something }); \EventHandler::attach($cronevent); $cronevent = new \Event('crontab.run.untis'); $cronevent->call(function () { //do something }); \EventHandler::attach($cronevent); }
/** * @see CacheBuilder::getData() */ public function getData($cacheResource) { list($cache, $this->packageID) = explode('-', $cacheResource['cache']); $this->loadRoutes(); EventHandler::fireAction($this, 'loadRoutes'); $this->buildCache(); EventHandler::fireAction($this, 'buildCache'); $this->sortCache(); EventHandler::fireAction($this, 'sortCache'); return $this->cache; }
function __construct($event_id, $registrant_id = null) { global $lr_session; if ($lr_session->is_admin() && !is_null($registrant_id)) { $this->registrant_id = $registrant_id; if ($this->registrant_id != 'choose') { $this->registrant = Person::load(array('user_id' => $registrant_id)); } } else { $this->registrant_id = $lr_session->user->user_id; $this->registrant = $lr_session->user; } parent::__construct($event_id, $this->registrant); }
/** * @see Form::submit() */ public function submit() { // call submit event EventHandler::fireAction($this, 'submit'); $this->readFormParameters(); try { if ($this->doSave) { $this->validate(); // no errors $this->save(); } } catch (UserInputException $e) { $this->errorField = $e->getField(); $this->errorType = $e->getType(); } }
/** * Creates a new entry event. * * @param integer $contestID * @param integer $userID * @param integer $groupID * @param string $eventName * @param mixed $placeholders * @param integer $time * @return ContestEventEditor */ public static function create($contestID, $userID, $groupID, $eventName, array $placeholders = array(), $time = TIME_NOW) { $eventName = preg_replace('/^Contest(.*)Editor(.*)$/', '$1$2', $eventName); $eventName = empty($eventName) ? 'contest' : StringUtil::toLowerCase($eventName); $sql = "INSERT INTO\twcf" . WCF_N . "_contest_event\n\t\t\t\t\t(contestID, userID, groupID, eventName, placeholders, time)\n\t\t\tVALUES\t\t(" . intval($contestID) . ", " . intval($userID) . ", " . intval($groupID) . ", '" . escapeString($eventName) . "', \n\t\t\t\t\t'" . escapeString(serialize($placeholders)) . "', " . intval($time) . ")"; WCF::getDB()->sendQuery($sql); // get id $eventID = WCF::getDB()->getInsertID("wcf" . WCF_N . "_contest_event", 'eventID'); // update entry $sql = "UPDATE\twcf" . WCF_N . "_contest\n\t\t\tSET\tevents = events + 1\n\t\t\tWHERE\tcontestID = " . intval($contestID); WCF::getDB()->sendQuery($sql); $event = new ContestEventEditor($eventID); // any event handlers? EventHandler::fireAction($event, 'create'); return $event; }
/** * Adds the url and email bbcode tags in a text automatically. */ public static function parse($text) { self::$text = $text; // cache codes self::$text = self::cacheCodes(self::$text); // call event EventHandler::fireAction('URLParser', 'shouldParse'); // define pattern $urlPattern = '~(?<!\\B|"|\'|=|/|\\]|,|\\?) (?: # hostname (?:ftp|https?)://' . self::$illegalChars . '(?:\\.' . self::$illegalChars . ')* | www\\.(?:' . self::$illegalChars . '\\.)+ (?:[a-z]{2,4}(?=\\b)) ) (?::\\d+)? # port (?: / [^!.,?;"\'<>()\\[\\]{}\\s]* (?: [!.,?;(){}]+ [^!.,?;"\'<>()\\[\\]{}\\s]+ )* )? ~ix'; $emailPattern = '~(?<!\\B|"|\'|=|/|\\]|,|:) (?:) \\w+(?:[\\.\\-]\\w+)* @ (?:' . self::$illegalChars . '\\.)+ # hostname (?:[a-z]{2,4}(?=\\b)) (?!"|\'|\\[|\\-|\\.[a-z]) ~ix'; // add url tags self::$text = preg_replace($urlPattern, '[url]\\0[/url]', self::$text); if (StringUtil::indexOf(self::$text, '@') !== false) { self::$text = preg_replace($emailPattern, '[email]\\0[/email]', self::$text); } // call event EventHandler::fireAction('URLParser', 'didParse'); if (count(self::$cachedCodes) > 0) { // insert cached codes self::$text = self::insertCachedCodes(self::$text); } return self::$text; }
/** * Loads all registered actions of the active package. */ protected static function loadActions() { $environment = class_exists('WCFACP') ? 'admin' : 'user'; WCF::getCache()->addResource('eventListener-' . PACKAGE_ID, WCF_DIR . 'cache/cache.eventListener-' . PACKAGE_ID . '.php', WCF_DIR . 'lib/system/cache/CacheBuilderEventListener.class.php'); $cache = WCF::getCache()->get('eventListener-' . PACKAGE_ID); if (isset($cache['actions'][$environment])) { self::$actions = $cache['actions'][$environment]; } if (isset($cache['inheritedActions'][$environment])) { self::$inheritedActions = $cache['inheritedActions'][$environment]; } unset($cache); if (!is_array(self::$actions)) { self::$actions = array(); } if (!is_array(self::$inheritedActions)) { self::$inheritedActions = array(); } }
/** * get started with all this * @return void * @todo template-map */ public static function startup() { $activeTemplate = new Template(app::get('template')); $gettext = new Gettext(HOME_DIR . '/locale/' . app::get('language') . '.mo'); if ($activeTemplate->translated) { Gettext::addTranslation(HOME_DIR . '/templates/' . app::get('template') . '/locale/' . app::get('language') . '.mo'); } require_once HOME_DIR . '/translate_functions.php'; if (isset($activeTemplate->map)) { foreach ($activeTemplate->map as $map) { Route::get("/{$map}/[fn:filename]", "AssetsController.everything")->name($map); } } // add your routes here! Route::get('/^\\s*$/', 'IndexController.get', true); Route::get('/test/stack', 'TestController.stack'); Route::get('/css/[fn:filename]', 'AssetsController.css'); Route::get('/js/[fn:filename]', 'AssetsController.js'); Modules::loadModuleList(); Modules::loadModules(); //$msqlo = new MySQLi(app::get('mysql')->host, app::get('mysql')->user, app::get('mysql')->password, app::get('mysql')->database); //\DI::addInstance($msqlo); $modelob = new \Observer\ModelObserver(); \DI::addInstance($modelob); $etagevent = new \Event('etag.change'); $etagevent->call(function ($newval) { \Kernel::$response->etag = md5(\Kernel::$response->etag . '|' . $newval); }); \EventHandler::attach($etagevent); Route::registerNotFoundAction('/', function () { \Kernel::$response->errorCode(404); (new \Controller())->view('error', ['error' => ['code' => '404', 'text' => 'Not found!']]); }); Route::registerNotFoundAction('/api/', function () { throw new \HTTPException\ObjectNotFoundException(404, "Requested resource not found!"); }); }
/** * @param $class */ public function autoload($class) { $directories = [APP_PATH . '/controllers', APP_PATH . '/models']; if (isset($this->action->controllerDir) && strlen($this->action->controllerDir)) { $controllerDirPath = APP_PATH . "/controllers/{$this->action->controllerDir}"; array_unshift($directories, $controllerDirPath); } $configDirectories = Config::get('autoload.directories'); if (is_array($configDirectories)) { $directories = array_merge($directories, $configDirectories); } if (is_array($configDirectories)) { foreach ($configDirectories as $key => $val) { $configDirectories[$key] = APP_PATH . "/{$val}/"; } $directories = array_merge($directories, $configDirectories); } $subdomain = Request::subdomain(); if ($subdomain !== null) { $subdomainDirectories = [APP_PATH . "/subdomains/{$subdomain}/controllers", APP_PATH . "/subdomains/{$subdomain}/models"]; if (isset($this->action->controllerDir) && strlen($this->action->controllerDir)) { array_unshift($subdomainDirectories, APP_PATH . "/subdomains/{$subdomain}/controllers/{$this->action->controllerDir}"); } $configSubdomainDirectories = Config::get('autoload.subdomainDirectories'); if (is_array($configSubdomainDirectories)) { foreach ($configSubdomainDirectories as $key => $val) { $configSubdomainDirectories[$key] = "/subdomains/{$subdomain}/{$val}/"; } $subdomainDirectories = array_merge($subdomainDirectories, $configSubdomainDirectories); } $directories = array_merge($subdomainDirectories, $directories); } $found = false; foreach ($directories as $dir) { $path = "{$dir}/{$class}.php"; if (is_file($path)) { $found = true; require_once $path; break; } } if ($found === false) { EventHandler::triggerEvent('whirlpool-class-not-found', $class); } }
/** * @see Module::checkPermissions() */ public function checkPermissions() { // call checkPermissions event EventHandler::fireAction($this, 'checkPermissions'); // check needed permissions return WCF::getUser()->getPermission($this->neededPermissions); }
/** * Search for users which fit to the search values. */ protected function search() { $this->matches = array(); $sql = "SELECT\t\tuser.userID\n\t\t\tFROM\t\twcf" . WCF_N . "_user user\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_user_option_value option_value \n\t\t\tON\t\t(option_value.userID = user.userID)"; // build search condition $this->conditions = new ConditionBuilder(); // static fields $this->buildStaticConditions(); // dynamic fields $this->buildDynamicConditions(); // call buildConditions event EventHandler::fireAction($this, 'buildConditions'); // do search $result = WCF::getDB()->sendQuery($sql . $this->conditions->get(), $this->maxResults); while ($row = WCF::getDB()->fetchArray($result)) { $this->matches[] = $row['userID']; } }
public function mwCalendar($params) { global $wgOut, $wgTitle, $wgScript, $wgScriptPath, $IP; $this->setDefaults($params); ## RUN FIRST ## helpers::debug("******** Calendar Init()-{$this->key} ******** "); $list = ''; $rteJS = ''; // set the calendar's initial date $now = $this->now = getdate(); $this->month = $now['mon']; $this->year = $now['year']; $this->day = $now['mday']; ## load normal calendar $cookie_name = helpers::cookie_name($this->key); helpers::debug('Checking for cookie: ' . $cookie_name); if (isset($_COOKIE[$cookie_name])) { $date = getdate($_COOKIE[$cookie_name]); //timestamp value $this->month = $date['mon']; $this->year = $date['year']; helpers::debug("Coookie found ({$cookie_name}), SETTING calendar date/time: {$this->month}/{$this->year}"); } $this->title = $wgScript . '?title=' . $wgTitle->getPrefixedText(); $this->db = new CalendarDatabase(); $this->db->validateVersion(); //make sure db and files match $this->options = $this->db->getOptions($this->calendarName); ## this basically calls a function that evaluates $_POST[] events (new, delete, cancel, etc) ## no need to do anything else in the calendar until any db updates have completed if (helpers::is_my_calendar($this->key)) { EventHandler::CheckForEvents(); } ## add any custom groups $arrParamsGrps = isset($params['groups']) ? explode(',', $params['groups']) : array(); foreach ($arrParamsGrps as $grp) { $grpCount = count($this->db->getGroupUsers($grp)); $list .= "<option>#{$grp} ({$grpCount} " . helpers::translate("mwc_members") . ")</option>"; } /* $arrGroups = $this->db->getDatabaseGroups(); foreach($arrGroups as $grp){ $list .= "<option>#$grp</option>"; } */ ## build the mw user-list which should only be users with active email $arrUsers = $this->db->getDatabaseUsers(); while (list($user, $realname) = each($arrUsers)) { $realname = htmlentities($realname, ENT_QUOTES); $list .= "<option>{$user} ({$realname})</option>"; } $list = "<SELECT class=notifyselect id=selectNotify name=selectNotify size=8 onClick=selectedListItem()>" . $list . "</SELECT>"; ## pull in all the html template forms we have $addEventHtml = file_get_contents(mwcalendar_base_path . "/html/AddEvent.html"); $batchHtml = file_get_contents(mwcalendar_base_path . "/html/batchadd.html"); $this->htmlData = file_get_contents(mwcalendar_base_path . "/html/default.html"); $this->htmlOption = file_get_contents(mwcalendar_base_path . "/html/Options.html"); $addEventHtml = str_replace('[[SELECT_OPTIONS]]', $list, $addEventHtml); ## building my own sytlesheets and javascript links... $stdJSArray = array('DatePicker.js', 'tabber.js', 'InvitePicker.js', 'TimePicker.js', 'common.js', 'rte.js'); $rteExists = file_exists($IP . "/extensions/tinymce/jscripts/tiny_mce/tiny_mce.js"); if ($this->useRTE && $rteExists) { $rteJS .= $this->buildJavascript(array('/extensions/tinymce/jscripts/tiny_mce/tiny_mce.js'), true); $rteJS .= $this->buildJavascript(array('rte.js')); } $this->stylesheet = $this->buildStylesheet(array('DatePicker.css', 'tabber.css', 'default.css')); $this->javascript = $this->buildJavascript(array('DatePicker.js', 'tabber.js', 'InvitePicker.js', 'TimePicker.js', 'common.js')); $this->javascript .= $rteJS; ## build the addEvent and batch tabs $tab1 = $this->buildTab(helpers::translate('mwc_event'), $addEventHtml); $tab2 = $this->buildTab(helpers::translate('mwc_batch'), $batchHtml); $this->tabHtml = '<div class="tabber">' . $tab1 . $tab2 . '</div>'; }
/** * @see PackageInstallationPlugin::uninstall() */ public function uninstall() { // call uninstall event EventHandler::fireAction($this, 'uninstall'); // get container types $containerTypes = array(); $sql = "SELECT\tcontainerType\n\t\t\tFROM\twcf" . WCF_N . "_" . $this->tableName . "\n\t\t\tWHERE\tpackageID = " . $this->installation->getPackageID(); $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $containerTypes[] = $row['containerType']; } if (count($containerTypes)) { require_once WCF_DIR . 'lib/data/attachment/AttachmentEditor.class.php'; // delete attachments (files) $sql = "SELECT\t*\n\t\t\t\tFROM\twcf" . WCF_N . "_attachment\n\t\t\t\tWHERE\tpackageID = " . $this->installation->getPackageID() . "\n\t\t\t\t\tAND containerType IN ('" . implode("','", array_map('escapeString', $containerTypes)) . "')"; $result = WCF::getDB()->sendQuery($sql); while ($row = WCF::getDB()->fetchArray($result)) { $attachment = new AttachmentEditor(null, $row); $attachment->deleteFile(); } // delete attachments (rows) $sql = "DELETE FROM\twcf" . WCF_N . "_attachment\n\t\t\t\tWHERE\t\tpackageID = " . $this->installation->getPackageID() . "\n\t\t\t\t\t\tAND containerType IN ('" . implode("','", array_map('escapeString', $containerTypes)) . "')"; WCF::getDB()->sendQuery($sql); // delete container $sql = "DELETE FROM\twcf" . WCF_N . "_" . $this->tableName . "\n\t\t\t\tWHERE\t\tpackageID = " . $this->installation->getPackageID(); WCF::getDB()->sendQuery($sql); } }
/** * @see SystemHandlerInterface::disable_module() * @param integer $module_id * @return bool */ public static function disable_module($module_id) { global $transaction; if (is_numeric($module_id)) { $transaction_id = $transaction->begin(); $module_access = new BaseModule_Access($module_id); if ($module_access->get_disabled() == true) { $module_enable_event = new ModuleEnableEvent($module_id); $event_handler = new EventHandler($module_enable_event); if ($event_handler->get_success() == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if ($module_access->set_disabled(false) == true) { if ($transaction_id != null) { $transaction->commit($transaction_id); } return true; } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } else { $module_disable_event = new ModuleDisableEvent($module_id); $event_handler = new EventHandler($module_disable_event); if ($event_handler->get_success() == false) { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } if ($module_access->set_disabled(true) == true) { if ($transaction_id != null) { $transaction->commit($transaction_id); } return true; } else { if ($transaction_id != null) { $transaction->rollback($transaction_id); } return false; } } } else { return false; } }