Browse Source

Fix select skills when create/edit gradebooks. Conflict with fcbkcomplete

Angel Fernando Quiroz Campos 9 years ago
parent
commit
f953ab299f

+ 0 - 58
main/gradebook/gradebook_add_cat.php

@@ -17,64 +17,6 @@ GradebookUtils::block_students();
 
 $edit_cat = isset($_REQUEST['editcat']) ? intval($_REQUEST['editcat']) : '';
 
-$htmlHeadXtra[] = '<script>
-$(document).ready(function () {
-    $("#skills").fcbkcomplete({
-        json_url: "'.api_get_path(WEB_AJAX_PATH).'skill.ajax.php?a=find_skills",
-        cache: false,
-        filter_case: false,
-        filter_hide: true,
-        complete_text:"'.get_lang('StartToType').'",
-        firstselected: true,
-        //onremove: "testme",
-        onselect:"check_skills",
-        filter_selected: true,
-        newel: true
-    });
-
-    $(".closebutton").click(function() {
-        var skill_id = ($(this).attr("id")).split("_")[1];
-        if (skill_id) {
-            $.ajax({
-                url: "'.api_get_path(WEB_AJAX_PATH).'skill.ajax.php?a=remove_skill",
-                data: "gradebook_id=' . $edit_cat . '&skill_id="+skill_id,
-                success: function(return_value) {
-                    if (return_value == 1 ) {
-                            $("#skill_"+skill_id).remove();
-                    }
-                }
-            });
-        }
-    });
-});
-
-function check_skills() {
-    // selecting only selected users
-    $("#skills option:selected").each(function() {
-        var skill_id = $(this).val();
-        if (skill_id != "" ) {
-            $.ajax({
-                url: "'.api_get_path(WEB_AJAX_PATH).'skill.ajax.php?a=skill_exists",
-                data: "skill_id="+skill_id,
-                success: function(return_value) {
-                if (return_value == 0 ) {
-                        alert("'.get_lang('SkillDoesNotExist').'");
-                        //Deleting select option tag
-                        $("#skills option[value="+skill_id+"]").remove();
-                        //Deleting holder
-                        $(".holder li").each(function () {
-                            if ($(this).attr("rel") == skill_id) {
-                                $(this).remove();
-                            }
-                        });
-                    }
-                }
-            });
-        }
-    });
-}
-</script>';
-
 $get_select_cat = intval($_GET['selectcat']);
 
 $catadd = new Category();

+ 0 - 58
main/gradebook/gradebook_edit_cat.php

@@ -12,64 +12,6 @@ GradebookUtils::block_students();
 
 $edit_cat = isset($_REQUEST['editcat']) ? intval($_REQUEST['editcat']) : '';
 
-$htmlHeadXtra[] = '<script>
-$(document).ready(function() {
-    $("#skills").fcbkcomplete({
-        json_url: "'.api_get_path(WEB_AJAX_PATH).'skill.ajax.php?a=find_skills",
-        cache: false,
-        filter_case: false,
-        filter_hide: true,
-        complete_text:"'.get_lang('StartToType').'",
-        firstselected: true,
-        //onremove: "testme",
-        onselect:"check_skills",
-        filter_selected: true,
-        newel: true
-    });
-
-    $(".closebutton").click(function() {
-        var skill_id = ($(this).attr("id")).split("_")[1];
-        if (skill_id) {
-            $.ajax({
-                url: "'.api_get_path(WEB_AJAX_PATH).'skill.ajax.php?a=remove_skill",
-                data: "gradebook_id='.$edit_cat.'&skill_id="+skill_id,
-                success: function(return_value) {
-                    if (return_value == 1 ) {
-                            $("#skill_"+skill_id).remove();
-                    }
-                }
-            });
-        }
-    });
-});
-
-function check_skills() {
-    //selecting only selected users
-    $("#skills option:selected").each(function() {
-        var skill_id = $(this).val();
-        if (skill_id != "" ) {
-            $.ajax({
-                url: "'.api_get_path(WEB_AJAX_PATH).'skill.ajax.php?a=skill_exists",
-                data: "skill_id="+skill_id,
-                success: function(return_value) {
-                if (return_value == 0 ) {
-                        alert("'.get_lang('SkillDoesNotExist').'");
-                        //Deleting select option tag
-                        $("#skills option[value="+skill_id+"]").remove();
-                        //Deleting holder
-                        $(".holder li").each(function () {
-                            if ($(this).attr("rel") == skill_id) {
-                                $(this).remove();
-                            }
-                        });
-                    }
-                }
-            });
-        }
-    });
-}
-</script>';
-
 $catedit = Category::load($edit_cat);
 $form = new CatForm(
     CatForm::TYPE_EDIT,

+ 1 - 1
main/gradebook/lib/be/category.class.php

@@ -687,7 +687,7 @@ class Category implements GradebookItem
         $gradebook->update_skills_to_gradebook(
             $this->id,
             $this->get_skills(false),
-            false
+            true
         );
     }
 

+ 18 - 36
main/gradebook/lib/fe/catform.class.php

@@ -227,51 +227,33 @@ class CatForm extends FormValidator
         );
         $this->addRule('weight', get_lang('ThisFieldIsRequired'), 'required');
 
