Browse Source

Allow translate the name of extra fields - refs BT#11015

Angel Fernando Quiroz Campos 8 years ago
parent
commit
43210addda
3 changed files with 174 additions and 32 deletions
  1. 44 11
      main/admin/sub_language.php
  2. 15 1
      main/admin/sub_language_ajax.inc.php
  3. 115 20
      main/inc/lib/extra_field.lib.php

+ 44 - 11
main/admin/sub_language.php

@@ -14,13 +14,13 @@ api_protect_admin_script();
 $htmlHeadXtra[] ='<script type="text/javascript">
  $(document).ready(function() {
 	$(".save").click(function() {
-		button_name=$(this).attr("name");
-		button_array=button_name.split("|");
-		button_name=button_array[1];
-		file_id=button_array[2];
-		is_variable_language="$"+button_name;
+		var button_name=$(this).attr("name");
+		var button_array=button_name.split("|");
+		var button_name=button_array[1];
+		var file_id=button_array[2];
+		var is_variable_language="$"+button_name;
 
-		is_new_language = $("#txtid_"+file_id+"_"+button_name).val();
+		var is_new_language = $("#txtid_"+file_id+"_"+button_name).val();
 		if (is_new_language == undefined) {
 			is_new_language="_";
     	}
@@ -28,21 +28,28 @@ $htmlHeadXtra[] ='<script type="text/javascript">
 			$.ajax({
 				contentType: "application/x-www-form-urlencoded",
 				beforeSend: function(objeto) {
-					$("#div_message_information_id").html("<div class=\"normal-message\"><img src=\'../inc/lib/javascript/indicator.gif\' /></div>");
+					$("#div_message_information_id").html("<div class=\"alert alert-info\"><img src=\'../inc/lib/javascript/indicator.gif\' /></div>");
 				},
 				type: "POST",
 				url: "../admin/sub_language_ajax.inc.php",
-				data: "new_language="+is_new_language+"&variable_language="+is_variable_language+"&file_id="+file_id+"&id="+'.intval($_REQUEST['id']).'+"&sub="+'.intval($_REQUEST['sub_language_id']).',
+				data: {
+				    \'new_language\': is_new_language,
+				    \'variable_language\': is_variable_language,
+				    \'file_id\': file_id,
+				    \'id\': ' . intval($_REQUEST['id']) . ',
+                    \'sub\': ' . intval($_REQUEST['sub_language_id']) . ',
+                    \'sub_language_id\': ' . intval($_REQUEST['sub_language_id']) . '
+				},
 				success: function(datos) {
 					if (datos == "1") {
-						$("#div_message_information_id").html("<div class=\"confirmation-message\">'.get_lang('TheNewWordHasBeenAdded').'</div>");
+						$("#div_message_information_id").html(\'' . Display::return_message(get_lang('TheNewWordHasBeenAdded'), 'success') . '\');
 					} else {
-						$("#div_message_information_id").html("<div class=\"warning-message\">" + datos +"</div>");
+						$("#div_message_information_id").html("<div class=\"alert alert-warning\">" + datos +"</div>");
 					}
 				}
 			});
 		} else {
-			$("#div_message_information_id").html("<div class=\"error-message\">'.get_lang('FormHasErrorsPleaseComplete').'</div>");
+			$("#div_message_information_id").html(\'' . Display::return_message(get_lang('FormHasErrorsPleaseComplete'), 'error') . '\');
 		}
 	});
 });
@@ -302,6 +309,32 @@ if (isset($_REQUEST['txt_search_word'])) {
 	}
 }
 
