Skip to content
Snippets Groups Projects
Forked from Extensions / dataprocessor
1361 commits behind the upstream repository.
dataprocessor.php 8.58 KiB
<?php

require_once 'dataprocessor.civix.php';
use CRM_Dataprocessor_ExtensionUtil as E;

use \Symfony\Component\DependencyInjection\ContainerBuilder;
use \Symfony\Component\DependencyInjection\Definition;

/**
 * @return \Civi\DataProcessor\Factory
 */
function dataprocessor_get_factory() {
  $container = \Civi::container();
  if ($container->has('data_processor_factory')) {
    return \Civi::service('data_processor_factory');
  }
  return null;
}

/**
 * Implements hook_civicrm_container()
 *
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_container/
 */
function dataprocessor_civicrm_container(ContainerBuilder $container) {
  // Register the TypeFactory
  $container->setDefinition('data_processor_factory', new Definition('Civi\DataProcessor\Factory'));

  $apiKernelDefinition = $container->getDefinition('civi_api_kernel');
  $apiProviderDefinition = new Definition('Civi\DataProcessor\Output\Api');
  $apiKernelDefinition->addMethodCall('registerApiProvider', array($apiProviderDefinition));
}

/**
 * Implements hook_civicrm_alterAPIPermissions()
 *
 * All Data Processor api outputs have their own permission.
 * Except for the FormProcessorExecutor api.
 *
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterAPIPermissions/
 */
function dataprocessor_civicrm_alterAPIPermissions($entity, $action, &$params, &$permissions) {
  // We have to check the camelcase and the non camel case names
  $entityNonCamelCase = _civicrm_api_get_entity_name_from_camel($entity);
  $entityCamelCase = _civicrm_api_get_camel_name($entity);
  $api_action = $action;
  if ($action == 'getfields' && isset($params['api_action'])) {
    $api_action = $params['api_action'];
  }
  $actionNonCamelCase = _civicrm_api_get_entity_name_from_camel($api_action);
  $actionCamelCase = _civicrm_api_get_camel_name($api_action);
  $dao = CRM_Core_DAO::executeQuery("
    SELECT *
    FROM civicrm_data_processor_output o 
    INNER JOIN civicrm_data_processor p ON o.data_processor_id = p.id 
    WHERE p.is_active = 1
    AND (LOWER(api_entity) = LOWER(%1) OR LOWER(api_entity) = LOWER(%2))
    AND (
      LOWER(api_action) = LOWER(%3) OR LOWER(api_count_action) = LOWER(%3)
      OR LOWER(api_action) = LOWER(%4) OR LOWER(api_count_action) = LOWER(%4)
    )",
    array(
      1 => array($entityCamelCase, 'String'),
      2 => array($entityNonCamelCase, 'String'),
      3 => array($actionNonCamelCase, 'String'),
      4 => array($actionCamelCase, 'String'))
  );
  while ($dao->fetch()) {
    $permissions[$entity][$action] = array($dao->permission);
  }
}

/**
 * Implements hook_civicrm_alterMenu().
 *
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterMenu/
 */
function dataprocessor_civicrm_alterMenu(&$items) {
  \Civi\DataProcessor\Output\UIOutputHelper::alterMenu($items);
}

/**
 * Implements hook_civicrm_pre().
 *
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_pre/
 *
 * @param $op
 * @param $objectName
 * @param $objectId
 * @param $params
 */
function dataprocessor_civicrm_pre($op, $objectName, $objectId, &$params) {
  \Civi\DataProcessor\Output\UIOutputHelper::preHook($op, $objectName, $objectId, $params);
}

/**
 * Implements hook_civicrm_post().
 *
 * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_post/
 *
 * @param $op
 * @param $objectName
 * @param $objectId
 * @param $objectRef
 */
function dataprocessor_civicrm_post($op, $objectName, $objectId, &$objectRef) {
  \Civi\DataProcessor\Output\UIOutputHelper::postHook($op, $objectName, $objectId, $objectRef);
}

function dataprocessor_civicrm_dataprocessor_export(&$dataProcessor) {
  \Civi\DataProcessor\Output\UIOutputHelper::hookExport($dataProcessor);
}

/**
 * Implements hook_civicrm_config().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_config
 */
function dataprocessor_civicrm_config(&$config) {
  _dataprocessor_civix_civicrm_config($config);
}

