Commit | Line | Data |
---|---|---|
296342b1 OB |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
06b69b18 | 4 | | CiviCRM version 4.5 | |
296342b1 | 5 | +--------------------------------------------------------------------+ |
06b69b18 | 6 | | Copyright CiviCRM LLC (c) 2004-2014 | |
296342b1 OB |
7 | +--------------------------------------------------------------------+ |
8 | | This file is a part of CiviCRM. | | |
9 | | | | |
10 | | CiviCRM is free software; you can copy, modify, and distribute it | | |
11 | | under the terms of the GNU Affero General Public License | | |
12 | | Version 3, 19 November 2007. | | |
13 | | | | |
14 | | CiviCRM is distributed in the hope that it will be useful, but | | |
15 | | WITHOUT ANY WARRANTY; without even the implied warranty of | | |
16 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | | |
17 | | See the GNU Affero General Public License for more details. | | |
18 | | | | |
19 | | You should have received a copy of the GNU Affero General Public | | |
20 | | License along with this program; if not, contact CiviCRM LLC | | |
21 | | at info[AT]civicrm[DOT]org. If you have questions about the | | |
22 | | GNU Affero General Public License or the licensing of CiviCRM, | | |
23 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | | |
24 | +--------------------------------------------------------------------+ | |
25 | */ | |
26 | ||
27 | /** | |
28 | * | |
29 | * @package CRM | |
06b69b18 | 30 | * @copyright CiviCRM LLC (c) 2004-2014 |
296342b1 OB |
31 | * $Id$ |
32 | * | |
33 | */ | |
34 | class CRM_Upgrade_Incremental_php_FourFive { | |
35 | const BATCH_SIZE = 5000; | |
36 | ||
624e56fa EM |
37 | /** |
38 | * @param $errors | |
39 | * | |
40 | * @return bool | |
41 | */ | |
296342b1 OB |
42 | function verifyPreDBstate(&$errors) { |
43 | return TRUE; | |
44 | } | |
45 | ||
46 | /** | |
47 | * Compute any messages which should be displayed beforeupgrade | |
48 | * | |
49 | * Note: This function is called iteratively for each upcoming | |
50 | * revision to the database. | |
51 | * | |
d0f74b53 | 52 | * @param $preUpgradeMessage |
296342b1 | 53 | * @param $rev string, a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0' |
d0f74b53 EM |
54 | * @param null $currentVer |
55 | * | |
56 | * @internal param string $postUpgradeMessage , alterable | |
296342b1 OB |
57 | * @return void |
58 | */ | |
59 | function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) { | |
60 | } | |
61 | ||
62 | /** | |
63 | * Compute any messages which should be displayed after upgrade | |
64 | * | |
65 | * @param $postUpgradeMessage string, alterable | |
66 | * @param $rev string, an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs | |
67 | * @return void | |
68 | */ | |
69 | function setPostUpgradeMessage(&$postUpgradeMessage, $rev) { | |
1421174e | 70 | if ($rev == '4.5.alpha1') { |
e4784b29 | 71 | $postUpgradeMessage .= '<br /><br />' . ts('Default versions of the following System Workflow Message Templates have been modified to handle new functionality: <ul><li>Contributions - Receipt (off-line)</li><li>Contributions - Receipt (on-line)</li><li>Memberships - Receipt (on-line)</li><li>Memberships - Signup and Renewal Receipts (off-line)</li><li>Pledges - Acknowledgement</li></ul> If you have modified these templates, please review the new default versions and implement updates as needed to your copies (Administer > Communications > Message Templates > System Workflow Messages). (<a href="%1">learn more...</a>)', array(1 => 'http://wiki.civicrm.org/confluence/display/CRMDOC/Updating+System+Workflow+Message+Templates+after+Upgrades+-+method+1+-+kdiff')); |
b05a0fb6 | 72 | $postUpgradeMessage .= '<br /><br />' . ts('This release allows you to view and edit multiple-record custom field sets in a table format which will be more usable in some cases. You can try out the format by navigating to Administer > Custom Data & Screens > Custom Fields. Click Settings for a custom field set and change Display Style to "Tab with Tables".'); |
03390e26 | 73 | $postUpgradeMessage .= '<br /><br />' . ts('This release changes the way that anonymous event registrations match participants with existing contacts. By default, all event participants will be matched with existing individuals using the Unsupervised rule, even if multiple registrations with the same email address are allowed. However, you can now select a different matching rule to use for each event. Please review your events to make sure you choose the appropriate matching rule and collect sufficient information for it to match contacts.'); |
1421174e | 74 | } |
7c3d751c DG |
75 | if ($rev == '4.5.beta2') { |
76 | $postUpgradeMessage .= '<br /><br />' . ts('If you use CiviMail for newsletters or other communications, check out the new sample CiviMail templates which use responsive design to optimize display on mobile devices (Administer > Communications > Message Templates ).'); | |
77 | } | |
296342b1 OB |
78 | } |
79 | ||
624e56fa EM |
80 | /** |
81 | * @param $rev | |
82 | * | |
83 | * @return bool | |
84 | */ | |
296342b1 OB |
85 | function upgrade_4_5_alpha1($rev) { |
86 | // task to process sql | |
3182e644 | 87 | $this->addTask(ts('Migrate honoree information to module_data'), 'migrateHonoreeInfo'); |
296342b1 | 88 | $this->addTask(ts('Upgrade DB to 4.5.alpha1: SQL'), 'task_4_5_x_runSql', $rev); |
8b49cb50 OB |
89 | $this->addTask(ts('Set default for Individual name fields configuration'), 'addNameFieldOptions'); |
90 | ||
64542f7e PJ |
91 | // CRM-14522 - The below schema checking is done as foreign key name |
92 | // for pdf_format_id column varies for different databases | |
93 | // if DB is been into upgrade for 3.4.2 version, it would have pdf_format_id name for FK | |
94 | // else FK_civicrm_msg_template_pdf_format_id | |
95 | $config = CRM_Core_Config::singleton(); | |
96 | $dbUf = DB::parseDSN($config->dsn); | |
97 | $query = " | |
98 | SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS | |
99 | WHERE TABLE_NAME = 'civicrm_msg_template' | |
100 | AND CONSTRAINT_TYPE = 'FOREIGN KEY' | |
101 | AND TABLE_SCHEMA = %1 | |
102 | "; | |
103 | $params = array(1 => array($dbUf['database'], 'String')); | |
104 | $dao = CRM_Core_DAO::executeQuery($query, $params, TRUE, NULL, FALSE, FALSE); | |
105 | if ($dao->fetch()) { | |
106 | if ($dao->CONSTRAINT_NAME == 'FK_civicrm_msg_template_pdf_format_id' || | |
107 | $dao->CONSTRAINT_NAME == 'pdf_format_id') { | |
108 | $sqlDropFK = "ALTER TABLE `civicrm_msg_template` | |
109 | DROP FOREIGN KEY `{$dao->CONSTRAINT_NAME}`, | |
110 | DROP KEY `{$dao->CONSTRAINT_NAME}`"; | |
111 | CRM_Core_DAO::executeQuery($sqlDropFK, CRM_Core_DAO::$_nullArray, TRUE, NULL, FALSE, FALSE); | |
112 | } | |
113 | } | |
114 | ||
8b49cb50 OB |
115 | return TRUE; |
116 | } | |
117 | ||
118 | /** | |
119 | * Add defaults for the newly introduced name fields configuration in 'contact_edit_options' setting | |
120 | * | |
d0f74b53 EM |
121 | * @param CRM_Queue_TaskContext $ctx |
122 | * | |
8b49cb50 OB |
123 | * @return bool TRUE for success |
124 | */ | |
125 | static function addNameFieldOptions(CRM_Queue_TaskContext $ctx) { | |
126 | $query = "SELECT `value` FROM `civicrm_setting` WHERE `group_name` = 'CiviCRM Preferences' AND `name` = 'contact_edit_options'"; | |
127 | $dao = CRM_Core_DAO::executeQuery($query); | |
128 | $dao->fetch(); | |
129 | $oldValue = unserialize($dao->value); | |
130 | ||
131 | $newValue = $oldValue . '12\ 114\ 115\ 116\ 117\ 1'; | |
132 | ||
133 | $query = "UPDATE `civicrm_setting` SET `value` = %1 WHERE `group_name` = 'CiviCRM Preferences' AND `name` = 'contact_edit_options'"; | |
134 | $params = array(1 => array(serialize($newValue), 'String')); | |
135 | CRM_Core_DAO::executeQuery($query, $params); | |
136 | ||
296342b1 OB |
137 | return TRUE; |
138 | } | |
139 | ||
3182e644 | 140 | /** |
141 | * Migrate honoree information to uf_join.module_data as honoree columns (text and title) will be dropped | |
142 | * on DB upgrade | |
143 | * | |
144 | * @param CRM_Queue_TaskContext $ctx | |
145 | * | |
146 | * @return bool TRUE for success | |
147 | */ | |
148 | static function migrateHonoreeInfo(CRM_Queue_TaskContext $ctx) { | |
149 | $query = "ALTER TABLE `civicrm_uf_join` | |
150 | ADD COLUMN `module_data` longtext COMMENT 'Json serialized array of data used by the ufjoin.module'"; | |
151 | CRM_Core_DAO::executeQuery($query); | |
152 | ||
153 | $honorTypes = array_keys(CRM_Core_OptionGroup::values('honor_type')); | |
154 | $ufGroupDAO = new CRM_Core_DAO_UFGroup(); | |
155 | $ufGroupDAO->name = 'new_individual'; | |
156 | $ufGroupDAO->find(TRUE); | |
157 | ||
158 | $query = "SELECT * FROM civicrm_contribution_page"; | |
159 | $dao = CRM_Core_DAO::executeQuery($query); | |
160 | ||
161 | if ($dao->N) { | |
162 | $domain = new CRM_Core_DAO_Domain; | |
163 | $domain->find(TRUE); | |
164 | while ($dao->fetch()) { | |
165 | $honorParams = array('soft_credit' => array('soft_credit_types' => $honorTypes)); | |
166 | if ($domain->locales) { | |
167 | $locales = explode(CRM_Core_DAO::VALUE_SEPARATOR, $domain->locales); | |
168 | foreach ($locales as $locale) { | |
169 | $honor_block_title = "honor_block_title_{$locale}"; | |
170 | $honor_block_text = "honor_block_text_{$locale}"; | |
171 | $honorParams['soft_credit'] += array( | |
172 | $locale => array( | |
173 | 'honor_block_title' => $dao->$honor_block_title, | |
174 | 'honor_block_text' => $dao->$honor_block_text, | |
175 | ), | |
176 | ); | |
177 | } | |
178 | } | |
179 | else { | |
180 | $honorParams['soft_credit'] += array( | |
181 | 'default' => array( | |
182 | 'honor_block_title' => $dao->honor_block_title, | |
183 | 'honor_block_text' => $dao->honor_block_text, | |
184 | ), | |
185 | ); | |
186 | } | |
187 | $ufJoinParam = array( | |
188 | 'module' => 'soft_credit', | |
189 | 'entity_table' => 'civicrm_contribution_page', | |
190 | 'is_active' => $dao->honor_block_is_active, | |
191 | 'entity_id' => $dao->id, | |
192 | 'uf_group_id' => $ufGroupDAO->id, | |
193 | 'module_data' => json_encode($honorParams), | |
194 | ); | |
195 | CRM_Core_BAO_UFJoin::create($ufJoinParam); | |
196 | } | |
197 | } | |
198 | ||
199 | return TRUE; | |
200 | } | |
201 | ||
296342b1 OB |
202 | /** |
203 | * (Queue Task Callback) | |
204 | */ | |
205 | static function task_4_5_x_runSql(CRM_Queue_TaskContext $ctx, $rev) { | |
206 | $upgrade = new CRM_Upgrade_Form(); | |
207 | $upgrade->processSQL($rev); | |
208 | ||
209 | return TRUE; | |
210 | } | |
211 | ||
212 | /** | |
d0f74b53 | 213 | * Syntactic sugar for adding a task which (a) is in this class and (b) has |
296342b1 OB |
214 | * a high priority. |
215 | * | |
216 | * After passing the $funcName, you can also pass parameters that will go to | |
217 | * the function. Note that all params must be serializable. | |
218 | */ | |
219 | protected function addTask($title, $funcName) { | |
220 | $queue = CRM_Queue_Service::singleton()->load(array( | |
221 | 'type' => 'Sql', | |
222 | 'name' => CRM_Upgrade_Form::QUEUE_NAME, | |
223 | )); | |
224 | ||
225 | $args = func_get_args(); | |
226 | $title = array_shift($args); | |
227 | $funcName = array_shift($args); | |
228 | $task = new CRM_Queue_Task( | |
229 | array(get_class($this), $funcName), | |
230 | $args, | |
231 | $title | |
232 | ); | |
233 | $queue->createItem($task, array('weight' => -1)); | |
234 | } | |
235 | } |