From 31117bd1cfdf7dee279bac64f4783e9e687681f9 Mon Sep 17 00:00:00 2001
From: "Matthew Wire (MJW Consulting)" <mjw@mjwconsult.co.uk>
Date: Mon, 1 Jul 2019 20:50:02 +0100
Subject: [PATCH] Add output links to ManageDataProcessors, fix generation of
 'Execute' link if system name has changed

---
 CRM/Dataprocessor/Form/DataProcessor.php         | 16 +++-------------
 CRM/Dataprocessor/Form/ManageDataProcessors.php  |  8 ++++++++
 .../Form/DataProcessorBlocks/Outputs.tpl         |  2 +-
 .../Dataprocessor/Form/ManageDataProcessors.tpl  | 14 ++++++++++++--
 4 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/CRM/Dataprocessor/Form/DataProcessor.php b/CRM/Dataprocessor/Form/DataProcessor.php
index bfad9fdb..2f3498ef 100644
--- a/CRM/Dataprocessor/Form/DataProcessor.php
+++ b/CRM/Dataprocessor/Form/DataProcessor.php
@@ -128,20 +128,10 @@ class CRM_Dataprocessor_Form_DataProcessor extends CRM_Core_Form {
     $factory = dataprocessor_get_factory();
     $types = $factory->getOutputs();
     $outputs = civicrm_api3('DataProcessorOutput', 'get', array('data_processor_id' => $this->dataProcessorId, 'options' => array('limit' => 0)));
-    $outputs = $outputs['values'];
+    $outputs = CRM_Utils_Array::value('values', $outputs);
     foreach($outputs as $idx => $output) {
-      
-      if (array_key_exists("navigation_id",$output['configuration']))
-      {
-        $navigation_result = civicrm_api3('Navigation', 'get', [
-          'sequential' => 1,
-          'return' => ["url"],
-          'id' => $output['configuration']['navigation_id'],
-        ]);
-        $navigation_url = $navigation_result['values'][0]['url'];
-        
-        $outputs[$idx]['navigation_url'] = $navigation_url;
-      }
+      $outputs[$idx]['navigation_url']
+        = CRM_Utils_System::url("civicrm/dataprocessor_{$output['type']}/{$this->dataProcessor['name']}", 'reset=1');
       if (isset($types[$output['type']])) {
         $outputs[$idx]['type_name'] = $types[$output['type']];
       } else {
diff --git a/CRM/Dataprocessor/Form/ManageDataProcessors.php b/CRM/Dataprocessor/Form/ManageDataProcessors.php
index 5d5c8c7c..c62253e0 100644
--- a/CRM/Dataprocessor/Form/ManageDataProcessors.php
+++ b/CRM/Dataprocessor/Form/ManageDataProcessors.php
@@ -33,6 +33,14 @@ class CRM_Dataprocessor_Form_ManageDataProcessors extends CRM_Core_Form {
 
     foreach($dataProcessors as $idx => $dataProcessor) {
       $dataProcessors[$idx]['status_label'] = CRM_Dataprocessor_Status::statusToLabel($dataProcessor['status']);
+      $outputs = civicrm_api3('DataProcessorOutput', 'get',['data_processor_id' => $dataProcessor['id'], 'options' => ['limit' => 0]]);
+      foreach(CRM_Utils_Array::value('values', $outputs) as $outputIndex => $output) {
+        $dataProcessors[$idx]['navigation'][$outputIndex] = [
+          'url' => CRM_Utils_System::url("civicrm/dataprocessor_{$output['type']}/{$dataProcessor['name']}", 'reset=1'),
+          'title' => $output['configuration']['title'],
+        ];
+      }
+
     }
     $this->assign('data_processors', $dataProcessors);
 
diff --git a/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Outputs.tpl b/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Outputs.tpl
index 7e8e0e0d..216b7d9a 100644
--- a/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Outputs.tpl
+++ b/templates/CRM/Dataprocessor/Form/DataProcessorBlocks/Outputs.tpl
@@ -17,7 +17,7 @@
                     <br/>
 
                     {if isset($output.navigation_url) }
-                        <a href="{crmURL p="`$output.navigation_url`"}">{ts}Execute{/ts}</a>    
+                        <a href="{$output.navigation_url}">{ts}Execute{/ts}</a>
                     {/if}
                 </td>
             </tr>
diff --git a/templates/CRM/Dataprocessor/Form/ManageDataProcessors.tpl b/templates/CRM/Dataprocessor/Form/ManageDataProcessors.tpl
index 029863ae..e4fe7bf1 100644
--- a/templates/CRM/Dataprocessor/Form/ManageDataProcessors.tpl
+++ b/templates/CRM/Dataprocessor/Form/ManageDataProcessors.tpl
@@ -63,6 +63,7 @@
                     <th scope="col" >{ts}Description{/ts}</th>
                     <th scope="col" >{ts}Is active{/ts}</th>
                     <th scope="col" >{ts}Status{/ts}</th>
+                    <th scope="col" >{ts}Outputs{/ts}</th>
                     <th>&nbsp;</th>
                 </tr>
                 </thead>
@@ -87,14 +88,23 @@
                                 </span>
                             {/if}
                         </td>
+                        <td class="crm-dataprocessor-navigation">
+                            {if $data_processor.navigation}
+                                {foreach from=$data_processor.navigation item=navigationItem}
+                                    <a href="{$navigationItem.url}"
+                                       class="action-item crm-hover-button" title="{$navigationItem.title}">{$navigationItem.title}</a>
+                                {/foreach}
+                            {/if}
+                        </td>
                         <td>
-                            <span>
+                          <span>
                             <a href="{crmURL p='civicrm/dataprocessor/form/edit' q="reset=1&action=update&id=`$data_processor.id`"}"
                                      class="action-item crm-hover-button" title="{ts}Edit Data Processor{/ts}">{ts}Edit{/ts}</a>
                             <a href="{crmURL p='civicrm/dataprocessor/form/edit' q="reset=1&action=export&id=`$data_processor.id`"}"
                                      class="action-item crm-hover-button" title="{ts}Export Data Processor{/ts}">{ts}Export{/ts}</a>
                             <a href="{crmURL p='civicrm/dataprocessor/form/edit' q="reset=1&action=delete&id=`$data_processor.id`"}"
-                                 class="action-item crm-hover-button" title="{ts}Delete Data Processor{/ts}">{ts}Delete{/ts}</a></span>
+                                 class="action-item crm-hover-button" title="{ts}Delete Data Processor{/ts}">{ts}Delete{/ts}</a>
+                          </span>
 
                         </td>
                     </tr>
-- 
GitLab