Merge branch 'master' into file_download2
This commit is contained in:
commit
46deca697d
|
|
@ -105,9 +105,9 @@ class CRM_Admin_Form_Setting_ProxySettings extends CRM_Admin_Form_Setting
|
|||
if($response === FALSE) {
|
||||
return array('is_error' => 1, 'message' => sprintf(ts('Error: cannot access "%s"'), $url));
|
||||
}else{
|
||||
$result = preg_match("/<p id=\"version\">CiviProxy Version ([0-9]+\.[0-9]+|[0-9]+\.[0-9]+\.[0-9]+)<\/p>/", $response, $output_array);
|
||||
$result = preg_match("/<p id=\"version\">CiviProxy Version (([0-9]+\.[0-9]+|[0-9]+\.[0-9]+\.[0-9]+)(?:-[0-9A-Za-z-]+)?)<\/p>/", $response, $output_array);
|
||||
if ($result === FALSE || $result === 0){
|
||||
return array('is_error' => 1, 'message' => sprintf(ts('Error: failed to parse version information'), $url));
|
||||
return array('is_error' => 1, 'message' => sprintf(ts('Error: failed to parse version information: (%s)'), $url));
|
||||
}else{
|
||||
return array('is_error' => 0, 'version' => $output_array[1]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,9 @@ class CRM_Civiproxy_Mailer {
|
|||
$proxy_base = CRM_Core_BAO_Setting::getItem('CiviProxy Settings', 'proxy_url');
|
||||
|
||||
// General external functions
|
||||
$value = preg_replace("#{$system_base}civicrm/mailing/url#i", $proxy_base.'/url.php', $value);
|
||||
$value = preg_replace("#{$system_base}sites/all/modules/civicrm/extern/url.php#i", $proxy_base.'/url.php', $value);
|
||||
$value = preg_replace("#{$system_base}civicrm/mailing/open#i", $proxy_base.'/open.php', $value);
|
||||
$value = preg_replace("#{$system_base}sites/all/modules/civicrm/extern/open.php#i", $proxy_base.'/open.php', $value);
|
||||
$value = preg_replace("#{$system_base}sites/default/files/civicrm/persist/#i", $proxy_base.'/file.php?id=', $value);
|
||||
$value = preg_replace("#{$system_base}civicrm/mosaico/img\?src=#i", $proxy_base.'/mosaico.php?id=', $value);
|
||||
|
|
|
|||
|
|
@ -3,32 +3,116 @@
|
|||
// AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file
|
||||
|
||||
/**
|
||||
* (Delegated) Implementation of hook_civicrm_config
|
||||
* The ExtensionUtil class provides small stubs for accessing resources of this
|
||||
* extension.
|
||||
*/
|
||||
class CRM_Civiproxy_ExtensionUtil {
|
||||
const SHORT_NAME = "civiproxy";
|
||||
const LONG_NAME = "de.systopia.civiproxy";
|
||||
const CLASS_PREFIX = "CRM_Civiproxy";
|
||||
|
||||
/**
|
||||
* Translate a string using the extension's domain.
|
||||
*
|
||||
* If the extension doesn't have a specific translation
|
||||
* for the string, fallback to the default translations.
|
||||
*
|
||||
* @param string $text
|
||||
* Canonical message text (generally en_US).
|
||||
* @param array $params
|
||||
* @return string
|
||||
* Translated text.
|
||||
* @see ts
|
||||
*/
|
||||
public static function ts($text, $params = []) {
|
||||
if (!array_key_exists('domain', $params)) {
|
||||
$params['domain'] = [self::LONG_NAME, NULL];
|
||||
}
|
||||
return ts($text, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the URL of a resource file (in this extension).
|
||||
*
|
||||
* @param string|NULL $file
|
||||
* Ex: NULL.
|
||||
* Ex: 'css/foo.css'.
|
||||
* @return string
|
||||
* Ex: 'http://example.org/sites/default/ext/org.example.foo'.
|
||||
* Ex: 'http://example.org/sites/default/ext/org.example.foo/css/foo.css'.
|
||||
*/
|
||||
public static function url($file = NULL) {
|
||||
if ($file === NULL) {
|
||||
return rtrim(CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME), '/');
|
||||
}
|
||||
return CRM_Core_Resources::singleton()->getUrl(self::LONG_NAME, $file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the path of a resource file (in this extension).
|
||||
*
|
||||
* @param string|NULL $file
|
||||
* Ex: NULL.
|
||||
* Ex: 'css/foo.css'.
|
||||
* @return string
|
||||
* Ex: '/var/www/example.org/sites/default/ext/org.example.foo'.
|
||||
* Ex: '/var/www/example.org/sites/default/ext/org.example.foo/css/foo.css'.
|
||||
*/
|
||||
public static function path($file = NULL) {
|
||||
// return CRM_Core_Resources::singleton()->getPath(self::LONG_NAME, $file);
|
||||
return __DIR__ . ($file === NULL ? '' : (DIRECTORY_SEPARATOR . $file));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name of a class within this extension.
|
||||
*
|
||||
* @param string $suffix
|
||||
* Ex: 'Page_HelloWorld' or 'Page\\HelloWorld'.
|
||||
* @return string
|
||||
* Ex: 'CRM_Foo_Page_HelloWorld'.
|
||||
*/
|
||||
public static function findClass($suffix) {
|
||||
return self::CLASS_PREFIX . '_' . str_replace('\\', '_', $suffix);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
use CRM_Civiproxy_ExtensionUtil as E;
|
||||
|
||||
/**
|
||||
* (Delegated) Implements hook_civicrm_config().
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_config
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_config(&$config = NULL) {
|
||||
static $configured = FALSE;
|
||||
if ($configured) return;
|
||||
if ($configured) {
|
||||
return;
|
||||
}
|
||||
$configured = TRUE;
|
||||
|
||||
$template =& CRM_Core_Smarty::singleton();
|
||||
|
||||
$extRoot = dirname( __FILE__ ) . DIRECTORY_SEPARATOR;
|
||||
$extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR;
|
||||
$extDir = $extRoot . 'templates';
|
||||
|
||||
if ( is_array( $template->template_dir ) ) {
|
||||
array_unshift( $template->template_dir, $extDir );
|
||||
} else {
|
||||
$template->template_dir = array( $extDir, $template->template_dir );
|
||||
if (is_array($template->template_dir)) {
|
||||
array_unshift($template->template_dir, $extDir);
|
||||
}
|
||||
else {
|
||||
$template->template_dir = [$extDir, $template->template_dir];
|
||||
}
|
||||
|
||||
$include_path = $extRoot . PATH_SEPARATOR . get_include_path( );
|
||||
set_include_path( $include_path );
|
||||
$include_path = $extRoot . PATH_SEPARATOR . get_include_path();
|
||||
set_include_path($include_path);
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implementation of hook_civicrm_xmlMenu
|
||||
* (Delegated) Implements hook_civicrm_xmlMenu().
|
||||
*
|
||||
* @param $files array(string)
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_xmlMenu
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_xmlMenu(&$files) {
|
||||
foreach (_civiproxy_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) {
|
||||
|
|
@ -37,57 +121,83 @@ function _civiproxy_civix_civicrm_xmlMenu(&$files) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_civicrm_install
|
||||
* Implements hook_civicrm_install().
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_install
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_install() {
|
||||
_civiproxy_civix_civicrm_config();
|
||||
if ($upgrader = _civiproxy_civix_upgrader()) {
|
||||
return $upgrader->onInstall();
|
||||
$upgrader->onInstall();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_civicrm_uninstall
|
||||
* Implements hook_civicrm_postInstall().
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_postInstall
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_postInstall() {
|
||||
_civiproxy_civix_civicrm_config();
|
||||
if ($upgrader = _civiproxy_civix_upgrader()) {
|
||||
if (is_callable([$upgrader, 'onPostInstall'])) {
|
||||
$upgrader->onPostInstall();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_civicrm_uninstall().
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_uninstall
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_uninstall() {
|
||||
_civiproxy_civix_civicrm_config();
|
||||
if ($upgrader = _civiproxy_civix_upgrader()) {
|
||||
return $upgrader->onUninstall();
|
||||
$upgrader->onUninstall();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implementation of hook_civicrm_enable
|
||||
* (Delegated) Implements hook_civicrm_enable().
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_enable
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_enable() {
|
||||
_civiproxy_civix_civicrm_config();
|
||||
if ($upgrader = _civiproxy_civix_upgrader()) {
|
||||
if (is_callable(array($upgrader, 'onEnable'))) {
|
||||
return $upgrader->onEnable();
|
||||
if (is_callable([$upgrader, 'onEnable'])) {
|
||||
$upgrader->onEnable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implementation of hook_civicrm_disable
|
||||
* (Delegated) Implements hook_civicrm_disable().
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_disable
|
||||
* @return mixed
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_disable() {
|
||||
_civiproxy_civix_civicrm_config();
|
||||
if ($upgrader = _civiproxy_civix_upgrader()) {
|
||||
if (is_callable(array($upgrader, 'onDisable'))) {
|
||||
return $upgrader->onDisable();
|
||||
if (is_callable([$upgrader, 'onDisable'])) {
|
||||
$upgrader->onDisable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implementation of hook_civicrm_upgrade
|
||||
* (Delegated) Implements hook_civicrm_upgrade().
|
||||
*
|
||||
* @param $op string, the type of operation being performed; 'check' or 'enqueue'
|
||||
* @param $queue CRM_Queue_Queue, (for 'enqueue') the modifiable list of pending up upgrade tasks
|
||||
*
|
||||
* @return mixed based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending)
|
||||
* @return mixed
|
||||
* based on op. for 'check', returns array(boolean) (TRUE if upgrades are pending)
|
||||
* for 'enqueue', returns void
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_upgrade
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
|
||||
if ($upgrader = _civiproxy_civix_upgrader()) {
|
||||
|
|
@ -95,31 +205,36 @@ function _civiproxy_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return CRM_Civiproxy_Upgrader
|
||||
*/
|
||||
function _civiproxy_civix_upgrader() {
|
||||
if (!file_exists(__DIR__.'/CRM/Civiproxy/Upgrader.php')) {
|
||||
if (!file_exists(__DIR__ . '/CRM/Civiproxy/Upgrader.php')) {
|
||||
return NULL;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return CRM_Civiproxy_Upgrader_Base::instance();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Search directory tree for files which match a glob pattern
|
||||
* Search directory tree for files which match a glob pattern.
|
||||
*
|
||||
* Note: Dot-directories (like "..", ".git", or ".svn") will be ignored.
|
||||
* Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles()
|
||||
*
|
||||
* @param $dir string, base dir
|
||||
* @param $pattern string, glob pattern, eg "*.txt"
|
||||
* @return array(string)
|
||||
* @param string $dir base dir
|
||||
* @param string $pattern , glob pattern, eg "*.txt"
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function _civiproxy_civix_find_files($dir, $pattern) {
|
||||
if (is_callable(array('CRM_Utils_File', 'findFiles'))) {
|
||||
if (is_callable(['CRM_Utils_File', 'findFiles'])) {
|
||||
return CRM_Utils_File::findFiles($dir, $pattern);
|
||||
}
|
||||
|
||||
$todos = array($dir);
|
||||
$result = array();
|
||||
$todos = [$dir];
|
||||
$result = [];
|
||||
while (!empty($todos)) {
|
||||
$subdir = array_shift($todos);
|
||||
foreach (_civiproxy_civix_glob("$subdir/$pattern") as $match) {
|
||||
|
|
@ -130,8 +245,9 @@ function _civiproxy_civix_find_files($dir, $pattern) {
|
|||
if ($dh = opendir($subdir)) {
|
||||
while (FALSE !== ($entry = readdir($dh))) {
|
||||
$path = $subdir . DIRECTORY_SEPARATOR . $entry;
|
||||
if ($entry{0} == '.') {
|
||||
} elseif (is_dir($path)) {
|
||||
if ($entry[0] == '.') {
|
||||
}
|
||||
elseif (is_dir($path)) {
|
||||
$todos[] = $path;
|
||||
}
|
||||
}
|
||||
|
|
@ -140,18 +256,25 @@ function _civiproxy_civix_find_files($dir, $pattern) {
|
|||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implementation of hook_civicrm_managed
|
||||
* (Delegated) Implements hook_civicrm_managed().
|
||||
*
|
||||
* Find any *.mgd.php files, merge their content, and return.
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_managed
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_managed(&$entities) {
|
||||
$mgdFiles = _civiproxy_civix_find_files(__DIR__, '*.mgd.php');
|
||||
sort($mgdFiles);
|
||||
foreach ($mgdFiles as $file) {
|
||||
$es = include $file;
|
||||
foreach ($es as $e) {
|
||||
if (empty($e['module'])) {
|
||||
$e['module'] = 'de.systopia.civiproxy';
|
||||
$e['module'] = E::LONG_NAME;
|
||||
}
|
||||
if (empty($e['params']['version'])) {
|
||||
$e['params']['version'] = '3';
|
||||
}
|
||||
$entities[] = $e;
|
||||
}
|
||||
|
|
@ -159,11 +282,13 @@ function _civiproxy_civix_civicrm_managed(&$entities) {
|
|||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implementation of hook_civicrm_caseTypes
|
||||
* (Delegated) Implements hook_civicrm_caseTypes().
|
||||
*
|
||||
* Find any and return any files matching "xml/case/*.xml"
|
||||
*
|
||||
* Note: This hook only runs in CiviCRM 4.4+.
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_caseTypes
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_caseTypes(&$caseTypes) {
|
||||
if (!is_dir(__DIR__ . '/xml/case')) {
|
||||
|
|
@ -174,14 +299,57 @@ function _civiproxy_civix_civicrm_caseTypes(&$caseTypes) {
|
|||
$name = preg_replace('/\.xml$/', '', basename($file));
|
||||
if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) {
|
||||
$errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name));
|
||||
CRM_Core_Error::fatal($errorMessage);
|
||||
// throw new CRM_Core_Exception($errorMessage);
|
||||
throw new CRM_Core_Exception($errorMessage);
|
||||
}
|
||||
$caseTypes[$name] = array(
|
||||
'module' => 'de.systopia.civiproxy',
|
||||
$caseTypes[$name] = [
|
||||
'module' => E::LONG_NAME,
|
||||
'name' => $name,
|
||||
'file' => $file,
|
||||
);
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implements hook_civicrm_angularModules().
|
||||
*
|
||||
* Find any and return any files matching "ang/*.ang.php"
|
||||
*
|
||||
* Note: This hook only runs in CiviCRM 4.5+.
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_angularModules
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_angularModules(&$angularModules) {
|
||||
if (!is_dir(__DIR__ . '/ang')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$files = _civiproxy_civix_glob(__DIR__ . '/ang/*.ang.php');
|
||||
foreach ($files as $file) {
|
||||
$name = preg_replace(':\.ang\.php$:', '', basename($file));
|
||||
$module = include $file;
|
||||
if (empty($module['ext'])) {
|
||||
$module['ext'] = E::LONG_NAME;
|
||||
}
|
||||
$angularModules[$name] = $module;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implements hook_civicrm_themes().
|
||||
*
|
||||
* Find any and return any files matching "*.theme.php"
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_themes(&$themes) {
|
||||
$files = _civiproxy_civix_glob(__DIR__ . '/*.theme.php');
|
||||
foreach ($files as $file) {
|
||||
$themeMeta = include $file;
|
||||
if (empty($themeMeta['name'])) {
|
||||
$themeMeta['name'] = preg_replace(':\.theme\.php$:', '', basename($file));
|
||||
}
|
||||
if (empty($themeMeta['ext'])) {
|
||||
$themeMeta['ext'] = E::LONG_NAME;
|
||||
}
|
||||
$themes[$themeMeta['name']] = $themeMeta;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -193,50 +361,117 @@ function _civiproxy_civix_civicrm_caseTypes(&$caseTypes) {
|
|||
* result for an empty match is sometimes array() and sometimes FALSE.
|
||||
* This wrapper provides consistency.
|
||||
*
|
||||
* @see http://php.net/glob
|
||||
* @link http://php.net/glob
|
||||
* @param string $pattern
|
||||
* @return array, possibly empty
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function _civiproxy_civix_glob($pattern) {
|
||||
$result = glob($pattern);
|
||||
return is_array($result) ? $result : array();
|
||||
return is_array($result) ? $result : [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a navigation menu item at a given place in the hierarchy
|
||||
* Inserts a navigation menu item at a given place in the hierarchy.
|
||||
*
|
||||
* $menu - menu hierarchy
|
||||
* $path - path where insertion should happen (ie. Administer/System Settings)
|
||||
* $item - menu you need to insert (parent/child attributes will be filled for you)
|
||||
* $parentId - used internally to recurse in the menu structure
|
||||
* @param array $menu - menu hierarchy
|
||||
* @param string $path - path to parent of this item, e.g. 'my_extension/submenu'
|
||||
* 'Mailing', or 'Administer/System Settings'
|
||||
* @param array $item - the item to insert (parent/child attributes will be
|
||||
* filled for you)
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function _civiproxy_civix_insert_navigation_menu(&$menu, $path, $item, $parentId = NULL) {
|
||||
static $navId;
|
||||
|
||||
function _civiproxy_civix_insert_navigation_menu(&$menu, $path, $item) {
|
||||
// If we are done going down the path, insert menu
|
||||
if (empty($path)) {
|
||||
if (!$navId) $navId = CRM_Core_DAO::singleValueQuery("SELECT max(id) FROM civicrm_navigation");
|
||||
$navId ++;
|
||||
$menu[$navId] = array (
|
||||
'attributes' => array_merge($item, array(
|
||||
$menu[] = [
|
||||
'attributes' => array_merge([
|
||||
'label' => CRM_Utils_Array::value('name', $item),
|
||||
'active' => 1,
|
||||
'parentID' => $parentId,
|
||||
'navID' => $navId,
|
||||
))
|
||||
);
|
||||
return true;
|
||||
} else {
|
||||
], $item),
|
||||
];
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
// Find an recurse into the next level down
|
||||
$found = false;
|
||||
$found = FALSE;
|
||||
$path = explode('/', $path);
|
||||
$first = array_shift($path);
|
||||
foreach ($menu as $key => &$entry) {
|
||||
if ($entry['attributes']['name'] == $first) {
|
||||
if (!$entry['child']) $entry['child'] = array();
|
||||
$found = _civiproxy_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item, $key);
|
||||
if (!isset($entry['child'])) {
|
||||
$entry['child'] = [];
|
||||
}
|
||||
$found = _civiproxy_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item);
|
||||
}
|
||||
}
|
||||
return $found;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implements hook_civicrm_navigationMenu().
|
||||
*/
|
||||
function _civiproxy_civix_navigationMenu(&$nodes) {
|
||||
if (!is_callable(['CRM_Core_BAO_Navigation', 'fixNavigationMenu'])) {
|
||||
_civiproxy_civix_fixNavigationMenu($nodes);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a navigation menu, generate navIDs for any items which are
|
||||
* missing them.
|
||||
*/
|
||||
function _civiproxy_civix_fixNavigationMenu(&$nodes) {
|
||||
$maxNavID = 1;
|
||||
array_walk_recursive($nodes, function($item, $key) use (&$maxNavID) {
|
||||
if ($key === 'navID') {
|
||||
$maxNavID = max($maxNavID, $item);
|
||||
}
|
||||
});
|
||||
_civiproxy_civix_fixNavigationMenuItems($nodes, $maxNavID, NULL);
|
||||
}
|
||||
|
||||
function _civiproxy_civix_fixNavigationMenuItems(&$nodes, &$maxNavID, $parentID) {
|
||||
$origKeys = array_keys($nodes);
|
||||
foreach ($origKeys as $origKey) {
|
||||
if (!isset($nodes[$origKey]['attributes']['parentID']) && $parentID !== NULL) {
|
||||
$nodes[$origKey]['attributes']['parentID'] = $parentID;
|
||||
}
|
||||
// If no navID, then assign navID and fix key.
|
||||
if (!isset($nodes[$origKey]['attributes']['navID'])) {
|
||||
$newKey = ++$maxNavID;
|
||||
$nodes[$origKey]['attributes']['navID'] = $newKey;
|
||||
$nodes[$newKey] = $nodes[$origKey];
|
||||
unset($nodes[$origKey]);
|
||||
$origKey = $newKey;
|
||||
}
|
||||
if (isset($nodes[$origKey]['child']) && is_array($nodes[$origKey]['child'])) {
|
||||
_civiproxy_civix_fixNavigationMenuItems($nodes[$origKey]['child'], $maxNavID, $nodes[$origKey]['attributes']['navID']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implements hook_civicrm_alterSettingsFolders().
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterSettingsFolders
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
|
||||
$settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings';
|
||||
if (!in_array($settingsDir, $metaDataFolders) && is_dir($settingsDir)) {
|
||||
$metaDataFolders[] = $settingsDir;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (Delegated) Implements hook_civicrm_entityTypes().
|
||||
*
|
||||
* Find any *.entityType.php files, merge their content, and return.
|
||||
*
|
||||
* @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_entityTypes
|
||||
*/
|
||||
function _civiproxy_civix_civicrm_entityTypes(&$entityTypes) {
|
||||
$entityTypes = array_merge($entityTypes, []);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,13 +65,13 @@ You can set the URL of the target CiviCRM using the variable `$target_civirm` in
|
|||
### Setting for the click tracking url
|
||||
There is a setting in CiviCRM which is used for tracking the clicks in your mailing. On your CiviProxy server this setting is captured in the variable `$target_url` in the `config.php` file:
|
||||
```php
|
||||
$target_url = $target_civicrm . '/sites/all/modules/civicrm/extern/url.php';
|
||||
$target_url = $target_civicrm . '/civicrm/mailing/url';
|
||||
```
|
||||
If you set it to the value NULL this functionality will not be available on your CiviProxy server.
|
||||
### Setting for the open tracking
|
||||
CiviCRM tracks if a mailing has been opened in a certain way. CiviProxy has this setting in the variable `$target_open` in the `config.php` file:
|
||||
```php
|
||||
$target_open = $target_civicrm . '/sites/all/modules/civicrm/extern/open.php';
|
||||
$target_open = $target_civicrm . '/civicrm/mailing/url/open.php';
|
||||
```
|
||||
If you set it to the value NULL this functionality will not be available on your CiviProxy server.
|
||||
### Setting for the location of images and included files in your mail(ing)
|
||||
|
|
|
|||
|
|
@ -33,12 +33,17 @@ $target_civicrm = 'https://your.civicrm.installation.org';
|
|||
|
||||
// default paths, override if you want. Set to NULL to disable
|
||||
$target_rest = $target_civicrm . '/sites/all/modules/civicrm/extern/rest.php';
|
||||
$target_url = $target_civicrm . '/sites/all/modules/civicrm/extern/url.php';
|
||||
$target_open = $target_civicrm . '/sites/all/modules/civicrm/extern/open.php';
|
||||
$target_download_file = $target_civicrm . '/civicrm/file';
|
||||
$target_static_file = $target_civicrm . '/sites/default/files/civicrm/persist/';
|
||||
$target_mosaico = NULL; // (disabled by default): $target_civicrm . '/civicrm/mosaico/img?src=';
|
||||
$target_mail_view = $target_civicrm . '/civicrm/mailing/view';
|
||||
$target_url = $target_civicrm . '/civicrm/mailing/url';
|
||||
$target_open = $target_civicrm . '/civicrm/mailing/open';
|
||||
|
||||
// CAUTION: use the following for CiviCRM < 5.27
|
||||
$target_url = $target_civicrm . '/sites/all/modules/civicrm/extern/url.php';
|
||||
$target_open = $target_civicrm . '/sites/all/modules/civicrm/extern/open.php';
|
||||
|
||||
|
||||
/****************************************************************
|
||||
** GENERAL OPTIONS **
|
||||
|
|
@ -59,7 +64,7 @@ $mail_subscription_user_key = NULL;
|
|||
$debug = NULL; //'LUXFbiaoz4dVWuAHEcuBAe7YQ4YP96rN4MCDmKj89p.log';
|
||||
|
||||
// Local network interface or IP to be used for the relayed query
|
||||
// This is usefull in some VPN configurations (see CURLOPT_INTERFACE)
|
||||
// This is useful in some VPN configurations (see CURLOPT_INTERFACE)
|
||||
$target_interface = NULL;
|
||||
|
||||
/****************************************************************
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ if (!empty($_REQUEST['id']) && isset($webhook2api['configurations'][$_REQUEST['i
|
|||
|
||||
// read some input
|
||||
$post_input = @file_get_contents('php://input');
|
||||
error_log("DEBUG: " . json_encode($post_input));
|
||||
|
||||
// MAIN: iterate through all (eligible) configurations
|
||||
$last_error = ["No handler found", 501];
|
||||
|
|
@ -85,12 +84,10 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
|||
// gather source data
|
||||
$data = [];
|
||||
if (!empty($configuration['data_sources']) && is_array($configuration['data_sources'])) {
|
||||
error_log(json_encode($configuration));
|
||||
foreach ($configuration['data_sources'] as $data_source) {
|
||||
switch ($data_source) {
|
||||
case 'POST/json': # JSON data in POST field
|
||||
$more_data = json_decode($post_input, TRUE);
|
||||
error_log(json_encode($more_data));
|
||||
$data = array_merge_recursive($data, $more_data);
|
||||
break;
|
||||
case 'REQUEST': # simple request parameters
|
||||
|
|
@ -109,8 +106,8 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
|||
foreach ($data as $d) {
|
||||
$result = webhook2api_callCiviApi($configuration, $d);
|
||||
if(isset($result['internal_error'])) {
|
||||
// internal communication Error occured. Aborting process
|
||||
civiproxy_log("Webhook2API[{$configuration['name']}]: internal error occured: " . json_encode($result['internal_error']));
|
||||
// internal communication Error occurred. Aborting process
|
||||
civiproxy_log("Webhook2API[{$configuration['name']}]: internal error occurred: " . json_encode($result['internal_error']));
|
||||
return $result['internal_error'];
|
||||
}
|
||||
if (!empty($result['values']['http_code'])) {
|
||||
|
|
@ -123,8 +120,8 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
|||
} else {
|
||||
$result = webhook2api_callCiviApi($configuration, $data);
|
||||
if(isset($result['internal_error'])) {
|
||||
// internal communication Error occured. Aborting process
|
||||
civiproxy_log("Webhook2API[{$configuration['name']}]: internal error occured: " . json_encode($result['internal_error']));
|
||||
// internal communication Error occurred. Aborting process
|
||||
civiproxy_log("Webhook2API[{$configuration['name']}]: internal error occurred: " . json_encode($result['internal_error']));
|
||||
return $result['internal_error'];
|
||||
}
|
||||
if (!empty($result['values']['http_code'])) {
|
||||
|
|
@ -134,20 +131,19 @@ function webhook2api_processConfiguration($configuration, $post_input) {
|
|||
}
|
||||
}
|
||||
if ($http_code != '200') {
|
||||
// we received and parsed the webhook event successfully, but an error occured with civicrm:
|
||||
// we received and parsed the webhook event successfully, but an error occurred with civicrm:
|
||||
civiproxy_log("Webhook2API[{$configuration['name']}]: Internal CiviCRM Error. Error Code: {$http_code}. Full Message: " . json_encode($result));
|
||||
}
|
||||
|
||||
// process result
|
||||
if (!empty($configuration['response_mapping']) && is_array($configuration['response_mapping'])) {
|
||||
// TODO: implement
|
||||
//error_log("Webhook2API.response_mapping: not implemented!");
|
||||
http_response_code('200');
|
||||
civiproxy_log("Webhook successfull, response mapped.");
|
||||
civiproxy_log("Webhook successful, response mapped.");
|
||||
} else {
|
||||
// default behaviour:
|
||||
http_response_code('200');
|
||||
civiproxy_log("Webhook successfull.");
|
||||
civiproxy_log("Webhook successful.");
|
||||
}
|
||||
// all done
|
||||
exit();
|
||||
|
|
@ -178,7 +174,7 @@ function webhook2api_callCiviApi($configuration, $data) {
|
|||
} else {
|
||||
echo "Error";
|
||||
// unknown instruction
|
||||
// //error_log("Webhook2API[{$configuration['name']}]: don't understad sentinel '{$check}'. Ignored.");
|
||||
civiproxy_log("Webhook2API[{$configuration['name']}]: don't understand sentinel '{$check}'. Ignored.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -197,7 +193,8 @@ function webhook2api_callCiviApi($configuration, $data) {
|
|||
// run modifiers
|
||||
foreach ($modifiers as $modifier) {
|
||||
// TODO: implement
|
||||
//error_log("Webhook2API.modifiers: not implemented!");
|
||||
|
||||
civiproxy_log("Webhook2API.modifiers: not implemented!");
|
||||
}
|
||||
|
||||
// set to target
|
||||
|
|
@ -210,16 +207,16 @@ function webhook2api_callCiviApi($configuration, $data) {
|
|||
// sanitise data
|
||||
if (!empty($configuration['parameter_sanitation']) && is_array($configuration['parameter_sanitation'])) {
|
||||
// TODO: implement
|
||||
//error_log("Webhook2API.sanitation: not implemented!");
|
||||
civiproxy_log("Webhook2API.sanitation: not implemented!");
|
||||
}
|
||||
|
||||
// send to target REST API
|
||||
if (empty($configuration['entity']) || empty($configuration['action'])) {
|
||||
//error_log("Webhook2API[{$configuration['name']}]: Missing entity/action.");
|
||||
civiproxy_log("Webhook2API[{$configuration['name']}]: Missing entity/action.");
|
||||
return ["internal_error" => "Configuration error", 403];
|
||||
}
|
||||
if (empty($configuration['api_key'])) {
|
||||
//error_log("Webhook2API[{$configuration['name']}]: Missing api_key.");
|
||||
civiproxy_log("Webhook2API[{$configuration['name']}]: Missing api_key.");
|
||||
return ["internal_error" => "Configuration error", 403];
|
||||
}
|
||||
$params['api_key'] = $configuration['api_key'];
|
||||
|
|
|
|||
Loading…
Reference in New Issue