From 061ff68c86f31e336f8ad878b3414219ed9c9745 Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Tue, 6 Jun 2017 13:02:02 +0530 Subject: [PATCH] CRM-20684: Standalone form for contact bulk actions --- CRM/Contact/Form/Task.php | 18 ++++++++++--- CRM/Contact/Task.php | 35 ++++++++++++++++++++++++ CRM/Core/xml/Menu/Misc.xml | 55 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 3 deletions(-) diff --git a/CRM/Contact/Form/Task.php b/CRM/Contact/Form/Task.php index aad58495f50a..c27f8480f64a 100644 --- a/CRM/Contact/Form/Task.php +++ b/CRM/Contact/Form/Task.php @@ -97,10 +97,22 @@ public function preProcess() { * @param bool $useTable */ public static function preProcessCommon(&$form, $useTable = FALSE) { - $form->_contactIds = array(); $form->_contactTypes = array(); + $isStandAlone = (in_array('task', $form->urlPath)); + if ($isStandAlone) { + list($form->_task, $title) = CRM_Contact_Task::getTaskAndTitleByClass(get_class($form)); + if (!array_key_exists($form->_task, CRM_Contact_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission()))) { + CRM_Core_Error::fatal(ts('You do not have enough permission to do this task.')); + } + $form->_contactIds = explode(',', CRM_Utils_Request::retrieve('cids', 'String', $form, TRUE)); + if (empty($form->_contactIds)) { + CRM_Core_Error::statusBounce(ts("You did't selected any contact to perform this task.")); + } + $form->setTitle($title); + } + // get the submitted values of the search form // we'll need to get fv from either search or adv search in the future $fragment = 'search'; @@ -116,7 +128,7 @@ public static function preProcessCommon(&$form, $useTable = FALSE) { self::$_searchFormValues = $form->controller->exportValues('Custom'); $fragment .= '/custom'; } - else { + elseif (!$isStandAlone) { self::$_searchFormValues = $form->controller->exportValues('Basic'); } @@ -183,7 +195,7 @@ public static function preProcessCommon(&$form, $useTable = FALSE) { CRM_Core_DAO::executeQuery($sql); } } - else { + elseif (empty($form->_contactIds)) { // filter duplicates here // CRM-7058 // might be better to do this in the query, but that logic is a bit complex diff --git a/CRM/Contact/Task.php b/CRM/Contact/Task.php index fb77c32949a7..503c511e994d 100644 --- a/CRM/Contact/Task.php +++ b/CRM/Contact/Task.php @@ -83,18 +83,22 @@ public static function initTasks() { self::GROUP_CONTACTS => array( 'title' => ts('Group - add contacts'), 'class' => 'CRM_Contact_Form_Task_AddToGroup', + 'url' => 'civicrm/task/add-to-group', ), self::REMOVE_CONTACTS => array( 'title' => ts('Group - remove contacts'), 'class' => 'CRM_Contact_Form_Task_RemoveFromGroup', + 'url' => 'civicrm/task/remove-from-group', ), self::TAG_CONTACTS => array( 'title' => ts('Tag - add to contacts'), 'class' => 'CRM_Contact_Form_Task_AddToTag', + 'url' => 'civicrm/task/add-to-tag', ), self::REMOVE_TAGS => array( 'title' => ts('Tag - remove from contacts'), 'class' => 'CRM_Contact_Form_Task_RemoveFromTag', + 'url' => 'civicrm/task/remove-from-tag', ), self::EXPORT_CONTACTS => array( 'title' => ts('Export contacts'), @@ -108,11 +112,13 @@ public static function initTasks() { 'title' => ts('Email - send now (to 50 or less)'), 'class' => 'CRM_Contact_Form_Task_Email', 'result' => TRUE, + 'url' => 'civicrm/task/send-email', ), self::DELETE_CONTACTS => array( 'title' => ts('Delete contacts'), 'class' => 'CRM_Contact_Form_Task_Delete', 'result' => FALSE, + 'url' => 'civicrm/task/delete-contact', ), self::RECORD_CONTACTS => array( 'title' => ts('Add activity'), @@ -137,6 +143,7 @@ public static function initTasks() { 'title' => ts('Mailing labels - print'), 'class' => 'CRM_Contact_Form_Task_Label', 'result' => TRUE, + 'url' => 'civicrm/task/make-mailing-label', ), self::BATCH_UPDATE => array( 'title' => ts('Update multiple contacts'), @@ -145,19 +152,23 @@ public static function initTasks() { 'CRM_Contact_Form_Task_Batch', ), 'result' => TRUE, + 'url' => 'civicrm/task/pick-profile', ), self::PRINT_FOR_CONTACTS => array( 'title' => ts('Print/merge document'), 'class' => 'CRM_Contact_Form_Task_PDF', 'result' => TRUE, + 'url' => 'civicrm/task/print-document', ), self::EMAIL_UNHOLD => array( 'title' => ts('Email - unhold addresses'), 'class' => 'CRM_Contact_Form_Task_Unhold', + 'url' => 'civicrm/task/unhold-email', ), self::COMMUNICATION_PREFS => array( 'title' => ts('Communication preferences - alter'), 'class' => 'CRM_Contact_Form_Task_AlterPreferences', + 'url' => 'civicrm/task/alter-contact-preference', ), self::RESTORE => array( 'title' => ts('Restore contacts from trash'), @@ -376,4 +387,28 @@ public static function getTask($value) { ); } + /** + * Function to return the task information on basis of provided task's form name + * + * @param string $className + * + * @return array + */ + public static function getTaskAndTitleByClass($className) { + self::initTasks(); + + foreach (self::$_tasks as $task => $value) { + if (!empty($value['url']) && ( + (is_array($value['class']) && in_array($className, $value['class'])) || + ($value['class'] == $className) + ) + ) { + return array( + $task, + CRM_Utils_Array::value('title', $value), + ); + } + } + } + } diff --git a/CRM/Core/xml/Menu/Misc.xml b/CRM/Core/xml/Menu/Misc.xml index ca7f72ca4416..14195441b5ae 100644 --- a/CRM/Core/xml/Menu/Misc.xml +++ b/CRM/Core/xml/Menu/Misc.xml @@ -207,4 +207,59 @@ access CiviCRM Insert CiviCRM Content + + civicrm/task/add-to-group + CRM_Contact_Form_Task_AddToGroup + access CiviCRM + + + civicrm/task/remove-from-group + CRM_Contact_Form_Task_RemoveFromGroup + access CiviCRM + + + civicrm/task/add-to-tag + CRM_Contact_Form_Task_AddToTag + access CiviCRM + + + civicrm/task/remove-from-tag + CRM_Contact_Form_Task_RemoveFromTag + access CiviCRM + + + civicrm/task/send-email + CRM_Contact_Form_Task_Email + access CiviCRM + + + civicrm/task/make-mailing-label + CRM_Contact_Form_Task_Label + access CiviCRM + + + civicrm/task/pick-profile + CRM_Contact_Form_Task_PickProfile + access CiviCRM + + + civicrm/task/print-document + CRM_Contact_Form_Task_PDF + access CiviCRM + + + civicrm/task/unhold-email + CRM_Contact_Form_Task_Unhold + access CiviCRM + + + civicrm/task/alter-contact-preference + CRM_Contact_Form_Task_AlterPreferences + access CiviCRM + + + civicrm/task/delete-contact + CRM_Contact_Form_Task_Delete + access CiviCRM +