PluginProbe
Metricool – Social media and site statistics / trunk
Metricool – Social media and site statistics vtrunk
2.1.0 2.0.2 2.0.1 2.0.0 1.27 trunk
metricool / app / Features / TaskManagement / TaskManagementController.php

TaskManagementController.php in Metricool – Social media and site statistics trunk, at app/Features/TaskManagement/TaskManagementController.php

99 lines 2.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Metricool\Features\TaskManagement;
6
7 if (!defined('ABSPATH')) {
8 exit;
9 }
10
11 use Metricool\Interfaces\FeatureInterface;
12 use Metricool\Interfaces\TaskInterface;
13 use Metricool\Services\DashboardService;
14 use Metricool\Traits\HasAllowlistControl;
15
16 class TaskManagementController implements FeatureInterface
17 {
18 use HasAllowlistControl;
19
20 private TaskManagementEndpoints $endpoints;
21 private TaskManagementService $service;
22 private TaskManagementListener $listener;
23 private DashboardService $dashboard;
24
25 public function __construct(TaskManagementService $service, TaskManagementEndpoints $endpoints, TaskManagementListener $listener, DashboardService $dashboard)
26 {
27 $this->service = $service;
28 $this->endpoints = $endpoints;
29 $this->listener = $listener;
30 $this->dashboard = $dashboard;
31 }
32
33 public function register(): void
34 {
35 $this->endpoints->register();
36
37 if ($this->userCanManage() && $this->dashboard->isOnboardingCompleted()) {
38 $this->listener->listen();
39 $this->initiateTasks();
40 }
41
42 add_action('metricool_plugin_version_upgrade', [$this, 'upgradeTasks']);
43 }
44
45 /**
46 * This method returns an array of Task class-strings that should be added
47 * to the database.
48 *
49 * @internal New tasks should be added here. Upgrade the task version if the
50 * task should be updated. If a task should be removed, remove the task from
51 * this list.
52 *
53 * @return array<int,class-string<TaskInterface>> Array of Task class-strings
54 */
55 private function getTaskObjects(): array
56 {
57 return [
58 Tasks\TwitterTask::class,
59 Tasks\LinkedInTask::class,
60 Tasks\HistoricalDataTask::class,
61 Tasks\FirstConnectionTask::class,
62 Tasks\SchedulePostTask::class,
63 ];
64 }
65
66 /**
67 * This method adds the initial tasks to the database if they are not
68 * already present.
69 * @throws \Exception If task class cannot be instantiated
70 */
71 private function initiateTasks(): void
72 {
73 if ($this->service->hasTasks()) {
74 return;
75 }
76
77 $this->service->addTasks(
78 $this->getTaskObjects()
79 );
80 }
81
82 /**
83 * This method makes sure that if new tasks are added in the update that
84 * these tasks are added in the database. Existing tasks will be updated
85 * if the version is higher than the current existing task with the same id.
86 * @throws \Exception If task class cannot be instantiated
87 */
88 public function upgradeTasks(): void
89 {
90 if ($this->service->hasTasks() === false) {
91 return; // Tasks will be added by initiateTasks()
92 }
93
94 $this->service->upgradeTasks(
95 $this->getTaskObjects()
96 );
97 }
98 }
99