public/plugin/extramenufromwebservice/lib/extramenufromwebservice_plugin.class.php
<?php
/* For licensing terms, see /license.txt */
/**
* Define the ExtraMenuFromWebservice class as an extension of Plugin
* install/uninstall the plugin.
*/
class ExtraMenuFromWebservicePlugin extends Plugin
{
/**
* ExtraMenuFromWebservice constructor.
*/
protected function __construct()
{
$settings = [
'tool_enable' => 'boolean',
'authentication_url' => 'text',
'authentication_email' => 'text',
'authentication_password' => 'text',
'normal_menu_url' => 'text',
'mobile_menu_url' => 'text',
'session_timeout' => 'text',
'list_css_imports' => 'text',
'list_fonts_imports' => 'text',
];
parent::__construct(
'0.1',
'Borja Sanchez',
$settings
);
}
public static function create()
{
static $result = null;
return $result ? $result : $result = new self();
}
public function install()
{
return true;
}
public function uninstall()
{
$settings = [
'tool_enable',
'authentication_url',
'authentication_email',
'authentication_password',
'normal_menu_url',
'mobile_menu_url',
'username_parameter',
'session_timeout',
'list_css_imports' => 'text',
'list_fonts_imports' => 'text',
];
$tableSettings = Database::get_main_table(TABLE_MAIN_SETTINGS);
$urlId = api_get_current_access_url_id();
foreach ($settings as $variable) {
$sql = "DELETE FROM $tableSettings WHERE variable = '$variable' AND access_url = $urlId";
Database::query($sql);
}
}
/**
* Get a token through the WS indicated in plugin configuration.
*/
public function getToken()
{
$response = [];
$authenticationUrl = (string) $this->get('authentication_url');
$authenticationEmail = (string) $this->get('authentication_email');
$authenticationPassword = (string) $this->get('authentication_password');
if (!empty($authenticationUrl) && !empty($authenticationEmail) && !empty($authenticationPassword)) {
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $authenticationUrl,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 5,
CURLOPT_NOSIGNAL => 1,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"email": "'.$authenticationEmail.'",
"password": "'.$authenticationPassword.'"
}',
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
],
]);
$curlResponse = curl_exec($curl);
curl_close($curl);
if (false !== $curlResponse) {
$curlResponse = json_decode($curlResponse, true);
if (isset($curlResponse['data']['data']['token'])) {
$response = $curlResponse['data']['data']['token'];
}
}
}
return $response;
}
/**
* Get the menu from the WS indicated in plugin configuration.
* */
public function getMenu(
string $token,
string $userEmail,
bool $isMobile = false
): array {
$response = [];
$menuUrl = $isMobile ? (string) $this->get('mobile_menu_url') : (string) $this->get('normal_menu_url');
if (!empty($menuUrl) && !empty($token) && !empty($userEmail)) {
$menuUrl = substr($menuUrl, -1) === '/' ? $menuUrl : $menuUrl.'/';
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $menuUrl.$userEmail,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 5,
CURLOPT_NOSIGNAL => 1,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $token",
],
]);
$curlResponse = curl_exec($curl);
if (false !== $curlResponse) {
$curlResponse = json_decode($curlResponse, true);
if (isset($curlResponse['data']['data']['html']['data'])) {
$response['html'] = $curlResponse['data']['data']['html']['data'];
}
if (isset($curlResponse['data']['data']['css']['data'])) {
$response['css'] = $curlResponse['data']['data']['css']['data'];
}
if (isset($curlResponse['data']['data']['js']['data'])) {
$response['js'] = $curlResponse['data']['data']['js']['data'];
}
}
curl_close($curl);
}
return $response;
}
/**
* Checks if the login token is expired.
*/
public static function tokenIsExpired(int $tokenStartTime, int $pluginSessionTimeout): bool
{
$now = api_get_utc_datetime(null, false, true)->getTimestamp();
return ($now - $tokenStartTime) > $pluginSessionTimeout;
}
/**
* Get the list of CSS or fonts indicated in plugin configuration.
*/
public static function getImports(string $list = '')
{
$importsArray = [];
if (!empty($list)) {
$importsArray = explode(";", $list);
}
return $importsArray;
}
}