diff --git a/CHANGELOG.md b/CHANGELOG.md index c4272081c000ede7449cee15206dadee47870148..381a5bfa3b44a52c4e4f1abcf08ec4368ecba9d4 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 522d22d63f18d1aaf93ad6e82d1d0786d06d0084..51375a50cc4747a4e4617041305ff43f9b65e4bc 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 19cc6dd5678014c2f2c7e4598de119a4f1bb725e..f0b5a5e2cc18118dbd3ab8cc142151420c7a369b 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 32504facb68e3187a75b9fb9e6f525262de4a100..c95fceaadb1ed74848519e77765ff908018ce5a7 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 67dfca7ae353472da1a1999b19c1bb0b6ccb6ceb..2784c30ce49036a51d29f5787bdca3e971820e65 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 bea25b7f34db13ce63b2b8039175d47f50619a8d..24d555d5abeeeab7798017f58c16bb0862c274bf 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 8cb262704806282ae9db69fdae18023241d4f3dc..682bb171269275ae11f39f95d92cfbf1958d2d38 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 4fb85ae3f27deae81bd750739f9991ce4df43247..e5616aafaec2eea810e76177e293e9be87f66ae0 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 bc1652cb2ea235e93bc8da9b632aa121445c40fa..23dc6fdab141a58da2d1fb450d6fa2fe5b266a91 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 1daf9fe3588e8bd7502cce5898360f24c1fc4aed..8150e07968f00271297b412f55a241edbe9a9459 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 1b319f829f2122f9f75f9eabf3fae24af61ec31d..35f0540822290b06758b74dd39d15a0d244d43a6 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 621a327430cc0cc03182b415673a09639f16f60d..c9889b7a10ce43d6cdb868d7393b35159fb8855b 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 d46c1b35e04b7b8380a7bc13c7a453522efbcbc9..fd956dded10fe05593a88cd92769068e98afb4a5 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 ec3c30c07743b0b1a8dd2981082c45b8e6b84710..eab7d5d6ec9bd55aa66052ab6f825b4d36f0e91b 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 0000000000000000000000000000000000000000..efb7824411bca1761a1782aeb91ec825ee216945 --- /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 9b98dcd62f2abfb8f2ac7c293f1965baf913a81c..836baf6b8d611d4eaf57295d193c7aea1199426a 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 a356469f97fda97877c832345a62f67ac2cedafd..d9689f1a8111e7959053911196a3cbb23037bd28 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 34e92af6b07e30d5b589cc07fdc23f0b11e6934a..3d6d395838028527738db3033d5e951d43bd4982 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>