3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.4 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2013 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
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. |
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. |
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 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2013
35 class CRM_Admin_Form_WordReplacements
extends CRM_Core_Form
{
36 protected $_numStrings = 10;
38 protected $_stringName = NULL;
40 protected $_defaults = NULL;
42 function preProcess() {
43 // This controller was originally written to CRUD $config->locale_custom_strings,
44 // but that's no longer the canonical store. Re-sync from canonical store to ensure
45 // that we display that latest data. This is inefficient - at some point, we
46 // should rewrite this UI.
47 CRM_Core_BAO_WordReplacement
::rebuild();
49 $this->_soInstance
= CRM_Utils_Array
::value('instance', $_GET);
50 $this->assign('soInstance', $this->_soInstance
);
51 $breadCrumbUrl = CRM_Utils_System
::url('civicrm/admin/options/wordreplacements',
54 $breadCrumb = array(array('title' => ts('Word Replacements'),
55 'url' => $breadCrumbUrl,
57 CRM_Utils_System
::appendBreadCrumb($breadCrumb);
60 public function setDefaultValues() {
61 if ($this->_defaults
!== NULL) {
62 return $this->_defaults
;
65 $this->_defaults
= array();
67 $config = CRM_Core_Config
::singleton();
69 $values = $config->localeCustomStrings
[$config->lcMessages
];
72 $enableDisable = array(
77 $cardMatch = array('wildcardMatch', 'exactMatch');
79 foreach ($enableDisable as $key => $val) {
80 foreach ($cardMatch as $kc => $vc) {
81 if (!empty($values[$val][$vc])) {
82 foreach ($values[$val][$vc] as $k => $v) {
83 $this->_defaults
["enabled"][$i] = $key;
84 $this->_defaults
["cb"][$i] = $kc;
85 $this->_defaults
["old"][$i] = $k;
86 $this->_defaults
["new"][$i] = $v;
93 $name = $this->_stringName
= "custom_string_override_{$config->lcMessages}";
94 if (isset($config->$name) &&
95 is_array($config->$name)
97 $this->_numStrings
= 1;
98 foreach ($config->$name as $old => $newValues) {
100 $this->_numStrings +
= 9;
104 $this->_numStrings
= 10;
107 return $this->_defaults
;
111 * Function to actually build the form
116 public function buildQuickForm() {
117 $config = CRM_Core_Config
::singleton();
118 $values = $config->localeCustomStrings
[$config->lcMessages
];
119 $instances = (count($values, COUNT_RECURSIVE
) - 6);
120 if ($instances > 10) {
121 $this->_numStrings
= $instances;
124 $soInstances = range(1, $this->_numStrings
, 1);
125 $stringOverrideInstances = array();
126 if ($this->_soInstance
) {
127 $soInstances = array($this->_soInstance
);
129 elseif (CRM_Utils_Array
::value('old', $_POST)) {
130 $soInstances = $stringOverrideInstances = array_keys($_POST['old']);
132 elseif (!empty($this->_defaults
) && is_array($this->_defaults
)) {
133 $stringOverrideInstances = array_keys($this->_defaults
['new']);
134 if (count($this->_defaults
['old']) > count($this->_defaults
['new'])) {
135 $stringOverrideInstances = array_keys($this->_defaults
['old']);
138 foreach ($soInstances as $instance) {
139 $this->addElement('checkbox', "enabled[$instance]");
140 $this->add('textarea', "old[$instance]", NULL, array('rows' => 1, 'cols' => 40));
141 $this->add('textarea', "new[$instance]", NULL, array('rows' => 1, 'cols' => 40));
142 $this->addElement('checkbox', "cb[$instance]");
144 $this->assign('numStrings', $this->_numStrings
);
145 if ($this->_soInstance
) {
149 $this->assign('stringOverrideInstances', empty($stringOverrideInstances) ?
FALSE : $stringOverrideInstances);
151 $this->addButtons(array(
154 'name' => ts('Save'),
159 'name' => ts('Cancel'),
163 $this->addFormRule(array('CRM_Admin_Form_WordReplacements', 'formRule'), $this);
167 * global validation rules for the form
169 * @param array $values posted values of the form
171 * @return array list of errors to be posted back to the form
175 static function formRule($values) {
178 $oldValues = CRM_Utils_Array
::value('old', $values);
179 $newValues = CRM_Utils_Array
::value('new', $values);
180 $enabled = CRM_Utils_Array
::value('enabled', $values);
181 $exactMatch = CRM_Utils_Array
::value('cb', $values);
183 foreach ($oldValues as $k => $v) {
184 if ($v && !$newValues[$k]) {
185 $errors['new[' . $k . ']'] = ts('Please Enter the value for Replacement Word');
187 elseif (!$v && $newValues[$k]) {
188 $errors['old[' . $k . ']'] = ts('Please Enter the value for Original Word');
190 elseif ((!CRM_Utils_Array
::value($k, $newValues) && !CRM_Utils_Array
::value($k, $oldValues))
191 && (CRM_Utils_Array
::value($k, $enabled) || CRM_Utils_Array
::value($k, $exactMatch))
193 $errors['old[' . $k . ']'] = ts('Please Enter the value for Original Word');
194 $errors['new[' . $k . ']'] = ts('Please Enter the value for Replacement Word');
202 * Function to process the form
208 public function postProcess() {
209 $params = $this->controller
->exportValues($this->_name
);
210 $this->_numStrings
= sizeof($params['old']);
212 $enabled['exactMatch'] = $enabled['wildcardMatch'] = $disabled['exactMatch'] = $disabled['wildcardMatch'] = array();
213 for ($i = 1; $i <= $this->_numStrings
; $i++
) {
214 if (CRM_Utils_Array
::value($i, $params['new']) &&
215 CRM_Utils_Array
::value($i, $params['old'])
217 if (isset($params['enabled']) && CRM_Utils_Array
::value($i, $params['enabled'])) {
218 if (CRM_Utils_Array
::value('cb', $params) &&
219 CRM_Utils_Array
::value($i, $params['cb'])
221 $enabled['exactMatch'] +
= array($params['old'][$i] => $params['new'][$i]);
224 $enabled['wildcardMatch'] +
= array($params['old'][$i] => $params['new'][$i]);
228 if (isset($params['cb']) && is_array($params['cb']) && array_key_exists($i, $params['cb'])) {
229 $disabled['exactMatch'] +
= array($params['old'][$i] => $params['new'][$i]);
232 $disabled['wildcardMatch'] +
= array($params['old'][$i] => $params['new'][$i]);
239 'enabled' => $enabled,
240 'disabled' => $disabled,
243 $config = CRM_Core_Config
::singleton();
245 $domain = new CRM_Core_DAO_Domain();
248 if ($domain->locales
&& $config->localeCustomStrings
) {
250 $addReplacements = $config->localeCustomStrings
;
251 $addReplacements[$config->lcMessages
] = $overrides;
252 $stringOverride = serialize($addReplacements);
255 // for single language
256 $stringOverride = serialize(array($config->lcMessages
=> $overrides));
259 $params = array('locale_custom_strings' => $stringOverride);
260 $id = CRM_Core_Config
::domainID();
262 $wordReplacementSettings = CRM_Core_BAO_Domain
::edit($params, $id);
264 if ($wordReplacementSettings) {
265 // This controller was originally written to CRUD $config->locale_custom_strings,
266 // but that's no longer the canonical store. Sync changes to canonical store.
267 // This is inefficient - at some point, we should rewrite this UI.
268 CRM_Core_BAO_WordReplacement
::rebuildWordReplacementTable();
270 CRM_Core_Session
::setStatus("", ts("Settings Saved"), "success");
271 CRM_Utils_System
::redirect(CRM_Utils_System
::url('civicrm/admin/options/wordreplacements',