'boolean']); $this->isAdminPlugin = true; } /** * @return RedirectionPlugin */ public static function create() { static $result = null; return $result ? $result : $result = new self(); } /** * Inser a new redirection (and delete the previous one for this user, if any). * * @param int $userId * @param string $url * * @return false|string */ public static function insert($userId, $url) { $userId = (int) $userId; if (empty($userId)) { return false; } $sql = "DELETE FROM plugin_redirection WHERE user_id = $userId"; Database::query($sql); $userInfo = api_get_user_info($userId); if (empty($userInfo)) { return false; } return Database::insert( 'plugin_redirection', [ 'user_id' => $userId, 'url' => $url, ] ); } /** * Get the current redirection for a given user (if any). * * @param int $userId * * @return array */ public static function getUrlFromUser($userId) { $userId = (int) $userId; $userInfo = api_get_user_info($userId); if (empty($userInfo)) { return false; } $sql = "SELECT * FROM plugin_redirection WHERE user_id = $userId LIMIT 1"; $result = Database::query($sql); return Database::fetch_array($result, 'ASSOC'); } /** * Deletes redirection from user. * * @param int $userId */ public static function deleteUserRedirection($userId) { $table = Database::get_main_table('plugin_redirection'); Database::delete( $table, ['user_id = ?' => [$userId]] ); } /** * Deletes an existing redirection. * * @param int $id */ public static function delete($id) { $table = Database::get_main_table('plugin_redirection'); Database::delete( $table, ['id = ?' => [$id]] ); } /** * Get all current redirection records. * * @return array */ public static function getAll() { $table = Database::get_main_table('plugin_redirection'); return Database::select('*', $table); } /** * Install the required DB structure to store the plugin data. */ public static function install() { $table = Database::get_main_table('plugin_redirection'); $sql = "CREATE TABLE IF NOT EXISTS $table ( id INT unsigned NOT NULL auto_increment PRIMARY KEY, user_id INT unsigned NOT NULL DEFAULT 0, url VARCHAR(255) NOT NULL DEFAULT '' )"; Database::query($sql); } /** * Uninstall the plugin, cleaning up the database structure created on install. */ public static function uninstall() { $table = Database::get_main_table('plugin_redirection'); $sql = "DROP TABLE IF EXISTS $table"; Database::query($sql); } /** * Redirect user if plugin is installed. * * @param int $userId */ public static function redirectUser($userId) { // Check redirection plugin $plugin = new AppPlugin(); $pluginList = $plugin->getInstalledPlugins(); $redirectionInstalled = in_array('redirection', $pluginList); if ($redirectionInstalled) { $pluginInfo = $plugin->getPluginInfo('redirection'); if (!empty($pluginInfo) && isset($pluginInfo['obj'])) { /** @var RedirectionPlugin $redirectionPlugin */ $redirectionPlugin = $pluginInfo['obj']; $record = $redirectionPlugin->getUrlFromUser($userId); if (!empty($record) && !empty($record['url'])) { header('Location: '.$record['url']); exit; } } } } }