public function execute($last_result, $parameters = array()) { $db = DBManager::get(); $dd_func = function ($d) { delete_document($d); }; //abgelaufenen News löschen $deleted_news = StudipNews::DoGarbageCollect(); //messages aufräumen $to_delete = $db->query("SELECT message_id, count( message_id ) AS gesamt, count(IF (deleted =0, NULL , 1) ) AS geloescht\n FROM message_user GROUP BY message_id HAVING gesamt = geloescht")->fetchAll(PDO::FETCH_COLUMN, 0); if (count($to_delete)) { $db->exec("DELETE FROM message_user WHERE message_id IN(" . $db->quote($to_delete) . ")"); $db->exec("DELETE FROM message WHERE message_id IN(" . $db->quote($to_delete) . ")"); $to_delete_attach = $db->query("SELECT dokument_id FROM dokumente WHERE range_id IN(" . $db->quote($to_delete) . ")")->fetchAll(PDO::FETCH_COLUMN, 0); array_walk($to_delete_attach, $dd_func); } //Attachments von nicht versendeten Messages aufräumen $to_delete_attach = $db->query("SELECT dokument_id FROM dokumente WHERE range_id = 'provisional' AND chdate < UNIX_TIMESTAMP(DATE_ADD(NOW(),INTERVAL -2 HOUR))")->fetchAll(PDO::FETCH_COLUMN, 0); array_walk($to_delete_attach, $dd_func); if ($parameters['verbose']) { printf(_("Gelöschte Ankündigungen: %u") . "\n", (int) $deleted_news); printf(_("Gelöschte Nachrichten: %u") . "\n", count($to_delete)); printf(_("Gelöschte Dateianhänge: %u") . "\n", count($to_delete_attach)); } PersonalNotifications::doGarbageCollect(); // Remove old plugin assets PluginAsset::deleteBySQL('chdate < ?', array(time() - PluginAsset::CACHE_DURATION)); }
/** * Uninstall the given plugin from the system. It will remove * the database schema and all the plugin's files. * * @param array $plugin meta data of plugin */ public function uninstallPlugin($plugin) { $plugin_manager = PluginManager::getInstance(); // check if there are dependent plugins foreach ($plugin_manager->getPluginInfos() as $dep_plugin) { if ($dep_plugin['depends'] === $plugin['id']) { $plugin_manager->unregisterPlugin($dep_plugin['id']); } } $plugin_manager->unregisterPlugin($plugin['id']); $plugindir = get_config('PLUGINS_PATH') . '/' . $plugin['path']; $manifest = $plugin_manager->getPluginManifest($plugindir); // delete database if needed $this->deleteDBSchema($plugindir, $manifest); PluginAsset::deleteBySQL('plugin_id = ?', array($plugin['id'])); rmdirr($plugindir); }