stripe.civix.php 12.9 KB
Newer Older
1 2
<?php

drastik's avatar
drastik committed
3
// AUTO-GENERATED FILE -- Civix may overwrite any changes made to this file
4

mattwire's avatar
mattwire committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
/**
 * The ExtensionUtil class provides small stubs for accessing resources of this
 * extension.
 */
class CRM_Stripe_ExtensionUtil {
  const SHORT_NAME = "stripe";
  const LONG_NAME = "com.drastikbydesign.stripe";
  const CLASS_PREFIX = "CRM_Stripe";

  /**
   * 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 = array()) {
    if (!array_key_exists('domain', $params)) {
      $params['domain'] = array(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_Stripe_ExtensionUtil as E;

82
/**
83
 * (Delegated) Implements hook_civicrm_config().
drastik's avatar
drastik committed
84 85
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_config
86 87 88
 */
function _stripe_civix_civicrm_config(&$config = NULL) {
  static $configured = FALSE;
89 90 91
  if ($configured) {
    return;
  }
92 93 94 95
  $configured = TRUE;

  $template =& CRM_Core_Smarty::singleton();

96
  $extRoot = dirname(__FILE__) . DIRECTORY_SEPARATOR;
97 98
  $extDir = $extRoot . 'templates';

mattwire's avatar
mattwire committed
99 100
  if (is_array($template->template_dir)) {
    array_unshift($template->template_dir, $extDir);
101 102
  }
  else {
mattwire's avatar
mattwire committed
103
    $template->template_dir = array($extDir, $template->template_dir);
104 105
  }

mattwire's avatar
mattwire committed
106
  $include_path = $extRoot . PATH_SEPARATOR . get_include_path();
107
  set_include_path($include_path);
108 109 110
}

/**
111
 * (Delegated) Implements hook_civicrm_xmlMenu().
112 113
 *
 * @param $files array(string)
114
 *
drastik's avatar
drastik committed
115
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_xmlMenu
116 117
 */
function _stripe_civix_civicrm_xmlMenu(&$files) {
drastik's avatar
drastik committed
118
  foreach (_stripe_civix_glob(__DIR__ . '/xml/Menu/*.xml') as $file) {
119 120 121 122 123
    $files[] = $file;
  }
}

/**
124
 * Implements hook_civicrm_install().
drastik's avatar
drastik committed
125 126
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_install
127 128 129 130
 */
function _stripe_civix_civicrm_install() {
  _stripe_civix_civicrm_config();
  if ($upgrader = _stripe_civix_upgrader()) {
drastik's avatar
drastik committed
131
    $upgrader->onInstall();
132 133 134
  }
}

mattwire's avatar
mattwire committed
135 136 137 138 139 140 141 142 143 144 145 146 147 148
/**
 * Implements hook_civicrm_postInstall().
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_postInstall
 */
function _stripe_civix_civicrm_postInstall() {
  _stripe_civix_civicrm_config();
  if ($upgrader = _stripe_civix_upgrader()) {
    if (is_callable(array($upgrader, 'onPostInstall'))) {
      $upgrader->onPostInstall();
    }
  }
}

149
/**
150
 * Implements hook_civicrm_uninstall().
drastik's avatar
drastik committed
151 152
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_uninstall
153 154 155 156
 */
function _stripe_civix_civicrm_uninstall() {
  _stripe_civix_civicrm_config();
  if ($upgrader = _stripe_civix_upgrader()) {
drastik's avatar
drastik committed
157
    $upgrader->onUninstall();
158 159 160 161
  }
}

/**
162
 * (Delegated) Implements hook_civicrm_enable().
drastik's avatar
drastik committed
163 164
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_enable
165 166 167 168 169
 */
function _stripe_civix_civicrm_enable() {
  _stripe_civix_civicrm_config();
  if ($upgrader = _stripe_civix_upgrader()) {
    if (is_callable(array($upgrader, 'onEnable'))) {
drastik's avatar
drastik committed
170
      $upgrader->onEnable();
171 172 173 174 175
    }
  }
}

/**
176
 * (Delegated) Implements hook_civicrm_disable().
drastik's avatar
drastik committed
177 178 179
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_disable
 * @return mixed
180 181 182 183 184
 */
function _stripe_civix_civicrm_disable() {
  _stripe_civix_civicrm_config();
  if ($upgrader = _stripe_civix_upgrader()) {
    if (is_callable(array($upgrader, 'onDisable'))) {
drastik's avatar
drastik committed
185
      $upgrader->onDisable();
186 187 188 189 190
    }
  }
}

/**
191
 * (Delegated) Implements hook_civicrm_upgrade().
192 193 194 195 196 197
 *
 * @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)
 *                for 'enqueue', returns void
drastik's avatar
drastik committed
198 199
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_upgrade
200 201 202 203 204 205 206
 */
function _stripe_civix_civicrm_upgrade($op, CRM_Queue_Queue $queue = NULL) {
  if ($upgrader = _stripe_civix_upgrader()) {
    return $upgrader->onUpgrade($op, $queue);
  }
}

drastik's avatar
drastik committed
207 208 209
/**
 * @return CRM_Stripe_Upgrader
 */
210
function _stripe_civix_upgrader() {
mattwire's avatar
mattwire committed
211
  if (!file_exists(__DIR__ . '/CRM/Stripe/Upgrader.php')) {
212
    return NULL;
213 214
  }
  else {
215 216 217 218 219 220 221
    return CRM_Stripe_Upgrader_Base::instance();
  }
}

/**
 * Search directory tree for files which match a glob pattern
 *
drastik's avatar
drastik committed
222 223 224
 * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored.
 * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles()
 *
225 226 227 228 229
 * @param $dir string, base dir
 * @param $pattern string, glob pattern, eg "*.txt"
 * @return array(string)
 */
function _stripe_civix_find_files($dir, $pattern) {
drastik's avatar
drastik committed
230 231 232 233
  if (is_callable(array('CRM_Utils_File', 'findFiles'))) {
    return CRM_Utils_File::findFiles($dir, $pattern);
  }

234 235 236 237
  $todos = array($dir);
  $result = array();
  while (!empty($todos)) {
    $subdir = array_shift($todos);
drastik's avatar
drastik committed
238
    foreach (_stripe_civix_glob("$subdir/$pattern") as $match) {
239 240 241 242 243 244 245
      if (!is_dir($match)) {
        $result[] = $match;
      }
    }
    if ($dh = opendir($subdir)) {
      while (FALSE !== ($entry = readdir($dh))) {
        $path = $subdir . DIRECTORY_SEPARATOR . $entry;
drastik's avatar
drastik committed
246
        if ($entry{0} == '.') {
mattwire's avatar
mattwire committed
247 248
        }
        elseif (is_dir($path)) {
249 250 251 252 253 254 255 256 257
          $todos[] = $path;
        }
      }
      closedir($dh);
    }
  }
  return $result;
}
/**
258
 * (Delegated) Implements hook_civicrm_managed().
259 260
 *
 * Find any *.mgd.php files, merge their content, and return.
drastik's avatar
drastik committed
261 262
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_managed
263 264 265
 */
function _stripe_civix_civicrm_managed(&$entities) {
  $mgdFiles = _stripe_civix_find_files(__DIR__, '*.mgd.php');
266
  sort($mgdFiles);
267 268 269 270
  foreach ($mgdFiles as $file) {
    $es = include $file;
    foreach ($es as $e) {
      if (empty($e['module'])) {
mattwire's avatar
mattwire committed
271
        $e['module'] = E::LONG_NAME;
272
      }
mattwire's avatar
mattwire committed
273 274 275
      if (empty($e['params']['version'])) {
        $e['params']['version'] = '3';
      }
276
      $entities[] = $e;
277 278 279
    }
  }
}
drastik's avatar
drastik committed
280 281

/**
282
 * (Delegated) Implements hook_civicrm_caseTypes().
drastik's avatar
drastik committed
283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
 *
 * Find any and return any files matching "xml/case/*.xml"
 *
 * Note: This hook only runs in CiviCRM 4.4+.
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_caseTypes
 */
function _stripe_civix_civicrm_caseTypes(&$caseTypes) {
  if (!is_dir(__DIR__ . '/xml/case')) {
    return;
  }

  foreach (_stripe_civix_glob(__DIR__ . '/xml/case/*.xml') as $file) {
    $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);
    }
    $caseTypes[$name] = array(
mattwire's avatar
mattwire committed
303
      'module' => E::LONG_NAME,
drastik's avatar
drastik committed
304 305 306 307 308 309
      'name' => $name,
      'file' => $file,
    );
  }
}

