diff --git a/grade/report/singleview/README.md b/grade/report/singleview/README.md deleted file mode 100644 index 036ab6e05bb..00000000000 --- a/grade/report/singleview/README.md +++ /dev/null @@ -1,21 +0,0 @@ -LSU Single view -============== - -Single view is a simple Moodle Gradebook plugin which allows teahers to do some awesome things. - -Single view allows for editing of multiple grades for a single grade item and all grade items for a single user. - -It allows the instructor to insert an arbitrary value ofr all students for a single item (incredibly useful) or all items for a single student (less useful). - -Single view also allows for inserting an arbitrary value for all empty items, allowing you to add zero grades for empties in one step. - -It also allows for bulk overrides. - -Single view works best with the LSU Gradebook. - -Installation Instructions -============== - -1. Drop into your grade/reports folder. -2. Click Notifications. - diff --git a/grade/report/singleview/classes/lib.php b/grade/report/singleview/classes/lib.php index 76bab76cd53..1753cc8b56d 100644 --- a/grade/report/singleview/classes/lib.php +++ b/grade/report/singleview/classes/lib.php @@ -25,7 +25,7 @@ require_once $CFG->dirroot . '/grade/report/singleview/classes/uilib.php'; -interface selectable_items { +interface gradereport_selectable_items { public function description(); public function options(); @@ -33,11 +33,11 @@ interface selectable_items { public function item_type(); } -interface item_filtering { +interface gradereport_item_filtering { public static function filter($item); } -abstract class singleview_screen { +abstract class gradereport_singleview_screen { var $courseid; var $itemid; @@ -61,7 +61,10 @@ abstract class singleview_screen { $this->course = $DB->get_record('course', array('id' => $courseid)); $this->page = optional_param('page', 0, PARAM_INT); - $this->perpage = optional_param('perpage', 300, PARAM_INT); + $this->perpage = optional_param('perpage', 100, PARAM_INT); + if ($this->perpage > 100) { + $this->perpage = 100; + } $this->init(empty($itemid)); } @@ -136,7 +139,7 @@ abstract class singleview_screen { public abstract function html(); public function supports_paging() { - return false; + return true; } public function pager() { @@ -147,7 +150,6 @@ abstract class singleview_screen { global $OUTPUT; list($___, $item) = explode('singleview_', get_class($this)); - return $OUTPUT->paging_bar( count($this->items), $this->page, $this->perpage, new moodle_url('/grade/report/singleview/index.php', array( @@ -174,7 +176,7 @@ abstract class singleview_screen { public function factory() { if (empty($this->__factory)) { - $this->__factory = new singleview_grade_ui_factory(); + $this->__factory = new gradereport_singleview_grade_ui_factory(); } return $this->__factory; @@ -250,8 +252,8 @@ abstract class singleview_screen { } } -abstract class singleview_tablelike extends singleview_screen implements tabbable { - var $items; +abstract class gradereport_singleview_tablelike extends gradereport_singleview_screen implements tabbable { + public $items; protected $headers = array(); @@ -284,13 +286,11 @@ abstract class singleview_tablelike extends singleview_screen implements tabbabl // Special injection for bulk operations. public function process($data) { $bulk = $this->factory()->create('bulk_insert')->format($this->item); - // Bulk insert messages the data to be passed in // ie: for all grades of empty grades apply the specified value. if ($bulk->is_applied($data)) { $filter = $bulk->get_type($data); $insert_value = $bulk->get_insert_value($data); - // Appropriately massage data that may not exist. if ($this->supports_paging()) { // TODO: this only works with the grade screen... @@ -301,7 +301,7 @@ abstract class singleview_tablelike extends singleview_screen implements tabbabl $null = $grade_item->gradetype == GRADE_TYPE_SCALE ? -1 : ''; - foreach ($this->all_items as $itemid => $item) { + foreach ($this->items as $itemid => $item) { $field = "finalgrade_{$grade_item->id}_{$itemid}"; if (isset($data->$field)) { continue; @@ -346,14 +346,13 @@ abstract class singleview_tablelike extends singleview_screen implements tabbabl // Table tab index. $tab = ($i * $this->total) + $this->index; $html = $this->factory()->create($field)->format($grade, $tab); - + if ($field == 'finalgrade' and !empty($this->structure)) { $html .= $this->structure->get_grade_analysis_icon($grade); } $line[] = $html; } - return $line; } diff --git a/grade/report/singleview/classes/uilib.php b/grade/report/singleview/classes/uilib.php index 4c51a477756..e5ed217b4f0 100644 --- a/grade/report/singleview/classes/uilib.php +++ b/grade/report/singleview/classes/uilib.php @@ -23,21 +23,21 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -abstract class singleview_ui_factory { +abstract class gradereport_singleview_ui_factory { public abstract function create($type); protected function wrap($class) { - return new singleview_factory_class_wrap($class); + return new gradereport_singleview_factory_class_wrap($class); } } -class singleview_grade_ui_factory extends singleview_ui_factory { +class gradereport_singleview_grade_ui_factory extends gradereport_singleview_ui_factory { public function create($type) { - return $this->wrap("singleview_{$type}_ui"); + return $this->wrap("gradereport_singleview_{$type}_ui"); } } -class singleview_factory_class_wrap { +class gradereport_singleview_factory_class_wrap { public function __construct($class) { $this->class = $class; } @@ -50,9 +50,10 @@ class singleview_factory_class_wrap { } } -abstract class singleview_ui_element { +abstract class gradereport_singleview_ui_element { public $name; public $value; + public $label; public function __construct($name, $value, $label) { $this->name = $name; @@ -75,7 +76,7 @@ abstract class singleview_ui_element { abstract public function html(); } -class singleview_empty_element extends singleview_ui_element { +class gradereport_singleview_empty_element extends gradereport_singleview_ui_element { public function __construct($msg = null) { if (is_null($msg)) { $this->text = get_string('notavailable', 'gradereport_singleview'); @@ -89,7 +90,7 @@ class singleview_empty_element extends singleview_ui_element { } } -class singleview_text_attribute extends singleview_ui_element { +class gradereport_singleview_text_attribute extends gradereport_singleview_ui_element { private $isdisabled; private $tabindex; @@ -141,7 +142,7 @@ class singleview_text_attribute extends singleview_ui_element { } } -class singleview_checkbox_attribute extends singleview_ui_element { +class gradereport_singleview_checkbox_attribute extends gradereport_singleview_ui_element { private $ischecked; private $tabindex; @@ -204,7 +205,7 @@ class singleview_checkbox_attribute extends singleview_ui_element { } } -class singleview_dropdown_attribute extends singleview_ui_element { +class gradereport_singleview_dropdown_attribute extends gradereport_singleview_ui_element { private $selected; private $options; private $isdisabled; @@ -245,7 +246,7 @@ class singleview_dropdown_attribute extends singleview_ui_element { } } -abstract class singleview_grade_attribute_format extends singleview_attribute_format implements unique_name, tabbable { +abstract class gradereport_singleview_grade_attribute_format extends gradereport_singleview_attribute_format implements unique_name, tabbable { public $name; public $label; @@ -286,14 +287,14 @@ interface be_disabled { } interface be_checked { - public function ischecked(); + public function is_checked(); } interface tabbable { public function get_tabindex(); } -class singleview_bulk_insert_ui extends singleview_ui_element { +class gradereport_singleview_bulk_insert_ui extends gradereport_singleview_ui_element { public function __construct($item) { $this->name = 'bulk_' . $item->id; $this->applyname = $this->name_for('apply'); @@ -314,23 +315,21 @@ class singleview_bulk_insert_ui extends singleview_ui_element { } public function html() { - $s = function($key) { - return get_string($key, 'gradereport_singleview'); - }; - - $apply = html_writer::checkbox($this->applyname, 1, false, ' ' . $s('bulk')); + $insertgrade = get_string('bulkinsertgrade', 'gradereport_singleview'); + $insertappliesto = get_string('bulkappliesto', 'gradereport_singleview'); + $apply = html_writer::checkbox($this->applyname, 1, false, $insertgrade); $insertoptions = array( - 'all' => $s('all_grades'), - 'blanks' => $s('blanks') + 'all' => get_string('all_grades', 'gradereport_singleview'), + 'blanks' => get_string('blanks', 'gradereport_singleview') ); $select = html_writer::select( $insertoptions, $this->selectname, 'blanks', false ); - $label = html_writer::tag('label', $s('for')); - $text = new singleview_text_attribute($this->insertname, "0", 'bulk'); + $label = html_writer::tag('label', $insertappliesto); + $text = new gradereport_singleview_text_attribute($this->insertname, "0", 'bulk'); return implode(' ', array($apply, $text->html(), $label, $select)); } @@ -339,7 +338,7 @@ class singleview_bulk_insert_ui extends singleview_ui_element { } } -abstract class singleview_attribute_format { +abstract class gradereport_singleview_attribute_format { abstract public function determine_format(); public function __toString() { @@ -347,7 +346,7 @@ abstract class singleview_attribute_format { } } -class singleview_finalgrade_ui extends singleview_grade_attribute_format implements unique_value, be_disabled { +class gradereport_singleview_finalgrade_ui extends gradereport_singleview_grade_attribute_format implements unique_value, be_disabled { public $name = 'finalgrade'; @@ -402,7 +401,7 @@ class singleview_finalgrade_ui extends singleview_grade_attribute_format impleme $options[$i + 1] = $name; } - return new singleview_dropdown_attribute( + return new gradereport_singleview_dropdown_attribute( $this->get_name(), $options, $this->get_value(), @@ -411,7 +410,7 @@ class singleview_finalgrade_ui extends singleview_grade_attribute_format impleme $this->get_tabindex() ); } else { - return new singleview_text_attribute( + return new gradereport_singleview_text_attribute( $this->get_name(), $this->get_value(), $this->get_label(), @@ -466,7 +465,7 @@ class singleview_finalgrade_ui extends singleview_grade_attribute_format impleme } } -class singleview_feedback_ui extends singleview_grade_attribute_format implements unique_value, be_disabled { +class gradereport_singleview_feedback_ui extends gradereport_singleview_grade_attribute_format implements unique_value, be_disabled { public $name = 'feedback'; @@ -503,7 +502,7 @@ class singleview_feedback_ui extends singleview_grade_attribute_format implement } public function determine_format() { - return new singleview_text_attribute( + return new gradereport_singleview_text_attribute( $this->get_name(), $this->get_value(), $this->get_label(), @@ -529,19 +528,19 @@ class singleview_feedback_ui extends singleview_grade_attribute_format implement } } -class singleview_override_ui extends singleview_grade_attribute_format implements be_checked, be_disabled { +class gradereport_singleview_override_ui extends gradereport_singleview_grade_attribute_format implements be_checked, be_disabled { public $name = 'override'; - public function ischecked() { + public function is_checked() { return $this->grade->is_overridden(); } public function is_disabled() { $lockedgrade = $lockedgradeitem = 0; - if ( ! empty($this->grade->locked) ) { + if (!empty($this->grade->locked)) { $lockedgrade = 1; } - if ( ! empty($this->grade->grade_item->locked) ) { + if (!empty($this->grade->grade_item->locked)) { $lockedgradeitem = 1; } return ($lockedgrade || $lockedgradeitem); @@ -556,12 +555,12 @@ class singleview_override_ui extends singleview_grade_attribute_format implement function determine_format() { if (!$this->grade->grade_item->is_overridable_item()) { - return new singleview_empty_element(); + return new gradereport_singleview_empty_element(); } - return new singleview_checkbox_attribute( + return new gradereport_singleview_checkbox_attribute( $this->get_name(), $this->get_label(), - $this->ischecked(), + $this->is_checked(), null, $this->is_disabled() ); @@ -580,18 +579,18 @@ class singleview_override_ui extends singleview_grade_attribute_format implement } } -class singleview_exclude_ui extends singleview_grade_attribute_format implements be_checked { +class gradereport_singleview_exclude_ui extends gradereport_singleview_grade_attribute_format implements be_checked { var $name = 'exclude'; - function ischecked() { + function is_checked() { return $this->grade->is_excluded(); } function determine_format() { - return new singleview_checkbox_attribute( + return new gradereport_singleview_checkbox_attribute( $this->get_name(), $this->get_label(), - $this->ischecked() + $this->is_checked() ); } @@ -633,7 +632,7 @@ class singleview_exclude_ui extends singleview_grade_attribute_format implements } } -class singleview_range_ui extends singleview_attribute_format { +class gradereport_singleview_range_ui extends gradereport_singleview_attribute_format { function __construct($item) { $this->item = $item; } @@ -644,6 +643,6 @@ class singleview_range_ui extends singleview_attribute_format { $min = format_float($this->item->grademin, $decimals); $max = format_float($this->item->grademax, $decimals); - return new singleview_empty_element("$min - $max"); + return new gradereport_singleview_empty_element("$min - $max"); } } diff --git a/grade/report/singleview/db/access.php b/grade/report/singleview/db/access.php index c5bbe851ca7..f0cbe0f29f0 100755 --- a/grade/report/singleview/db/access.php +++ b/grade/report/singleview/db/access.php @@ -1,4 +1,4 @@ -. /** - * Displays the Single view + * Displays the Single view * * @package gradereport_singleview - * @copyright 2014 Moodle + * @copyright 2014 Moodle Pty Ltd (http://moodle.com) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ @@ -46,7 +46,7 @@ if (!$course = $DB->get_record('course', $courseparams)) { print_error('nocourseid'); } -if (!in_array($itemtype, grade_report_singleview::valid_screens())) { +if (!in_array($itemtype, gradereport_singleview::valid_screens())) { print_error('notvalid', 'gradereport_singleview', '', $itemtype); } @@ -74,7 +74,7 @@ $USER->grade_last_report[$course->id] = 'singleview'; grade_regrade_final_grades($courseid); -$report = new grade_report_singleview( +$report = new gradereport_singleview( $courseid, $gpr, $context, $itemtype, $itemid, $groupid ); @@ -111,12 +111,12 @@ if ($data = data_submitted()) { $graderrightnav = $graderleftnav = null; if ($report->screen instanceof selectable_items - && class_exists($report::classname($report->screen->item_type()))) { + && class_exists(gradereport_singleview::classname($report->screen->item_type()))) { $optionkeys = array_keys($report->screen->options()); $optionitemid = array_shift($optionkeys); - $relreport = new grade_report_singleview( + $relreport = new gradereport_singleview( $courseid, $gpr, $context, $report->screen->item_type(), $optionitemid, $groupid ); diff --git a/grade/report/singleview/lang/en/gradereport_singleview.php b/grade/report/singleview/lang/en/gradereport_singleview.php index 019688c1257..b00f666f249 100755 --- a/grade/report/singleview/lang/en/gradereport_singleview.php +++ b/grade/report/singleview/lang/en/gradereport_singleview.php @@ -27,7 +27,8 @@ $string['all_grades'] = 'All grades'; $string['assessmentname'] = 'Assessment Name'; $string['blanks'] = 'Empty grades'; -$string['bulk'] = 'Insert'; +$string['bulkappliesto'] = 'for'; +$string['bulkinsertgrade'] = 'Bulk insert'; $string['bulkfor'] = 'Grades for {$a}'; $string['exclude'] = 'Exclude'; $string['excludeall'] = 'Exclude all grades'; @@ -35,14 +36,13 @@ $string['excludefor'] = 'Exclude for {$a}'; $string['excludenone'] = 'Exclude no grades'; $string['feedbackfor'] = 'Feedback for {$a}'; $string['filtergrades'] = 'Show grades for {$a}.'; -$string['for'] = 'for'; $string['gradefor'] = 'Grade for {$a}'; +$string['noscreens'] = 'Could not find a suitable Single view screen.'; +$string['notallowed'] = 'Not allowed to quick edit this item'; +$string['notvalid'] = 'Not a valid Single view screen: {$a}'; $string['override'] = 'Override'; $string['overrideall'] = 'Override all grades'; $string['overridefor'] = 'Override for {$a}'; $string['overridenone'] = 'Override no grades'; $string['pluginname'] = 'Single view'; $string['singleview:view'] = 'View the '.$string['pluginname'].' report'; -$string['noscreens'] = 'Could not find a suitable Single view screen.'; -$string['notallowed'] = 'Not allowed to quick edit this item'; -$string['notvalid'] = 'Not a valid Single view screen: {$a}'; diff --git a/grade/report/singleview/lib.php b/grade/report/singleview/lib.php index 3fa3dff2e4d..fac070d905f 100755 --- a/grade/report/singleview/lib.php +++ b/grade/report/singleview/lib.php @@ -19,14 +19,14 @@ * Base lib class for singleview functionality. * * @package gradereport_singleview - * @copyright 2014 Moodle + * @copyright 2014 Moodle Pty Ltd (http://moodle.com) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once($CFG->dirroot . '/grade/report/lib.php'); require_once($CFG->dirroot . '/grade/report/singleview/classes/lib.php'); -class grade_report_singleview extends grade_report { +class gradereport_singleview extends grade_report { public static function valid_screens() { $screendir = dirname(__FILE__) . '/screens'; @@ -54,11 +54,11 @@ class grade_report_singleview extends grade_report { require_once $screendir . '/lib.php'; - return 'singleview_' . $screen; + return 'gradereport_singleview_' . $screen; } public static function filters() { - $classnames = array('grade_report_singleview', 'classname'); + $classnames = array('gradereport_singleview', 'classname'); $classes = array_map($classnames, self::valid_screens()); $screens = array_filter($classes, function($screen) { @@ -115,10 +115,10 @@ class grade_report_singleview extends grade_report { } } -function grade_report_singleview_profilereport($course, $user) { +function gradereport_singleview_profilereport($course, $user) { global $CFG, $OUTPUT; - if (!function_exists('grade_report_user_profilereport')) { + if (!function_exists('gradereport_user_profilereport')) { require_once $CFG->dirroot . '/grade/report/user/lib.php'; } @@ -131,7 +131,7 @@ function grade_report_singleview_profilereport($course, $user) { ); if (!$can_use) { - grade_report_user_profilereport($course, $user); + gradereport_user_profilereport($course, $user); } else { $gpr = new grade_plugin_return(array( 'type' => 'report', @@ -140,7 +140,7 @@ function grade_report_singleview_profilereport($course, $user) { 'userid' => $user->id )); - $report = new grade_report_singleview($course->id, $gpr, $context, 'user', $user->id); + $report = new gradereport_singleview($course->id, $gpr, $context, 'user', $user->id); echo $OUTPUT->heading($report->screen->heading()); echo $report->output(); diff --git a/grade/report/singleview/screens/grade/lib.php b/grade/report/singleview/screens/grade/lib.php index 7dfe9d0e27c..e694138a0f7 100644 --- a/grade/report/singleview/screens/grade/lib.php +++ b/grade/report/singleview/screens/grade/lib.php @@ -23,12 +23,14 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class singleview_grade extends singleview_tablelike - implements selectable_items, item_filtering { +class gradereport_singleview_grade extends gradereport_singleview_tablelike + implements gradereport_selectable_items, gradereport_item_filtering { + + private $totalitemcount = 0; private $requiresextra = false; - private $requirespaging = false; + private $requirespaging = true; public $structure; @@ -84,28 +86,17 @@ class singleview_grade extends singleview_tablelike $roleids = explode(',', get_config('moodle', 'gradebookroles')); $this->items = get_role_users( - $roleids, $this->context, false, '', - 'u.lastname, u.firstname', null, $this->groupid, - $this->perpage * $this->page, $this->perpage - ); + $roleids, $this->context, false, '', + 'u.lastname, u.firstname', null, $this->groupid, + $this->perpage * $this->page, $this->perpage + ); + + $this->totalitemcount = count_role_users($roleids, $this->context); if ($selfitemisempty) { return; } - // Only page when necessary. - if (count($this->items) > $this->perpage) { - $this->requirespaging = true; - - $this->all_items = $this->items; - - $this->items = get_role_users( - $roleids, $this->context, false, '', - 'u.lastname, u.firstname', null, $this->groupid, - $this->perpage * $this->page, $this->perpage - ); - } - global $DB; $params = array( @@ -115,12 +106,12 @@ class singleview_grade extends singleview_tablelike $this->item = grade_item::fetch($params); - $filterfun = grade_report_singleview::filters(); + $filterfun = gradereport_singleview::filters(); $allowed = $filterfun($this->item); if (empty($allowed)) { - print_error('not_allowed', 'gradereport_singleview'); + print_error('notallowed', 'gradereport_singleview'); } $this->requiresextra = !$this->item->is_manual_item(); @@ -132,16 +123,16 @@ class singleview_grade extends singleview_tablelike } public function original_headers() { - $headers = array( + return array( '', // For filter icon. '', // For user picture. get_string('firstname') . ' (' . get_string('alternatename') . ') ' . get_string('lastname'), get_string('range', 'grades'), get_string('grade', 'grades'), - get_string('feedback', 'grades') + get_string('feedback', 'grades'), + $this->make_toggle_links('override'), + $this->make_toggle_links('exclude') ); - - return $this->additional_headers($headers); } public function format_line($item) { @@ -179,20 +170,10 @@ class singleview_grade extends singleview_tablelike html_writer::link($url, $fullname), $this->item_range() ); - + return $this->format_definition($line, $grade); } - public function additional_headers($headers) { - if ($this->requiresextra) { - $headers[] = $this->make_toggle_links('override'); - } - - $headers[] = $this->make_toggle_links('exclude'); - - return $headers; - } - public function item_range() { if (empty($this->range)) { $this->range = $this->factory()->create('range')->format($this->item); @@ -209,7 +190,7 @@ class singleview_grade extends singleview_tablelike global $OUTPUT; return $OUTPUT->paging_bar( - count($this->all_items), $this->page, $this->perpage, + $this->totalitemcount, $this->page, $this->perpage, new moodle_url('/grade/report/singleview/index.php', array( 'perpage' => $this->perpage, 'id' => $this->courseid, diff --git a/grade/report/singleview/screens/select/lib.php b/grade/report/singleview/screens/select/lib.php index 2ce62f822b8..e3aa2dd9ac1 100644 --- a/grade/report/singleview/screens/select/lib.php +++ b/grade/report/singleview/screens/select/lib.php @@ -23,10 +23,15 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class singleview_select extends singleview_screen { +class gradereport_singleview_select extends gradereport_singleview_screen { public function init($selfitemisempty = false) { global $DB; + $this->items = get_role_users( + '', $this->context, false, '', + 'u.lastname, u.firstname', null, $this->groupid, + $this->perpage * $this->page, $this->perpage + ); $this->item = $DB->get_record('course', array('id' => $this->courseid)); } @@ -35,14 +40,14 @@ class singleview_select extends singleview_screen { $html = ''; - $types = grade_report_singleview::valid_screens(); + $types = gradereport_singleview::valid_screens(); foreach ($types as $type) { - $class = grade_report_singleview::classname($type); + $class = gradereport_singleview::classname($type); $screen = new $class($this->courseid, null, $this->groupid); - if (!$screen instanceof selectable_items) { + if (!$screen instanceof gradereport_selectable_items) { continue; } @@ -65,7 +70,7 @@ class singleview_select extends singleview_screen { } if (empty($html)) { - $OUTPUT->notification(get_string('no_screens', 'gradereport_singleview')); + $OUTPUT->notification(get_string('noscreens', 'gradereport_singleview')); } return $html; diff --git a/grade/report/singleview/screens/user/lib.php b/grade/report/singleview/screens/user/lib.php index 1506852decd..63349eee3b8 100644 --- a/grade/report/singleview/screens/user/lib.php +++ b/grade/report/singleview/screens/user/lib.php @@ -23,7 +23,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class singleview_user extends singleview_tablelike implements selectable_items { +class gradereport_singleview_user extends gradereport_singleview_tablelike implements gradereport_selectable_items { private $categories = array(); @@ -64,7 +64,7 @@ class singleview_user extends singleview_tablelike implements selectable_items { } } - $this->items = array_filter($seq->items, grade_report_singleview::filters()); + $this->items = array_filter($seq->items, gradereport_singleview::filters()); unset($seq); @@ -105,10 +105,15 @@ class singleview_user extends singleview_tablelike implements selectable_items { $lockeditemgrade = 1; } // Check both grade and grade item. - if ( $lockeditem || $lockeditemgrade ) + if ($lockeditem || $lockeditemgrade) { $lockicon = $OUTPUT->pix_icon('t/locked', 'grade is locked'); + } - $url = new moodle_url("/mod/$item->itemmodule/view.php", array('id' => $item->cmid)); + $realuserid = ''; + if (isset($item->cmid)) { + $realuserid = $item->cmid; + } + $url = new moodle_url("/mod/$item->itemmodule/view.php", array('id' => $realuserid)); $iconstring = get_string('filtergrades', 'gradereport_singleview', $item->get_name()); $grade->label = $item->get_name(); @@ -152,10 +157,6 @@ class singleview_user extends singleview_tablelike implements selectable_items { } public function heading() { - if (!empty($this->item->alternatename)) { - return $this->item->alternatename . ' (' . $this->item->firstname . ') ' . $this->item->lastname; - } else { - return fullname($this->item); - } + return fullname($this->item); } } diff --git a/grade/report/singleview/styles.css b/grade/report/singleview/styles.css index d7e88178de0..78a8607ac9e 100644 --- a/grade/report/singleview/styles.css +++ b/grade/report/singleview/styles.css @@ -26,7 +26,7 @@ text-align: center; } -input[name^="finalgrade"] { +#page-grade-report-singleview-index input[name^="finalgrade"] { width: 50px; } diff --git a/grade/report/singleview/tests/behat/singleview.feature b/grade/report/singleview/tests/behat/singleview.feature index 4ede6f2ba73..33dbc3ff1b7 100644 --- a/grade/report/singleview/tests/behat/singleview.feature +++ b/grade/report/singleview/tests/behat/singleview.feature @@ -1,12 +1,13 @@ -@core @core_grades @singleview +@core @core_grades @gradereport_singleview Feature: We can use Single view As a teacher - In order to view a user or an activities grades + In order to view and edit grades + For users and activities for a course. -Background: + Background: Given the following "courses" exist: - | fullname | shortname | category | groupmode | - | Course 1 | C1 | 0 | 1 | + | fullname | shortname | category | + | Course 1 | C1 | 0 | And the following "users" exist: | username | firstname | lastname | email | idnumber | alternatename | | teacher1 | Teacher | 1 | teacher1@asd.com | t1 | teacherbro | @@ -31,37 +32,27 @@ Background: | assign | C1 | a2 | Test assignment two | Submit something! | 100 | | assign | C1 | a3 | Test assignment three | Submit something! | 150 | | assign | C1 | a4 | Test assignment four | Submit nothing! | 150 | - And the following "activities" exist: - | activity | course | idnumber | name | intro | gradecategory | grade | - | assign | C1 | a5 | Test assignment five | Submit something! | Sub category 1 | 200 - | assign | C1 | a6 | Test assignment six | Submit something! | Sub category 1 | 100 - | assign | C1 | a7 | Test assignment seven | Submit nothing! | Sub category 1 | 150 - And the following "activities" exist: - | activity | course | idnumber | name | intro | gradecategory | grade | - | assign | C1 | a8 | Test assignment eight | Submit something! | Sub category 2 | 200 - | assign | C1 | a9 | Test assignment nine | Submit something! | Sub category 2 | 100 - | assign | C1 | 10 | Test assignment ten | Submit nothing! | Sub category 2 | 150 - And I log in as "teacher1" + Then I log in as "teacher1" And I follow "Course 1" And I follow "Grades" -@javascript -Scenario: I can update grades, add feedback and exclude grades. - And I click on "Single view" "option" - And I click on "studentawesemo (Student) 4" "option" - And I click on "Override for Test assignment eight" "checkbox" + @javascript + Scenario: I can update grades, add feedback and exclude grades. + Given I click on "Single view" "option" + Then I click on "studentawesemo (Student) 4" "option" + And I click on "Override for Test assignment one" "checkbox" And I set the following fields to these values: - | Grade for Test assignment eight | 10.00 | - | Feedback for Test assignment eight | test data | + | Grade for Test assignment one | 10.00 | + | Feedback for Test assignment one | test data | And I click on "Exclude for Test assignment four" "checkbox" And I press "Update" Then the following should exist in the "user-grades" table: | Test assignment four | | excluded | Then the following should exist in the "user-grades" table: - | Test assignment eight | + | Test assignment one | | 10.00 | - And I click on "Single view for Test assignment five" "link" + And I click on "Single view for Test assignment three" "link" And I click on "Override for studentbro (Student) 1" "checkbox" And I set the following fields to these values: | Grade for studentbro (Student) 1 | 12.05 | @@ -69,22 +60,30 @@ Scenario: I can update grades, add feedback and exclude grades. And I click on "Exclude for studentjo (Student) 2" "checkbox" And I press "Update" Then the following should exist in the "user-grades" table: - | Test assignment five | + | Test assignment three | | 12.05 | | Excluded | -@javascript -Scenario: Single view quick links work on grade report. - And I follow "Single view for Test assignment one" - And I follow "Grader report" + @javascript + Scenario: Single view quick links work on grade report. + Given I follow "Single view for Test assignment one" + Then I should see "Test assignment one" + Then I follow "Grader report" And I follow "Single view for Student 1" + Then I should see "Student 1" -@javascript -Scenario: Navigation works in the Single view. - And I click on "Single view" "option" - And I click on "studentbro (Student) 1" "option" + @javascript + Scenario: Navigation works in the Single view. + Given I click on "Single view" "option" + Then I click on "studentbro (Student) 1" "option" + Then I should see "Student 1" And I follow "studentjo (Student) 2" + Then I should see "Student 2" And I follow "studentbro (Student) 1" - And I click on "Show grades for Test assignment five" "link" - And I follow "Test assignment six" - And I follow "Test assignment five" + Then I should see "Student 1" + And I click on "Show grades for Test assignment four" "link" + Then I should see "Test assignment four" + And I follow "Test assignment three" + Then I should see "Test assignment three" + And I follow "Test assignment four" + Then I should see "Test assignment four" diff --git a/grade/report/singleview/version.php b/grade/report/singleview/version.php index 9e835d9b105..3225fbf15fb 100755 --- a/grade/report/singleview/version.php +++ b/grade/report/singleview/version.php @@ -19,7 +19,7 @@ * Standard version file * * @package gradereport_singleview - * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} + * @copyright 2014 Moodle Pty Ltd (http://moodle.com) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ diff --git a/lib/classes/plugin_manager.php b/lib/classes/plugin_manager.php index 334de7c6b9d..8344b6663bb 100644 --- a/lib/classes/plugin_manager.php +++ b/lib/classes/plugin_manager.php @@ -1038,7 +1038,7 @@ class core_plugin_manager { ), 'gradereport' => array( - 'grader', 'history', 'outcomes', 'overview', 'user' + 'grader', 'history', 'outcomes', 'overview', 'user', 'singleview' ), 'gradingform' => array(