From ff1773d7a2e563c3ceedad5077446231688674cc Mon Sep 17 00:00:00 2001
From: Thibault Dockx <thibault.dockx@fusiondirectory.org>
Date: Tue, 17 May 2022 11:17:13 +0100
Subject: [PATCH] :sparkles: Feat(Tasks) - Adds proper scheduling and user
 selection

Add users selection for mail task as well as schedule within
generic page of tasks creation.
---
 contrib/openldap/core-fd.schema          | 17 +++++++++++++++--
 plugins/addons/tasks/class_tasks.inc     |  5 +++++
 plugins/addons/tasks/class_tasksMail.inc | 12 +++++++++++-
 3 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/contrib/openldap/core-fd.schema b/contrib/openldap/core-fd.schema
index 8b0eb33f9..b3b3a29df 100644
--- a/contrib/openldap/core-fd.schema
+++ b/contrib/openldap/core-fd.schema
@@ -293,6 +293,19 @@ attributetype ( 1.3.6.1.4.1.38414.89.1.1 NAME 'fdTasksMailObject'
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
   SINGLE-VALUE )
 
+attributetype ( 1.3.6.1.4.1.38414.89.1.2 NAME 'fdTasksSchedule'
+	DESC 'Scheduling of the Task - required processed date'
+	EQUALITY generalizedTimeMatch
+	ORDERING generalizedTimeOrderingMatch
+	SINGLE-VALUE
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
+
+attributetype ( 1.3.6.1.4.1.38414.89.1.3 NAME 'fdTasksMailUsers'
+  DESC 'Fusion Directory - Tasks Mail Users Recipient'
+  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
@@ -380,10 +393,10 @@ objectclass ( 1.3.6.1.4.1.38414.88.2.5 NAME 'fdMailTemplateInvitations'
 objectclass (1.3.6.1.4.1.38414.89.2.1 NAME 'fdTasks'
   DESC 'FusionDirectory - Tasks objects'
   MUST ( cn )
-  MAY ( ) )
+  MAY ( fdTasksSchedule ) )
 
 objectclass (1.3.6.1.4.1.38414.89.2.2 NAME 'fdTasksMail'
   DESC 'FusionDirectory - Tasks objects Mail'
   SUP top AUXILIARY
   MUST ( cn )
-  MAY ( fdTasksMailObject ) )
+  MAY ( fdTasksMailObject $ fdTasksMailUsers) )
diff --git a/plugins/addons/tasks/class_tasks.inc b/plugins/addons/tasks/class_tasks.inc
index adada3bc6..46c510688 100644
--- a/plugins/addons/tasks/class_tasks.inc
+++ b/plugins/addons/tasks/class_tasks.inc
@@ -51,6 +51,11 @@ class tasks extends simplePlugin
           _('Task Name'), _('Name for this task'),
           'cn', TRUE
         ),
+        new GeneralizedTimeDateAttribute(
+          _('Task Schedule'), _('Date when this task is required to be processed'),
+          'fdTasksSchedule', FALSE,
+          ''
+        ),
         ]
       ],
     ];
diff --git a/plugins/addons/tasks/class_tasksMail.inc b/plugins/addons/tasks/class_tasksMail.inc
index 5ba92c35b..ffde94963 100644
--- a/plugins/addons/tasks/class_tasksMail.inc
+++ b/plugins/addons/tasks/class_tasksMail.inc
@@ -56,6 +56,16 @@ class tasksMail extends simplePlugin
         ),
         ]
       ],
+      'UserGroupSelection' => [
+        'name'  => _('Users and/or Groups'),
+        'attrs' => [
+          new GroupMembersAttribute(
+            '', _('Select Users/Groups'),
+            'fdTasksMailUsers', TRUE,
+            [], 'cn'
+          )
+        ]
+        ],
     ];
   }
 
@@ -64,7 +74,7 @@ class tasksMail extends simplePlugin
     global $config;
     parent::__construct($dn, $object, $parent, $mainTab);
 
-    //Search within LDAP and retrieve all mail objects
+    //Search within LDAP and retrieve all mail objects for current base.
     $ldap = $config->get_ldap_link();
     $ldap->cd($config->current['BASE']);
     $ldap->search('(&(objectClass=fdMailTemplate))', ['cn']);
-- 
GitLab