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