+if (isset($_GET['extra_field']) && !empty($_GET['extra_field'])) {
+    $extraFieldInfo = ExtraField::getExtraFieldInfoById($_GET['extra_field'], false);
+    $platformLanguage = api_get_setting('platformLanguage');
+    $languageId = api_get_language_id($platformLanguage);
+    $languageInfo = api_get_language_info($languageId);
+    $translateUrl = api_get_path(WEB_CODE_PATH) . 'admin/sub_language_ajax.inc.php';
+
+    $form = new FormValidator('new_lang_variable', 'POST', $translateUrl);
+    $form->addHeader(get_lang('AddWordForTheSubLanguage'));
+    $form->addText('variable_language', get_lang('LanguageVariable'), false);
+    $form->addText('original_name', get_lang('OriginalName'), false);
+    $form->addText('new_language', get_lang('SubLanguage'));
+    $form->addHidden('file_id', 0);
+    $form->addHidden('id', $languageInfo['parent_id']);
+    $form->addHidden('sub', $languageInfo['id']);
+    $form->addHidden('sub_language_id', $languageInfo['id']);
+    $form->addHidden('redirect', true);
+    $form->addButtonSave(get_lang('Save'));
+    $form->setDefaults([
+        'variable_language' => '$' . api_underscore_to_camel_case($extraFieldInfo['variable']),
+        'original_name' => $extraFieldInfo['display_text']
+    ]);
+    $form->freeze(['variable_language', 'original_name']);
+    $form->display();
+}
+
 $parameters = array(
 	'id' => intval($_GET['id']),
 	'sub_language_id' => intval($_GET['sub_language_id']),

+ 15 - 1
main/admin/sub_language_ajax.inc.php

@@ -44,10 +44,24 @@ if (isset($new_language) && isset($language_variable) && isset($file_id)) {
             }
         }
     }
+
+    if (isset($_REQUEST['redirect'])) {
+        Display::addFlash(
+            Display::return_message(get_lang('TheNewWordHasBeenAdded'), 'success')
+        );
+
+        header('Location: ' . api_get_path(WEB_CODE_PATH) . 'admin/sub_language.php?' . http_build_query([
+            'id' => $id_language,
+            'sub_language_id' => $sub_language_id,
+            'txt_search_word' => ltrim($language_variable, '$')
+        ]));
+        exit;
+    }
+
     if (!empty($variables_with_problems)) {
         echo $path_folder.' '.get_lang('IsNotWritable').'<br /> '.api_ucwords(get_lang('ErrorsFound')).': <br />'.$variables_with_problems;
     } else {
-        echo get_lang('Saved');
+        echo 1;
     }
 }
 

+ 115 - 20
main/inc/lib/extra_field.lib.php

