Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>pull/16682/head
parent
1c67357db8
commit
ec36c0ae80
@ -0,0 +1,158 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
/** |
||||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCA\WorkflowEngine\Settings; |
||||
|
||||
use OCA\WorkflowEngine\AppInfo\Application; |
||||
use OCA\WorkflowEngine\Manager; |
||||
use OCP\AppFramework\Http\TemplateResponse; |
||||
use OCP\IInitialStateService; |
||||
use OCP\IL10N; |
||||
use OCP\Settings\ISettings; |
||||
use OCP\WorkflowEngine\IComplexOperator; |
||||
use OCP\WorkflowEngine\IEntity; |
||||
use OCP\WorkflowEngine\IEntityEvent; |
||||
use OCP\WorkflowEngine\IOperator; |
||||
use OCP\WorkflowEngine\ISpecificOperator; |
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface; |
||||
|
||||
abstract class ASettings implements ISettings { |
||||
/** @var IL10N */ |
||||
private $l10n; |
||||
|
||||
/** @var string */ |
||||
private $appName; |
||||
|
||||
/** @var EventDispatcherInterface */ |
||||
private $eventDispatcher; |
||||
|
||||
/** @var Manager */ |
||||
private $manager; |
||||
|
||||
/** @var IInitialStateService */ |
||||
private $initialStateService; |
||||
|
||||
/** |
||||
* @param string $appName |
||||
* @param IL10N $l |
||||
* @param EventDispatcherInterface $eventDispatcher |
||||
*/ |
||||
public function __construct( |
||||
$appName, |
||||
IL10N $l, |
||||
EventDispatcherInterface $eventDispatcher, |
||||
Manager $manager, |
||||
IInitialStateService $initialStateService |
||||
) { |
||||
$this->appName = $appName; |
||||
$this->l10n = $l; |
||||
$this->eventDispatcher = $eventDispatcher; |
||||
$this->manager = $manager; |
||||
$this->initialStateService = $initialStateService; |
||||
} |
||||
|
||||
abstract function getScope(): int; |
||||
|
||||
/** |
||||
* @return TemplateResponse |
||||
*/ |
||||
public function getForm() { |
||||
$this->eventDispatcher->dispatch('OCP\WorkflowEngine::loadAdditionalSettingScripts'); |
||||
|
||||
$entities = $this->manager->getEntitiesList(); |
||||
$this->initialStateService->provideInitialState( |
||||
Application::APP_ID, |
||||
'entities', |
||||
$this->entitiesToArray($entities) |
||||
); |
||||
|
||||
$operators = $this->manager->getOperatorList(); |
||||
$this->initialStateService->provideInitialState( |
||||
Application::APP_ID, |
||||
'operators', |
||||
$this->operatorsToArray($operators) |
||||
); |
||||
|
||||
$this->initialStateService->provideInitialState( |
||||
Application::APP_ID, |
||||
'scope', |
||||
$this->getScope() |
||||
); |
||||
|
||||
return new TemplateResponse(Application::APP_ID, 'settings', [], 'blank'); |
||||
} |
||||
|
||||
/** |
||||
* @return string the section ID, e.g. 'sharing' |
||||
*/ |
||||
public function getSection() { |
||||
return 'workflow'; |
||||
} |
||||
|
||||
/** |
||||
* @return int whether the form should be rather on the top or bottom of |
||||
* the admin section. The forms are arranged in ascending order of the |
||||
* priority values. It is required to return a value between 0 and 100. |
||||
* |
||||
* E.g.: 70 |
||||
*/ |
||||
public function getPriority() { |
||||
return 0; |
||||
} |
||||
|
||||
private function entitiesToArray(array $entities) { |
||||
return array_map(function (IEntity $entity) { |
||||
$events = array_map(function(IEntityEvent $entityEvent) { |
||||
return [ |
||||
'eventName' => $entityEvent->getEventName(), |
||||
'displayName' => $entityEvent->getDisplayName() |
||||
]; |
||||
}, $entity->getEvents()); |
||||
|
||||
return [ |
||||
'id' => $entity->getId(), |
||||
'icon' => $entity->getIcon(), |
||||
'name' => $entity->getName(), |
||||
'events' => $events, |
||||
]; |
||||
}, $entities); |
||||
} |
||||
|
||||
private function operatorsToArray(array $operators) { |
||||
$operators = array_filter($operators, function(IOperator $operator) { |
||||
return $operator->isAvailableForScope($this->getScope()); |
||||
}); |
||||
|
||||
return array_map(function (IOperator $operator) { |
||||
return [ |
||||
'id' => $operator->getId(), |
||||
'icon' => $operator->getIcon(), |
||||
'name' => $operator->getDisplayName(), |
||||
'description' => $operator->getDescription(), |
||||
'fixedEntity' => $operator instanceof ISpecificOperator ? $operator->getEntityId() : '', |
||||
'isComplex' => $operator instanceof IComplexOperator, |
||||
]; |
||||
}, $operators); |
||||
} |
||||
} |
||||
@ -0,0 +1,43 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
/** |
||||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\WorkflowEngine; |
||||
|
||||
/** |
||||
* Interface IComplexOperator |
||||
* |
||||
* This interface represents an operator that is less generic and indicates |
||||
* that some of the tasks it does itself instead of relying on the engine. |
||||
* This includes: |
||||
* |
||||
* * registering listeners – the implementing app needs to ensure that the |
||||
* business logic registers listeners to the events it listens to. For example |
||||
* when direct storage access is required, adding a wrapper or listening to |
||||
* a specific one is required over usual file events. |
||||
* |
||||
* @package OCP\WorkflowEngine |
||||
* |
||||
* @sincee 18.0.0 |
||||
*/ |
||||
interface IComplexOperator extends IOperator { } |
||||
@ -0,0 +1,91 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
/** |
||||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\WorkflowEngine; |
||||
|
||||
/** |
||||
* @since 18.0.0 |
||||
*/ |
||||
interface IOperator { |
||||
/** |
||||
* returns the unique identity of the operator |
||||
* |
||||
* It is recommended to use the namespaced class name of the IOperator |
||||
* implementation. Especially workflow applications released before |
||||
* Nextcloud 18 should chose this as id for compatibility. |
||||
* |
||||
* Example: OCA\FilesAutomatedTagging\Operation |
||||
* |
||||
* @since 18.0.0 |
||||
*/ |
||||
public function getId(): string; |
||||
|
||||
/** |
||||
* returns a translated name to be presented in the web interface |
||||
* |
||||
* Example: "Automated tagging" (en), "Aŭtomata etikedado" (eo) |
||||
* |
||||
* @since 18.0.0 |
||||
*/ |
||||
public function getDisplayName(): string; |
||||
|
||||
/** |
||||
* returns a translated, descriptive text to be presented in the web interface. |
||||
* |
||||
* It should be short and precise. |
||||
* |
||||
* Example: "Tag based automatic deletion of files after a given time." (en) |
||||
* |
||||
* @since 18.0.0 |
||||
*/ |
||||
public function getDescription(): string; |
||||
|
||||
/** |
||||
* returns the URL to the icon of the operator for display in the web interface. |
||||
* |
||||
* Usually, the implementation would utilize the `imagePath()` method of the |
||||
* `\OCP\IURLGenerator` instance and simply return its result. |
||||
* |
||||
* Example implementation: return $this->urlGenerator->imagePath('myApp', 'cat.svg'); |
||||
* |
||||
* @since 18.0.0 |
||||
*/ |
||||
public function getIcon(): string; |
||||
|
||||
/** |
||||
* returns whether the operation can be used in the requested scope. |
||||
* |
||||
* Scope IDs are defined as constants in OCP\WorkflowEngine\IManager. At |
||||
* time of writing these are SCOPE_ADMIN and SCOPE_USER. |
||||
* |
||||
* For possibly unknown future scopes the recommended behaviour is: if |
||||
* user scope is permitted, the default behaviour should return `true`, |
||||
* otherwise `false`. |
||||
* |
||||
* @since 18.0.0 |
||||
*/ |
||||
public function isAvailableForScope(int $scope): bool; |
||||
|
||||
|
||||
} |
||||
@ -0,0 +1,50 @@ |
||||
<?php |
||||
declare(strict_types=1); |
||||
/** |
||||
* @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
||||
* |
||||
* @license GNU AGPL version 3 or any later version |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU Affero General Public License as |
||||
* published by the Free Software Foundation, either version 3 of the |
||||
* License, or (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU Affero General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
|
||||
namespace OCP\WorkflowEngine; |
||||
|
||||
/** |
||||
* Interface ISpecificOperator |
||||
* |
||||
* This interface represents an operator that is designed to work with exactly |
||||
* one entity type. |
||||
* |
||||
* In almost all of the cases it is not necessary to have this limitation, |
||||
* because the action is not connected to the event. This mechanism suits |
||||
* special cases. |
||||
* |
||||
* @package OCP\WorkflowEngine |
||||
* @since 18.0.0 |
||||
*/ |
||||
interface ISpecificOperator extends IOperator { |
||||
|
||||
/** |
||||
* returns the id of the entity the operator is designed for |
||||
* |
||||
* Example: 'WorkflowEngine_Entity_File' |
||||
* |
||||
* @since 18.0.0 |
||||
*/ |
||||
public function getEntityId():string; |
||||
} |
||||
Loading…
Reference in new issue