/** * Format a column of data for display. * * @param stdClass $row * @return string */ public function col_userid(stdClass $row) { global $USER; $edit = ''; $actions = array(); $urlparams = array('id'=>$this->assignment->get_course_module()->id, 'rownum'=>$this->rownum, 'action' => 'grade', 'useridlistid' => $this->assignment->get_useridlist_key_id()); $url = new moodle_url('/mod/assign/view.php', $urlparams); $noimage = null; if (!$row->grade) { $description = get_string('grade'); } else { $description = get_string('updategrade', 'assign'); } $actions['grade'] = new action_menu_link_secondary( $url, $noimage, $description ); // Everything we need is in the row. $submission = $row; $flags = $row; if ($this->assignment->get_instance()->teamsubmission) { // Use the cache for this. $submission = false; $group = false; $this->get_group_and_submission($row->id, $group, $submission, -1); } $submissionsopen = $this->assignment->submissions_open($row->id, true, $submission, $flags, $this->gradinginfo); $caneditsubmission = $this->assignment->can_edit_submission($row->id, $USER->id); // Hide for offline assignments. if ($this->assignment->is_any_submission_plugin_enabled()) { if (!$row->status || $row->status == ASSIGN_SUBMISSION_STATUS_DRAFT || !$this->assignment->get_instance()->submissiondrafts) { if (!$row->locked) { $urlparams = array('id' => $this->assignment->get_course_module()->id, 'userid'=>$row->id, 'action'=>'lock', 'sesskey'=>sesskey(), 'page'=>$this->currpage); $url = new moodle_url('/mod/assign/view.php', $urlparams); $description = get_string('preventsubmissionsshort', 'assign'); $actions['lock'] = new action_menu_link_secondary( $url, $noimage, $description ); } else { $urlparams = array('id' => $this->assignment->get_course_module()->id, 'userid'=>$row->id, 'action'=>'unlock', 'sesskey'=>sesskey(), 'page'=>$this->currpage); $url = new moodle_url('/mod/assign/view.php', $urlparams); $description = get_string('allowsubmissionsshort', 'assign'); $actions['unlock'] = new action_menu_link_secondary( $url, $noimage, $description ); } } if ($submissionsopen && $USER->id != $row->id && $caneditsubmission) { $urlparams = array('id' => $this->assignment->get_course_module()->id, 'userid'=>$row->id, 'action'=>'editsubmission', 'sesskey'=>sesskey(), 'page'=>$this->currpage); $url = new moodle_url('/mod/assign/view.php', $urlparams); $description = get_string('editsubmission', 'assign'); $actions['editsubmission'] = new action_menu_link_secondary( $url, $noimage, $description ); } } if (($this->assignment->get_instance()->duedate || $this->assignment->get_instance()->cutoffdate) && $this->hasgrantextension) { $urlparams = array('id' => $this->assignment->get_course_module()->id, 'userid' => $row->id, 'action' => 'grantextension', 'sesskey' => sesskey(), 'page' => $this->currpage); $url = new moodle_url('/mod/assign/view.php', $urlparams); $description = get_string('grantextension', 'assign'); $actions['grantextension'] = new action_menu_link_secondary( $url, $noimage, $description ); } if ($row->status == ASSIGN_SUBMISSION_STATUS_SUBMITTED && $this->assignment->get_instance()->submissiondrafts) { $urlparams = array('id' => $this->assignment->get_course_module()->id, 'userid'=>$row->id, 'action'=>'reverttodraft', 'sesskey'=>sesskey(), 'page'=>$this->currpage); $url = new moodle_url('/mod/assign/view.php', $urlparams); $description = get_string('reverttodraftshort', 'assign'); $actions['reverttodraft'] = new action_menu_link_secondary( $url, $noimage, $description ); } if ($row->status == ASSIGN_SUBMISSION_STATUS_DRAFT && $this->assignment->get_instance()->submissiondrafts && $caneditsubmission && $submissionsopen && $row->id != $USER->id) { $urlparams = array('id' => $this->assignment->get_course_module()->id, 'userid'=>$row->id, 'action'=>'submitotherforgrading', 'sesskey'=>sesskey(), 'page'=>$this->currpage); $url = new moodle_url('/mod/assign/view.php', $urlparams); $description = get_string('submitforgrading', 'assign'); $actions['submitforgrading'] = new action_menu_link_secondary( $url, $noimage, $description ); } $ismanual = $this->assignment->get_instance()->attemptreopenmethod == ASSIGN_ATTEMPT_REOPEN_METHOD_MANUAL; $hassubmission = !empty($row->status); $notreopened = $hassubmission && $row->status != ASSIGN_SUBMISSION_STATUS_REOPENED; $isunlimited = $this->assignment->get_instance()->maxattempts == ASSIGN_UNLIMITED_ATTEMPTS; $hasattempts = $isunlimited || $row->attemptnumber < $this->assignment->get_instance()->maxattempts - 1; if ($ismanual && $hassubmission && $notreopened && $hasattempts) { $urlparams = array('id' => $this->assignment->get_course_module()->id, 'userid'=>$row->id, 'action'=>'addattempt', 'sesskey'=>sesskey(), 'page'=>$this->currpage); $url = new moodle_url('/mod/assign/view.php', $urlparams); $description = get_string('addattempt', 'assign'); $actions['addattempt'] = new action_menu_link_secondary( $url, $noimage, $description ); } $menu = new action_menu(); $menu->set_owner_selector('.gradingtable-actionmenu'); $menu->set_alignment(action_menu::TL, action_menu::BL); $menu->set_constraint('.gradingtable > .no-overflow'); $menu->set_menu_trigger(get_string('edit')); foreach ($actions as $action) { $menu->add($action); } // Prioritise the menu ahead of all other actions. $menu->prioritise = true; $edit .= $this->output->render($menu); return $edit; }
// 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. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * This file is the entry point to the assign module. All pages are rendered from here * * @package mod_assign * @copyright 2012 NetSpot {@link http://www.netspot.com.au} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once '../../config.php'; require_once $CFG->dirroot . '/mod/assign/locallib.php'; $id = required_param('id', PARAM_INT); list($course, $cm) = get_course_and_cm_from_cmid($id, 'assign'); require_login($course, true, $cm); $context = context_module::instance($cm->id); require_capability('mod/assign:view', $context); $assign = new assign($context, $cm, $course); $urlparams = array('id' => $id, 'action' => optional_param('action', '', PARAM_TEXT), 'rownum' => optional_param('rownum', 0, PARAM_INT), 'useridlistid' => optional_param('useridlistid', $assign->get_useridlist_key_id(), PARAM_ALPHANUM)); $url = new moodle_url('/mod/assign/view.php', $urlparams); $PAGE->set_url($url); // Update module completion status. $assign->set_module_viewed(); // Apply overrides. $assign->update_effective_access($USER->id); // Get the assign class to // render the page. echo $assign->view(optional_param('action', '', PARAM_TEXT));
/** * Test that the useridlist cache will retive the correct values * when using assign::get_useridlist_key and assign::get_useridlist_key_id. */ public function test_useridlist_cache() { // Create an assignment object, we will use this to test the key generation functions. $course = self::getDataGenerator()->create_course(); $assign = self::getDataGenerator()->create_module('assign', array('course' => $course->id)); list($courserecord, $cm) = get_course_and_cm_from_instance($assign->id, 'assign'); $context = context_module::instance($cm->id); $assign = new assign($context, $cm, $courserecord); // Create the cache. $cache = cache::make_from_params(cache_store::MODE_SESSION, 'mod_assign', 'useridlist'); // Create an entry that we will insert into the cache. $entry = array(0 => '5', 1 => '6325', 2 => '67783'); // Insert the value into the cache. $cache->set($assign->get_useridlist_key(), $entry); // Now test we can retrive the entry. $this->assertEquals($entry, $cache->get($assign->get_useridlist_key())); $useridlistid = clean_param($assign->get_useridlist_key_id(), PARAM_ALPHANUM); $this->assertEquals($entry, $cache->get($assign->get_useridlist_key($useridlistid))); // Check it will not retrive anything on an invalid key. $this->assertFalse($cache->get($assign->get_useridlist_key('notvalid'))); }