From 1b1a901c68c56c4b151ee3374d4994624daf9e90 Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Tue, 2 Jul 2019 07:00:57 +0200 Subject: [PATCH] refactored contact search so export action also works --- .../DataProcessorContactSearch.php} | 2 +- .../DataProcessorContactSearch.php} | 6 +- .../Form/DataProcessorContactSearch.php} | 2 +- .../DataProcessorContactSearch.php | 2 +- .../Form/AbstractSearch.php | 9 +- .../StateMachine/ContactSearch.php | 92 ------------------- .../Utils/PrevNextCache.php | 2 +- Civi/DataProcessor/Factory.php | 2 +- .../Form/DataProcessorContactSearch.tpl} | 0 .../DataProcessorContactSearch.tpl} | 0 10 files changed, 15 insertions(+), 102 deletions(-) rename CRM/{DataprocessorSearch/Controller/ContactSearch.php => Contact/Controller/DataProcessorContactSearch.php} (96%) rename CRM/{DataprocessorSearch/ContactSearch.php => Contact/DataProcessorContactSearch.php} (96%) rename CRM/{DataprocessorSearch/Form/ContactSearch.php => Contact/Form/DataProcessorContactSearch.php} (96%) delete mode 100644 CRM/DataprocessorSearch/StateMachine/ContactSearch.php rename templates/CRM/{DataprocessorSearch/Form/ContactSearch.tpl => Contact/Form/DataProcessorContactSearch.tpl} (100%) rename templates/CRM/{DataprocessorSearch/Form/OutputConfiguration/ContactSearch.tpl => Contact/Form/OutputConfiguration/DataProcessorContactSearch.tpl} (100%) diff --git a/CRM/DataprocessorSearch/Controller/ContactSearch.php b/CRM/Contact/Controller/DataProcessorContactSearch.php similarity index 96% rename from CRM/DataprocessorSearch/Controller/ContactSearch.php rename to CRM/Contact/Controller/DataProcessorContactSearch.php index 15095c80..9c66193c 100644 --- a/CRM/DataprocessorSearch/Controller/ContactSearch.php +++ b/CRM/Contact/Controller/DataProcessorContactSearch.php @@ -14,7 +14,7 @@ * * The second form is used to process search results with the associated actions. */ -class CRM_DataprocessorSearch_Controller_ContactSearch extends CRM_Core_Controller { +class CRM_Contact_Controller_DataProcessorContactSearch extends CRM_Core_Controller { protected $dataProcessor; diff --git a/CRM/DataprocessorSearch/ContactSearch.php b/CRM/Contact/DataProcessorContactSearch.php similarity index 96% rename from CRM/DataprocessorSearch/ContactSearch.php rename to CRM/Contact/DataProcessorContactSearch.php index 7e34a5da..b5dd908b 100644 --- a/CRM/DataprocessorSearch/ContactSearch.php +++ b/CRM/Contact/DataProcessorContactSearch.php @@ -7,7 +7,7 @@ use Civi\DataProcessor\Output\UIOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorSearch_ContactSearch implements UIOutputInterface { +class CRM_Contact_DataProcessorContactSearch implements UIOutputInterface { /** * Returns true when this filter has additional configuration @@ -98,7 +98,7 @@ class CRM_DataprocessorSearch_ContactSearch implements UIOutputInterface { * @return false|string */ public function getConfigurationTemplateFileName() { - return "CRM/DataprocessorSearch/Form/OutputConfiguration/ContactSearch.tpl"; + return "CRM/Contact/Form/OutputConfiguration/DataProcessorContactSearch.tpl"; } @@ -158,7 +158,7 @@ class CRM_DataprocessorSearch_ContactSearch implements UIOutputInterface { * @return string */ public function getCallbackForUi() { - return 'CRM_DataprocessorSearch_Controller_ContactSearch'; + return 'CRM_Contact_Controller_DataProcessorContactSearch'; } /** diff --git a/CRM/DataprocessorSearch/Form/ContactSearch.php b/CRM/Contact/Form/DataProcessorContactSearch.php similarity index 96% rename from CRM/DataprocessorSearch/Form/ContactSearch.php rename to CRM/Contact/Form/DataProcessorContactSearch.php index 21cb622b..1bd01d49 100644 --- a/CRM/DataprocessorSearch/Form/ContactSearch.php +++ b/CRM/Contact/Form/DataProcessorContactSearch.php @@ -6,7 +6,7 @@ use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorSearch_Form_ContactSearch extends CRM_DataprocessorSearch_Form_AbstractSearch { +class CRM_Contact_Form_DataProcessorContactSearch extends CRM_DataprocessorSearch_Form_AbstractSearch { /** diff --git a/CRM/Contact/StateMachine/DataProcessorContactSearch.php b/CRM/Contact/StateMachine/DataProcessorContactSearch.php index 8aac209b..bc1b6794 100644 --- a/CRM/Contact/StateMachine/DataProcessorContactSearch.php +++ b/CRM/Contact/StateMachine/DataProcessorContactSearch.php @@ -24,7 +24,7 @@ class CRM_Contact_StateMachine_DataProcessorContactSearch extends CRM_Core_State $this->_pages = array(); $this->_pages['Basic'] = array( - 'className' => 'CRM_DataprocessorSearch_Form_ContactSearch', + 'className' => 'CRM_Contact_Form_DataProcessorContactSearch', ); list($task, $result) = $this->taskName($controller); $this->_task = $task; diff --git a/CRM/DataprocessorSearch/Form/AbstractSearch.php b/CRM/DataprocessorSearch/Form/AbstractSearch.php index efbf0139..d9b78440 100644 --- a/CRM/DataprocessorSearch/Form/AbstractSearch.php +++ b/CRM/DataprocessorSearch/Form/AbstractSearch.php @@ -355,16 +355,21 @@ abstract class CRM_DataprocessorSearch_Form_AbstractSearch extends CRM_Dataproce $this->buildCriteriaForm(); - $selectedIds = array(); + $selectedIds = []; $qfKeyParam = CRM_Utils_Array::value('qfKey', $this->_formValues); + if (empty($qfKeyParam) && $this->controller->_key) { + $qfKeyParam = $this->controller->_key; + } // We use ajax to handle selections only if the search results component_mode is set to "contacts" - if ($qfKeyParam && $this->usePrevNextCache()) { + if ($this->usePrevNextCache()) { $this->addClass('crm-ajax-selection-form'); + if ($qfKeyParam) { $qfKeyParam = "civicrm search {$qfKeyParam}"; $selectedIdsArr = CRM_DataprocessorSearch_Utils_PrevNextCache::getSelection($qfKeyParam); if (isset($selectedIdsArr[$qfKeyParam]) && is_array($selectedIdsArr[$qfKeyParam])) { $selectedIds = array_keys($selectedIdsArr[$qfKeyParam]); } + } } $this->assign_by_ref('selectedIds', $selectedIds); diff --git a/CRM/DataprocessorSearch/StateMachine/ContactSearch.php b/CRM/DataprocessorSearch/StateMachine/ContactSearch.php deleted file mode 100644 index 4b7d7127..00000000 --- a/CRM/DataprocessorSearch/StateMachine/ContactSearch.php +++ /dev/null @@ -1,92 +0,0 @@ -<?php -/** - * @author Jaap Jansma <jaap.jansma@civicoop.org> - * @license AGPL-3.0 - */ - -class CRM_DataprocessorSearch_StateMachine_ContactSearch extends CRM_Core_StateMachine { - - /** - * The task that the wizard is currently processing - * - * @var string - */ - protected $_task; - - /** - * Class constructor. - * - * @param object $controller - * @param \const|int $action - */ - public function __construct($controller, $action = CRM_Core_Action::NONE) { - parent::__construct($controller, $action); - - $this->_pages = array(); - $this->_pages['Basic'] = array( - 'className' => 'CRM_DataprocessorSearch_Form_ContactSearch', - ); - list($task, $result) = $this->taskName($controller); - $this->_task = $task; - if (is_array($task)) { - foreach ($task as $t) { - $this->_pages[$t] = NULL; - } - } - else { - $this->_pages[$task] = NULL; - } - - if ($result) { - $this->_pages['CRM_Contact_Form_Task_Result'] = NULL; - } - - $this->addSequentialPages($this->_pages, $action); - } - - /** - * Determine the form name based on the action. This allows us - * to avoid using conditional state machine, much more efficient - * and simpler - * - * @param CRM_Core_Controller $controller - * The controller object. - * - * @return array - * the name of the form that will handle the task - */ - public function taskName($controller) { - // total hack, check POST vars and then session to determine stuff - $value = CRM_Utils_Array::value('task', $_POST); - if (!isset($value)) { - $value = $controller->get('task'); - } - $this->_controller->set('task', $value); - - return CRM_Contact_Task::getTask($value); - } - - /** - * Return the form name of the task. - * - * @return string - */ - public function getTaskFormName() { - if (is_array($this->_task)) { - // return first page - return CRM_Utils_String::getClassName($this->_task[0]); - } - else { - return CRM_Utils_String::getClassName($this->_task); - } - } - - /** - * Since this is a state machine for search and we want to come back to the same state - * we dont want to issue a reset of the state session when we are done processing a task - */ - public function shouldReset() { - return FALSE; - } - -} diff --git a/CRM/DataprocessorSearch/Utils/PrevNextCache.php b/CRM/DataprocessorSearch/Utils/PrevNextCache.php index 5cf0bee4..2c27335b 100644 --- a/CRM/DataprocessorSearch/Utils/PrevNextCache.php +++ b/CRM/DataprocessorSearch/Utils/PrevNextCache.php @@ -75,7 +75,7 @@ class CRM_DataprocessorSearch_Utils_PrevNextCache { */ public function getSelection($cacheKey, $action = 'get') { if (Civi::container()->has('prevnext')) { - Civi::service('prevnext')->getSelection($cacheKey, $action); + return Civi::service('prevnext')->getSelection($cacheKey, $action); } else { // Backwards compatibility if (!$cacheKey) { diff --git a/Civi/DataProcessor/Factory.php b/Civi/DataProcessor/Factory.php index e60f1cc7..b6759357 100644 --- a/Civi/DataProcessor/Factory.php +++ b/Civi/DataProcessor/Factory.php @@ -119,7 +119,7 @@ class Factory { $this->addDataSource('membership_status', 'Civi\DataProcessor\Source\Member\MembershipStatusSource', E::ts('Membership Status')); $this->addDataSource('csv', 'Civi\DataProcessor\Source\CSV', E::ts('CSV File')); $this->addOutput('api', 'Civi\DataProcessor\Output\Api', E::ts('API')); - $this->addOutput('contact_search', 'CRM_DataprocessorSearch_ContactSearch', E::ts('Contact Search')); + $this->addOutput('contact_search', 'CRM_Contact_DataProcessorContactSearch', E::ts('Contact Search')); $this->addOutput('activity_search', 'CRM_DataprocessorSearch_ActivitySearch', E::ts('Activity Search')); $this->addOutput('case_search', 'CRM_DataprocessorSearch_CaseSearch', E::ts('Case Search')); $this->addOutput('participant_search', 'CRM_DataprocessorSearch_ParticipantSearch', E::ts('Participant Search')); diff --git a/templates/CRM/DataprocessorSearch/Form/ContactSearch.tpl b/templates/CRM/Contact/Form/DataProcessorContactSearch.tpl similarity index 100% rename from templates/CRM/DataprocessorSearch/Form/ContactSearch.tpl rename to templates/CRM/Contact/Form/DataProcessorContactSearch.tpl diff --git a/templates/CRM/DataprocessorSearch/Form/OutputConfiguration/ContactSearch.tpl b/templates/CRM/Contact/Form/OutputConfiguration/DataProcessorContactSearch.tpl similarity index 100% rename from templates/CRM/DataprocessorSearch/Form/OutputConfiguration/ContactSearch.tpl rename to templates/CRM/Contact/Form/OutputConfiguration/DataProcessorContactSearch.tpl -- GitLab