Prechádzať zdrojové kódy

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.
jmontoyaa 7 rokov pred
rodič
commit
2e2fd68228

+ 5 - 17
main/admin/skill_badge_create.php

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

+ 4 - 44
main/admin/skill_create.php

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

+ 5 - 38
main/admin/skill_edit.php

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

+ 3 - 3
main/admin/skill_list.php

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

+ 2 - 33
main/admin/skills_import.php

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

+ 1 - 0
main/inc/lib/display.lib.php

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

+ 104 - 0
main/inc/lib/skill.lib.php

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

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 645 - 665
main/template/default/skill/badge_create.tpl


+ 0 - 4
main/template/default/skill/list.tpl

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

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov