Merge pull request #1813 from totten/4.4-mkdrupaltestsite-space
[civicrm-core.git] / CRM / Core / BAO / WordReplacement.php
CommitLineData
d83a3991 1<?php
2/*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.4 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2013 |
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 and the CiviCRM Licensing Exception. |
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 and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
26*/
27
28/**
29 *
30 * @package CRM
31 * @copyright CiviCRM LLC (c) 2004-2013
32 * $Id$
33 *
34 */
35
36/**
37 *
38 */
39class CRM_Core_BAO_WordReplacement extends CRM_Core_DAO_WordReplacement {
40
41 function __construct() {
42 parent::__construct();
43 }
44 /**
45 * Takes a bunch of params that are needed to match certain criteria and
46 * retrieves the relevant objects.
47 *
48 * @param array $params (reference ) an assoc array of name/value pairs
49 * @param array $defaults (reference ) an assoc array to hold the flattened values
50 *
51 * @return object CRM_Core_DAO_WordRepalcement object
52 * @access public
53 * @static
54 */
55
56 static function retrieve(&$params, &$defaults) {
57 return CRM_Core_DAO::commonRetrieve('CRM_Core_DAO_WordRepalcement', $params, $defaults);
58 }
59
60 /**
61 * Get the domain BAO
62 *
63 * @return null|object CRM_Core_BAO_WordRepalcement
64 * @access public
65 * @static
66 */
f01484bc 67 static function getWordReplacement($reset = NULL) {
d83a3991 68 static $wordReplacement = NULL;
69 if (!$wordReplacement || $reset) {
70 $wordReplacement = new CRM_Core_BAO_WordRepalcement();
71 $wordReplacement->id = CRM_Core_Config::wordReplacementID();
72 if (!$wordReplacement->find(TRUE)) {
73 CRM_Core_Error::fatal();
74 }
75 }
76 return $wordReplacement;
77 }
78
79
80 /**
81 * Save the values of a WordReplacement
82 *
83 * @return WordReplacement array
84 * @access public
85 */
86 static function edit(&$params, &$id) {
87 $wordReplacement = new CRM_Core_DAO_WordReplacement();
88 $wordReplacement->id = $id;
89 $wordReplacement->copyValues($params);
90 $wordReplacement->save();
63b71ea8
TO
91 if (!isset($params['options']) || CRM_Utils_Array::value('wp-rebuild', $params['options'], TRUE)) {
92 self::rebuild();
93 }
d83a3991 94 return $wordReplacement;
95 }
96
97 /**
98 * Create a new WordReplacement
99 *
100 * @return WordReplacement array
101 * @access public
102 */
103 static function create($params) {
f01484bc 104 if(array_key_exists("domain_id",$params) === FALSE) {
d83a3991 105 $params["domain_id"] = CRM_Core_Config::domainID();
106 }
107 $wordReplacement = new CRM_Core_DAO_WordReplacement();
108 $wordReplacement->copyValues($params);
109 $wordReplacement->save();
63b71ea8
TO
110 if (!isset($params['options']) || CRM_Utils_Array::value('wp-rebuild', $params['options'], TRUE)) {
111 self::rebuild();
112 }
d83a3991 113 return $wordReplacement;
114 }
115
116 /**
117 * Delete website
118 *
119 * @param int $id WordReplacement id
120 *
121 * @return object
122 * @static
123 */
124 static function del($id) {
125 $dao = new CRM_Core_DAO_WordReplacement();
126 $dao->id = $id;
127 $dao->delete();
63b71ea8
TO
128 if (!isset($params['options']) || CRM_Utils_Array::value('wp-rebuild', $params['options'], TRUE)) {
129 self::rebuild();
130 }
d83a3991 131 return $dao;
132 }
d83a3991 133
f01484bc
TO
134 /**
135 * Get all word-replacements in the form of an array
136 *
137 * @param int $id domain ID
138 * @return array
139 * @see civicrm_domain.locale_custom_strings
140 */
141 public static function getAllAsConfigArray($id) {
675605a7 142 $query = "SELECT find_word,replace_word,is_active,match_type FROM civicrm_word_replacement WHERE domain_id = ".CRM_Utils_Type::escape($id, 'Integer');
d83a3991 143 $dao = CRM_Core_DAO::executeQuery($query);
675605a7 144
d83a3991 145 while ($dao->fetch()) {
675605a7 146 if ($dao->is_active==1) {
147 $overrides['enabled'][$dao->match_type][$dao->find_word] = $dao->replace_word;
148 } else {
149 $overrides['disabled'][$dao->match_type][$dao->find_word] = $dao->replace_word;
150 }
d83a3991 151 }
d83a3991 152 $config = CRM_Core_Config::singleton();
153 $domain = new CRM_Core_DAO_Domain();
154 $domain->find(TRUE);
155
156 if ($domain->locales && $config->localeCustomStrings) {
157 // for multilingual
158 $addReplacements = $config->localeCustomStrings;
159 $addReplacements[$config->lcMessages] = $overrides;
f01484bc 160 $stringOverride = $addReplacements;
d83a3991 161 }
162 else {
163 // for single language
f01484bc 164 $stringOverride = array($config->lcMessages => $overrides);
d83a3991 165 }
166
f01484bc
TO
167 return $stringOverride;
168 }
d83a3991 169
f01484bc
TO
170 /**
171 * Rebuild
172 */
173 static function rebuild() {
174 $id = CRM_Core_Config::domainID();
175 $stringOverride = self::getAllAsConfigArray($id);
176 $params = array('locale_custom_strings' => serialize($stringOverride));
d83a3991 177 $wordReplacementSettings = CRM_Core_BAO_Domain::edit($params, $id);
d83a3991 178 if ($wordReplacementSettings) {
0f65e834
TO
179 CRM_Core_Config::singleton()->localeCustomStrings = $stringOverride;
180
d83a3991 181 // Reset navigation
182 CRM_Core_BAO_Navigation::resetNavigation();
183 // Clear js string cache
184 CRM_Core_Resources::singleton()->flushStrings();
f01484bc
TO
185
186 return TRUE;
d83a3991 187 }
f01484bc
TO
188
189 return FALSE;
d83a3991 190 }
0f65e834
TO
191
192 /**
193 * Get all the word-replacements stored in config-arrays
194 * and convert them to params for the WordReplacement.create API.
195 *
196 * Note: This function is duplicated in CRM_Core_BAO_WordReplacement and
197 * CRM_Upgrade_Incremental_php_FourFour to ensure that the incremental upgrade
198 * step behaves consistently even as the BAO evolves in future versions.
199 * However, if there's a bug in here prior to 4.4.0, we should apply the
200 * bugfix in both places.
201 *
202 * @param bool $rebuildEach whether to perform rebuild after each individual API call
203 * @return array Each item is $params for WordReplacement.create
204 * @see CRM_Core_BAO_WordReplacement::convertConfigArraysToAPIParams
205 */
206 static function getConfigArraysAsAPIParams($rebuildEach) {
207 $wordReplacementCreateParams = array();
208 // get all domains
209 $result = civicrm_api3('domain', 'get', array(
675605a7 210 'return' => array('locale_custom_strings'),
211 ));
0f65e834
TO
212 if (!empty($result["values"])) {
213 foreach ($result["values"] as $value) {
214 $params = array();
0f65e834
TO
215 $params["domain_id"] = $value["id"];
216 $params["options"] = array('wp-rebuild' => $rebuildEach);
217 // unserialize word match string
218 $localeCustomArray = unserialize($value["locale_custom_strings"]);
219 if (!empty($localeCustomArray)) {
220 $wordMatchArray = array();
675605a7 221 // Traverse Language array
0f65e834 222 foreach ($localeCustomArray as $localCustomData) {
675605a7 223 // Traverse status array "enabled" "disabled"
224 foreach ($localCustomData as $status => $matchTypes) {
225 $params["is_active"] = ($status == "enabled")?TRUE:FALSE;
226 // Traverse Match Type array "wildcardMatch" "exactMatch"
227 foreach ($matchTypes as $matchType => $words) {
228 $params["match_type"] = $matchType;
229 foreach ($words as $word => $replace) {
230 $params["find_word"] = $word;
231 $params["replace_word"] = $replace;
232 $wordReplacementCreateParams[] = $params;
233 }
234 }
235 }
0f65e834
TO
236 }
237 }
238 }
239 }
240 return $wordReplacementCreateParams;
241 }
242
243 /**
244 * Get all the word-replacements stored in config-arrays
245 * and write them out as records in civicrm_word_replacement.
246 *
247 * Note: This function is duplicated in CRM_Core_BAO_WordReplacement and
248 * CRM_Upgrade_Incremental_php_FourFour to ensure that the incremental upgrade
249 * step behaves consistently even as the BAO evolves in future versions.
250 * However, if there's a bug in here prior to 4.4.0, we should apply the
251 * bugfix in both places.
252 */
253 public static function rebuildWordReplacementTable() {
254 civicrm_api3('word_replacement', 'replace', array(
255 'options' => array('match' => array('domain_id', 'find_word')),
256 'values' => self::getConfigArraysAsAPIParams(FALSE),
257 ));
258 CRM_Core_BAO_WordReplacement::rebuild();
259 }
d83a3991 260}
261