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">
$(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']),

@ -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;
}
}

@ -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);
}
}

Loading…
Cancel
Save