stripe.civix.php 12.5 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 266 267 268 269
 */
function _stripe_civix_civicrm_managed(&$entities) {
  $mgdFiles = _stripe_civix_find_files(__DIR__, '*.mgd.php');
  foreach ($mgdFiles as $file) {
    $es = include $file;
    foreach ($es as $e) {
      if (empty($e['module'])) {
mattwire's avatar
mattwire committed
270
        $e['module'] = E::LONG_NAME;
271 272
      }
      $entities[] = $e;
mattwire's avatar
mattwire committed
273 274 275
      if (empty($e['params']['version'])) {
        $e['params']['version'] = '3';
      }
276 277 278
    }
  }
}
drastik's avatar
drastik committed
279 280

/**
281
 * (Delegated) Implements hook_civicrm_caseTypes().
drastik's avatar
drastik committed
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301
 *
 * 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
302
      'module' => E::LONG_NAME,
drastik's avatar
drastik committed
303 304 305 306 307 308
      'name' => $name,
      'file' => $file,
    );
  }
}

309
/**
mattwire's avatar
mattwire committed
310 311 312 313 314 315 316 317
 * (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
 */
318 319 320 321 322 323 324 325 326 327
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
328
      $module['ext'] = E::LONG_NAME;
329 330 331 332 333
    }
    $angularModules[$name] = $module;
  }
}

drastik's avatar
drastik committed
334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
/**
 * 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();
}

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

mattwire's avatar
mattwire committed
386 387 388 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
/**
 * (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
429
/**
430
 * (Delegated) Implements hook_civicrm_alterSettingsFolders().
drastik's avatar
drastik committed
431 432 433 434 435
 *
 * @link http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_alterSettingsFolders
 */
function _stripe_civix_civicrm_alterSettingsFolders(&$metaDataFolders = NULL) {
  static $configured = FALSE;
436 437 438
  if ($configured) {
    return;
  }
drastik's avatar
drastik committed
439 440 441
  $configured = TRUE;

  $settingsDir = __DIR__ . DIRECTORY_SEPARATOR . 'settings';
mattwire's avatar
mattwire committed
442
  if (is_dir($settingsDir) && !in_array($settingsDir, $metaDataFolders)) {
drastik's avatar
drastik committed
443 444 445
    $metaDataFolders[] = $settingsDir;
  }
}