From 3137a6a6dde27881c89bcaffed6f220c04cd5a39 Mon Sep 17 00:00:00 2001 From: Matthew Wire Date: Tue, 2 Jan 2018 16:00:40 +0700 Subject: [PATCH] Add abstract core Task class --- CRM/Core/Task.php | 202 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 CRM/Core/Task.php diff --git a/CRM/Core/Task.php b/CRM/Core/Task.php new file mode 100644 index 0000000000..96a64e8a56 --- /dev/null +++ b/CRM/Core/Task.php @@ -0,0 +1,202 @@ + The Task title, + * 'class' => The Task Form class name, + * 'result => Boolean. FIXME: Not sure what this is for + * ] + */ + public static function tasks() { + CRM_Utils_Hook::searchTasks(self::$objectType, self::$_tasks); + asort(self::$_tasks); + + return self::$_tasks; + } + + /** + * These tasks are the core set of tasks that the user can perform + * on a contact / group of contacts + * + * @return array + * the set of tasks for a group of contacts + */ + public static function taskTitles() { + static::tasks(); + + $titles = array(); + foreach (self::$_tasks as $id => $value) { + $titles[$id] = $value['title']; + } + + if (!CRM_Utils_Mail::validOutBoundMail()) { + unset($titles[self::TASK_EMAIL]); + unset($titles[self::CREATE_MAILING]); + } + + // Users who do not have 'access deleted contacts' should NOT have the 'Delete Permanently' option in search result tasks + if (!CRM_Core_Permission::check('access deleted contacts') || + !CRM_Core_Permission::check('delete contacts') + ) { + unset($titles[self::DELETE_PERMANENTLY]); + } + return $titles; + } + + /** + * Show tasks selectively based on the permission level + * of the user + * This function should be call parent::corePermissionedTaskTitles + * + * @param int $permission + * @param array $params + * "ssID: Saved Search ID": If !empty we are in saved search context + * + * @return array + * set of tasks that are valid for the user + */ + abstract public static function permissionedTaskTitles($permission, $params); + + /** + * Show tasks selectively based on the permission level + * of the user + * This function should be called by permissionedTaskTitles in children + * + * @param array $tasks The array of tasks generated by permissionedTaskTitles + * @param int $permission + * @param array $params + * "ssID: Saved Search ID": If !empty we are in saved search context + * + * @return array + * set of tasks that are valid for the user + */ + public static function corePermissionedTaskTitles($tasks, $permission, $params) { + // Only offer the "Update Smart Group" task if a smart group/saved search is already in play and we have edit permissions + if (!empty($params['ssID']) && ($permission == CRM_Core_Permission::EDIT)) { + $tasks[self::SAVE_SEARCH_UPDATE] = self::$_tasks[self::SAVE_SEARCH_UPDATE]['title']; + } + else { + unset($tasks[self::SAVE_SEARCH_UPDATE]); + } + + asort($tasks); + return $tasks; + } + + /** + * These tasks are the core set of tasks that the user can perform + * on participants + * + * @param int $value + * + * @return array + * the set of tasks for a group of participants + */ + public static function getTask($value) { + static::tasks(); + + if (!CRM_Utils_Array::value($value, self::$_tasks)) { + // Children can specify a default task (eg. print), we don't here + return array(); + } + return array( + CRM_Utils_Array::value('class', self::$_tasks[$value]), + CRM_Utils_Array::value('result', self::$_tasks[$value]), + ); + } + + /** + * Function to return the task information on basis of provided task's form name + * + * @param string $className + * + * @return array [ 0 => Task ID, 1 => Task Title ] + */ + public static function getTaskAndTitleByClass($className) { + static::tasks(); + + foreach (self::$_tasks as $task => $value) { + if ((!empty($value['url']) || $task == self::TASK_EXPORT) + && ((is_array($value['class']) && in_array($className, $value['class'])) + || ($value['class'] == $className))) { + return array($task, CRM_Utils_Array::value('title', $value)); + } + } + return array(); + } + +} -- 2.25.1