From a0d6fe951ba769e724253952c7c1f30b0cc45a95 Mon Sep 17 00:00:00 2001 From: Jaap Jansma <jaap.jansma@civicoop.org> Date: Wed, 12 Feb 2020 17:13:11 +0100 Subject: [PATCH] Fixed broken dashlet --- CHANGELOG.md | 4 ++ CRM/Contact/DataProcessorContactSearch.php | 4 +- .../DataProcessorContactSummaryTab.php | 8 +-- CRM/Dataprocessor/Form/DataProcessor.php | 2 +- .../Form/ManageDataProcessors.php | 2 +- .../Form/Output/AbstractUIOutputForm.php | 3 +- CRM/DataprocessorDashlet/Dashlet.php | 15 +++++- CRM/DataprocessorSearch/ActivitySearch.php | 4 +- CRM/DataprocessorSearch/CaseSearch.php | 4 +- .../ContributionSearch.php | 4 +- CRM/DataprocessorSearch/MembershipSearch.php | 4 +- CRM/DataprocessorSearch/ParticipantSearch.php | 4 +- CRM/DataprocessorSearch/Search.php | 4 +- .../Output/ExportOutputInterface.php | 2 +- .../Output/UIFormOutputInterface.php | 52 +++++++++++++++++++ Civi/DataProcessor/Output/UIOutputHelper.php | 10 ++-- .../Output/UIOutputInterface.php | 36 +------------ info.xml | 2 +- 18 files changed, 100 insertions(+), 64 deletions(-) create mode 100644 Civi/DataProcessor/Output/UIFormOutputInterface.php diff --git a/CHANGELOG.md b/CHANGELOG.md index c4272081..381a5bfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# Version 1.3.0 (not yet released) + + + # Version 1.2.0 * Made CSV Export download available for anonymous users. diff --git a/CRM/Contact/DataProcessorContactSearch.php b/CRM/Contact/DataProcessorContactSearch.php index 522d22d6..51375a50 100644 --- a/CRM/Contact/DataProcessorContactSearch.php +++ b/CRM/Contact/DataProcessorContactSearch.php @@ -4,10 +4,10 @@ * @license AGPL-3.0 */ -use Civi\DataProcessor\Output\UIOutputInterface; +use Civi\DataProcessor\Output\UIFormOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_Contact_DataProcessorContactSearch implements UIOutputInterface { +class CRM_Contact_DataProcessorContactSearch implements UIFormOutputInterface { /** * Returns true when this filter has additional configuration diff --git a/CRM/Contact/DataProcessorContactSummaryTab.php b/CRM/Contact/DataProcessorContactSummaryTab.php index 19cc6dd5..f0b5a5e2 100644 --- a/CRM/Contact/DataProcessorContactSummaryTab.php +++ b/CRM/Contact/DataProcessorContactSummaryTab.php @@ -5,9 +5,9 @@ */ use CRM_Dataprocessor_ExtensionUtil as E; -use Civi\DataProcessor\Output\UIOutputInterface; +use Civi\DataProcessor\Output\UIFormOutputInterface; -class CRM_Contact_DataProcessorContactSummaryTab implements UIOutputInterface { +class CRM_Contact_DataProcessorContactSummaryTab implements UIFormOutputInterface { /** * Implements hook_civicrm_tabset(). @@ -42,13 +42,13 @@ class CRM_Contact_DataProcessorContactSummaryTab implements UIOutputInterface { $maxWeight++; $sql = "SELECT o.*, d.name as data_processor_name - FROM civicrm_data_processor d + FROM civicrm_data_processor d INNER JOIN civicrm_data_processor_output o ON d.id = o.data_processor_id WHERE d.is_active = 1 AND o.type = 'contact_summary_tab'"; $dao = CRM_Core_DAO::executeQuery($sql); while($dao->fetch()) { $outputClass = $factory->getOutputByName($dao->type); - if (!$outputClass instanceof \Civi\DataProcessor\Output\UIOutputInterface) { + if (!$outputClass instanceof CRM_Contact_DataProcessorContactSummaryTab) { continue; } $output = civicrm_api3('DataProcessorOutput', 'getsingle', ['id' => $dao->id]); diff --git a/CRM/Dataprocessor/Form/DataProcessor.php b/CRM/Dataprocessor/Form/DataProcessor.php index 32504fac..c95fceaa 100644 --- a/CRM/Dataprocessor/Form/DataProcessor.php +++ b/CRM/Dataprocessor/Form/DataProcessor.php @@ -123,7 +123,7 @@ class CRM_Dataprocessor_Form_DataProcessor extends CRM_Core_Form { $outputs = CRM_Utils_Array::value('values', $outputs); foreach($outputs as $idx => $output) { $outputClass = $factory->getOutputByName($output['type']); - if ($outputClass instanceof \Civi\DataProcessor\Output\UIOutputInterface) { + if ($outputClass instanceof \Civi\DataProcessor\Output\UIFormOutputInterface) { $outputs[$idx]['navigation_url'] = CRM_Utils_System::url($outputClass->getUrlToUi($output, $this->dataProcessor), array('reset' => '1')); } elseif ($outputClass instanceof \Civi\DataProcessor\Output\UrlOutputInterface && $outputClass->checkPermission($output, $this->dataProcessor)) { $outputs[$idx]['navigation_url'] = $outputClass->getUrl($output, $this->dataProcessor); diff --git a/CRM/Dataprocessor/Form/ManageDataProcessors.php b/CRM/Dataprocessor/Form/ManageDataProcessors.php index 67dfca7a..2784c30c 100644 --- a/CRM/Dataprocessor/Form/ManageDataProcessors.php +++ b/CRM/Dataprocessor/Form/ManageDataProcessors.php @@ -38,7 +38,7 @@ class CRM_Dataprocessor_Form_ManageDataProcessors extends CRM_Core_Form { $outputs = civicrm_api3('DataProcessorOutput', 'get',['data_processor_id' => $dataProcessor['id'], 'options' => ['limit' => 0]]); foreach(CRM_Utils_Array::value('values', $outputs) as $outputIndex => $output) { $outputClass = $factory->getOutputByName($output['type']); - if ($outputClass instanceof \Civi\DataProcessor\Output\UIOutputInterface) { + if ($outputClass instanceof \Civi\DataProcessor\Output\UIFormOutputInterface) { $dataProcessors[$idx]['navigation'][$outputIndex]['url'] = CRM_Utils_System::url($outputClass->getUrlToUi($output, $dataProcessor), array('reset' => '1')); $dataProcessors[$idx]['navigation'][$outputIndex]['title'] = $outputClass->getTitleForUiLink($output, $dataProcessor); } elseif ($outputClass instanceof \Civi\DataProcessor\Output\UrlOutputInterface && $outputClass->checkPermission($output, $dataProcessor)) { diff --git a/CRM/Dataprocessor/Form/Output/AbstractUIOutputForm.php b/CRM/Dataprocessor/Form/Output/AbstractUIOutputForm.php index bea25b7f..24d555d5 100644 --- a/CRM/Dataprocessor/Form/Output/AbstractUIOutputForm.php +++ b/CRM/Dataprocessor/Form/Output/AbstractUIOutputForm.php @@ -4,6 +4,7 @@ * @license AGPL-3.0 */ +use Civi\DataProcessor\Output\UIOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; abstract class CRM_Dataprocessor_Form_Output_AbstractUIOutputForm extends CRM_Core_Form_Search { @@ -85,7 +86,7 @@ abstract class CRM_Dataprocessor_Form_Output_AbstractUIOutputForm extends CRM_Co $this->assign('output', $this->dataProcessorOutput); $outputClass = $factory->getOutputByName($this->dataProcessorOutput['type']); - if (!$outputClass instanceof \Civi\DataProcessor\Output\UIOutputInterface) { + if (!$outputClass instanceof UIOutputInterface) { throw new \Exception('Invalid output'); } diff --git a/CRM/DataprocessorDashlet/Dashlet.php b/CRM/DataprocessorDashlet/Dashlet.php index 8cb26270..682bb171 100644 --- a/CRM/DataprocessorDashlet/Dashlet.php +++ b/CRM/DataprocessorDashlet/Dashlet.php @@ -6,7 +6,7 @@ use \CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorDashlet_Dashlet implements Civi\DataProcessor\Output\OutputInterface { +class CRM_DataprocessorDashlet_Dashlet implements Civi\DataProcessor\Output\UIOutputInterface { /** * Returns true when this output has additional configuration @@ -152,5 +152,18 @@ class CRM_DataprocessorDashlet_Dashlet implements Civi\DataProcessor\Output\Outp } } + /** + * Checks whether the current user has access to this output + * + * @param array $output + * @param array $dataProcessor + * @return bool + */ + public function checkUIPermission($output, $dataProcessor) { + return CRM_Core_Permission::check(array( + $output['permission'] + )); + } + } diff --git a/CRM/DataprocessorSearch/ActivitySearch.php b/CRM/DataprocessorSearch/ActivitySearch.php index 4fb85ae3..e5616aaf 100644 --- a/CRM/DataprocessorSearch/ActivitySearch.php +++ b/CRM/DataprocessorSearch/ActivitySearch.php @@ -4,11 +4,11 @@ * @license AGPL-3.0 */ -use Civi\DataProcessor\Output\UIOutputInterface; +use Civi\DataProcessor\Output\UIFormOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorSearch_ActivitySearch implements UIOutputInterface { +class CRM_DataprocessorSearch_ActivitySearch implements UIFormOutputInterface { /** * Returns true when this filter has additional configuration diff --git a/CRM/DataprocessorSearch/CaseSearch.php b/CRM/DataprocessorSearch/CaseSearch.php index bc1652cb..23dc6fda 100644 --- a/CRM/DataprocessorSearch/CaseSearch.php +++ b/CRM/DataprocessorSearch/CaseSearch.php @@ -4,11 +4,11 @@ * @license AGPL-3.0 */ -use Civi\DataProcessor\Output\UIOutputInterface; +use Civi\DataProcessor\Output\UIFormOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorSearch_CaseSearch implements UIOutputInterface { +class CRM_DataprocessorSearch_CaseSearch implements UIFormOutputInterface { /** * Returns true when this filter has additional configuration diff --git a/CRM/DataprocessorSearch/ContributionSearch.php b/CRM/DataprocessorSearch/ContributionSearch.php index 1daf9fe3..8150e079 100644 --- a/CRM/DataprocessorSearch/ContributionSearch.php +++ b/CRM/DataprocessorSearch/ContributionSearch.php @@ -4,11 +4,11 @@ * @license AGPL-3.0 */ -use Civi\DataProcessor\Output\UIOutputInterface; +use Civi\DataProcessor\Output\UIFormOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorSearch_ContributionSearch implements UIOutputInterface { +class CRM_DataprocessorSearch_ContributionSearch implements UIFormOutputInterface { /** * Returns true when this filter has additional configuration diff --git a/CRM/DataprocessorSearch/MembershipSearch.php b/CRM/DataprocessorSearch/MembershipSearch.php index 1b319f82..35f05408 100644 --- a/CRM/DataprocessorSearch/MembershipSearch.php +++ b/CRM/DataprocessorSearch/MembershipSearch.php @@ -4,11 +4,11 @@ * @license AGPL-3.0 */ -use Civi\DataProcessor\Output\UIOutputInterface; +use Civi\DataProcessor\Output\UIFormOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorSearch_MembershipSearch implements UIOutputInterface { +class CRM_DataprocessorSearch_MembershipSearch implements UIFormOutputInterface { /** * Returns true when this filter has additional configuration diff --git a/CRM/DataprocessorSearch/ParticipantSearch.php b/CRM/DataprocessorSearch/ParticipantSearch.php index 621a3274..c9889b7a 100644 --- a/CRM/DataprocessorSearch/ParticipantSearch.php +++ b/CRM/DataprocessorSearch/ParticipantSearch.php @@ -4,11 +4,11 @@ * @license AGPL-3.0 */ -use Civi\DataProcessor\Output\UIOutputInterface; +use Civi\DataProcessor\Output\UIFormOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorSearch_ParticipantSearch implements UIOutputInterface { +class CRM_DataprocessorSearch_ParticipantSearch implements UIFormOutputInterface { /** * Returns true when this filter has additional configuration diff --git a/CRM/DataprocessorSearch/Search.php b/CRM/DataprocessorSearch/Search.php index d46c1b35..fd956dde 100644 --- a/CRM/DataprocessorSearch/Search.php +++ b/CRM/DataprocessorSearch/Search.php @@ -5,11 +5,11 @@ */ -use Civi\DataProcessor\Output\UIOutputInterface; +use Civi\DataProcessor\Output\UIFormOutputInterface; use CRM_Dataprocessor_ExtensionUtil as E; -class CRM_DataprocessorSearch_Search implements UIOutputInterface { +class CRM_DataprocessorSearch_Search implements UIFormOutputInterface { /** * Returns true when this filter has additional configuration diff --git a/Civi/DataProcessor/Output/ExportOutputInterface.php b/Civi/DataProcessor/Output/ExportOutputInterface.php index ec3c30c0..eab7d5d6 100644 --- a/Civi/DataProcessor/Output/ExportOutputInterface.php +++ b/Civi/DataProcessor/Output/ExportOutputInterface.php @@ -9,7 +9,7 @@ namespace Civi\DataProcessor\Output; /** * This interface indicates that the output type is accessible from the user interface * - * Interface UIOutputInterface + * Interface ExportOutputInterface * * @package Civi\DataProcessor\Output */ diff --git a/Civi/DataProcessor/Output/UIFormOutputInterface.php b/Civi/DataProcessor/Output/UIFormOutputInterface.php new file mode 100644 index 00000000..efb78244 --- /dev/null +++ b/Civi/DataProcessor/Output/UIFormOutputInterface.php @@ -0,0 +1,52 @@ +<?php +/** + * @author Jaap Jansma <jaap.jansma@civicoop.org> + * @license AGPL-3.0 + */ + +namespace Civi\DataProcessor\Output; + +/** + * This interface indicates that the output type is accessible from the user interface + * + * Interface UIOutputInterface + * + * @package Civi\DataProcessor\Output + */ +interface UIFormOutputInterface extends UIOutputInterface { + + /** + * Returns the url for the page/form this output will show to the user + * + * @param array $output + * @param array $dataProcessor + * @return string + */ + public function getUrlToUi($output, $dataProcessor); + + /** + * Returns the url for the page/form this output will show to the user + * + * @param array $output + * @param array $dataProcessor + * @return string + */ + public function getTitleForUiLink($output, $dataProcessor); + + /** + * Returns the url for the page/form this output will show to the user + * + * @param array $output + * @param array $dataProcessor + * @return string|false + */ + public function getIconForUiLink($output, $dataProcessor); + + /** + * Returns the callback for the UI. + * + * @return string + */ + public function getCallbackForUi(); + +} diff --git a/Civi/DataProcessor/Output/UIOutputHelper.php b/Civi/DataProcessor/Output/UIOutputHelper.php index 9b98dcd6..836baf6b 100644 --- a/Civi/DataProcessor/Output/UIOutputHelper.php +++ b/Civi/DataProcessor/Output/UIOutputHelper.php @@ -32,14 +32,14 @@ class UIOutputHelper { } $sql = " - SELECT o.permission, p.id, p.title, o.configuration, o.type, o.id as output_id - FROM civicrm_data_processor_output o - INNER JOIN civicrm_data_processor p ON o.data_processor_id = p.id + SELECT o.permission, p.id, p.title, o.configuration, o.type, o.id as output_id + FROM civicrm_data_processor_output o + INNER JOIN civicrm_data_processor p ON o.data_processor_id = p.id WHERE p.is_active = 1"; $dao = \CRM_Core_DAO::executeQuery($sql); while ($dao->fetch()) { $outputClass = $factory->getOutputByName($dao->type); - if ($outputClass instanceof \Civi\DataProcessor\Output\UIOutputInterface) { + if ($outputClass instanceof \Civi\DataProcessor\Output\UIFormOutputInterface) { $output = civicrm_api3('DataProcessorOutput', 'getsingle', array('id' => $dao->output_id)); $dataprocessor = civicrm_api3('DataProcessor', 'getsingle', array('id' => $dao->id)); $url = $outputClass->getUrlToUi($output, $dataprocessor); @@ -191,7 +191,7 @@ class UIOutputHelper { $configuration = $output['configuration']; $title = $dataProcessor['title']; - if ($outputClass && $outputClass instanceof \Civi\DataProcessor\Output\UIOutputInterface) { + if ($outputClass && $outputClass instanceof \Civi\DataProcessor\Output\UIFormOutputInterface) { $url = $outputClass->getUrlToUi($output, $dataProcessor); $title = $outputClass->getTitleForUiLink($output, $dataProcessor); } diff --git a/Civi/DataProcessor/Output/UIOutputInterface.php b/Civi/DataProcessor/Output/UIOutputInterface.php index a356469f..d9689f1a 100644 --- a/Civi/DataProcessor/Output/UIOutputInterface.php +++ b/Civi/DataProcessor/Output/UIOutputInterface.php @@ -15,40 +15,6 @@ namespace Civi\DataProcessor\Output; */ interface UIOutputInterface extends OutputInterface { - /** - * Returns the url for the page/form this output will show to the user - * - * @param array $output - * @param array $dataProcessor - * @return string - */ - public function getUrlToUi($output, $dataProcessor); - - /** - * Returns the url for the page/form this output will show to the user - * - * @param array $output - * @param array $dataProcessor - * @return string - */ - public function getTitleForUiLink($output, $dataProcessor); - - /** - * Returns the url for the page/form this output will show to the user - * - * @param array $output - * @param array $dataProcessor - * @return string|false - */ - public function getIconForUiLink($output, $dataProcessor); - - /** - * Returns the callback for the UI. - * - * @return string - */ - public function getCallbackForUi(); - /** * Checks whether the current user has access to this output * @@ -58,4 +24,4 @@ interface UIOutputInterface extends OutputInterface { */ public function checkUIPermission($output, $dataProcessor); -} \ No newline at end of file +} diff --git a/info.xml b/info.xml index 34e92af6..3d6d3958 100644 --- a/info.xml +++ b/info.xml @@ -15,7 +15,7 @@ <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url> </urls> <releaseDate>2020-02-12</releaseDate> - <version>1.2.0</version> + <version>master</version> <develStage>stable</develStage> <compatibility> <ver>4.7</ver> -- GitLab