From 0bd7975f581a86cdc8d079ed50f1be6cf1b7d74d Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Tue, 2 Apr 2019 14:26:49 +0200 Subject: [PATCH] required filters and import functionality --- CRM/Dataprocessor/Form/Import.php | 41 ++++++++++++++++++ .../Form/AbstractSearch.php | 43 ++++++++++++------- .../CRM/Dataprocessor/Form/DataProcessor.tpl | 2 +- templates/CRM/Dataprocessor/Form/Import.tpl | 12 ++++++ .../Form/Search/DataProcessorCriteria.tpl | 8 ++++ xml/Menu/dataprocessor.xml | 7 +++ 6 files changed, 97 insertions(+), 16 deletions(-) create mode 100644 CRM/Dataprocessor/Form/Import.php create mode 100644 templates/CRM/Dataprocessor/Form/Import.tpl diff --git a/CRM/Dataprocessor/Form/Import.php b/CRM/Dataprocessor/Form/Import.php new file mode 100644 index 00000000..039c4d50 --- /dev/null +++ b/CRM/Dataprocessor/Form/Import.php @@ -0,0 +1,41 @@ +<?php + +use CRM_Dataprocessor_ExtensionUtil as E; + +/** + * @author Jaap Jansma <jaap.jansma@civicoop.org> + * @license AGPL-3.0 + */ + +class CRM_Dataprocessor_Form_Import extends CRM_Core_Form { + + /** + * Function to perform processing before displaying form (overrides parent function) + * + * @access public + */ + function preProcess() { + parent::preProcess(); + } + + public function buildQuickForm() { + $this->add('textarea', 'code', E::ts('Import code'), 'rows=30 style="width:100%"', true); + $this->addButtons(array( + array('type' => 'next', 'name' => E::ts('Import'), 'isDefault' => TRUE,), + array('type' => 'cancel', 'name' => E::ts('Cancel')) + )); + } + + public function postProcess() { + $values = $this->exportValues(); + $importCode = json_decode($values['code'], true); + $importResult = CRM_Dataprocessor_Utils_Importer::import($importCode, ''); + + CRM_Core_Session::setStatus(E::ts('Imported data processor'), '', 'success'); + + $redirectUrl = CRM_Utils_System::url('civicrm/dataprocessor/form/edit', array('reset' => 1, 'action' => 'update', 'id' => $importResult['new_id'])); + CRM_Utils_System::redirect($redirectUrl); + } + + +} \ No newline at end of file diff --git a/CRM/DataprocessorSearch/Form/AbstractSearch.php b/CRM/DataprocessorSearch/Form/AbstractSearch.php index b4bac817..cf31e54a 100644 --- a/CRM/DataprocessorSearch/Form/AbstractSearch.php +++ b/CRM/DataprocessorSearch/Form/AbstractSearch.php @@ -48,11 +48,6 @@ abstract class CRM_DataprocessorSearch_Form_AbstractSearch extends CRM_Core_Form */ protected $sort; - /** - * @var bool - */ - protected $formHasRequiredFilters = FALSE; - /** * Checks whether the output has a valid configuration * @@ -147,6 +142,13 @@ abstract class CRM_DataprocessorSearch_Form_AbstractSearch extends CRM_Core_Form public function preProcess() { parent::preProcess(); + if (!empty($_POST) && !$this->controller->isModal()) { + $this->_formValues = $this->controller->exportValues($this->_name); + } + else { + $this->_formValues = $this->getSubmitValues(); + } + $this->findDataProcessor(); $this->_searchButtonName = $this->getButtonName('refresh'); @@ -162,13 +164,8 @@ abstract class CRM_DataprocessorSearch_Form_AbstractSearch extends CRM_Core_Form $this->set('context', $this->_context); $this->assign("context", $this->_context); $this->assign('debug', $this->_debug); - if (!empty($_POST) && !$this->controller->isModal()) { - $this->_formValues = $this->controller->exportValues($this->_name); - } - else { - $this->_formValues = $this->get('formValues'); - } - if (!$this->formHasRequiredFilters || !empty($this->_formValues)) { + + if (!$this->hasRequiredFilters() || !empty($this->_formValues)) { $limit = CRM_Utils_Request::retrieve('crmRowCount', 'Positive', $this, FALSE, CRM_Utils_Pager::ROWCOUNT); $pageId = CRM_Utils_Request::retrieve('crmPID', 'Positive', $this, FALSE, 1); @@ -328,6 +325,22 @@ abstract class CRM_DataprocessorSearch_Form_AbstractSearch extends CRM_Core_Form return FALSE; } + /** + * Returns whether the search has required filters. + * + * @return bool + */ + protected function hasRequiredFilters() { + if ($this->dataProcessor->getFilterHandlers()) { + foreach ($this->dataProcessor->getFilterHandlers() as $filter) { + if ($filter->isRequired()) { + return true; + } + } + } + return false; + } + protected function setFilters() { if ($this->dataProcessor->getFilterHandlers()) { foreach ($this->dataProcessor->getFilterHandlers() as $filter) { @@ -476,6 +489,9 @@ abstract class CRM_DataprocessorSearch_Form_AbstractSearch extends CRM_Core_Form continue; } $filter['title'] = $fieldSpec->title; + if ($filterHandler->isRequired()) { + $filter['title'] .= ' <span class="crm-marker">*</span>'; + } $filter['type'] = $fieldSpec->type; $operations = $this->getOperatorOptions($fieldSpec); if ($fieldSpec->getOptions()) { @@ -509,9 +525,6 @@ abstract class CRM_DataprocessorSearch_Form_AbstractSearch extends CRM_Core_Form break; } } - if ($filterHandler->isRequired()) { - $this->formHasRequiredFilters = TRUE; - } $filterElements[$fieldSpec->alias] = $filter; } $this->assign('filters', $filterElements); diff --git a/templates/CRM/Dataprocessor/Form/DataProcessor.tpl b/templates/CRM/Dataprocessor/Form/DataProcessor.tpl index 4d72c2c1..783e46ba 100644 --- a/templates/CRM/Dataprocessor/Form/DataProcessor.tpl +++ b/templates/CRM/Dataprocessor/Form/DataProcessor.tpl @@ -14,7 +14,7 @@ <h3>{ts}Export Data Processor{/ts}</h3> <div class="crm-block crm-form-block crm-data-processor_label-block"> <div class="crm-section"> - <pre>{$export}</pre> + <textarea style="width:100%;">{$export}</textarea> </div> </div> {else} diff --git a/templates/CRM/Dataprocessor/Form/Import.tpl b/templates/CRM/Dataprocessor/Form/Import.tpl new file mode 100644 index 00000000..19bd5d42 --- /dev/null +++ b/templates/CRM/Dataprocessor/Form/Import.tpl @@ -0,0 +1,12 @@ +{crmScope extensionKey='dataprocessor'} + {* block for rule data *} + <h3>{ts}Import data processor{/ts}</h3> + <div class="crm-block crm-form-block crm-data-processor_source-block"> + <h3>{ts}Code{/ts}</h3> + {$form.code.html} + </div> + + <div class="crm-submit-buttons"> + {include file="CRM/common/formButtons.tpl" location="bottom"} + </div> +{/crmScope} \ No newline at end of file diff --git a/templates/CRM/Dataprocessor/Form/Search/DataProcessorCriteria.tpl b/templates/CRM/Dataprocessor/Form/Search/DataProcessorCriteria.tpl index 3d49a76a..ab15a2e2 100644 --- a/templates/CRM/Dataprocessor/Form/Search/DataProcessorCriteria.tpl +++ b/templates/CRM/Dataprocessor/Form/Search/DataProcessorCriteria.tpl @@ -50,6 +50,14 @@ </div><!- /.crm-accordion-body --> </div><!-- /.crm-accordion-wrapper --> </div><!-- /.crm-form-block --> + + <br /> + <div class="crm-block"> + <div class="action-link"> + <a class="button" href="{crmURL p="civicrm/dataprocessor/form/edit" q="reset=1&action=add" }">{ts}Add dataprocessor{/ts}</a> + <a class="button" href="{crmURL p="civicrm/dataprocessor/form/import" q="reset=1&action=add" }">{ts}Import data processor{/ts}</a> + </div> + </div> {/strip} {/crmScope} diff --git a/xml/Menu/dataprocessor.xml b/xml/Menu/dataprocessor.xml index 8fc48933..a99d0c1a 100644 --- a/xml/Menu/dataprocessor.xml +++ b/xml/Menu/dataprocessor.xml @@ -7,6 +7,13 @@ <access_arguments>access CiviCRM</access_arguments> <access_arguments>administer CiviCRM</access_arguments> </item> + <item> + <path>civicrm/dataprocessor/form/import</path> + <page_callback>CRM_Dataprocessor_Form_Import</page_callback> + <title>Import DataProcessor</title> + <access_arguments>access CiviCRM</access_arguments> + <access_arguments>administer CiviCRM</access_arguments> + </item> <item> <path>civicrm/dataprocessor/form/source</path> <page_callback>CRM_Dataprocessor_Form_Source</page_callback> -- GitLab