'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_CURRENT); $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; } }