+        $skillsDefaults = [];
+
         if (api_is_platform_admin() || api_is_drh()) {
             if (api_get_setting('allow_skills_tool') == 'true') {
-
-                // The magic should be here
-                $skills = $this->category_object->get_skills();
-
-                $skillToSelect = array();
-                foreach ($skills as $skill) {
-                    $skillToSelect[$skill['id']] = $skill['name'];
-                }
-
-                $this->addElement(
-                    'select',
+                $skillSelect = $this->addElement(
+                    'select_ajax',
                     'skills',
                     array(
                         get_lang('Skills'),
                         get_lang('SkillsAchievedWhenAchievingThisGradebook')
                     ),
-                    $skillToSelect,
-                    array('id' => 'skills', 'multiple' => 'multiple')
+                    null,
+                    [
+                        'id' => 'skills',
+                        'multiple' => 'multiple',
+                        'url' => api_get_path(WEB_AJAX_PATH) . 'skill.ajax.php?a=search_skills'
+                    ]
                 );
 
-                $content = '';
-                if (!empty($skills)) {
-                    foreach ($skills as $skill) {
-                        $content .= Display::tag(
-                            'li',
-                            $skill['name'] . '<a id="deleteskill_' . $skill['id'] . '" class="closebutton" href="#"></a>',
-                            array(
-                                'id' => 'skill_' . $skill['id'],
-                                'class' => 'bit-box'
-                            )
-                        );
-                    }
-                }
+                // The magic should be here
+                $skills = $this->category_object->get_skills();
 
-                $this->addElement(
-                    'label',
-                    null,
-                    Display::tag(
-                        'ul',
-                        $content,
-                        array('class' => 'holder holder_simple')
-                    )
-                );
+                foreach ($skills as $skill) {
+                    $skillsDefaults[] = $skill['id'];
+
+                    $skillSelect->addOption($skill['name'], $skill['id']);
+                }
             }
         }
 
@@ -399,7 +381,7 @@ class CatForm extends FormValidator
         if (isset($setting['gradebook']) && $setting['gradebook'] == 'false') {
             $visibility_default = 0;
         }
-        $this->setDefaults(array('visible' => $visibility_default));
+        $this->setDefaults(array('visible' => $visibility_default, 'skills' => $skillsDefaults));
     }
 
     /**

+ 20 - 0
main/inc/ajax/skill.ajax.php

@@ -346,6 +346,26 @@ switch ($action) {
             echo 0;
         }
         break;
+    case 'search_skills':
+        $skills = $skill->find(
+            'all',
+            [
+                'where' => ['name LIKE %?% ' => $_REQUEST['q']]
+            ]
+        );
+        $returnSkills = [];
+
+        foreach ($skills as $skill) {
+            $returnSkills[] = [
+                'id' => $skill['id'],
+                'text' => $skill['name']
+            ];
+        }
+
+        echo json_encode([
+            'items' => $returnSkills
+        ]);
+        break;
     default:
         echo '';
 }

+ 26 - 25
main/inc/lib/gradebook.lib.php

@@ -106,22 +106,23 @@ class Gradebook extends Model
         $skill_list,
         $deleteSkillNotInList = true
     ) {
-        if (!empty($skill_list)) {
+        $skill_gradebook = new SkillRelGradebook();
+        $skill_gradebooks_source = $skill_gradebook->get_all(
+            array('where' => array('gradebook_id = ?' => $gradebook_id))
+        );
+        $clean_gradebook = array();
 
-            //Cleaning skills
-            $skill_list = array_map('intval', $skill_list);
-            $skill_list = array_filter($skill_list);
-            $skill_gradebook = new SkillRelGradebook();
-            $skill_gradebooks_source = $skill_gradebook->get_all(
-                array('where' => array('gradebook_id = ?' => $gradebook_id))
-            );
-            $clean_gradebook = array();
-
-            if (!empty($skill_gradebooks_source)) {
-                foreach($skill_gradebooks_source as $source) {
-                    $clean_gradebook[]= $source['skill_id'];
-                }
+        if (!empty($skill_gradebooks_source)) {
+            foreach($skill_gradebooks_source as $source) {
+                $clean_gradebook[] = $source['skill_id'];
             }
+        }
+
+        //Cleaning skills
+        $skill_list = array_map('intval', $skill_list);
+        $skill_list = array_filter($skill_list);
+
+        if (!empty($skill_list)) {
 
             if (!empty($clean_gradebook)) {
                 $skill_to_remove = array_diff($clean_gradebook, $skill_list);
@@ -135,20 +136,20 @@ class Gradebook extends Model
                     $skill_gradebook->save($params);
                 }
             }
+        } else {
+            $skill_to_remove = $clean_gradebook;
+        }
 
-            if ($deleteSkillNotInList) {
-                if (!empty($skill_to_remove)) {
-                    foreach ($skill_to_remove as $remove) {
-                        $skill_item = $skill_gradebook->get_skill_info(
-                            $remove,
-                            $gradebook_id
-                        );
-                        $skill_gradebook->delete($skill_item['id']);
-                    }
+        if ($deleteSkillNotInList) {
+            if (!empty($skill_to_remove)) {
+                foreach ($skill_to_remove as $remove) {
+                    $skill_item = $skill_gradebook->get_skill_info(
+                        $remove,
+                        $gradebook_id
+                    );
+                    $skill_gradebook->delete($skill_item['id']);
                 }
             }
-
-            return true;
         }
 
         return false;