3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2015 |
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-2015
35 class CRM_Core_I18n_Form
extends CRM_Core_Form
{
36 public function buildQuickForm() {
37 $config = CRM_Core_Config
::singleton();
39 $this->_locales
= array_keys($config->languageLimit
);
41 // get the part of the database we want to edit and validate it
42 $table = CRM_Utils_Request
::retrieve('table', 'String', $this);
43 $field = CRM_Utils_Request
::retrieve('field', 'String', $this);
44 $id = CRM_Utils_Request
::retrieve('id', 'Int', $this);
45 $this->_structure
= CRM_Core_I18n_SchemaStructure
::columns();
46 if (!isset($this->_structure
[$table][$field])) {
47 CRM_Core_Error
::fatal("$table.$field is not internationalized.");
50 $this->addElement('hidden', 'table', $table);
51 $this->addElement('hidden', 'field', $field);
52 $this->addElement('hidden', 'id', $id);
55 foreach ($this->_locales
as $locale) {
56 $cols[] = "{$field}_{$locale} {$locale}";
58 $query = 'SELECT ' . implode(', ', $cols) . " FROM $table WHERE id = $id";
60 $dao = new CRM_Core_DAO();
61 $dao->query($query, FALSE);
64 // get html type and attributes for this field
65 $widgets = CRM_Core_I18n_SchemaStructure
::widgets();
66 $widget = $widgets[$table][$field];
69 $attributes = array('class' => '');
70 if (isset($widget['rows'])) {
71 $attributes['rows'] = $widget['rows'];
73 if (isset($widget['cols'])) {
74 $attributes['cols'] = $widget['cols'];
76 $required = !empty($widget['required']);
78 if ($widget['type'] == 'RichTextEditor') {
79 $widget['type'] = 'wysiwyg';
80 $attributes['class'] .= ' collapsed';
83 $languages = CRM_Core_I18n
::languages(TRUE);
84 foreach ($this->_locales
as $locale) {
86 $name = "{$field}_{$locale}";
87 if ($locale == $tsLocale) {
88 $attr['class'] .= ' default-lang';
90 $this->add($widget['type'], $name, $languages[$locale], $attr, $required);
92 $this->_defaults
[$name] = $dao->$locale;
95 $this->addDefaultButtons(ts('Save'), 'next', NULL);
97 CRM_Utils_System
::setTitle(ts('Languages'));
99 $this->assign('locales', $this->_locales
);
100 $this->assign('field', $field);
104 * This virtual function is used to set the default values of
105 * various form elements
110 * reference to the array of default values
112 public function setDefaultValues() {
113 return $this->_defaults
;
116 public function postProcess() {
117 $values = $this->exportValues();
118 $table = $values['table'];
119 $field = $values['field'];
121 // validate table and field
122 if (!isset($this->_structure
[$table][$field])) {
123 CRM_Core_Error
::fatal("$table.$field is not internationalized.");
127 $params = array(array($values['id'], 'Int'));
129 foreach ($this->_locales
as $locale) {
130 $cols[] = "{$field}_{$locale} = %$i";
131 $params[$i] = array($values["{$field}_{$locale}"], 'String');
134 $query = "UPDATE $table SET " . implode(', ', $cols) . " WHERE id = %0";
135 $dao = new CRM_Core_DAO();
136 $query = CRM_Core_DAO
::composeQuery($query, $params, TRUE);
137 $dao->query($query, FALSE);