diff --git a/main/admin/skill_edit.php b/main/admin/skill_edit.php
index e7932fff6c..8ee6d626ec 100644
--- a/main/admin/skill_edit.php
+++ b/main/admin/skill_edit.php
@@ -63,8 +63,16 @@ foreach ($allGradebooks as $gradebook) {
/* Form */
$editForm = new FormValidator('skill_edit');
$editForm->addHeader(get_lang('SkillEdit'));
-$editForm->addText('name', get_lang('Name'), true, ['id' => 'name']);
-$editForm->addText('short_code', get_lang('ShortCode'), false, ['id' => 'short_code']);
+
+$translateNameUrl = api_get_path(WEB_CODE_PATH).'admin/skill_translate.php?'
+ .http_build_query(['skill' => $skillId, 'action' => 'name']);
+$translateCodeUrl = api_get_path(WEB_CODE_PATH).'admin/skill_translate.php?'
+ .http_build_query(['skill' => $skillId, 'action' => 'code']);
+$translateNameButton = Display::toolbarButton(get_lang('TranslateThisTerm'), $translateNameUrl, 'language', 'link');
+$translateCodeButton = Display::toolbarButton(get_lang('TranslateThisTerm'), $translateCodeUrl, 'language', 'link');
+
+$editForm->addText('name', [get_lang('Name'), $translateNameButton], true, ['id' => 'name']);
+$editForm->addText('short_code', [get_lang('ShortCode'), $translateCodeButton], false, ['id' => 'short_code']);
$editForm->addSelect('parent_id', get_lang('Parent'), $skillList, ['id' => 'parent_id']);
$editForm->addSelect(
'gradebook_id',
diff --git a/main/admin/skill_translate.php b/main/admin/skill_translate.php
new file mode 100644
index 0000000000..342876cb52
--- /dev/null
+++ b/main/admin/skill_translate.php
@@ -0,0 +1,101 @@
+find('ChamiloCoreBundle:Skill', intval($_GET['skill']));
+
+ if ($action === 'name') {
+ $variableLanguage = '$Skill'.api_underscore_to_camel_case(
+ str_replace(' ', '_', $skill->getName(false))
+ );
+ $originalName = $skill->getName(false);
+ } elseif ($action === 'code') {
+ $variableLanguage = '$SkillCode'.api_underscore_to_camel_case(
+ str_replace(' ', '_', $skill->getShortCode(false))
+ );
+ $originalName = $skill->getShortCode(false);
+ }
+}
+
+if (!$skill || empty($variableLanguage)) {
+ api_not_allowed(true);
+}
+
+if (empty($originalName)) {
+ Display::addFlash(
+ Display::return_message(get_lang('CanNotTranslate'), 'error')
+ );
+ header('Location: '.api_get_path(WEB_CODE_PATH).'admin/skill_edit.php?id='.$skill->getId());
+ exit;
+}
+
+$languageId = isset($_GET['sub_language']) ? intval($_GET['sub_language']) : 0;
+
+$languages = $em
+ ->getRepository('ChamiloCoreBundle:Language')
+ ->findAllPlatformSubLanguages();
+
+$languagesOptions = [0 => get_lang('None')];
+
+/** @var Language $language */
+foreach ($languages as $language) {
+ $languagesOptions[$language->getId()] = $language->getOriginalName();
+}
+
+$translateUrl = api_get_path(WEB_CODE_PATH).'admin/sub_language_ajax.inc.php?skill='.$skill->getId();
+
+$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->addSelect('sub_language', [get_lang('SubLanguage'), get_lang('OnlyActiveSubLanguagesAreListed')], $languagesOptions);
+
+if ($languageId) {
+ $languageInfo = api_get_language_info($languageId);
+
+ $form->addText('new_language', [get_lang('Translation'), get_lang('IfThisTranslationExistsThisWillReplaceTheTerm')]);
+ $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' => $variableLanguage,
+ 'original_name' => $originalName,
+ 'sub_language' => $languageId,
+ 'new_language' => $action === 'code' ? $skill->getShortCode() : $skill->getName()
+]);
+$form->addRule('sub_language', get_lang('Required'), 'required');
+$form->freeze(['variable_language', 'original_name']);
+
+$interbreadcrumb[] = ['url' => 'index.php', 'name' => get_lang('PlatformAdmin')];
+$interbreadcrumb[] = ['url' => 'skill_list.php', 'name' => get_lang('ManageSkills')];
+
+$view = new Template(get_lang('AddWordForTheSubLanguage'));
+$view->assign('form', $form->returnForm());
+$template = $view->get_template('extrafield/translate.tpl');
+$content = $view->fetch($template);
+$view->assign('content', $content);
+$view->display_one_col_template();
diff --git a/main/admin/sub_language_ajax.inc.php b/main/admin/sub_language_ajax.inc.php
index f0df5a64de..2f5048dd71 100755
--- a/main/admin/sub_language_ajax.inc.php
+++ b/main/admin/sub_language_ajax.inc.php
@@ -48,27 +48,39 @@ if (isset($new_language) && isset($language_variable) && isset($file_id)) {
}
}
- if (isset($_REQUEST['redirect'], $_REQUEST['extra_field_type'])) {
- Display::addFlash(
- Display::return_message(get_lang('TheNewWordHasBeenAdded'), 'success')
- );
+ if (isset($_REQUEST['redirect'])) {
+ $message = Display::return_message(get_lang('TheNewWordHasBeenAdded'), 'success');
- $redirectUrl = api_get_path(WEB_CODE_PATH).'admin/extra_fields.php?type=';
+ if (!empty($variables_with_problems)) {
+ Display::return_message(
+ $path_folder.' '.get_lang('IsNotWritable').'
'.api_ucwords(get_lang('ErrorsFound'))
+ .':
'.$variables_with_problems,
+ 'error'
+ );
+ }
+
+ Display::addFlash($message);
+
+ if (isset($_REQUEST['extra_field_type'])) {
+ $redirectUrl = api_get_path(WEB_CODE_PATH).'admin/extra_fields.php';
- switch ($_REQUEST['extra_field_type']) {
- case ExtraField::USER_FIELD_TYPE:
- $redirectUrl .= 'user';
- break;
- case ExtraField::COURSE_FIELD_TYPE:
- $redirectUrl .= 'course';
- break;
- case ExtraField::SESSION_FIELD_TYPE:
- $redirectUrl .= 'session';
- break;
+ switch ($_REQUEST['extra_field_type']) {
+ case ExtraField::USER_FIELD_TYPE:
+ header("Location: {$redirectUrl}?type=user");
+ exit;
+ case ExtraField::COURSE_FIELD_TYPE:
+ header("Location: {$redirectUrl}?type=course");
+ exit;
+ case ExtraField::SESSION_FIELD_TYPE:
+ header("Location: {$redirectUrl}?type=session");
+ exit;
+ }
}
- header("Location: $redirectUrl");
- exit;
+ if (isset($_REQUEST['skill'])) {
+ header('Location: '.api_get_path(WEB_CODE_PATH).'admin/skill_list.php');
+ exit;
+ }
}
if (!empty($variables_with_problems)) {
diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php
index 97ba5eae55..3c13640f80 100755
--- a/main/inc/lib/skill.lib.php
+++ b/main/inc/lib/skill.lib.php
@@ -619,6 +619,8 @@ class Skill extends Model
{
$result = parent::get($id);
$result['web_icon_path'] = api_get_path(WEB_UPLOAD_PATH).'badges/'.$result['icon'];
+ $result['name'] = self::translate($result['name']);
+ $result['short_code'] = self::translate($result['short_code']);
return $result;
}
@@ -651,20 +653,22 @@ class Skill extends Model
WHERE id IN ('$skill_list') ";
$result = Database::query($sql);
- $users = Database::store_result($result, 'ASSOC');
+ $skills = Database::store_result($result, 'ASSOC');
- foreach ($users as &$user) {
- if (!$user['icon']) {
+ foreach ($skills as &$skill) {
+ if (!$skill['icon']) {
continue;
}
- $user['icon_small'] = sprintf(
+ $skill['icon_small'] = sprintf(
"badges/%s-small.png",
- sha1($user['name'])
+ sha1($skill['name'])
);
+ $skill['name'] = self::translate($skill['name']);
+ $skill['short_code'] = self::translate($skill['short_code']);
}
- return $users;
+ return $skills;
}
/**
@@ -714,6 +718,8 @@ class Skill extends Model
$webPath = api_get_path(WEB_UPLOAD_PATH);
if (Database::num_rows($result)) {
while ($row = Database::fetch_array($result, 'ASSOC')) {
+ $row['name'] = self::translate($row['name']);
+ $row['short_code'] = self::translate($row['short_code']);
$skill_rel_skill = new SkillRelSkill();
$parents = $skill_rel_skill->get_skill_parents($row['id']);
$row['level'] = count($parents) - 1;
@@ -1009,6 +1015,7 @@ class Skill extends Model
sha1($skill['name'])
);
}
+ $skill['name'] = self::translate($skill['name']);
$clean_skill[$skill['id']] = array_merge(
$skill,
array(
@@ -1499,6 +1506,7 @@ class Skill extends Model
$result = Database::query($sql);
while ($row = Database::fetch_assoc($result)) {
+ $row['skill_name'] = self::translate($row['skill_name']);
$list[] = $row;
}
@@ -1543,6 +1551,7 @@ class Skill extends Model
$result = Database::query($sql);
while ($row = Database::fetch_assoc($result)) {
+ $row['skill_name'] = self::translate($row['skill_name']);
$list[] = $row;
}
@@ -1727,7 +1736,28 @@ class Skill extends Model
$result = Database::query($sql);
- return Database::store_result($result, 'ASSOC');
+ $skills = [];
+
+ foreach ($result as $item) {
+ $skills[] = [
+ 'name' => self::translate($item['name']),
+ 'acquired_skill_at' => $item['acquired_skill_at']
+ ];
+ }
+
+ return $skills;
}
+ /**
+ * @param string $name
+ * @return string
+ */
+ public static function translate($name)
+ {
+ $camelCase = 'Skill'.api_underscore_to_camel_case(
+ str_replace(' ', '_', $name)
+ );
+
+ return isset($GLOBALS[$camelCase]) ? $GLOBALS[$camelCase] : $name;
+ }
}
diff --git a/main/social/my_skills_report.php b/main/social/my_skills_report.php
index cf379b7eb6..e114d3585f 100644
--- a/main/social/my_skills_report.php
+++ b/main/social/my_skills_report.php
@@ -50,7 +50,7 @@ if ($isStudent) {
$result = Database::query($sql);
while ($resultData = Database::fetch_assoc($result)) {
$tableRow = array(
- 'skillName' => $resultData['name'],
+ 'skillName' => Skill::translate($resultData['name']),
'achievedAt' => api_format_date($resultData['acquired_skill_at'], DATE_FORMAT_NUMBER),
'courseImage' => Display::return_icon(
'course.png',
@@ -104,7 +104,7 @@ if ($isStudent) {
while ($resultData = Database::fetch_assoc($result)) {
$tableRow = array(
'completeName' => $followedStudents[$selectedStudent]['completeName'],
- 'skillName' => $resultData['name'],
+ 'skillName' => Skill::translate($resultData['name']),
'achievedAt' => api_format_date($resultData['acquired_skill_at'], DATE_FORMAT_NUMBER),
'courseImage' => Display::return_icon(
'course.png',
diff --git a/src/Chamilo/CoreBundle/Entity/Skill.php b/src/Chamilo/CoreBundle/Entity/Skill.php
index acd05c5124..9d3997cddd 100644
--- a/src/Chamilo/CoreBundle/Entity/Skill.php
+++ b/src/Chamilo/CoreBundle/Entity/Skill.php
@@ -118,10 +118,19 @@ class Skill
/**
* Get name
*
+ * @param bool $translated Optional. Get the name translated when is it exists in a sub-language. By default is true
* @return string
*/
- public function getName()
+ public function getName($translated = true)
{
+ if ($translated) {
+ $camelCase = 'Skill'.api_underscore_to_camel_case(
+ str_replace(' ', '_', $this->name)
+ );
+
+ return isset($GLOBALS[$camelCase]) ? $GLOBALS[$camelCase] : $this->name;
+ }
+
return $this->name;
}
@@ -141,10 +150,19 @@ class Skill
/**
* Get shortCode
*
+ * @param bool $translated Optional. Get the code translated when is it exists in a sub-language. By default is true
* @return string
*/
- public function getShortCode()
+ public function getShortCode($translated = true)
{
+ if ($translated) {
+ $camelCase = 'SkillCode'.api_underscore_to_camel_case(
+ str_replace(' ', '_', $this->shortCode)
+ );
+
+ return isset($GLOBALS[$camelCase]) ? $GLOBALS[$camelCase] : $this->shortCode;
+ }
+
return $this->shortCode;
}