Merge branch '1.11.x' of github.com:chamilo/chamilo-lms into 1.11.x

pull/2487/head
Julio 8 years ago
commit fea989db79
  1. 12
      main/admin/skill_edit.php
  2. 101
      main/admin/skill_translate.php
  3. 50
      main/admin/sub_language_ajax.inc.php
  4. 1
      main/inc/ajax/skill.ajax.php
  5. 13
      main/inc/lib/diagnoser.lib.php
  6. 8
      main/inc/lib/sessionmanager.lib.php
  7. 62
      main/inc/lib/skill.lib.php
  8. 39
      main/inc/lib/usergroup.lib.php
  9. 2
      main/social/my_skills_report.php
  10. 22
      src/Chamilo/CoreBundle/Entity/Skill.php

@ -61,8 +61,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',

@ -0,0 +1,101 @@
<?php
/* For licensing terms, see /license.txt */
use \Chamilo\CoreBundle\Entity\ExtraField;
use Chamilo\CoreBundle\Entity\Skill;
use Chamilo\CoreBundle\Entity\Language;
$cidReset = true;
require_once __DIR__.'/../inc/global.inc.php';
api_protect_admin_script();
$em = Database::getManager();
$skill = null;
$extraFieldOption = null;
$variableLanguage = null;
$originalName = null;
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'name';
if (isset($_GET['skill'])) {
/** @var Skill $skill */
$skill = $em->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();

@ -46,27 +46,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')
);
$redirectUrl = api_get_path(WEB_CODE_PATH).'admin/extra_fields.php?type=';
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;
if (isset($_REQUEST['redirect'])) {
$message = Display::return_message(get_lang('TheNewWordHasBeenAdded'), 'success');
if (!empty($variables_with_problems)) {
Display::return_message(
$path_folder.' '.get_lang('IsNotWritable').'<br /> '.api_ucwords(get_lang('ErrorsFound'))
.': <br />'.$variables_with_problems,
'error'
);
}
header("Location: $redirectUrl");
exit;
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:
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;
}
}
if (isset($_REQUEST['skill'])) {
header('Location: '.api_get_path(WEB_CODE_PATH).'admin/skill_list.php');
exit;
}
}
if (!empty($variables_with_problems)) {

@ -138,6 +138,7 @@ switch ($action) {
echo $html;
break;
case 'get_skills_tree_json':
header('Content-Type: application/json');
$userId = isset($_REQUEST['load_user']) && $_REQUEST['load_user'] == 1 ? api_get_user_id() : 0;
$skill_id = isset($_REQUEST['skill_id']) ? intval($_REQUEST['skill_id']) : 0;
$depth = isset($_REQUEST['main_depth']) ? intval($_REQUEST['main_depth']) : 2;

@ -452,6 +452,19 @@ class Diagnoser
get_lang('UploadMaxFilesizeInfo')
);
$setting = ini_get('upload_tmp_dir');
$status = self::STATUS_OK;
$array[] = $this->build_setting(
$status,
'[INI]',
'upload_tmp_dir',
'http://www.php.net/manual/en/ini.core.php#ini.upload_tmp_dir',
$setting,
'',
null,
get_lang('UploadTmpDirInfo')
);
$setting = ini_get('variables_order');
$req_setting = 'GPCS';
$status = $setting == $req_setting ? self::STATUS_OK : self::STATUS_ERROR;

@ -5386,7 +5386,7 @@ class SessionManager
WHERE id = '$session_id'";
Database::query($sql);
self::addClassesByName($session_id, $classes);
self::addClassesByName($session_id, $classes, false);
}
}
@ -5401,8 +5401,9 @@ class SessionManager
* Add classes (by their names) to a session
* @param int $sessionId
* @param array $classesNames
* @param bool $deleteClassSessions Optional. Empty the session list for the usergroup (class)
*/
private static function addClassesByName($sessionId, $classesNames)
private static function addClassesByName($sessionId, $classesNames, $deleteClassSessions = true)
{
if (!$classesNames) {
return;
@ -5413,7 +5414,8 @@ class SessionManager
foreach ($classesNames as $className) {
$usergroup->subscribe_sessions_to_usergroup(
$usergroup->get_id_by_name($className),
[$sessionId]
[$sessionId],
$deleteClassSessions
);
}
}

@ -657,6 +657,8 @@ class Skill extends Model
$result['img_mini'] = Display::img($iconBig, $result['name'], ['width' => ICON_SIZE_MEDIUM]);
$result['img_big'] = Display::img($iconBig, $result['name']);
$result['img_small'] = Display::img($iconSmall, $result['name']);
$result['name'] = self::translateName($result['name']);
$result['short_code'] = self::translateCode($result['short_code']);
return $result;
}
@ -734,20 +736,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::translateName($skill['name']);
$skill['short_code'] = self::translateCode($skill['short_code']);
}
return $users;
return $skills;
}
/**
@ -797,6 +801,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::translateName($row['name']);
$row['short_code'] = self::translateCode($row['short_code']);
$skillRelSkill = new SkillRelSkill();
$parents = $skillRelSkill->getSkillParents($row['id']);
$row['level'] = count($parents) - 1;
@ -1018,6 +1024,9 @@ class Skill extends Model
if (!isset($params['parent_id'])) {
$params['parent_id'] = 1;
}
$params['gradebook_id'] = isset($params['gradebook_id']) ? $params['gradebook_id'] : [];
$skillRelSkill = new SkillRelSkill();
$skillRelGradebook = new SkillRelGradebook();
@ -1147,7 +1156,7 @@ class Skill extends Model
$tableRow = array(
'skill_badge' => $resultData['img_mini'],
'skill_name' => $resultData['name'],
'skill_name' => Skill::translate($resultData['name']),
'achieved_at' => api_get_local_time($resultData['acquired_skill_at']),
'course_image' => '',
'course_name' => ''
@ -1704,6 +1713,7 @@ class Skill extends Model
$result = Database::query($sql);
while ($row = Database::fetch_assoc($result)) {
$row['skill_name'] = self::translateName($row['skill_name']);
$list[] = $row;
}
@ -1747,6 +1757,7 @@ class Skill extends Model
$result = Database::query($sql);
while ($row = Database::fetch_assoc($result)) {
$row['skill_name'] = self::translateName($row['skill_name']);
$list[] = $row;
}
@ -1931,6 +1942,41 @@ class Skill extends Model
$result = Database::query($sql);
return Database::store_result($result, 'ASSOC');
$skills = [];
foreach ($result as $item) {
$skills[] = [
'name' => self::translateName($item['name']),
'acquired_skill_at' => $item['acquired_skill_at']
];
}
return $skills;
}
/**
* @param string $name
* @return string
*/
public static function translateName($name)
{
$camelCase = 'Skill'.api_underscore_to_camel_case(
str_replace(' ', '_', $name)
);
return isset($GLOBALS[$camelCase]) ? $GLOBALS[$camelCase] : $name;
}
public static function translateCode($code)
{
if (empty($code)) {
return '';
}
$camelCase = 'SkillCode'.api_underscore_to_camel_case(
str_replace(' ', '_', $code)
);
return isset($GLOBALS[$camelCase]) ? $GLOBALS[$camelCase] : $code;
}
}

