diff options
Diffstat (limited to 'www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/CRM/Api4/Upgrader.php')
-rw-r--r-- | www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/CRM/Api4/Upgrader.php | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/CRM/Api4/Upgrader.php b/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/CRM/Api4/Upgrader.php new file mode 100644 index 00000000..10ec9da5 --- /dev/null +++ b/www/crm/wp-content/plugins/civicrm/civicrm/ext/api4/CRM/Api4/Upgrader.php @@ -0,0 +1,158 @@ +<?php + +/** + * Collection of upgrade steps. + */ +class CRM_Api4_Upgrader extends CRM_Api4_Upgrader_Base { + + // By convention, functions that look like "function upgrade_NNNN()" are + // upgrade tasks. They are executed in order (like Drupal's hook_update_N). + + /** + * Install script + */ + public function install() { + // Add menu item for api explorer; rename v3 explorer menu item. + try { + $v3Item = civicrm_api3('Navigation', 'get', [ + 'name' => 'API Explorer', + 'return' => ['id', 'parent_id'], + 'sequential' => 1, + 'api.Navigation.create' => ['label' => ts("Api Explorer v3")], + ]); + civicrm_api3('Navigation', 'create', [ + 'parent_id' => $v3Item['values'][0]['parent_id'], + 'label' => ts("Api Explorer v4"), + 'weight' => 2, + 'name' => "Api Explorer v4", + 'permission' => "administer CiviCRM", + 'url' => "civicrm/api4#/explorer", + 'is_active' => 1, + ]); + } + catch (Exception $e) { + // Couldn't create menu item. + } + } + + /** + * Example: Work with entities usually not available during the install step. + * + * This method can be used for any post-install tasks. For example, if a step + * of your installation depends on accessing an entity that is itself + * created during the installation (e.g., a setting or a managed entity), do + * so here to avoid order of operation problems. + * + public function postInstall() { + $customFieldId = civicrm_api3('CustomField', 'getvalue', array( + 'return' => array("id"), + 'name' => "customFieldCreatedViaManagedHook", + )); + civicrm_api3('Setting', 'create', array( + 'myWeirdFieldSetting' => array('id' => $customFieldId, 'weirdness' => 1), + )); + } + + /** + * Uninstall script + */ + public function uninstall() { + // Remove Api4 Explorer navigation menu item + civicrm_api3('Navigation', 'get', [ + 'name' => 'Api Explorer v4', + 'return' => ['id'], + 'api.Navigation.delete' => [], + ]); + } + + /** + * Example: Run a simple query when a module is enabled. + * + public function enable() { + CRM_Core_DAO::executeQuery('UPDATE foo SET is_active = 1 WHERE bar = "whiz"'); + } + + /** + * Example: Run a simple query when a module is disabled. + * + public function disable() { + CRM_Core_DAO::executeQuery('UPDATE foo SET is_active = 0 WHERE bar = "whiz"'); + } + + /** + * Example: Run a couple simple queries. + * + * @return TRUE on success + * @throws Exception + */ + public function upgrade_1000() { + $this->ctx->log->info('Applying update 1000'); + $domain = CRM_Core_Config::domainID(); + CRM_Core_DAO::executeQuery('UPDATE civicrm_navigation SET url = "civicrm/api4#/explorer" WHERE url = "civicrm/a/#/api4" AND domain_id = ' . $domain); + return TRUE; + } + + + /** + * Example: Run an external SQL script. + * + * @return TRUE on success + * @throws Exception + public function upgrade_4201() { + $this->ctx->log->info('Applying update 4201'); + // this path is relative to the extension base dir + $this->executeSqlFile('sql/upgrade_4201.sql'); + return TRUE; + } // */ + + + /** + * Example: Run a slow upgrade process by breaking it up into smaller chunk. + * + * @return TRUE on success + * @throws Exception + public function upgrade_4202() { + $this->ctx->log->info('Planning update 4202'); // PEAR Log interface + + $this->addTask(ts('Process first step'), 'processPart1', $arg1, $arg2); + $this->addTask(ts('Process second step'), 'processPart2', $arg3, $arg4); + $this->addTask(ts('Process second step'), 'processPart3', $arg5); + return TRUE; + } + public function processPart1($arg1, $arg2) { sleep(10); return TRUE; } + public function processPart2($arg3, $arg4) { sleep(10); return TRUE; } + public function processPart3($arg5) { sleep(10); return TRUE; } + // */ + + + /** + * Example: Run an upgrade with a query that touches many (potentially + * millions) of records by breaking it up into smaller chunks. + * + * @return TRUE on success + * @throws Exception + public function upgrade_4203() { + $this->ctx->log->info('Planning update 4203'); // PEAR Log interface + + $minId = CRM_Core_DAO::singleValueQuery('SELECT coalesce(min(id),0) FROM civicrm_contribution'); + $maxId = CRM_Core_DAO::singleValueQuery('SELECT coalesce(max(id),0) FROM civicrm_contribution'); + for ($startId = $minId; $startId <= $maxId; $startId += self::BATCH_SIZE) { + $endId = $startId + self::BATCH_SIZE - 1; + $title = ts('Upgrade Batch (%1 => %2)', array( + 1 => $startId, + 2 => $endId, + )); + $sql = ' + UPDATE civicrm_contribution SET foobar = whiz(wonky()+wanker) + WHERE id BETWEEN %1 and %2 + '; + $params = array( + 1 => array($startId, 'Integer'), + 2 => array($endId, 'Integer'), + ); + $this->addTask($title, 'executeSql', $sql, $params); + } + return TRUE; + } // */ + +} |