Improve Skill/Badge UI

- Disable page "skill_badge_list.php"
- All actions are centered in the skill_list.php page
- Unify create/edit forms using FormValidator
- Simplify steps to edit and create a badge.
- Adding "back" toolbars to don't lost navigation.
pull/2487/head
jmontoyaa 7 years ago
parent 3edf9eccc7
commit 2e2fd68228
  1. 22
      main/admin/skill_badge_create.php
  2. 48
      main/admin/skill_create.php
  3. 43
      main/admin/skill_edit.php
  4. 6
      main/admin/skill_list.php
  5. 35
      main/admin/skills_import.php
  6. 1
      main/inc/lib/display.lib.php
  7. 104
      main/inc/lib/skill.lib.php
  8. 1311
      main/template/default/skill/badge_create.tpl
  9. 4
      main/template/default/skill/list.tpl

@ -86,7 +86,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
Display::addFlash(Display::return_message(get_lang('Updated')));
$objSkill->update($params);
header('Location: '.api_get_path(WEB_CODE_PATH).'admin/skill_badge_list.php');
header('Location: '.api_get_path(WEB_CODE_PATH).'admin/skill_list.php');
exit;
}
@ -94,29 +94,17 @@ $interbreadcrumb = array(
array(
'url' => api_get_path(WEB_CODE_PATH).'admin/index.php',
'name' => get_lang('Administration')
),
array(
'url' => api_get_path(WEB_CODE_PATH).'admin/skill_badge.php',
'name' => get_lang('Badges')
)
);
$interbreadcrumb[] = array('url' => 'skill_list.php', 'name' => get_lang('ManageSkills'));
$toolbar = $objSkill->getToolBar();
$toolbar = Display::toolbarButton(
get_lang('ManageSkills'),
api_get_path(WEB_CODE_PATH).'admin/skill_list.php',
'list',
'primary',
['title' => get_lang('ManageSkills')]
);
$tpl = new Template(get_lang('CreateBadge'));
$tpl->assign('platformAdminEmail', api_get_setting('emailAdministrator'));
$tpl->assign('skill', $skill);
$tpl->assign('badge_studio', $badgeStudio);
$templateName = $tpl->get_template('skill/badge_create.tpl');
$contentTemplate = $tpl->fetch($templateName);
$tpl->assign(
'actions',
Display::toolbarAction('toolbar', [$toolbar])
);
$tpl->assign('content', $contentTemplate);
$tpl->assign('content', $toolbar.$contentTemplate);
$tpl->display_one_col_template();

