public/plugin/redirection/RedirectionPlugin.php
<?php
/* For licensing terms, see /license.txt */
/**
* Redirection plugin. Allows the configuration of redirection of specific users right after they login.
*
* @author Enrique Alcaraz Lopez
*/
class RedirectionPlugin extends Plugin
{
public $isAdminPlugin = true;
/**
* Class constructor.
*/
protected function __construct()
{
$version = '1.0';
$author = 'Enrique Alcaraz, Julio Montoya';
parent::__construct($version, $author, ['enabled' => 'boolean']);
$this->isAdminPlugin = true;
}
/**
* @return RedirectionPlugin
*/
public static function create()
{
static $result = null;
return $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_assoc($result);
}
/**
* 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;
}
}
}
}
}