]> git.mjollnir.org Git - moodle.git/commitdiff
Implemented a test version of the gradebook category edit page, and developed the...
authornicolasconnault <nicolasconnault>
Wed, 30 May 2007 08:48:11 +0000 (08:48 +0000)
committernicolasconnault <nicolasconnault>
Wed, 30 May 2007 08:48:11 +0000 (08:48 +0000)
grade/report/grader/category.php [new file with mode: 0644]
lib/grade/grade_tree.php

diff --git a/grade/report/grader/category.php b/grade/report/grader/category.php
new file mode 100644 (file)
index 0000000..8513500
--- /dev/null
@@ -0,0 +1,72 @@
+<?php // $Id$
+
+///////////////////////////////////////////////////////////////////////////
+//                                                                       //
+// NOTICE OF COPYRIGHT                                                   //
+//                                                                       //
+// Moodle - Modular Object-Oriented Dynamic Learning Environment         //
+//          http://moodle.com                                            //
+//                                                                       //
+// Copyright (C) 2001-2007  Martin Dougiamas  http://dougiamas.com       //
+//                                                                       //
+// This program is free software; you can redistribute it and/or modify  //
+// it under the terms of the GNU General Public License as published by  //
+// the Free Software Foundation; either version 2 of the License, or     //
+// (at your option) any later version.                                   //
+//                                                                       //
+// This program is distributed in the hope that it will be useful,       //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of        //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         //
+// GNU General Public License for more details:                          //
+//                                                                       //
+//          http://www.gnu.org/copyleft/gpl.html                         //
+//                                                                       //
+///////////////////////////////////////////////////////////////////////////
+set_time_limit(0);
+require_once '../../../config.php';
+require_once $CFG->libdir . '/grade/grade_tree.php';
+require_once $CFG->libdir . '/gradelib.php';
+print_header('Edit categories');
+
+$param = new stdClass();
+$param->moveup = optional_param('moveup', 0, PARAM_INT);
+$param->movedown = optional_param('movedown', 0, PARAM_INT);
+$param->source = optional_param('source', 0, PARAM_INT);
+$param->action = optional_param('action', 0, PARAM_ALPHA);
+$param->move = optional_param('move', 0, PARAM_INT);
+
+$tree = new grade_tree(641);
+$select_source = false;
+
+if (!empty($param->action)) {
+    if (empty($param->source)) {
+        $select_source = true;
+    } else {
+        print_heading("Select the destination for the selected element."); 
+    }
+} elseif (!empty($param->source)) {
+    if (!empty($param->moveup)) {
+        $tree->move_element($param->source, $param->moveup); 
+    } elseif(!empty($param->movedown)) {
+        $tree->move_element($param->source, $param->movedown, 'after');
+    } elseif(!empty($param->move)) {
+        $tree->move_element($param->source, $param->move, 'after');
+    }
+    
+    $tree->renumber();
+    $tree->update_db();
+} 
+
+if ($select_source) {
+    print_heading("Select an element to move");
+}
+
+echo $tree->get_edit_tree($select_source, 1, null, $param->source, $param->action);
+
+echo '<form id="move_button" action="category.php" method="post"><div>' . "\n";
+echo '<input type="hidden" name="action" value="move" />' . "\n";
+echo '<input type="submit" value="Move" />' . "\n";
+echo '</div></form>';
+
+print_footer();
+?>
index 8a86944e6030dfca393e2c2b79a84a34e59f5972..641a101e781f5eb270bfd8e9bc008c9233ac615a 100644 (file)
@@ -404,7 +404,7 @@ class grade_tree {
         $this->first_sortorder = $sortorder;
 
         foreach ($elements as $key => $element) {
-            $this->first_sortorder++;
+            $this->first_sortorder++; 
             $new_sortorder = $this->first_sortorder;
             $old_sortorder = $element['object']->sortorder;
 
@@ -439,7 +439,7 @@ class grade_tree {
             return $newtree;
         }
     }
-  
+
     /**
      * Because the $element referred to in this class is rather loosely defined, it 
      * may come in different flavours and forms. However, it will almost always contain
@@ -912,9 +912,14 @@ class grade_tree {
 
     /**
      * Returns a HTML list with sorting arrows and insert boxes. This is a recursive method.
+     * @param boolean $select_source Whether or not to display each element as a link to be selected as a source for an action
+     * @param int $level The level of recursion
+     * @param array $elements The elements to display in a list. Defaults to this->tree_array
+     * @param int $source_sortorder A source sortorder, given when an element needs to be moved or inserted.
+     * @param string $action 'move' or 'insert'
      * @return string HTML code
      */
-    function get_edit_tree($level=1, $elements=null) {
+    function get_edit_tree($select_source=false, $level=1, $elements=NULL, $source_sortorder=NULL, $action=NULL) {
         if (empty($this->tree_array)) {
             return null;
         } else {
@@ -923,17 +928,21 @@ class grade_tree {
 
             $strmoveup   = get_string("moveup");
             $strmovedown = get_string("movedown");
+
+            $sesskey_input = '<input type="hidden" name="sesskey" value="' . $USER->sesskey . '" />';
+            $courseid_input = '<input type="hidden" name="courseid" value="' . $this->courseid . '" />';
             
             if (empty($elements)) {
-                $list = '<ul id="grade_edit_tree">';
+                $list = '<ul id="grade_edit_tree">' . "\n";
                 $elements = $this->tree_array;
             } else {
-                $list = '<ul class="level' . $level . 'children">';
+                $list = '<ul class="level' . $level . 'children">' . "\n";
             } 
             
             $first = true;
             $count = 1;
             $last = false;
+            $last_sortorder = null;
             
             if (count($elements) == 1) {
                 $last = true;
@@ -943,43 +952,84 @@ class grade_tree {
                 if (empty($element->next_sortorder)) {
                     $element->next_sortorder = null;
                 }
+
+                $object_name = $element['object']->get_name();
+                if ($select_source) {
+                    $formname = "select_source_$sortorder";
+                    $object_name = '<form id="' . $formname . '" class="movearrow" action="category.php" method="post"><div>
+                        <input type="hidden" name="source" value="' . $sortorder . '" />
+                        <input type="hidden" name="action" value="' . $action . '" />
+                        <a href="#" onclick="document.getElementById(\'' . $formname . '\').submit();" title="Select this element">'
+                      . $object_name . '</a></div></form>';
+                }
+
                 $list .= '<li class="level' . $level . 'element sortorder' 
-                      . $element['object']->get_sortorder() . '">' 
-                      . $element['object']->get_name();
+                      . $element['object']->get_sortorder() . '">' . "\n" 
+                      . $object_name;
                 
                 if (!$first) {
-                    $list .= '<a title="'.$strmoveup.'" href="category.php?courseid='.$this->courseid
-                          . '&amp;source=' . $sortorder . '&amp;moveup=' . $element['object']->previous_sortorder 
-                          . '&amp;sesskey='.$USER->sesskey.'">'
-                          . '<img src="'.$CFG->pixpath.'/t/up.gif" class="iconsmall" alt="'.$strmoveup.'" /></a> ';
+                    $formname = "moveup_$sortorder";
+                    $list .= '<form method="post" action="category.php" class="movearrow" id="' . $formname . '"><div>
+                        <input type="hidden" name="source" value="' . $sortorder . '" />
+                        <input type="hidden" name="moveup" value="' . $element['object']->previous_sortorder . '" />' . "\n";
+                    
+                    $list .= $sesskey_input . "\n" . $courseid_input;
+
+                    $list .= '<div class="moveuparrow">'
+                          . '<img src="'.$CFG->pixpath.'/t/up.gif" class="iconsmall" '
+                          . 'alt="'.$strmoveup.'" title="'.$strmoveup.'"' 
+                          . 'onclick="document.getElementById(\'' . $formname . '\').submit();" /> </div>'. "\n";
+                    $list .= '</div></form>';
                 } else {
-                    $list .= '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" class="iconsmall" alt="" /> ';
+                    $list .= '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" class="iconsmall" alt="" /> '. "\n";
                 }
 
                 if (!$last) {
-                    $list .= '<a title="'.$strmovedown.'" href="category.php?courseid='.$this->courseid
-                          . '&amp;source=' . $sortorder . '&amp;movedown=' . $element['object']->next_sortorder 
-                          . '&amp;sesskey='.$USER->sesskey.'">'
-                          . '<img src="'.$CFG->pixpath.'/t/down.gif" class="iconsmall" alt="'.$strmovedown.'" /></a> ';
+                    $formname = "movedown_$sortorder";
+                    $list .= '<form method="post" action="category.php" class="movearrow" id="' . $formname . '"><div>
+                        <input type="hidden" name="source" value="' . $sortorder . '" />
+                        <input type="hidden" name="movedown" value="' . $element['object']->next_sortorder . '" />' . "\n";
+                    
+                    $list .= $sesskey_input . "\n" . $courseid_input;
+
+                    $list .= '<div class="movedownarrow">'
+                          . '<img src="'.$CFG->pixpath.'/t/down.gif" class="iconsmall" '
+                          . 'alt="'.$strmovedown.'" title="'.$strmovedown.'"' 
+                          . 'onclick="document.getElementById(\'' . $formname . '\').submit();" /></div>'. "\n";
+                    $list .= '</div></form>';
                 } else {
-                    $list .= '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" class="iconsmall" alt="" /> ';
+                    $list .= '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" class="iconsmall" alt="" /> ' . "\n";
                 }
                 
                 if (!empty($element['children'])) {
-                    $list .= $this->get_edit_tree($level + 1, $element['children']);
+                    $list .= $this->get_edit_tree($select_source, $level + 1, $element['children'], $source_sortorder, $action);
                 }
                 
-                $list .= '</li>';
+                $list .= '</li>' . "\n";
 
                 $first = false;
                 $count++;
                 if ($count == count($elements)) {
                     $last = true;
                 } 
+
+                $last_sortorder = $sortorder;
+            }
+            
+            // Add an insertion box if source_sortorder is given
+            if ($source_sortorder && !empty($action)) {
+                $list .= '<li class="insertion">
+                    <form method="post" action="category.php" id="insertion_' . $last_sortorder . '">
+                    <div>
+                        <input type="hidden" name="source" value="' . $source_sortorder . '" />
+                        <input type="hidden" name="' . $action . '" value="' . $last_sortorder . '" />
+                        <div class="insertion_box" onclick="document.getElementById(\'insertion_' . $last_sortorder . '\').submit();"></div>                        
+                    </div>
+                    </form>
+                </li>';
             }
-                    
-            $list .= '</ul>';
 
+            $list .= '</ul>' . "\n";
             return $list;
         }