diff --git a/appinfo/application.php b/appinfo/application.php new file mode 100644 index 0000000..97519ae --- /dev/null +++ b/appinfo/application.php @@ -0,0 +1,22 @@ +getContainer()->registerService('SettingsController', function($c) { + return new SettingsController( + $c->query('OCP\IRequest'), + $c->query('OCP\IUserSession'), + $c->query('OCA\Deckflow\Service\WorkflowService') + ); + }); + } +} diff --git a/appinfo/controller/SettingsController.php b/appinfo/controller/SettingsController.php deleted file mode 100644 index e69de29..0000000 diff --git a/appinfo/cron.php b/appinfo/cron.php deleted file mode 100644 index 969ceb5..0000000 --- a/appinfo/cron.php +++ /dev/null @@ -1,9 +0,0 @@ -query('OCA\Deckflow\Cron\MoveOverdueCardsJob'); - -// Führe den Cronjob aus -$job->execute(); diff --git a/appinfo/info.xml b/appinfo/info.xml deleted file mode 100644 index 942bb53..0000000 --- a/appinfo/info.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - deckflow - Deckflow - Automatisiere Deck-Karten mit Cronjobs und Workflows - Diese App automatisiert die Bewegung von Karten basierend auf Workflows und Überprüfungen von überfälligen Karten. - 0.1.0 - deckflow - - 21 - workflow - deck - - \ No newline at end of file diff --git a/appinfo/routes.php b/appinfo/routes.php new file mode 100644 index 0000000..7c5732a --- /dev/null +++ b/appinfo/routes.php @@ -0,0 +1,20 @@ +registerService('SettingsController', function(IContainer $c) { + return new \OCA\Deckflow\Controller\SettingsController( + $c->query('OCP\IRequest'), + $c->query('OCP\IUserSession'), + $c->query('OCA\Deckflow\Service\WorkflowService') + ); +}); + +// Hier wird die Route für den Webhook definiert +$container->registerService('WebhookController', function(IContainer $c) { + return new \OCA\Deckflow\Controller\WebhookController( + $c->query('OCP\IRequest'), + $c->query('OCA\Deckflow\Service\WorkflowService') + ); +}); diff --git a/assets/js/addWorkflow.js b/assets/js/addWorkflow.js new file mode 100644 index 0000000..c9e7304 --- /dev/null +++ b/assets/js/addWorkflow.js @@ -0,0 +1,24 @@ +document.getElementById('addWorkflow').addEventListener('click', function() { + let workflowContainer = document.getElementById('workflows'); + let newWorkflow = document.createElement('div'); + newWorkflow.classList.add('workflow'); + + newWorkflow.innerHTML = ` + + + + + + + + + `; + + workflowContainer.appendChild(newWorkflow); +}); diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..0d6deaf --- /dev/null +++ b/composer.json @@ -0,0 +1,15 @@ +{ + "name": "deckflow", + "description": "Automatisierung von Deck Workflows mit Flow", + "type": "nextcloud-app", + "require": { + "php": ">=7.2", + "nextcloud/server": "^23.0" + }, + "autoload": { + "psr-4": { + "OCA\\Deckflow\\": "lib/" + } + } + } + \ No newline at end of file diff --git a/controller/SettingsController.php b/controller/SettingsController.php new file mode 100644 index 0000000..3d13baf --- /dev/null +++ b/controller/SettingsController.php @@ -0,0 +1,33 @@ +workflowService = $workflowService; + } + + public function showSettingsForm() { + $workflows = $this->workflowService->getWorkflows(); + return $this->render('settings.php', [ + 'workflows' => $workflows + ]); + } + + public function saveWorkflows() { + $deckId = $_POST['deckId']; + $sourceStackId = $_POST['sourceStack']; + $targetStackId = $_POST['targetStack']; + + $this->workflowService->saveWorkflows($deckId, $sourceStackId, $targetStackId); + } +} diff --git a/controller/WebhookController.php b/controller/WebhookController.php new file mode 100644 index 0000000..3fc735e --- /dev/null +++ b/controller/WebhookController.php @@ -0,0 +1,25 @@ +workflowService = $workflowService; + } + + public function moveCards() { + $deckId = $_POST['deckId']; + $sourceStackId = $_POST['sourceStackId']; + $targetStackId = $_POST['targetStackId']; + + $this->workflowService->moveOverdueCards($deckId, $sourceStackId, $targetStackId); + } +} diff --git a/cron.php b/cron.php new file mode 100644 index 0000000..ca4464c --- /dev/null +++ b/cron.php @@ -0,0 +1,11 @@ +getWorkflows(); + +foreach ($workflows as $workflow) { + $workflowService->moveOverdueCards($workflow['deck_id'], $workflow['source_stack_id'], $workflow['target_stack_id']); +} diff --git a/db/schema.xml b/db/schema.xml new file mode 100644 index 0000000..535ca92 --- /dev/null +++ b/db/schema.xml @@ -0,0 +1,11 @@ + + + + + + + + + +
+
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php deleted file mode 100644 index 24679e9..0000000 --- a/lib/AppInfo/Application.php +++ /dev/null @@ -1,32 +0,0 @@ -getContainer(); - - // Routen für das Backend - $container->registerService('SettingsController', function(IContainer $c) { - return new SettingsController( - $c->query('OCP\IRequest'), - $c->query('OCP\IUserSession'), - $c->query('OCA\Deckflow\Service\WorkflowService'), - $c->query('OCP\IDBConnection') - ); - }); - - // CronJob registrieren - $container->registerService('MoveOverdueCardsJob', function(IContainer $c) { - return new MoveOverdueCardsJob( - $c->query('OCA\Deckflow\Service\WorkflowService') - ); - }); - } -} diff --git a/lib/AppInfo/DB/migration.php b/lib/AppInfo/DB/migration.php deleted file mode 100644 index e0a3a85..0000000 --- a/lib/AppInfo/DB/migration.php +++ /dev/null @@ -1,21 +0,0 @@ -query("CREATE TABLE IF NOT EXISTS *PREFIX*deckflow_workflows ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - user_id TEXT NOT NULL, - deck_id TEXT NOT NULL, - source_stack_id TEXT NOT NULL, - target_stack_id TEXT NOT NULL - )"); - } -} diff --git a/lib/Cron/MoveOverdueCardsJob.php b/lib/Cron/MoveOverdueCardsJob.php deleted file mode 100644 index 1882ca1..0000000 --- a/lib/Cron/MoveOverdueCardsJob.php +++ /dev/null @@ -1,27 +0,0 @@ -workflowService = $workflowService; - } - - /** - * Ausführen des Cronjobs - */ - protected function run($argument) { - try { - // Überfällige Karten verschieben - $this->workflowService->moveOverdueCards(); - } catch (\Exception $e) { - \OCP\Util::writeLog('deckflow', 'Fehler beim Ausführen des Cronjobs: ' . $e->getMessage(), \OCP\Util::ERROR); - } - } -} diff --git a/lib/Service/WorkflowService.php b/lib/Service/WorkflowService.php index 83bff0b..112fb73 100644 --- a/lib/Service/WorkflowService.php +++ b/lib/Service/WorkflowService.php @@ -1,60 +1,51 @@ db = $db; $this->userSession = $userSession; $this->deckService = $deckService; - $this->logger = $logger; - $this->db = $db; } - /** - * Holt alle Workflows des aktuellen Benutzers - * @return array - */ - private function getUserWorkflows() { - $user = $this->userSession->getUser(); - $userId = $user ? $user->getUID() : null; + // Speichert die Workflows + public function saveWorkflows($deckId, $sourceStackId, $targetStackId) { + $userId = $this->userSession->getUser()->getUID(); + $this->db->executeQuery("INSERT INTO *PREFIX*deckflow_workflows (user_id, deck_id, source_stack_id, target_stack_id) + VALUES (?, ?, ?, ?)", [ + $userId, + $deckId, + $sourceStackId, + $targetStackId + ]); + } - // Hole alle Workflow-Konfigurationen des Benutzers aus der DB + // Ruft alle Workflows für den aktuellen Benutzer ab + public function getWorkflows() { + $userId = $this->userSession->getUser()->getUID(); $result = $this->db->executeQuery("SELECT * FROM *PREFIX*deckflow_workflows WHERE user_id = ?", [$userId]); return $result->fetchAll(); } - /** - * Verschiebt überfällige Karten für alle Workflows - */ - public function moveOverdueCards() { - $user = $this->userSession->getUser(); - if ($user === null) { - return; - } + // Webhook zur Ausführung des Workflows, Karten zu verschieben + public function moveOverdueCards($deckId, $sourceStackId, $targetStackId) { + $deck = $this->deckService->getDeckById($deckId); + $sourceStack = $deck->getStackById($sourceStackId); + $targetStack = $deck->getStackById($targetStackId); - $workflows = $this->getUserWorkflows(); - - foreach ($workflows as $workflow) { - // Hole das Deck und die Stacks aus der Konfiguration - $deck = $this->deckService->getDeckById($workflow['deck_id']); - $sourceStack = $deck->getStackById($workflow['source_stack_id']); - $targetStack = $deck->getStackById($workflow['target_stack_id']); - - // Überprüfe alle Karten im Quellstapel auf Überfälligkeit - foreach ($sourceStack->getCards() as $card) { - if ($this->isCardOverdue($card)) { - $this->moveCardToTargetStack($card, $targetStack); - } + foreach ($sourceStack->getCards() as $card) { + if ($this->isCardOverdue($card)) { + $this->moveCardToTargetStack($card, $targetStack); } } } @@ -66,6 +57,5 @@ class WorkflowService { private function moveCardToTargetStack($card, $targetStack) { $this->deckService->moveCardToStack($card, $targetStack); - $this->logger->info("Card moved to target stack."); } } diff --git a/templates/settings.php b/templates/settings.php index 0ce46b3..4636244 100644 --- a/templates/settings.php +++ b/templates/settings.php @@ -1,19 +1,28 @@ -

Deckflow Settings

-
- - +

Deckflow Einstellungen

+ +
+ +
+ + - - + + - - + + +
+ +
+
+ +