1: <?php
2:
3: /*****************************************************************************************
4: * X2Engine Open Source Edition is a customer relationship management program developed by
5: * X2Engine, Inc. Copyright (C) 2011-2016 X2Engine Inc.
6: *
7: * This program is free software; you can redistribute it and/or modify it under
8: * the terms of the GNU Affero General Public License version 3 as published by the
9: * Free Software Foundation with the addition of the following permission added
10: * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11: * IN WHICH THE COPYRIGHT IS OWNED BY X2ENGINE, X2ENGINE DISCLAIMS THE WARRANTY
12: * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13: *
14: * This program is distributed in the hope that it will be useful, but WITHOUT
15: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16: * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
17: * details.
18: *
19: * You should have received a copy of the GNU Affero General Public License along with
20: * this program; if not, see http://www.gnu.org/licenses or write to the Free
21: * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22: * 02110-1301 USA.
23: *
24: * You can contact X2Engine, Inc. P.O. Box 66752, Scotts Valley,
25: * California 95067, USA. or at email address contact@x2engine.com.
26: *
27: * The interactive user interfaces in modified source and object code versions
28: * of this program must display Appropriate Legal Notices, as required under
29: * Section 5 of the GNU Affero General Public License version 3.
30: *
31: * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32: * these Appropriate Legal Notices must retain the display of the "Powered by
33: * X2Engine" logo. If the display of the logo is not reasonably feasible for
34: * technical reasons, the Appropriate Legal Notices must display the words
35: * "Powered by X2Engine".
36: *****************************************************************************************/
37:
38: $migrateTemplates = function() {
39: $contactsTitle = getModuleTitle('contacts');
40: $contactsPattern = '/{' . $contactsTitle . '\.(.*?)}/';
41: $contactsReplacement = '{associatedContacts.$1}';
42: $accountsTitle = getModuleTitle('accounts');
43: $accountsPattern = '/{' . $accountsTitle . '\.(.*?)}/';
44: $accountsReplacement = '{accountName.$1}';
45: $quotesTitle = getModuleTitle('quotes');
46: $quotesPattern = '/{' . $quotesTitle . '\.(.*?)}/';
47: $quotesReplacement = '{$1}';
48:
49: $quotes = Yii::app()->db->createCommand()
50: ->select('id, text')
51: ->from('x2_docs')
52: ->where('type = "quote"')
53: ->queryAll();
54:
55: foreach ($quotes as $quote) {
56: $text = $quote['text'];
57: $text = preg_replace($contactsPattern, $contactsReplacement, $text);
58: $text = preg_replace($accountsPattern, $accountsReplacement, $text);
59: $text = preg_replace($quotesPattern, $quotesReplacement, $text);
60: Yii::app()->db->createCommand()
61: ->update('x2_docs', array('text' => $text), 'id = :id',
62: array(':id' => $quote['id']));
63: }
64: };
65:
66: function getModuleTitle($module, $plural = false) {
67: $moduleTitle = Yii::app()->db->createCommand()
68: ->select('title')
69: ->from('x2_modules')
70: ->where("name = :name")
71: ->bindValue(':name', $module)
72: ->limit(1)
73: ->queryScalar();
74:
75: if (!$moduleTitle) return false;
76:
77: if (Yii::app()->locale->id === 'en') {
78: // Handle silly English pluralization
79: if ($plural === false) {
80: if (preg_match('/ies$/', $moduleTitle)) {
81: $moduleTitle = preg_replace('/ies$/', 'y', $moduleTitle);
82: } else if (preg_match('/ses$/', $moduleTitle)) {
83: $moduleTitle = preg_replace('/es$/', '', $moduleTitle);
84: } else if ($moduleTitle !== 'Process') {
85: // Otherwise chop the trailing s
86: $moduleTitle = trim($moduleTitle, 's');
87: }
88: } elseif ($plural === 'optional') {
89: if (preg_match('/y$/', $moduleTitle)) {
90: $moduleTitle = preg_replace('/y$/', '(ies)', $moduleTitle);
91: } else if (preg_match('/ss$/', $moduleTitle)) {
92: $moduleTitle .= '(es)';
93: } else if (in_array($moduleTitle, array('Service'))) {
94: $moduleTitle .= '(s)';
95: } elseif (preg_match('/s$/', $moduleTitle)) {
96: $moduleTitle = preg_replace('/s$/', '(s)', $moduleTitle);
97: }
98: } else {
99: if (preg_match('/y$/', $moduleTitle)) {
100: $moduleTitle = preg_replace('/y$/', 'ies', $moduleTitle);
101: } else if (preg_match('/ss$/', $moduleTitle)) {
102: $moduleTitle .= 'es';
103: } else if (in_array($moduleTitle, array('Service'))) {
104: $moduleTitle .= 's';
105: }
106: }
107: }
108: return $moduleTitle;
109: }
110:
111: $migrateTemplates();