From 1fdc36cc34f310fa4664744272d74c3ce3361c8e Mon Sep 17 00:00:00 2001
From: Thibault Dockx <thibault.dockx@fusiondirectory.org>
Date: Mon, 7 Nov 2022 15:59:32 +0000
Subject: [PATCH] :sparkles: Feat(Tasks) - Dashboard v0.5

Granular tasks are not updated properly.
Erros messages are now exact and not generic.
---
 contrib/openldap/core-fd.schema               | 15 +++++++++++++--
 plugins/addons/tasks/class_tasksGranular.inc  |  4 ++++
 plugins/addons/tasks/class_tasksMail.inc      |  8 +++++++-
 plugins/admin/tasks/class_tasksColumn.inc     | 12 ++++++------
 plugins/admin/tasks/class_tasksManagement.inc |  4 +---
 5 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/contrib/openldap/core-fd.schema b/contrib/openldap/core-fd.schema
index 6c7a7f662..7c34692ec 100644
--- a/contrib/openldap/core-fd.schema
+++ b/contrib/openldap/core-fd.schema
@@ -357,6 +357,17 @@ attributetype ( 1.3.6.1.4.1.38414.89.1.13 NAME 'fdTasksGranularMail'
   EQUALITY caseExactMatch
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
 
+attributetype ( 1.3.6.1.4.1.38414.89.1.14 NAME 'fdTasksGranularMailFrom'
+  DESC 'Fusion Directory - Emails sender if object mail'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.15 NAME 'fdTasksGranularRef'
+  DESC 'Fusion Directory - Reference towards a CN (E.g Mail Template)'
+  EQUALITY caseExactMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+  SINGLE-VALUE )
+
 ##### Classes #####
 
 objectclass ( 1.3.6.1.4.1.10098.1.2.1.19.4 NAME 'gosaDepartment' SUP top AUXILIARY
@@ -454,5 +465,5 @@ objectclass (1.3.6.1.4.1.38414.89.2.2 NAME 'fdTasksMail'
 
 objectclass (1.3.6.1.4.1.38414.89.2.3 NAME 'fdTasksGranular'
   DESC 'FusionDirectory - Tasks granular objects'
-  MUST ( fdTasksGranularMaster $ cn $ fdTasksGranularMail $
-  fdTasksGranularType $ fdTasksGranularSchedule $ fdTasksGranularStatus ))
+  MUST ( fdTasksGranularMaster $ cn $ fdTasksGranularMail $ fdTasksGranularMailFrom $ 
+  fdTasksGranularRef $ fdTasksGranularType $ fdTasksGranularSchedule $ fdTasksGranularStatus ))
diff --git a/plugins/addons/tasks/class_tasksGranular.inc b/plugins/addons/tasks/class_tasksGranular.inc
index 7a504f34f..fec3e3524 100644
--- a/plugins/addons/tasks/class_tasksGranular.inc
+++ b/plugins/addons/tasks/class_tasksGranular.inc
@@ -59,9 +59,13 @@ class tasksGranular extends simplePlugin
           new HiddenAttribute('fdTasksGranularStatus', TRUE, '1', '', 'Status', 'Status of the task'),
           new HiddenAttribute('fdTasksGranularMaster', TRUE, '', '', 'Master CN', 'Name of the Master task'),
           new HiddenAttribute('fdTasksGranularType', TRUE, '', '', 'Type', 'Type of the task'),
+          new HiddenAttribute('fdTasksGranularRef', TRUE, '', '', 'Type', 'Reference towards a required CN (mail template E.g'),
           new MailAttribute(
              _('Email'),
              _('Email address which will be sent to'), 'fdTasksGranularMail', TRUE),
+          new MailAttribute(
+             _('Email'),
+             _('Email address which will be sent from'), 'fdTasksGranularMailFrom', TRUE),
           new DateTimeAttribute(
            _('Schedule'), '',
            'fdTasksGranularSchedule', FALSE
diff --git a/plugins/addons/tasks/class_tasksMail.inc b/plugins/addons/tasks/class_tasksMail.inc
index a884b5572..885574977 100644
--- a/plugins/addons/tasks/class_tasksMail.inc
+++ b/plugins/addons/tasks/class_tasksMail.inc
@@ -158,6 +158,9 @@ class tasksMail extends simplePlugin
   public function generateSlaveTasks ()
   {
     $emails = $this->attributesAccess['fdTasksEmailsFromDN']->getValue();
+    // Ref is supposed to be the mail object CN in this class
+    $ref  = $this->attributesAccess['fdTasksMailObject']->getValue();
+    $from = $this->attributesAccess['fdTasksEmailSender']->getValue();
     // Incremental id allowing creation of different CN for sub tasks
     $id = 0;
 
@@ -185,6 +188,8 @@ class tasksMail extends simplePlugin
           "fdTasksGranularMaster"   => $this->dn,
           "fdTasksGranularMail"     => $email,
           "fdTasksGranularSchedule" => $schedule,
+          "fdTasksGranularRef"      => $ref,
+          "fdTasksGranularMailFrom" => $from
         ];
 
         foreach ($values as $tab => $tabvalues) {
@@ -202,8 +207,9 @@ class tasksMail extends simplePlugin
         }
 
         $errors = $tabObject->save();
+
         if (!empty($errors)) {
-          $show_error = new SimplePluginError($this, htmlescape(sprintf(_('Error : "%s", already exist ! Editing existing tasks is forbidden.'), $subTaskName)));
+          $show_error = new SimplePluginError($this, htmlescape(sprintf(_('Error : "%s", already exist ! Editing existing tasks is forbidden.'), $subTaskName.$errors)));
           $show_error->display();
         }
       }
diff --git a/plugins/admin/tasks/class_tasksColumn.inc b/plugins/admin/tasks/class_tasksColumn.inc
index 664ee120d..847b7a24f 100644
--- a/plugins/admin/tasks/class_tasksColumn.inc
+++ b/plugins/admin/tasks/class_tasksColumn.inc
@@ -32,10 +32,10 @@ class TasksColumn extends Column
     } else {
       switch ($this->attributes[0]) {
         case 'fdTasksStatus':
-          return static::filterStatus(intval($value));
+          return static::filterStatus($value);
 
         case 'fdTasksGranularStatus':
-          return static::filterStatus(intval($value));
+          return static::filterStatus($value);
 
         // This case needs optimization
         case 'fdTasksMailObject':
@@ -56,18 +56,18 @@ class TasksColumn extends Column
     }
   }
 
-  static function filterStatus (int $status = NULL): string
+  static function filterStatus (string $status = NULL): string
   {
     // A call towards a status map would be interesting here.
     switch ($status) {
-      case 1 :
+      case "1" :
         return "Created";
 
-      case 2 :
+      case "2" :
         return "Processed";
 
       default :
-        return "Error Encountered";
+        return $status;
     }
   }
 
diff --git a/plugins/admin/tasks/class_tasksManagement.inc b/plugins/admin/tasks/class_tasksManagement.inc
index 3d5e81417..0b95d5ca7 100644
--- a/plugins/admin/tasks/class_tasksManagement.inc
+++ b/plugins/admin/tasks/class_tasksManagement.inc
@@ -31,10 +31,8 @@ class tasksManagement extends management
     ['LinkColumn',  ['attributes' => 'cn', 'label' => 'Tasks']],
     //below fdTasksMailObject must be change to have a type defined within task creation (new ldap attributes ?hidden)
     ['TasksColumn', ['attributes' => 'fdTasksMailObject', 'label' => 'Types']],
-    ['TasksColumn', ['attributes' => 'fdTasksScheduleDate', 'label' => 'Schedule']],
-    //below fdTasksStatus attribute needs to be calculated based on the type of the task.
-    ['TasksColumn', ['attributes' => 'fdTasksStatus', 'label' => 'Status']],
     ['Column', ['attributes' => 'fdTasksCreationDate', 'label' => 'Creation Date']],
+    ['TasksColumn', ['attributes' => 'fdTasksScheduleDate', 'label' => 'Scheduled']],
     ['ActionsColumn', ['label' => 'Actions']],
   ];
 
-- 
GitLab