de.systopia.twingle/CRM/Twingle/Upgrader.php
2022-05-13 10:15:28 +02:00

87 lines
2.7 KiB
PHP

<?php
use CRM_Twingle_ExtensionUtil as E;
/**
* Collection of upgrade steps.
*/
class CRM_Twingle_Upgrader extends CRM_Twingle_Upgrader_Base {
/**
* Installer script
*/
public function install() {
// create a DB table for the twingle profiles
$this->executeSqlFile('sql/civicrm_twingle_profile.sql');
// add a default profile
CRM_Twingle_Profile::createDefaultProfile()->saveProfile();
}
/**
* Example: Run an external SQL script when the module is uninstalled.
*
public function uninstall() {
$this->executeSqlFile('sql/myuninstall.sql');
}
/**
* Copy financial_type_id setting to new setting financial_type_id_recur.
*/
public function upgrade_4000() {
$this->ctx->log->info('Applying update 4000: Copying Financial type to new setting Financial type (recurring).');
foreach (CRM_Twingle_Profile::getProfiles() as $profile) {
$profile->setAttribute('financial_type_id_recur', $profile->getAttribute('financial_type_id'));
$profile->saveProfile();
}
return TRUE;
}
/**
* Convert serialized settings from objects to arrays.
*
* @link https://civicrm.org/advisory/civi-sa-2019-21-poi-saved-search-and-report-instance-apis
*/
public function upgrade_5011() {
// Do not use CRM_Core_BAO::getItem() or Civi::settings()->get().
// Extract and unserialize directly from the database.
$twingle_profiles_query = CRM_Core_DAO::executeQuery("
SELECT `value`
FROM `civicrm_setting`
WHERE `name` = 'twingle_profiles';");
if ($twingle_profiles_query->fetch()) {
$profiles = unserialize($twingle_profiles_query->value);
Civi::settings()->set('twingle_profiles', (array) $profiles);
}
return TRUE;
}
/**
* Upgrading to 1.4.0 needs to convert the profiles into the new infrastructure
*
* @return TRUE on success
* @throws Exception
*/
public function upgrade_5140() {
$this->ctx->log->info('Converting twingle profiles.');
// create a DB table for the twingle profiles
$this->executeSqlFile('sql/civicrm_twingle_profile.sql');
// migrate the current profiles
if ($profiles_data = Civi::settings()->get('twingle_profiles')) {
foreach ($profiles_data as $profile_name => $profile_data) {
$profile = new CRM_Twingle_Profile($profile_name, $profile_data);
$data = json_encode($profile->getData());
CRM_Core_DAO::executeQuery(
"INSERT IGNORE INTO civicrm_twingle_profile(name,config,last_access,access_counter) VALUES (%1, %2, NOW(), 0)",
[
1 => [$profile_name, 'String'],
2 => [$data, 'String']
]);
}
}
return TRUE;
}
}