114 lines
2.8 KiB
PHP
114 lines
2.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Base Handler for Mobile App endpoints
|
|
*
|
|
* All app handlers should extend this class.
|
|
* Provides common functionality for authentication, permissions, and responses.
|
|
*/
|
|
abstract class MobileAppBaseHandler {
|
|
|
|
/** @var object Request object */
|
|
protected $request;
|
|
|
|
/** @var User|null Current user */
|
|
protected $user;
|
|
|
|
/** @var MobileAppController Parent controller */
|
|
protected $controller;
|
|
|
|
/** @var string Required permission for this app (override in subclass) */
|
|
protected $requiredPermission = null;
|
|
|
|
/** @var string App name (used for view rendering) */
|
|
protected $appName = '';
|
|
|
|
/** @var string View template path */
|
|
protected $viewTemplate = '';
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct($request, $user, $controller) {
|
|
$this->request = $request;
|
|
$this->user = $user;
|
|
$this->controller = $controller;
|
|
}
|
|
|
|
/**
|
|
* Check if user has required permission
|
|
* @return bool
|
|
*/
|
|
public function checkPermission() {
|
|
// If no permission required, allow access
|
|
if (!$this->requiredPermission) {
|
|
return true;
|
|
}
|
|
|
|
// If no user, deny access
|
|
if (!$this->user || !$this->user->id) {
|
|
return false;
|
|
}
|
|
|
|
// Check permission
|
|
return $this->user->can($this->requiredPermission);
|
|
}
|
|
|
|
/**
|
|
* Render the app view
|
|
* Override in subclass if custom rendering needed
|
|
*/
|
|
public function renderView() {
|
|
$layout = $this->controller->layout();
|
|
|
|
// Set template
|
|
if ($this->viewTemplate) {
|
|
$layout->setTemplate($this->viewTemplate);
|
|
} else {
|
|
$layout->setTemplate("MobileApp/{$this->appName}");
|
|
}
|
|
|
|
// Set default JS globals
|
|
$layout->set("JSGlobals", $this->getJSGlobals());
|
|
}
|
|
|
|
/**
|
|
* Get JS globals to pass to frontend
|
|
* Override in subclass to add app-specific globals
|
|
*/
|
|
protected function getJSGlobals() {
|
|
$globals = [
|
|
'BASE_PATH' => '/MobileApp/' . $this->appName,
|
|
'APP_NAME' => $this->appName,
|
|
];
|
|
|
|
if ($this->user && $this->user->id) {
|
|
$globals['USER_ID'] = $this->user->id;
|
|
$globals['USER_NAME'] = $this->user->name;
|
|
}
|
|
|
|
return $globals;
|
|
}
|
|
|
|
/**
|
|
* Return JSON response (shorthand)
|
|
*/
|
|
protected static function returnJson($data, $statusCode = 200) {
|
|
mfBaseController::returnJson($data, $statusCode);
|
|
}
|
|
|
|
/**
|
|
* Get POST data from JSON body
|
|
*/
|
|
protected function getPostData() {
|
|
return json_decode(file_get_contents('php://input'), true) ?? [];
|
|
}
|
|
|
|
/**
|
|
* Get database instance
|
|
*/
|
|
protected function db() {
|
|
return FronkDB::singleton();
|
|
}
|
|
}
|