/**
 * Implements hook_civicrm_xmlMenu().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu
 */
function dataprocessor_civicrm_xmlMenu(&$files) {
  _dataprocessor_civix_civicrm_xmlMenu($files);
}

/**
 * Implements hook_civicrm_install().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_install
 */
function dataprocessor_civicrm_install() {
  _dataprocessor_civix_civicrm_install();
}
/**
 * Implements hook_civicrm_postInstall().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall
 */
function dataprocessor_civicrm_postInstall() {
  _dataprocessor_civix_civicrm_postInstall();
}

/**
 * Implements hook_civicrm_uninstall().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall
 */
function dataprocessor_civicrm_uninstall() {
  _dataprocessor_civix_civicrm_uninstall();
}

/**
 * Implements hook_civicrm_enable().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_enable
 */
function dataprocessor_civicrm_enable() {
  _dataprocessor_civix_civicrm_enable();
}

/**
 * Implements hook_civicrm_disable().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable
 */
function dataprocessor_civicrm_disable() {
  _dataprocessor_civix_civicrm_disable();
}

/**
 * Implements hook_civicrm_upgrade().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_upgrade
 */
function dataprocessor_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
  return _dataprocessor_civix_civicrm_upgrade($op, $queue);
}

/**
 * Implements hook_civicrm_managed().
 *
 * Generate a list of entities to create/deactivate/delete when this module
 * is installed, disabled, uninstalled.
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed
 */
function dataprocessor_civicrm_managed(&$entities) {
  _dataprocessor_civix_civicrm_managed($entities);
}

/**
 * Implements hook_civicrm_caseTypes().
 *
 * Generate a list of case-types.
 *
 * Note: This hook only runs in CiviCRM 4.4+.
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes
 */
function dataprocessor_civicrm_caseTypes(&$caseTypes) {
  _dataprocessor_civix_civicrm_caseTypes($caseTypes);
}
/**
 * Implements hook_civicrm_angularModules().
 *
 * Generate a list of Angular modules.
 *
 * Note: This hook only runs in CiviCRM 4.5+. It may
 * use features only available in v4.6+.
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_angularModules
 */
function dataprocessor_civicrm_angularModules(&$angularModules) {
  _dataprocessor_civix_civicrm_angularModules($angularModules);
}

/**
 * Implements hook_civicrm_alterSettingsFolders().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
 */
function dataprocessor_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
  _dataprocessor_civix_civicrm_alterSettingsFolders($metaDataFolders);
}

/**
 * Implements hook_civicrm_entityTypes().
 *
 * Declare entity types provided by this module.
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_entityTypes
 */
function dataprocessor_civicrm_entityTypes(&$entityTypes) {
  _dataprocessor_civix_civicrm_entityTypes($entityTypes);
}

// --- Functions below this ship commented out. Uncomment as required. ---

/**
 * Implements hook_civicrm_preProcess().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_preProcess
 *
function dataprocessor_civicrm_preProcess($formName, &$form) {

} // */

/**
 * Implements hook_civicrm_navigationMenu().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_navigationMenu
 */
function dataprocessor_civicrm_navigationMenu(&$menu) {
  _dataprocessor_civix_insert_navigation_menu($menu, 'Administer', array(
    'label' => E::ts('Data Processor'),
    'name' => 'data_processor',
    'url' => '',
    'permission' => 'administer CiviCRM',
    'operator' => 'OR',
    'separator' => 0
  ));
  _dataprocessor_civix_insert_navigation_menu($menu, 'Administer/data_processor', array(
    'label' => E::ts('Manage Data Processors'),
    'name' => 'manage_data_processors',
    'url' => CRM_Utils_System::url('civicrm/dataprocessor/manage', 'reset=1', true),
    'permission' => 'administer CiviCRM',
    'operator' => 'OR',
    'separator' => 0,
  ));
  _dataprocessor_civix_insert_navigation_menu($menu, 'Administer/data_processor', array(
    'label' => E::ts('Add Data Processor'),
    'name' => 'add_data_processor',
    'url' => CRM_Utils_System::url('civicrm/dataprocessor/form/edit', 'reset=1&action=add', true),
    'permission' => 'administer CiviCRM',
    'operator' => 'OR',
    'separator' => 0,
  ));
  _dataprocessor_civix_navigationMenu($menu);
}