310
/**
mattwire's avatar
mattwire committed
311 312 313 314 315 316 317 318
 * (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 http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_angularModules
 */
319 320 321 322 323 324 325 326 327 328
function _stripe_civix_civicrm_angularModules(&$angularModules) {
  if (!is_dir(__DIR__ . '/ang')) {
    return;
  }

  $files = _stripe_civix_glob(__DIR__ . '/ang/*.ang.php');
  foreach ($files as $file) {
    $name = preg_replace(':\.ang\.php$:', '', basename($file));
    $module = include $file;
    if (empty($module['ext'])) {
mattwire's avatar
mattwire committed
329
      $module['ext'] = E::LONG_NAME;
330 331 332 333 334
    }
    $angularModules[$name] = $module;
  }
}

drastik's avatar
drastik committed
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
/**
 * Glob wrapper which is guaranteed to return an array.
 *
 * The documentation for glob() says, "On some systems it is impossible to
 * distinguish between empty match and an error." Anecdotally, the return
 * result for an empty match is sometimes array() and sometimes FALSE.
 * This wrapper provides consistency.
 *
 * @link http://php.net/glob
 * @param string $pattern
 * @return array, possibly empty
 */
function _stripe_civix_glob($pattern) {
  $result = glob($pattern);
  return is_array($result) ? $result : array();
}

