You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.0 KiB
133 lines
3.0 KiB
<?php |
|
|
|
namespace App\Controllers; |
|
|
|
use App\Classes\Config; |
|
use App\Classes\Db; |
|
use App\Classes\Session; |
|
use App\Classes\User; |
|
|
|
class BaseController { |
|
|
|
protected $router; |
|
protected $section; |
|
protected $page; |
|
protected $loggedIn; |
|
protected $url; |
|
protected $adminSection; |
|
|
|
//-------------------------------------// |
|
|
|
public function __construct(\Klein\Klein $router = null) |
|
{ |
|
$this->router = $router; |
|
|
|
$request = $this->router->request()->uri(); |
|
$request = parse_url($request)['path']; |
|
$request = explode("/", $request); |
|
|
|
if (array_key_exists(1, $request)) { |
|
$this->section = $request[1]; |
|
} |
|
if (array_key_exists(2, $request)) { |
|
$this->page = $request[2]; |
|
} |
|
|
|
// Set login status |
|
$this->loggedIn = User::check(); |
|
$this->router->service()->loggedIn = $this->loggedIn; |
|
|
|
// Set url https://site.com/section/page |
|
$this->url = Config::c('APP_URL'); |
|
$this->url .= _exists([$this->section]) ? '/' . $this->section : ''; |
|
$this->url .= _exists([$this->page]) ? '/' . $this->page : ''; |
|
$this->router->service()->url = $this->url; |
|
|
|
// If Admin section |
|
$this->adminSection = $this->section == 'admin'; |
|
$this->router->service()->adminSection = $this->adminSection; |
|
|
|
// Clear alert |
|
$this->setAlert('', ''); |
|
// Load alert set on the previous page |
|
$this->loadAlert(); |
|
|
|
// View helper method |
|
$this->router->service()->escape = function (?string $string) { |
|
return htmlentities($string, ENT_QUOTES | ENT_HTML5, 'UTF-8'); |
|
}; |
|
} |
|
|
|
//-------------------------------------// |
|
|
|
public function throw404(): void |
|
{ |
|
$this->router->response()->sendHeaders(true, true); |
|
$service = $this->router->service(); |
|
$service->pageTitle = 'Error 404 (Not Found)'; |
|
$service->render('../app/views/errors/404.php'); |
|
exit(); |
|
} |
|
|
|
/** |
|
* Set alert for the current page |
|
* |
|
* @param string $type Color of the message (success/danger/warning/info) |
|
* @param string $message The message to display |
|
* |
|
* @return void |
|
*/ |
|
public function setAlert(string $type, string $message): void |
|
{ |
|
$this->router->service()->type = $type; |
|
$this->router->service()->message = $message; |
|
} |
|
|
|
/** |
|
* Set alert for the next page |
|
* |
|
* @param string $type Color of the message (success/danger/warning/info) |
|
* @param string $message The message to display |
|
* |
|
* @return void |
|
*/ |
|
public function setAlertNext(string $type, string $message): void |
|
{ |
|
Session::put('type', $type); |
|
Session::put('message', $message); |
|
} |
|
|
|
/** |
|
* Load alert set on the previous page |
|
* |
|
* @return void |
|
*/ |
|
public function loadAlert(): void |
|
{ |
|
if (Session::exists('type') && Session::exists('message')) { |
|
$this->setAlert(Session::get('type'), Session::get('message')); |
|
Session::delete(['type', 'message']); |
|
} |
|
} |
|
|
|
//-------------------------------------// |
|
|
|
public function getSection(): string |
|
{ |
|
return $this->section; |
|
} |
|
|
|
public function getLoggedIn(): bool |
|
{ |
|
return $this->loggedIn; |
|
} |
|
|
|
public function getAdminSection(): bool |
|
{ |
|
return $this->adminSection; |
|
} |
|
|
|
} |
|
|
|
// @Todo |
|
// - Image lazy loading
|
|
|