diff --git a/Admin/Install/Workflow.install.json b/Admin/Install/Workflow.install.json new file mode 100644 index 0000000..6a413ca --- /dev/null +++ b/Admin/Install/Workflow.install.json @@ -0,0 +1,34 @@ +{ + "triggers": [ + ], + "actions": { + "1008000001": { + "name": "Check resources", + "description": { + "en": "Check resources", + "de": "Ueberpruefe Ressourcen" + }, + "function_type": "API", + "function": "apiResourceCheck", + "inputs": [ + "unit", + "{*}" + ], + "outputs": [ + "resources[]", + "{*}" + ], + "settings": { + "unit": { + "type": "input", + "subtype": "number", + "default": null, + "title": { + "en": "Unit", + "de": "Unit" + } + } + } + } + } +} \ No newline at end of file diff --git a/Admin/Install/Workflow.php b/Admin/Install/Workflow.php new file mode 100644 index 0000000..dfaa381 --- /dev/null +++ b/Admin/Install/Workflow.php @@ -0,0 +1,43 @@ + __DIR__ . '/Workflow.install.json']); + } +} diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index c7db8db..0a5000a 100755 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -18,7 +18,7 @@ use phpOMS\Account\PermissionType; use phpOMS\Router\RouteVerb; return [ - '^.*/orw/resource.*$' => [ + '^.*/orw/resource(\?.*|$)' => [ [ 'dest' => '\Modules\OnlineResourceWatcher\Controller\ApiController:apiResourceCreate', 'verb' => RouteVerb::PUT, @@ -56,4 +56,16 @@ return [ ], ], ], + + '^.*/orw/resource/render.*$' => [ + [ + 'dest' => '\Modules\OnlineResourceWatcher\Controller\ApiController:apiResourceRender', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::RESOURCE, + ], + ], + ], ]; diff --git a/Controller/ApiController.php b/Controller/ApiController.php index f148abf..3edc479 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -21,6 +21,7 @@ use Modules\OnlineResourceWatcher\Models\ReportStatus; use Modules\OnlineResourceWatcher\Models\Resource; use Modules\OnlineResourceWatcher\Models\ResourceMapper; use Modules\OnlineResourceWatcher\Models\ResourceStatus; +use phpOMS\Message\Http\HttpRequest; use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; @@ -41,6 +42,50 @@ use phpOMS\Utils\StringUtils; */ final class ApiController extends Controller { + /** + * Api method to create resource + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiResourceRender(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + /** @var \Modules\OnlineResourceWatcher\Models\Resource $resource */ + $resource = ResourceMapper::get() + ->where('id', (int) $request->getData('id')) + ->execute(); + + $path = ''; + if (\is_dir($basePath = __DIR__ . '/' . $resource->path . '/' . $resource->lastVersionPath)) { + if (\is_file($basePath . '/index.htm')) { + $path = 'Modules/OnlineResourceWatcher/Files/' . $resource->path . '/' . $resource->lastVersionPath . '/index.htm'; + } elseif (\is_file($basePath . '/index.html')) { + $path = 'Modules/OnlineResourceWatcher/Files/' . $resource->path . '/' . $resource->lastVersionPath . '/index.html'; + } else { + $files = \scandir($basePath); + foreach ($files as $file) { + if ($file === '.' || $files === '..') { + continue; + } + + $path = 'Modules/OnlineResourceWatcher/Files/' . $resource->path . '/' . $resource->lastVersionPath . '/' . $file; + } + } + } + + $internalRequest = new HttpRequest(); + $internalRequest->header->account = $request->header->account; + $internalRequest->setData('path', $path); + $this->app->moduleManager->get('Media')->apiMediaExport($internalRequest, $response, ['guard' => __DIR__ . '/../Files']); + } + /** * Validate resource create request * @@ -170,6 +215,7 @@ final class ApiController extends Controller // Check downloaded resources // @todo: this may not work correctly because the download runs async. $totalCount = \count($toCheck); + $maxLoops = (int) \min(60 * 10, $totalCount * 10 / 4); // @todo: the following code is INSANE, simplify!!! $baseLen = \strlen($basePath . '/temp'); @@ -179,7 +225,7 @@ final class ApiController extends Controller $resource = $check['resource']; // too many tries - if ($check['loop'] > 60 * 10) { + if ($check['loop'] > $maxLoops) { $report = new Report(); $report->resource = $resource->getId(); $report->versionPath = (string) $check['timestamp']; @@ -205,7 +251,7 @@ final class ApiController extends Controller $id = (int) \substr($path, $baseLen + 1, $end - $baseLen - 1); // new resource - if ($check['loop'] === 60 * 10 && !\is_dir($basePath . '/' . $id)) { + if ($check['loop'] === $maxLoops && !\is_dir($basePath . '/' . $id)) { $filesNew = \scandir($path); if ($filesNew === false) { $filesNew = []; diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 5d00cf1..59a8def 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -132,6 +132,7 @@ final class BackendController extends Controller $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/OnlineResourceWatcher/Theme/Backend/resource-single'); + /** @var \Modules\OnlineResourceWatcher\Models\Resource $resource */ $resource = ResourceMapper::get() ->where('id', (int) $request->getData('id')) ->execute(); diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php index 9133ed5..ed4ba7f 100755 --- a/Theme/Backend/Lang/de.lang.php +++ b/Theme/Backend/Lang/de.lang.php @@ -12,7 +12,7 @@ */ declare(strict_types=1); -return [[ +return ['OnlineResourceWatcher' => [ 'Action' => 'Action', 'Add' => 'Add', 'Admin' => 'Admin', diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index 9133ed5..fb2ef1a 100755 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -12,7 +12,7 @@ */ declare(strict_types=1); -return [[ +return ['OnlineResourceWatcher' => [ 'Action' => 'Action', 'Add' => 'Add', 'Admin' => 'Admin', @@ -83,4 +83,8 @@ return [[ 'Element' => 'Element', 'Exit' => 'Exit', 'Url' => 'Url', + 'Preview' => 'Preview', + 'XPath' => 'XPath', + 'Comparison' => 'Comparison', + 'History' => 'History', ]]; diff --git a/Theme/Backend/resource-create.tpl.php b/Theme/Backend/resource-create.tpl.php index 27a7496..a835a2d 100755 --- a/Theme/Backend/resource-create.tpl.php +++ b/Theme/Backend/resource-create.tpl.php @@ -76,7 +76,7 @@ use phpOMS\Uri\UriFactory;