@ -23,12 +23,9 @@ $interbreadcrumb[] = array('url' => 'skill_list.php', 'name' => get_lang('Manage
/* Process data */
$skillParentId = isset($_GET['parent']) ? intval($_GET['parent']) : 0;
$formDefaultValues = [];
$objSkill = new Skill();
$objGradebook = new Gradebook();
if ($skillParentId > 0) {
$skillParentInfo = $objSkill->getSkillInfo($skillParentId);
@ -42,46 +39,10 @@ if ($skillParentId > 0) {
}
}
$allSkills = $objSkill->get_all();
$allGradebooks = $objGradebook->find('all');
// This procedure is for check if there is already a Skill with no Parent (Root by default)
$isAlreadyRootSkill = false;
foreach ($allSkills as $checkedSkill) {
if (intval($checkedSkill['parent_id']) > 0) {
$isAlreadyRootSkill = true;
break;
}
}
$skillList = $isAlreadyRootSkill ? [] : [0 => get_lang('None')];
$gradebookList = [];
foreach ($allSkills as $skill) {
$skillList[$skill['id']] = $skill['name'];
}
foreach ($allGradebooks as $gradebook) {
$gradebookList[$gradebook['id']] = $gradebook['name'];
}
/* Form */
$createForm = new FormValidator('skill_create');
$createForm->addHeader(get_lang('CreateSkill'));
$createForm->addText('name', get_lang('Name'), true, ['id' => 'name']);
$createForm->addText('short_code', get_lang('ShortCode'), false, ['id' => 'short_code']);
$createForm->addSelect('parent_id', get_lang('Parent'), $skillList, ['id' => 'parent_id']);
$createForm->addSelect(
'gradebook_id',
[get_lang('Gradebook'), get_lang('WithCertificate')],
$gradebookList,
['id' => 'gradebook_id', 'multiple' => 'multiple', 'size' => 10]
);
$createForm->addTextarea('description', get_lang('Description'), ['id' => 'description', 'rows' => 7]);
// EXTRA FIELDS
$extraField = new ExtraField('skill');
$returnParams = $extraField->addElements($createForm);
$returnParams = $objSkill->setForm($createForm, []);
$jquery_ready_content = $returnParams['jquery_ready_content'];
// the $jquery_ready_content variable collects all functions that will be load in the $(document).ready javascript function
@ -93,9 +54,6 @@ if (!empty($jquery_ready_content)) {
</script>';
}
$createForm->addButtonSave(get_lang('Save'));
$createForm->addHidden('id', null);
$createForm->setDefaults($formDefaultValues);
if ($createForm->validate()) {
@ -120,6 +78,8 @@ if ($createForm->validate()) {
exit;
}
$toolbar = $objSkill->getToolbar();
$tpl = new Template(get_lang('CreateSkill'));
$tpl->assign('content', $createForm->returnForm());
$tpl->assign('content', $toolbar.$createForm->returnForm());
$tpl->display_one_col_template();

@ -27,7 +27,7 @@ $skillId = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : 0;
$objSkill = new Skill();
$objGradebook = new Gradebook();
$skillInfo = $objSkill->getSkillInfo($skillId);
$allSkills = $objSkill->get_all();
$allGradebooks = $objGradebook->find('all');
$skillDefaultInfo = [
@ -44,17 +44,7 @@ foreach ($skillInfo['gradebooks'] as $gradebook) {
$skillDefaultInfo['gradebook_id'][] = $gradebook['id'];
}
$skillList = [0 => get_lang('None')];
$gradebookList = [];
foreach ($allSkills as $skill) {
if ($skill['id'] == $skillInfo['id']) {
continue;
}
$skillList[$skill['id']] = $skill['name'];
}
foreach ($allGradebooks as $gradebook) {
$gradebookList[$gradebook['id']] = $gradebook['name'];
}
@ -62,29 +52,8 @@ foreach ($allGradebooks as $gradebook) {
/* Form */
$editForm = new FormValidator('skill_edit');
$editForm->addHeader(get_lang('SkillEdit'));
$returnParams = $objSkill->setForm($editForm, $skillInfo);
$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',
[get_lang('Gradebook'), get_lang('WithCertificate')],
$gradebookList,
['id' => 'gradebook_id', 'multiple' => 'multiple', 'size' => 10]
);
$editForm->addTextarea('description', get_lang('Description'), ['id' => 'description', 'rows' => 7]);
$editForm->addTextarea('criteria', get_lang('CriteriaToEarnTheBadge'), ['id' => 'criteria', 'rows' => 7]);
// EXTRA FIELDS
$extraField = new ExtraField('skill');
$returnParams = $extraField->addElements($editForm, $skillId);
$jquery_ready_content = $returnParams['jquery_ready_content'];
// the $jquery_ready_content variable collects all functions that will be load
@ -97,11 +66,7 @@ if (!empty($jquery_ready_content)) {
</script>';
}
$editForm->addButtonSave(get_lang('Save'));
$editForm->addHidden('id', null);
$editForm->setDefaults($skillDefaultInfo);
if ($editForm->validate()) {
$skillValues = $editForm->getSubmitValues();
$updated = $objSkill->edit($skillValues);
@ -129,7 +94,9 @@ if ($editForm->validate()) {
exit;
}
$toolbar = $objSkill->getToolBar();
/* view */
$tpl = new Template(get_lang('SkillEdit'));
$tpl->assign('content', $editForm->returnForm());
$tpl->assign('content', $toolbar.$editForm->returnForm());
$tpl->display_one_col_template();

@ -14,6 +14,7 @@ require_once __DIR__.'/../inc/global.inc.php';
$this_section = SECTION_PLATFORM_ADMIN;
api_protect_admin_script();
Skill::isAllowed();
$action = isset($_GET['action']) ? $_GET['action'] : 'list';
@ -135,7 +136,7 @@ switch ($action) {
['title' => get_lang('SkillsWheel')]
);
$toolbar .= Display::url(
/*$toolbar .= Display::url(
Display::return_icon(
'edit-skill.png',
get_lang('BadgesManagement'),
@ -144,7 +145,7 @@ switch ($action) {
),
api_get_path(WEB_CODE_PATH).'admin/skill_badge_list.php',
['title' => get_lang('BadgesManagement')]
);
);*/
$toolbar .= Display::url(
Display::return_icon(
@ -197,6 +198,5 @@ switch ($action) {
);
$tpl->assign('content', $content);
$tpl->display_one_col_template();
break;
}

@ -249,39 +249,8 @@ if (!empty($see_message_import)) {
echo Display::return_message($see_message_import, 'normal');
}
$toolbar = Display::url(
Display::return_icon(
'list_badges.png',
get_lang('ManageSkills'),
null,
ICON_SIZE_MEDIUM
),
api_get_path(WEB_CODE_PATH).'admin/skill_list.php'
);
$toolbar .= Display::url(
Display::return_icon(
'wheel_skill.png',
get_lang('SkillsWheel'),
null,
ICON_SIZE_MEDIUM
),
api_get_path(WEB_CODE_PATH).'admin/skills_wheel.php'
);
$toolbar .= Display::url(
Display::return_icon(
'edit-skill.png',
get_lang('BadgesManagement'),
null,
ICON_SIZE_MEDIUM
),
api_get_path(WEB_CODE_PATH).'admin/skill_badge_list.php'
);
$actions = '<div class="actions">'.$toolbar.'</div>';
echo $actions;
$objSkill = new Skill();
echo $objSkill->getToolBar();
$form = new FormValidator('user_import', 'post', 'skills_import.php');
$form->addElement('header', '', $tool_name);

@ -1959,6 +1959,7 @@ class Display
/**
* @param array $items
* @param string $class
* @return null|string
*/
public static function actions($items, $class = 'new_actions')

@ -2108,4 +2108,108 @@ class Skill extends Model
return isset($GLOBALS[$variable]) ? $GLOBALS[$variable] : $code;
}
/**
* @param FormValidator $form
* @param array $skillInfo
*/
public function setForm(FormValidator &$form, $skillInfo = [])
{
$allSkills = $this->get_all();
$objGradebook = new Gradebook();
$isAlreadyRootSkill = false;
foreach ($allSkills as $checkedSkill) {
if (intval($checkedSkill['parent_id']) > 0) {
$isAlreadyRootSkill = true;
break;
}
}
$skillList = $isAlreadyRootSkill ? [] : [0 => get_lang('None')];
foreach ($allSkills as $skill) {
if (isset($skillInfo['id']) && $skill['id'] == $skillInfo['id']) {
continue;
}
$skillList[$skill['id']] = $skill['name'];
}
$allGradeBooks = $objGradebook->find('all');
// This procedure is for check if there is already a Skill with no Parent (Root by default)
$gradeBookList = [];
foreach ($allGradeBooks as $gradebook) {
$gradeBookList[$gradebook['id']] = $gradebook['name'];
}
$translateUrl = api_get_path(WEB_CODE_PATH).'admin/skill_translate.php?';
$translateNameButton = '';
$translateCodeButton = '';
$skillId = null;
if (!empty($skillInfo)) {
$skillId = $skillInfo['id'];
$translateNameUrl = $translateUrl.http_build_query(['skill' => $skillId, 'action' => 'name']);
$translateCodeUrl = $translateUrl.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'
);
}
$form->addText('name', [get_lang('Name'), $translateNameButton], true, ['id' => 'name']);
$form->addText('short_code', [get_lang('ShortCode'), $translateCodeButton], false, ['id' => 'short_code']);
$form->addSelect('parent_id', get_lang('Parent'), $skillList, ['id' => 'parent_id']);
$form->addSelect(
'gradebook_id',
[get_lang('Gradebook'), get_lang('WithCertificate')],
$gradeBookList,
['id' => 'gradebook_id', 'multiple' => 'multiple', 'size' => 10]
);
$form->addTextarea('description', get_lang('Description'), ['id' => 'description', 'rows' => 7]);
$form->addTextarea('criteria', get_lang('CriteriaToEarnTheBadge'), ['id' => 'criteria', 'rows' => 7]);
// EXTRA FIELDS
$extraField = new ExtraField('skill');
$returnParams = $extraField->addElements($form, $skillId);
if (empty($skillInfo)) {
$form->addButtonCreate(get_lang('Add'));
} else {
$form->addButtonUpdate(get_lang('Update'));
}
$form->addHidden('id', null);
return $returnParams;
}
/**
* @return string
*/
public function getToolBar()
{
$toolbar = Display::url(
Display::return_icon(
'back.png',
get_lang('ManageSkills'),
null,
ICON_SIZE_MEDIUM
),
api_get_path(WEB_CODE_PATH).'admin/skill_list.php'
);
$actions = '<div class="actions">'.$toolbar.'</div>';
return $actions;
}
}

File diff suppressed because it is too large Load Diff

@ -1,7 +1,3 @@
<legend>
<h1>{{ "ManageSkills" | get_lang }}</h1>
</legend>
{% if tags %}
<div class="row">
<div class="col-md-3" >

Loading…
Cancel
Save