3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2017 |
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-2017
33 class CRM_Admin_Form_WordReplacements
extends CRM_Core_Form
{
34 protected $_numStrings = 10;
36 protected $_stringName = NULL;
38 public $unsavedChangesWarn = TRUE;
41 * Pre process function.
43 public function preProcess() {
44 // This controller was originally written to CRUD $config->locale_custom_strings,
45 // but that's no longer the canonical store. Re-sync from canonical store to ensure
46 // that we display that latest data. This is inefficient - at some point, we
47 // should rewrite this UI.
48 CRM_Core_BAO_WordReplacement
::rebuild(FALSE);
50 $this->_soInstance
= CRM_Utils_Array
::value('instance', $_GET);
51 $this->assign('soInstance', $this->_soInstance
);
59 public function setDefaultValues() {
60 if (!empty($this->_defaults
)) {
61 return $this->_defaults
;
64 $this->_defaults
= array();
66 $config = CRM_Core_Config
::singleton();
68 $values = CRM_Core_BAO_WordReplacement
::getLocaleCustomStrings($config->lcMessages
);
71 $enableDisable = array(
76 $cardMatch = array('wildcardMatch', 'exactMatch');
78 foreach ($enableDisable as $key => $val) {
79 foreach ($cardMatch as $kc => $vc) {
80 if (!empty($values[$val][$vc])) {
81 foreach ($values[$val][$vc] as $k => $v) {
82 $this->_defaults
["enabled"][$i] = $key;
83 $this->_defaults
["cb"][$i] = $kc;
84 $this->_defaults
["old"][$i] = $k;
85 $this->_defaults
["new"][$i] = $v;
92 return $this->_defaults
;
96 * Build the form object.
98 public function buildQuickForm() {
99 $config = CRM_Core_Config
::singleton();
100 $values = CRM_Core_BAO_WordReplacement
::getLocaleCustomStrings($config->lcMessages
);
104 foreach ($values as $valMatchType) {
105 foreach ($valMatchType as $valPairs) {
106 $instances +
= count($valPairs);
110 if ($instances > 10) {
111 $this->_numStrings
= $instances;
114 $soInstances = range(1, $this->_numStrings
, 1);
115 $stringOverrideInstances = array();
116 if ($this->_soInstance
) {
117 $soInstances = array($this->_soInstance
);
119 elseif (!empty($_POST['old'])) {
120 $soInstances = $stringOverrideInstances = array_keys($_POST['old']);
122 elseif (!empty($this->_defaults
) && is_array($this->_defaults
)) {
123 $stringOverrideInstances = array_keys($this->_defaults
['new']);
124 if (count($this->_defaults
['old']) > count($this->_defaults
['new'])) {
125 $stringOverrideInstances = array_keys($this->_defaults
['old']);
128 foreach ($soInstances as $instance) {
129 $this->addElement('checkbox', "enabled[$instance]");
130 $this->add('textarea', "old[$instance]", NULL, array('rows' => 1, 'cols' => 40));
131 $this->add('textarea', "new[$instance]", NULL, array('rows' => 1, 'cols' => 40));
132 $this->addElement('checkbox', "cb[$instance]");
134 $this->assign('numStrings', $this->_numStrings
);
135 if ($this->_soInstance
) {
139 $this->assign('stringOverrideInstances', empty($stringOverrideInstances) ?
FALSE : $stringOverrideInstances);
141 $this->addButtons(array(
144 'name' => ts('Save'),
149 'name' => ts('Cancel'),
153 $this->addFormRule(array('CRM_Admin_Form_WordReplacements', 'formRule'), $this);
157 * Global validation rules for the form.
159 * @param array $values
160 * Posted values of the form.
163 * list of errors to be posted back to the form
165 public static function formRule($values) {
168 $oldValues = CRM_Utils_Array
::value('old', $values);
169 $newValues = CRM_Utils_Array
::value('new', $values);
170 $enabled = CRM_Utils_Array
::value('enabled', $values);
171 $exactMatch = CRM_Utils_Array
::value('cb', $values);
173 foreach ($oldValues as $k => $v) {
174 if ($v && !$newValues[$k]) {
175 $errors['new[' . $k . ']'] = ts('Please Enter the value for Replacement Word');
177 elseif (!$v && $newValues[$k]) {
178 $errors['old[' . $k . ']'] = ts('Please Enter the value for Original Word');
180 elseif ((empty($newValues[$k]) && empty($oldValues[$k]))
181 && (!empty($enabled[$k]) ||
!empty($exactMatch[$k]))
183 $errors['old[' . $k . ']'] = ts('Please Enter the value for Original Word');
184 $errors['new[' . $k . ']'] = ts('Please Enter the value for Replacement Word');
192 * Process the form submission.
194 public function postProcess() {
195 $params = $this->controller
->exportValues($this->_name
);
196 $this->_numStrings
= count($params['old']);
198 $enabled['exactMatch'] = $enabled['wildcardMatch'] = $disabled['exactMatch'] = $disabled['wildcardMatch'] = array();
199 for ($i = 1; $i <= $this->_numStrings
; $i++
) {
200 if (!empty($params['new'][$i]) && !empty($params['old'][$i])) {
201 if (isset($params['enabled']) && !empty($params['enabled'][$i])) {
202 if (!empty($params['cb']) && !empty($params['cb'][$i])) {
203 $enabled['exactMatch'] +
= array($params['old'][$i] => $params['new'][$i]);
206 $enabled['wildcardMatch'] +
= array($params['old'][$i] => $params['new'][$i]);
210 if (isset($params['cb']) && is_array($params['cb']) && array_key_exists($i, $params['cb'])) {
211 $disabled['exactMatch'] +
= array($params['old'][$i] => $params['new'][$i]);
214 $disabled['wildcardMatch'] +
= array($params['old'][$i] => $params['new'][$i]);
221 'enabled' => $enabled,
222 'disabled' => $disabled,
225 $config = CRM_Core_Config
::singleton();
226 CRM_Core_BAO_WordReplacement
::setLocaleCustomStrings($config->lcMessages
, $overrides);
228 // This controller was originally written to CRUD $config->locale_custom_strings,
229 // but that's no longer the canonical store. Sync changes to canonical store
230 // (civicrm_word_replacement table in the database).
231 // This is inefficient - at some point, we should rewrite this UI.
232 CRM_Core_BAO_WordReplacement
::rebuildWordReplacementTable();
234 CRM_Core_Session
::setStatus("", ts("Settings Saved"), "success");
235 CRM_Utils_System
::redirect(CRM_Utils_System
::url('civicrm/admin/options/wordreplacements',