/** * @param $rev */ public function upgrade_3_2_beta4($rev) { $upgrade = new CRM_Upgrade_Form(); $config = CRM_Core_Config::singleton(); $seedLocale = $config->lcMessages; //handle missing civicrm_uf_field.help_pre $hasLocalizedPreHelpCols = FALSE; // CRM-6451: for multilingual sites we need to find the optimal // locale to use as the final civicrm_membership_status.name column $domain = new CRM_Core_DAO_Domain(); $domain->find(TRUE); $locales = array(); if ($domain->locales) { $locales = explode(CRM_Core_DAO::VALUE_SEPARATOR, $domain->locales); // optimal: an English locale foreach (array('en_US', 'en_GB', 'en_AU') as $loc) { if (in_array($loc, $locales)) { $seedLocale = $loc; break; } } // if no English and no $config->lcMessages: use the first available if (!$seedLocale) { $seedLocale = $locales[0]; } $upgrade->assign('seedLocale', $seedLocale); $upgrade->assign('locales', $locales); $localizedColNames = array(); foreach ($locales as $loc) { $localizedName = "help_pre_{$loc}"; $localizedColNames[$localizedName] = $localizedName; } $columns = CRM_Core_DAO::executeQuery('SHOW COLUMNS FROM civicrm_uf_field'); while ($columns->fetch()) { if (strpos($columns->Field, 'help_pre') !== FALSE && in_array($columns->Field, $localizedColNames)) { $hasLocalizedPreHelpCols = TRUE; break; } } } $upgrade->assign('hasLocalizedPreHelpCols', $hasLocalizedPreHelpCols); $upgrade->processSQL($rev); // now civicrm_membership_status.name has possibly localised strings, so fix them $i18n = new CRM_Core_I18n($seedLocale); $statuses = array(array('name' => 'New', 'start_event' => 'join_date', 'end_event' => 'join_date', 'end_event_adjust_unit' => 'month', 'end_event_adjust_interval' => '3', 'is_current_member' => '1', 'is_admin' => '0', 'is_default' => '0', 'is_reserved' => '0'), array('name' => 'Current', 'start_event' => 'start_date', 'end_event' => 'end_date', 'is_current_member' => '1', 'is_admin' => '0', 'is_default' => '1', 'is_reserved' => '0'), array('name' => 'Grace', 'start_event' => 'end_date', 'end_event' => 'end_date', 'end_event_adjust_unit' => 'month', 'end_event_adjust_interval' => '1', 'is_current_member' => '1', 'is_admin' => '0', 'is_default' => '0', 'is_reserved' => '0'), array('name' => 'Expired', 'start_event' => 'end_date', 'start_event_adjust_unit' => 'month', 'start_event_adjust_interval' => '1', 'is_current_member' => '0', 'is_admin' => '0', 'is_default' => '0', 'is_reserved' => '0'), array('name' => 'Pending', 'start_event' => 'join_date', 'end_event' => 'join_date', 'is_current_member' => '0', 'is_admin' => '0', 'is_default' => '0', 'is_reserved' => '1'), array('name' => 'Cancelled', 'start_event' => 'join_date', 'end_event' => 'join_date', 'is_current_member' => '0', 'is_admin' => '0', 'is_default' => '0', 'is_reserved' => '0'), array('name' => 'Deceased', 'is_current_member' => '0', 'is_admin' => '1', 'is_default' => '0', 'is_reserved' => '1')); $statusIds = array(); $insertedNewRecord = FALSE; foreach ($statuses as $status) { $dao = new CRM_Member_DAO_MembershipStatus(); // try to find an existing English status $dao->name = $status['name']; // // if not found, look for translated status name // if (!$dao->find(true)) { // $found = false; // $dao->name = $i18n->translate($status['name']); // } // if found, update name and is_reserved if ($dao->find(TRUE)) { $dao->name = $status['name']; $dao->is_reserved = $status['is_reserved']; if ($status['is_reserved']) { $dao->is_active = 1; } // if not found, prepare a new row for insertion } else { $insertedNewRecord = TRUE; foreach ($status as $property => $value) { $dao->{$property} = $value; } $dao->weight = CRM_Utils_Weight::getDefaultWeight('CRM_Member_DAO_MembershipStatus'); } // add label (translated name) and save (UPDATE or INSERT) $dao->label = $i18n->translate($status['name']); $dao->save(); $statusIds[$dao->id] = $dao->id; } //disable all status those are customs. if ($insertedNewRecord) { $sql = ' UPDATE civicrm_membership_status SET is_active = 0 WHERE id NOT IN ( ' . implode(',', $statusIds) . ' )'; CRM_Core_DAO::executeQuery($sql); } }