From 8dde09aa8001855c1918cb90f4cf2ad250e61cc0 Mon Sep 17 00:00:00 2001
From: Jaap Jansma <jaap@edeveloper.nl>
Date: Sat, 24 Feb 2018 14:25:28 +0100
Subject: [PATCH] added a menu item and a page for the angular module

---
 CRM/Admin/Page/AutomationFormProcessor.php    | 19 ++++
 ang/form_processor.ang.php                    | 10 +++
 form_processor.php                            | 86 +++++++++++++++----
 .../Admin/Page/AutomationFormProcessor.tpl    |  5 ++
 xml/Menu/form_processor.xml                   |  8 ++
 5 files changed, 111 insertions(+), 17 deletions(-)
 create mode 100644 CRM/Admin/Page/AutomationFormProcessor.php
 create mode 100644 templates/CRM/Admin/Page/AutomationFormProcessor.tpl
 create mode 100644 xml/Menu/form_processor.xml

diff --git a/CRM/Admin/Page/AutomationFormProcessor.php b/CRM/Admin/Page/AutomationFormProcessor.php
new file mode 100644
index 0000000..27717e3
--- /dev/null
+++ b/CRM/Admin/Page/AutomationFormProcessor.php
@@ -0,0 +1,19 @@
+<?php
+use CRM_FormProcessor_ExtensionUtil as E;
+
+class CRM_Admin_Page_AutomationFormProcessor extends CRM_Core_Page {
+
+  public function run() {
+    $loader = new \Civi\Angular\AngularLoader();
+  	$loader->setModules(array('form_processor'));
+  	$loader->setPageName('civicrm/admin/formprocessor');
+		\Civi::resources()->addSetting(array(
+      'crmApp' => array(
+        'defaultRoute' => 'formprocessors',
+      ),
+    ));
+  	$loader->load();  	
+  	parent::run();
+  }
+
+}
diff --git a/ang/form_processor.ang.php b/ang/form_processor.ang.php
index d64a4f4..7507192 100644
--- a/ang/form_processor.ang.php
+++ b/ang/form_processor.ang.php
@@ -6,6 +6,16 @@
 $action_provider = form_processor_get_action_provider();
 
 return array (
+	'basePages' => array('civicrm/admin/formprocessor'),
+    'requires' => array(
+      'crmApp',
+      'crmUi',
+      'crmUtil',
+      'ngRoute',
+      'dialogService',
+      'ui.utils',
+      'action_provider',
+    ),
   'js' => 
   array (
     0 => 'ang/form_processor.js',
diff --git a/form_processor.php b/form_processor.php
index 39572e0..8380658 100644
--- a/form_processor.php
+++ b/form_processor.php
@@ -97,6 +97,75 @@ function form_processor_get_action_types() {
 	return $provider->getActions();
 }
 
+/**
+ * Implementation of hook_civicrm_navigationMenu.
+ *
+ * Adds Automation navigation items just before the Administer menu.
+ *
+ * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_navigationMenu
+ */
+function form_processor_civicrm_navigationMenu(&$params) {
+  // get the Administer menu ID and position in the $params array
+  $administerMenuId = CRM_Core_DAO::getFieldValue('CRM_Core_BAO_Navigation', 'Administer', 'id', 'name');
+  $posOfAdminMenu = array_search($administerMenuId, array_keys($params)); 
+	
+  $newNavId = _form_processor_getMenuKeyMax($params);
+  $formProcessorMenu = array(
+    $newNavId => array(
+      'attributes' => array(
+        'label' => ts('Automation'),
+        'name' => 'automation',
+        'url' => NULL,
+        'permission' => 'administer CiviCRM',
+        'operator' => NULL,
+        'separator' => 0,
+        'parentID' => NULL,
+        'navID' => $newNavId,
+        'active' => 1,
+      ),
+      'child' => array(
+        $newNavId + 1 => array(
+          'attributes' => array(
+            'label' => E::ts('Form processors,'),
+            'name' => 'form_processors',
+            'url' => 'civicrm/admin/automation/formprocessor/#/formprocessors',
+            'permission' => 'administer CiviCRM',
+            'operator' => NULL,
+            'separator' => 0,
+            'parentID' => $newNavId,
+            'navID' => $newNavId + 1,
+            'active' => 1,
+          ),
+          'child' => array(),
+        ),
+      ),
+    ),
+  );
+
+  // insert volunteer menu before the admininster menu
+  $params = array_slice($params, 0, $posOfAdminMenu, true)
+    + $formProcessorMenu + array_slice($params, $posOfAdminMenu, NULL, true);
+}
+
+/**
+ * Helper function for getting the highest key in the navigation menu.
+ *
+ * Taken from http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_navigationMenu.
+ *
+ * @param array $menuArray
+ * @return int
+ */
+function _form_processor_getMenuKeyMax($menuArray) {
+  $max = array(max(array_keys($menuArray)));
+  foreach($menuArray as $v) {
+    if (!empty($v['child'])) {
+      $max[] = _form_processor_getMenuKeyMax($v['child']);
+    }
+  }
+  return max($max);
+}
+
+
 /**
  * Implements hook_civicrm_config().
  *
@@ -227,20 +296,3 @@ function form_processor_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
 function form_processor_civicrm_preProcess($formName, &$form) {
 
 } // */
-
-/**
- * Implements hook_civicrm_navigationMenu().
- *
- * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_navigationMenu
- *
-function form_processor_civicrm_navigationMenu(&$menu) {
-  _form_processor_civix_insert_navigation_menu($menu, NULL, array(
-    'label' => E::ts('The Page'),
-    'name' => 'the_page',
-    'url' => 'civicrm/the-page',
-    'permission' => 'access CiviReport,access CiviContribute',
-    'operator' => 'OR',
-    'separator' => 0,
-  ));
-  _form_processor_civix_navigationMenu($menu);
-} // */
diff --git a/templates/CRM/Admin/Page/AutomationFormProcessor.tpl b/templates/CRM/Admin/Page/AutomationFormProcessor.tpl
new file mode 100644
index 0000000..0784e5d
--- /dev/null
+++ b/templates/CRM/Admin/Page/AutomationFormProcessor.tpl
@@ -0,0 +1,5 @@
+{literal}
+    <div ng-app="crmApp">
+        <div ng-view></div>
+    </div>
+{/literal}
\ No newline at end of file
diff --git a/xml/Menu/form_processor.xml b/xml/Menu/form_processor.xml
new file mode 100644
index 0000000..01a4239
--- /dev/null
+++ b/xml/Menu/form_processor.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<menu>
+  <item>
+    <path>civicrm/admin/automation/formprocessor</path>
+    <page_callback>CRM_Admin_Page_AutomationFormProcessor</page_callback>
+    <access_arguments>administer CiviCRM</access_arguments>
+  </item>
+</menu>
-- 
GitLab