@@ -223,6 +223,10 @@ class ExtraField extends Model
         $option = new ExtraFieldOption($this->type);
         if (!empty($extraFields)) {
             foreach ($extraFields as &$extraField) {
+                $extraField['display_text'] = self::translateDisplayName(
+                    $extraField['variable'],
+                    $extraField['display_text']
+                );
                 $extraField['options'] = $option->get_field_options_by_field(
                     $extraField['id'],
                     false,
@@ -249,6 +253,7 @@ class ExtraField extends Model
         $result = Database::query($sql);
         if (Database::num_rows($result)) {
             $row = Database::fetch_array($result, 'ASSOC');
+            $row['display_text'] = ExtraField::translateDisplayName($row['variable'], $row['display_text']);
 
             // All the options of the field
             $sql = "SELECT * FROM $this->table_field_options
@@ -1702,11 +1707,30 @@ EOF;
         if ($action == 'edit') {
             $header = get_lang('Modify');
             // Setting the defaults
-            $defaults = $this->get($id);
+            $defaults = $this->get($id, false);
         }
 
         $form->addElement('header', $header);
-        $form->addElement('text', 'display_text', get_lang('Name'), array('class' => 'span5'));
+
+        if ($action === 'edit') {
+            $platformLanguage = api_get_setting('platformLanguage');
+            $languageId = api_get_language_id($platformLanguage);
+            $languageInfo = api_get_language_info($languageId);
+
+            $translateUrl = api_get_path(WEB_CODE_PATH) . 'admin/sub_language.php?' . http_build_query([
+                'id' => $languageInfo['parent_id'],
+                'action' => 'registersublanguage',
+                'sub_language_id' => $languageInfo['id'],
+                'extra_field' => $id
+            ]);
+            $translateButton = Display::toolbarButton(get_lang('TranslateThisTerm'), $translateUrl, 'language', 'link');
+            $form->addText(
+                'display_text',
+                [get_lang('Name'), $translateButton]
+            );
+        } else {
+            $form->addText('display_text', get_lang('Name'));
+        }
 
         // Field type
         $types = self::get_field_types();
@@ -1808,36 +1832,43 @@ EOF;
         $form->setDefaults($defaults);
 
         // Setting the rules
-        $form->addRule('display_text', get_lang('ThisFieldIsRequired'), 'required');
         $form->addRule('field_type', get_lang('ThisFieldIsRequired'), 'required');
 
         return $form;
     }
 
     /**
-     * @param $token
+     * With this function we can add actions to the jgrid (edit, delete, etc)
+     * @param string $token
      * @return string
      */
     public function getJqgridActionLinks($token)
     {
         //With this function we can add actions to the jgrid (edit, delete, etc)
-        return 'function action_formatter(cellvalue, options, rowObject) {
-         return \'<a href="?action=edit&type='.$this->type.'&id=\'+options.rowId+\'">'.Display::return_icon(
-            'edit.png',
-            get_lang('Edit'),
-            '',
-            ICON_SIZE_SMALL
-        ).'</a>'.
-        '&nbsp;<a onclick="javascript:if(!confirm('."\'".addslashes(
+        $editIcon = Display::return_icon('edit.png', get_lang('Edit'), '', ICON_SIZE_SMALL);
+        $deleteIcon = Display::return_icon('delete.png', get_lang('Delete'), '', ICON_SIZE_SMALL);
+        $confirmMessage = addslashes(
             api_htmlentities(get_lang("ConfirmYourChoice"), ENT_QUOTES)
-        )."\'".')) return false;"  href="?sec_token='.$token.'&type='.$this->type.'&action=delete&id=\'+options.rowId+\'">'.Display::return_icon(
-            'delete.png',
-            get_lang('Delete'),
-            '',
-            ICON_SIZE_SMALL
-        ).'</a>'.
-        '\';
-        }';
+        );
+
+        $editButton = <<<JAVASCRIPT
+            <a href="?action=edit&type={$this->type}&id=' + options.rowId + '" class="btn btn-link btn-xs">\
+                $editIcon\
+            </a>
+JAVASCRIPT;
+        $deleteButton = <<<JAVASCRIPT
+            <a \
+                onclick="if (!confirm(\'$confirmMessage\')) {return false;}" \
+                href="?sec_token=$token&type={$this->type}&id=' + options.rowId + '&action=delete" \
+                class="btn btn-link btn-xs">\
+                $deleteIcon\
+            </a>
+JAVASCRIPT;
+
+        return "function action_formatter(cellvalue, options, rowObject) {
+        console.log(options);
+            return '$editButton $deleteButton';
+        }";
     }
 
     /**
@@ -2278,4 +2309,68 @@ EOF;
         return $valuesData;
     }
 
+    /**
+     * Gets an element
+     * @param int $id
+     * @param bool $translateDisplayText Optional
+     * @return array
+     */
+    public function get($id, $translateDisplayText = true)
+    {
+        $info = parent::get($id);
+
+        if ($translateDisplayText) {
+            $info['display_text'] = self::translateDisplayName($info['variable'], $info['display_text']);
+        }
+
+        return $info;
+    }
+
+    /**
+     * Translate the display text for a extra field
+     * @param string $variable
+     * @param string $defaultDisplayText
+     * @return string
+     */
+    public static function translateDisplayName($variable, $defaultDisplayText)
+    {
+        $camelCase = api_underscore_to_camel_case($variable);
+
+        return isset($GLOBALS[$camelCase]) ? $GLOBALS[$camelCase] : $defaultDisplayText;
+    }
+
+    /**
+     * Get the info from an extra field by its id
+     * @param int $id
+     * @param bool $translateDisplayText
+     * @return array
+     * @throws \Doctrine\ORM\ORMException
+     * @throws \Doctrine\ORM\OptimisticLockException
+     * @throws \Doctrine\ORM\TransactionRequiredException
+     */
+    public static function getExtraFieldInfoById($id, $translateDisplayText = true)
+    {
+        $extraField = Database::getManager()
+            ->find('ChamiloCoreBundle:ExtraField', $id);
+
+        $objExtraField = null;
+
+        switch ($extraField->getExtraFieldType()) {
+            case \Chamilo\CoreBundle\Entity\ExtraField::USER_FIELD_TYPE:
+                $objExtraField = new self('user');
+                break;
+            case \Chamilo\CoreBundle\Entity\ExtraField::COURSE_FIELD_TYPE:
+                $objExtraField = new self('course');
+                break;
+            case \Chamilo\CoreBundle\Entity\ExtraField::SESSION_FIELD_TYPE:
+                $objExtraField = new self('session');
+                break;
+        }
+
+        if (!$objExtraField) {
+            return [];
+        }
+
+        return $objExtraField->get($extraField->getId(), $translateDisplayText);
+    }
 }