@ -629,10 +629,11 @@ class UserGroup extends Model
/**
* Subscribes sessions to a group (also adding the members of the group in the session and course)
* @param int $usergroup_id usergroup id
* @param array $list list of session ids
* @param int $usergroup_id usergroup id
* @param array $list list of session ids
* @param bool $deleteCurrentSessions Optional. Empty the session list for the usergroup (class)
*/
public function subscribe_sessions_to_usergroup($usergroup_id, $list)
public function subscribe_sessions_to_usergroup($usergroup_id, $list, $deleteCurrentSessions = true)
{
$current_list = self::get_sessions_by_usergroup($usergroup_id);
$user_list = self::get_users_by_usergroup($usergroup_id);
@ -645,26 +646,28 @@ class UserGroup extends Model
}
}
}
if (!empty($current_list)) {
foreach ($current_list as $session_id) {
if (!in_array($session_id, $list)) {
$delete_items[] = $session_id;
if ($deleteCurrentSessions) {
if (!empty($current_list)) {
foreach ($current_list as $session_id) {
if (!in_array($session_id, $list)) {
$delete_items[] = $session_id;
}
}
}
}
// Deleting items
if (!empty($delete_items)) {
foreach ($delete_items as $session_id) {
if (!empty($user_list)) {
foreach ($user_list as $user_id) {
SessionManager::unsubscribe_user_from_session($session_id, $user_id);
// Deleting items
if (!empty($delete_items)) {
foreach ($delete_items as $session_id) {
if (!empty($user_list)) {
foreach ($user_list as $user_id) {
SessionManager::unsubscribe_user_from_session($session_id, $user_id);
}
}
Database::delete(
$this->usergroup_rel_session_table,
array('usergroup_id = ? AND session_id = ?' => array($usergroup_id, $session_id))
);
}
Database::delete(
$this->usergroup_rel_session_table,
array('usergroup_id = ? AND session_id = ?' => array($usergroup_id, $session_id))
);
}
}

@ -61,7 +61,7 @@ if ($isStudent) {
while ($resultData = Database::fetch_assoc($result)) {
$tableRow = array(
'completeName' => $followedStudents[$selectedStudent]['completeName'],
'skillName' => $resultData['name'],
'skillName' => Skill::translateName($resultData['name']),
'achievedAt' => api_format_date($resultData['acquired_skill_at'], DATE_FORMAT_NUMBER),
'courseImage' => Display::return_icon(
'course.png',

@ -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 && !empty($this->shortCode)) {
$camelCase = 'SkillCode'.api_underscore_to_camel_case(
str_replace(' ', '_', $this->shortCode)
);
return isset($GLOBALS[$camelCase]) ? $GLOBALS[$camelCase] : $this->shortCode;
}
return $this->shortCode;
}

Loading…
Cancel
Save