|
|
@ -6,6 +6,7 @@ use SeaCMS\Api\ApiAware; |
|
|
|
use SeaCMS\Api\BadMethodException; |
|
|
|
use SeaCMS\Api\BadMethodException; |
|
|
|
use SeaCMS\Api\Cookies; |
|
|
|
use SeaCMS\Api\Cookies; |
|
|
|
use SeaCMS\Api\JsonResponse; |
|
|
|
use SeaCMS\Api\JsonResponse; |
|
|
|
|
|
|
|
use SeaCMS\Api\LateApiAware; |
|
|
|
use SeaCMS\Api\NotFoundRouteException; |
|
|
|
use SeaCMS\Api\NotFoundRouteException; |
|
|
|
use SeaCMS\Api\SpecialOutputException; |
|
|
|
use SeaCMS\Api\SpecialOutputException; |
|
|
|
|
|
|
|
|
|
|
@ -123,7 +124,17 @@ class SeacmsApi extends AbstractPicoPlugin implements ApiAware |
|
|
|
if (is_array($routes)){ |
|
|
|
if (is_array($routes)){ |
|
|
|
foreach($routes as $route => $methodName){ |
|
|
|
foreach($routes as $route => $methodName){ |
|
|
|
if (is_string($methodName) && method_exists($plugin,$methodName)){ |
|
|
|
if (is_string($methodName) && method_exists($plugin,$methodName)){ |
|
|
|
$this->routes[$route] = [$plugin,$methodName]; |
|
|
|
$this->routes[$route] = [$plugin,$methodName,false]; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if ($plugin instanceof LateApiAware){ |
|
|
|
|
|
|
|
$routes = $plugin->registerLateApiRoutes(); |
|
|
|
|
|
|
|
if (is_array($routes)){ |
|
|
|
|
|
|
|
foreach($routes as $route => $methodName){ |
|
|
|
|
|
|
|
if (is_string($methodName) && method_exists($plugin,$methodName)){ |
|
|
|
|
|
|
|
$this->routes[$route] = [$plugin,$methodName,true]; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -162,6 +173,9 @@ class SeacmsApi extends AbstractPicoPlugin implements ApiAware |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public function onPageRendered(&$output) |
|
|
|
public function onPageRendered(&$output) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
if ($this->resolveApi($output,true)){ |
|
|
|
|
|
|
|
$output = $output->send(); |
|
|
|
|
|
|
|
} |
|
|
|
if (JsonResponse::canSendHeaders()){ |
|
|
|
if (JsonResponse::canSendHeaders()){ |
|
|
|
$this->getCookies()->sendCookiesOnce(); |
|
|
|
$this->getCookies()->sendCookiesOnce(); |
|
|
|
} |
|
|
|
} |
|
|
@ -170,9 +184,10 @@ class SeacmsApi extends AbstractPicoPlugin implements ApiAware |
|
|
|
/** |
|
|
|
/** |
|
|
|
* resolve api |
|
|
|
* resolve api |
|
|
|
* @param null|string|JsonResponse $output |
|
|
|
* @param null|string|JsonResponse $output |
|
|
|
|
|
|
|
* @param bool $isLate |
|
|
|
* @return bool $outputChanged |
|
|
|
* @return bool $outputChanged |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected function resolveApi(&$output): bool |
|
|
|
protected function resolveApi(&$output, bool $isLate = false): bool |
|
|
|
{ |
|
|
|
{ |
|
|
|
$outputChanged = false; |
|
|
|
$outputChanged = false; |
|
|
|
if (isset($_GET['api'])){ |
|
|
|
if (isset($_GET['api'])){ |
|
|
@ -197,6 +212,14 @@ class SeacmsApi extends AbstractPicoPlugin implements ApiAware |
|
|
|
$response = null; |
|
|
|
$response = null; |
|
|
|
try { |
|
|
|
try { |
|
|
|
$data = $this->searchCorrespondingRoute($route); |
|
|
|
$data = $this->searchCorrespondingRoute($route); |
|
|
|
|
|
|
|
if ($data['isLate'] !== $isLate){ |
|
|
|
|
|
|
|
if ($isLate){ |
|
|
|
|
|
|
|
return new Exception('Calling an api route but catch onPageRedered whereas should be caught onThemeLoading !'); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
ob_end_clean(); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
$response = call_user_func_array([$data['plugin'],$data['methodName']],$data['params']); |
|
|
|
$response = call_user_func_array([$data['plugin'],$data['methodName']],$data['params']); |
|
|
|
if (!($response instanceof JsonResponse)){ |
|
|
|
if (!($response instanceof JsonResponse)){ |
|
|
|
$response = null; |
|
|
|
$response = null; |
|
|
@ -275,7 +298,8 @@ class SeacmsApi extends AbstractPicoPlugin implements ApiAware |
|
|
|
return [ |
|
|
|
return [ |
|
|
|
'plugin' => $data[0], |
|
|
|
'plugin' => $data[0], |
|
|
|
'methodName' => $data[1], |
|
|
|
'methodName' => $data[1], |
|
|
|
'params' => $params |
|
|
|
'params' => $params, |
|
|
|
|
|
|
|
'isLate' => $data[2] |
|
|
|
]; |
|
|
|
]; |
|
|
|
} elseif (!$badMethod && array_key_exists((($method == 'GET') ? 'POST' : 'GET' )." $searchingRoute",$this->routes)){ |
|
|
|
} elseif (!$badMethod && array_key_exists((($method == 'GET') ? 'POST' : 'GET' )." $searchingRoute",$this->routes)){ |
|
|
|
$badMethod = true; |
|
|
|
$badMethod = true; |
|
|
|