/**
353
 * Inserts a navigation menu item at a given place in the hierarchy.
drastik's avatar
drastik committed
354
 *
355
 * @param array $menu - menu hierarchy
356 357 358 359
 * @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)
drastik's avatar
drastik committed
360
 */
mattwire's avatar
mattwire committed
361
function _stripe_civix_insert_navigation_menu(&$menu, $path, $item) {
drastik's avatar
drastik committed
362 363
  // If we are done going down the path, insert menu
  if (empty($path)) {
mattwire's avatar
mattwire committed
364 365
    $menu[] = array(
      'attributes' => array_merge(array(
drastik's avatar
drastik committed
366 367
        'label'      => CRM_Utils_Array::value('name', $item),
        'active'     => 1,
mattwire's avatar
mattwire committed
368
      ), $item),
drastik's avatar
drastik committed
369
    );
mattwire's avatar
mattwire committed
370
    return TRUE;
371 372
  }
  else {
drastik's avatar
drastik committed
373
    // Find an recurse into the next level down
mattwire's avatar
mattwire committed
374
    $found = FALSE;
drastik's avatar
drastik committed
375 376 377 378
    $path = explode('/', $path);
    $first = array_shift($path);
    foreach ($menu as $key => &$entry) {
      if ($entry['attributes']['name'] == $first) {
mattwire's avatar
mattwire committed
379 380 381
        if (!isset($entry['child'])) {
          $entry['child'] = array();
        }
drastik's avatar
drastik committed
382 383 384 385 386 387 388
        $found = _stripe_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item, $key);
      }
    }
    return $found;
  }
}

mattwire's avatar
mattwire committed
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431
/**
 * (Delegated) Implements hook_civicrm_navigationMenu().
 */
function _stripe_civix_navigationMenu(&$nodes) {
  if (!is_callable(array('CRM_Core_BAO_Navigation', 'fixNavigationMenu'))) {
    _stripe_civix_fixNavigationMenu($nodes);
  }
}

/**
 * Given a navigation menu, generate navIDs for any items which are
 * missing them.
 */
function _stripe_civix_fixNavigationMenu(&$nodes) {
  $maxNavID = 1;
  array_walk_recursive($nodes, function($item, $key) use (&$maxNavID) {
    if ($key === 'navID') {
      $maxNavID = max($maxNavID, $item);
    }
  });
  _stripe_civix_fixNavigationMenuItems($nodes, $maxNavID, NULL);
}

function _stripe_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'])) {
      _stripe_civix_fixNavigationMenuItems($nodes[$origKey]['child'], $maxNavID, $nodes[$origKey]['attributes']['navID']);
    }
  }
}

drastik's avatar
drastik committed
432
/**
433
 * (Delegated) Implements hook_civicrm_alterSettingsFolders().
drastik's avatar
drastik committed
434 435 436 437 438
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
 */
function _stripe_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
  static $configured = FALSE;
439 440 441
  if ($configured) {
    return;
  }
drastik's avatar
drastik committed
442 443 444
  $configured = TRUE;

  $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings';
mattwire's avatar
mattwire committed
445
  if (is_dir($settingsDir) && !in_array($settingsDir, $metaDataFolders)) {
drastik's avatar
drastik committed
446 447 448
    $metaDataFolders[] = $settingsDir;
  }
}
449 450 451 452 453 454 455 456 457 458 459 460 461

/**
 * (Delegated) Implements hook_civicrm_entityTypes().
 *
 * Find any *.entityType.php files, merge their content, and return.
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_entityTypes
 */

function _stripe_civix_civicrm_entityTypes(&$entityTypes) {
  $entityTypes = array_merge($entityTypes, array (
  ));
}