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

pull/2487/head
Angel Fernando Quiroz Campos 9 years ago
parent 8d0df871fc
commit 43210addda
  1. 55
      main/admin/sub_language.php
  2. 16
      main/admin/sub_language_ajax.inc.php
  3. 135
      main/inc/lib/extra_field.lib.php

@ -14,13 +14,13 @@ api_protect_admin_script();
$htmlHeadXtra[] ='<script type="text/javascript"> $htmlHeadXtra[] ='<script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
$(".save").click(function() { $(".save").click(function() {
button_name=$(this).attr("name"); var button_name=$(this).attr("name");
button_array=button_name.split("|"); var button_array=button_name.split("|");
button_name=button_array[1]; var button_name=button_array[1];
file_id=button_array[2]; var file_id=button_array[2];
is_variable_language="$"+button_name; 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) { if (is_new_language == undefined) {
is_new_language="_"; is_new_language="_";
} }
@ -28,21 +28,28 @@ $htmlHeadXtra[] ='<script type="text/javascript">
$.ajax({ $.ajax({
contentType: "application/x-www-form-urlencoded", contentType: "application/x-www-form-urlencoded",
beforeSend: function(objeto) { 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", type: "POST",
url: "../admin/sub_language_ajax.inc.php", 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) { success: function(datos) {
if (datos == "1") { 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 { } 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 { } 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( $parameters = array(
'id' => intval($_GET['id']), 'id' => intval($_GET['id']),
'sub_language_id' => intval($_GET['sub_language_id']), 'sub_language_id' => intval($_GET['sub_language_id']),

@ -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)) { if (!empty($variables_with_problems)) {
echo $path_folder.' '.get_lang('IsNotWritable').'<br /> '.api_ucwords(get_lang('ErrorsFound')).': <br />'.$variables_with_problems; echo $path_folder.' '.get_lang('IsNotWritable').'<br /> '.api_ucwords(get_lang('ErrorsFound')).': <br />'.$variables_with_problems;
} else { } else {
echo get_lang('Saved'); echo 1;
} }
} }

@ -223,6 +223,10 @@ class ExtraField extends Model
$option = new ExtraFieldOption($this->type); $option = new ExtraFieldOption($this->type);
if (!empty($extraFields)) { if (!empty($extraFields)) {
foreach ($extraFields as &$extraField) { foreach ($extraFields as &$extraField) {
$extraField['display_text'] = self::translateDisplayName(
$extraField['variable'],
$extraField['display_text']
);
$extraField['options'] = $option->get_field_options_by_field( $extraField['options'] = $option->get_field_options_by_field(
$extraField['id'], $extraField['id'],
false, false,
@ -249,6 +253,7 @@ class ExtraField extends Model
$result = Database::query($sql); $result = Database::query($sql);
if (Database::num_rows($result)) { if (Database::num_rows($result)) {
$row = Database::fetch_array($result, 'ASSOC'); $row = Database::fetch_array($result, 'ASSOC');
$row['display_text'] = ExtraField::translateDisplayName($row['variable'], $row['display_text']);
// All the options of the field // All the options of the field
$sql = "SELECT * FROM $this->table_field_options $sql = "SELECT * FROM $this->table_field_options
@ -1702,11 +1707,30 @@ EOF;
if ($action == 'edit') { if ($action == 'edit') {
$header = get_lang('Modify'); $header = get_lang('Modify');
// Setting the defaults // Setting the defaults
$defaults = $this->get($id); $defaults = $this->get($id, false);
} }
$form->addElement('header', $header); $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 // Field type
$types = self::get_field_types(); $types = self::get_field_types();
@ -1808,36 +1832,43 @@ EOF;
$form->setDefaults($defaults); $form->setDefaults($defaults);
// Setting the rules // Setting the rules
$form->addRule('display_text', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('field_type', get_lang('ThisFieldIsRequired'), 'required'); $form->addRule('field_type', get_lang('ThisFieldIsRequired'), 'required');
return $form; return $form;
} }
/** /**
* @param $token * With this function we can add actions to the jgrid (edit, delete, etc)
* @param string $token
* @return string * @return string
*/ */
public function getJqgridActionLinks($token) public function getJqgridActionLinks($token)
{ {
//With this function we can add actions to the jgrid (edit, delete, etc) //With this function we can add actions to the jgrid (edit, delete, etc)
return 'function action_formatter(cellvalue, options, rowObject) { $editIcon = Display::return_icon('edit.png', get_lang('Edit'), '', ICON_SIZE_SMALL);
return \'<a href="?action=edit&type='.$this->type.'&id=\'+options.rowId+\'">'.Display::return_icon( $deleteIcon = Display::return_icon('delete.png', get_lang('Delete'), '', ICON_SIZE_SMALL);
'edit.png', $confirmMessage = addslashes(
get_lang('Edit'),
'',
ICON_SIZE_SMALL
).'</a>'.
'&nbsp;<a onclick="javascript:if(!confirm('."\'".addslashes(
api_htmlentities(get_lang("ConfirmYourChoice"), ENT_QUOTES) 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'), $editButton = <<<JAVASCRIPT
'', <a href="?action=edit&type={$this->type}&id=' + options.rowId + '" class="btn btn-link btn-xs">\
ICON_SIZE_SMALL $editIcon\
).'</a>'. </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; 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);
}
} }

Loading…
Cancel
Save