/** * Print html form. */ function display() { //finalize the form definition if not yet done if (!$this->_definition_finalized) { $this->_definition_finalized = true; $this->definition_after_data(); } $this->_form->display(); }
/** * Display all the submissions ready for grading * * @global object * @global object * @global object * @global object * @param string $message * @return bool|void */ function display_submissions($message='') { global $CFG, $DB, $USER, $DB, $OUTPUT, $PAGE; require_once($CFG->libdir.'/gradelib.php'); /* first we check to see if the form has just been submitted * to request user_preference updates */ $filters = array(self::FILTER_ALL => get_string('all'), self::FILTER_SUBMITTED => get_string('submitted', 'assignment'), self::FILTER_REQUIRE_GRADING => get_string('requiregrading', 'assignment')); $updatepref = optional_param('updatepref', 0, PARAM_INT); if (isset($_POST['updatepref'])){ $perpage = optional_param('perpage', 10, PARAM_INT); $perpage = ($perpage <= 0) ? 10 : $perpage ; $filter = optional_param('filter', 0, PARAM_INT); set_user_preference('assignment_perpage', $perpage); set_user_preference('assignment_quickgrade', optional_param('quickgrade', 0, PARAM_BOOL)); set_user_preference('assignment_filter', $filter); } /* next we get perpage and quickgrade (allow quick grade) params * from database */ $perpage = get_user_preferences('assignment_perpage', 10); $quickgrade = get_user_preferences('assignment_quickgrade', 0); $filter = get_user_preferences('assignment_filter', 0); $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id); if (!empty($CFG->enableoutcomes) and !empty($grading_info->outcomes)) { $uses_outcomes = true; } else { $uses_outcomes = false; } $page = optional_param('page', 0, PARAM_INT); $strsaveallfeedback = get_string('saveallfeedback', 'assignment'); /// Some shortcuts to make the code read better $course = $this->course; $assignment = $this->assignment; $cm = $this->cm; $tabindex = 1; //tabindex for quick grading tabbing; Not working for dropdowns yet add_to_log($course->id, 'assignment', 'view submission', 'submissions.php?id='.$this->cm->id, $this->assignment->id, $this->cm->id); $PAGE->set_title(format_string($this->assignment->name,true)); $PAGE->set_heading($this->course->fullname); echo $OUTPUT->header(); echo '<div class="usersubmissions">'; //hook to allow plagiarism plugins to update status/print links. plagiarism_update_status($this->course, $this->cm); /// Print quickgrade form around the table if ($quickgrade) { $formattrs = array(); $formattrs['action'] = new moodle_url('/mod/assignment/submissions.php'); $formattrs['id'] = 'fastg'; $formattrs['method'] = 'post'; echo html_writer::start_tag('form', $formattrs); echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'id', 'value'=> $this->cm->id)); echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'mode', 'value'=> 'fastgrade')); echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'page', 'value'=> $page)); echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=> sesskey())); } $course_context = get_context_instance(CONTEXT_COURSE, $course->id); if (has_capability('gradereport/grader:view', $course_context) && has_capability('moodle/grade:viewall', $course_context)) { echo '<div class="allcoursegrades"><a href="' . $CFG->wwwroot . '/grade/report/grader/index.php?id=' . $course->id . '">' . get_string('seeallcoursegrades', 'grades') . '</a></div>'; } if (!empty($message)) { echo $message; // display messages here if any } $context = get_context_instance(CONTEXT_MODULE, $cm->id); /// Check to see if groups are being used in this assignment /// find out current groups mode $groupmode = groups_get_activity_groupmode($cm); $currentgroup = groups_get_activity_group($cm, true); groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/assignment/submissions.php?id=' . $this->cm->id); /// Get all ppl that are allowed to submit assignments list($esql, $params) = get_enrolled_sql($context, 'mod/assignment:view', $currentgroup); if ($filter == self::FILTER_ALL) { $sql = "SELECT u.id FROM {user} u ". "LEFT JOIN ($esql) eu ON eu.id=u.id ". "WHERE u.deleted = 0 AND eu.id=u.id "; } else { $wherefilter = ''; if($filter == self::FILTER_SUBMITTED) { $wherefilter = ' AND s.timemodified > 0'; } else if($filter == self::FILTER_REQUIRE_GRADING) { $wherefilter = ' AND s.timemarked < s.timemodified '; } $sql = "SELECT u.id FROM {user} u ". "LEFT JOIN ($esql) eu ON eu.id=u.id ". "LEFT JOIN {assignment_submissions} s ON (u.id = s.userid) " . "WHERE u.deleted = 0 AND eu.id=u.id ". 'AND s.assignment = '. $this->assignment->id . $wherefilter; } $users = $DB->get_records_sql($sql, $params); if (!empty($users)) { $users = array_keys($users); } // if groupmembersonly used, remove users who are not in any group if ($users and !empty($CFG->enablegroupmembersonly) and $cm->groupmembersonly) { if ($groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id')) { $users = array_intersect($users, array_keys($groupingusers)); } } $tablecolumns = array('picture', 'fullname', 'grade', 'submissioncomment', 'timemodified', 'timemarked', 'status', 'finalgrade'); if ($uses_outcomes) { $tablecolumns[] = 'outcome'; // no sorting based on outcomes column } $tableheaders = array('', get_string('fullname'), get_string('grade'), get_string('comment', 'assignment'), get_string('lastmodified').' ('.get_string('submission', 'assignment').')', get_string('lastmodified').' ('.get_string('grade').')', get_string('status'), get_string('finalgrade', 'grades')); if ($uses_outcomes) { $tableheaders[] = get_string('outcome', 'grades'); } require_once($CFG->libdir.'/tablelib.php'); $table = new flexible_table('mod-assignment-submissions'); $table->define_columns($tablecolumns); $table->define_headers($tableheaders); $table->define_baseurl($CFG->wwwroot.'/mod/assignment/submissions.php?id='.$this->cm->id.'&currentgroup='.$currentgroup); $table->sortable(true, 'lastname');//sorted by lastname by default $table->collapsible(true); $table->initialbars(true); $table->column_suppress('picture'); $table->column_suppress('fullname'); $table->column_class('picture', 'picture'); $table->column_class('fullname', 'fullname'); $table->column_class('grade', 'grade'); $table->column_class('submissioncomment', 'comment'); $table->column_class('timemodified', 'timemodified'); $table->column_class('timemarked', 'timemarked'); $table->column_class('status', 'status'); $table->column_class('finalgrade', 'finalgrade'); if ($uses_outcomes) { $table->column_class('outcome', 'outcome'); } $table->set_attribute('cellspacing', '0'); $table->set_attribute('id', 'attempts'); $table->set_attribute('class', 'submissions'); $table->set_attribute('width', '100%'); //$table->set_attribute('align', 'center'); $table->no_sorting('finalgrade'); $table->no_sorting('outcome'); // Start working -- this is necessary as soon as the niceties are over $table->setup(); if (empty($users)) { echo $OUTPUT->heading(get_string('nosubmitusers','assignment')); echo '</div>'; return true; } if ($this->assignment->assignmenttype=='upload' || $this->assignment->assignmenttype=='online' || $this->assignment->assignmenttype=='uploadsingle') { //TODO: this is an ugly hack, where is the plugin spirit? (skodak) echo '<div style="text-align:right"><a href="submissions.php?id='.$this->cm->id.'&download=zip">'.get_string('downloadall', 'assignment').'</a></div>'; } /// Construct the SQL list($where, $params) = $table->get_sql_where(); if ($where) { $where .= ' AND '; } if ($filter == self::FILTER_SUBMITTED) { $where .= 's.timemodified > 0 AND '; } else if($filter == self::FILTER_REQUIRE_GRADING) { $where .= 's.timemarked < s.timemodified AND '; } if ($sort = $table->get_sql_sort()) { $sort = ' ORDER BY '.$sort; } $ufields = user_picture::fields('u'); $select = "SELECT $ufields, s.id AS submissionid, s.grade, s.submissioncomment, s.timemodified, s.timemarked, COALESCE(SIGN(SIGN(s.timemarked) + SIGN(s.timemarked - s.timemodified)), 0) AS status "; $sql = 'FROM {user} u '. 'LEFT JOIN {assignment_submissions} s ON u.id = s.userid AND s.assignment = '.$this->assignment->id.' '. 'WHERE '.$where.'u.id IN ('.implode(',',$users).') '; $ausers = $DB->get_records_sql($select.$sql.$sort, $params, $table->get_page_start(), $table->get_page_size()); $table->pagesize($perpage, count($users)); ///offset used to calculate index of student in that particular query, needed for the pop up to know who's next $offset = $page * $perpage; $strupdate = get_string('update'); $strgrade = get_string('grade'); $grademenu = make_grades_menu($this->assignment->grade); if ($ausers !== false) { $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, array_keys($ausers)); $endposition = $offset + $perpage; $currentposition = 0; foreach ($ausers as $auser) { if ($currentposition == $offset && $offset < $endposition) { $final_grade = $grading_info->items[0]->grades[$auser->id]; $grademax = $grading_info->items[0]->grademax; $final_grade->formatted_grade = round($final_grade->grade,2) .' / ' . round($grademax,2); $locked_overridden = 'locked'; if ($final_grade->overridden) { $locked_overridden = 'overridden'; } /// Calculate user status $auser->status = ($auser->timemarked > 0) && ($auser->timemarked >= $auser->timemodified); $picture = $OUTPUT->user_picture($auser); if (empty($auser->submissionid)) { $auser->grade = -1; //no submission yet } if (!empty($auser->submissionid)) { ///Prints student answer and student modified date ///attach file or print link to student answer, depending on the type of the assignment. ///Refer to print_student_answer in inherited classes. if ($auser->timemodified > 0) { $studentmodified = '<div id="ts'.$auser->id.'">'.$this->print_student_answer($auser->id) . userdate($auser->timemodified).'</div>'; } else { $studentmodified = '<div id="ts'.$auser->id.'"> </div>'; } ///Print grade, dropdown or text if ($auser->timemarked > 0) { $teachermodified = '<div id="tt'.$auser->id.'">'.userdate($auser->timemarked).'</div>'; if ($final_grade->locked or $final_grade->overridden) { $grade = '<div id="g'.$auser->id.'" class="'. $locked_overridden .'">'.$final_grade->formatted_grade.'</div>'; } else if ($quickgrade) { $attributes = array(); $attributes['tabindex'] = $tabindex++; $menu = html_writer::select(make_grades_menu($this->assignment->grade), 'menu['.$auser->id.']', $auser->grade, array(-1=>get_string('nograde')), $attributes); $grade = '<div id="g'.$auser->id.'">'. $menu .'</div>'; } else { $grade = '<div id="g'.$auser->id.'">'.$this->display_grade($auser->grade).'</div>'; } } else { $teachermodified = '<div id="tt'.$auser->id.'"> </div>'; if ($final_grade->locked or $final_grade->overridden) { $grade = '<div id="g'.$auser->id.'" class="'. $locked_overridden .'">'.$final_grade->formatted_grade.'</div>'; } else if ($quickgrade) { $attributes = array(); $attributes['tabindex'] = $tabindex++; $menu = html_writer::select(make_grades_menu($this->assignment->grade), 'menu['.$auser->id.']', $auser->grade, array(-1=>get_string('nograde')), $attributes); $grade = '<div id="g'.$auser->id.'">'.$menu.'</div>'; } else { $grade = '<div id="g'.$auser->id.'">'.$this->display_grade($auser->grade).'</div>'; } } ///Print Comment if ($final_grade->locked or $final_grade->overridden) { $comment = '<div id="com'.$auser->id.'">'.shorten_text(strip_tags($final_grade->str_feedback),15).'</div>'; } else if ($quickgrade) { $comment = '<div id="com'.$auser->id.'">' . '<textarea tabindex="'.$tabindex++.'" name="submissioncomment['.$auser->id.']" id="submissioncomment' . $auser->id.'" rows="2" cols="20">'.($auser->submissioncomment).'</textarea></div>'; } else { $comment = '<div id="com'.$auser->id.'">'.shorten_text(strip_tags($auser->submissioncomment),15).'</div>'; } } else { $studentmodified = '<div id="ts'.$auser->id.'"> </div>'; $teachermodified = '<div id="tt'.$auser->id.'"> </div>'; $status = '<div id="st'.$auser->id.'"> </div>'; if ($final_grade->locked or $final_grade->overridden) { $grade = '<div id="g'.$auser->id.'">'.$final_grade->formatted_grade . '</div>'; } else if ($quickgrade) { // allow editing $attributes = array(); $attributes['tabindex'] = $tabindex++; $menu = html_writer::select(make_grades_menu($this->assignment->grade), 'menu['.$auser->id.']', $auser->grade, array(-1=>get_string('nograde')), $attributes); $grade = '<div id="g'.$auser->id.'">'.$menu.'</div>'; } else { $grade = '<div id="g'.$auser->id.'">-</div>'; } if ($final_grade->locked or $final_grade->overridden) { $comment = '<div id="com'.$auser->id.'">'.$final_grade->str_feedback.'</div>'; } else if ($quickgrade) { $comment = '<div id="com'.$auser->id.'">' . '<textarea tabindex="'.$tabindex++.'" name="submissioncomment['.$auser->id.']" id="submissioncomment' . $auser->id.'" rows="2" cols="20">'.($auser->submissioncomment).'</textarea></div>'; } else { $comment = '<div id="com'.$auser->id.'"> </div>'; } } if (empty($auser->status)) { /// Confirm we have exclusively 0 or 1 $auser->status = 0; } else { $auser->status = 1; } $buttontext = ($auser->status == 1) ? $strupdate : $strgrade; ///No more buttons, we use popups ;-). $popup_url = '/mod/assignment/submissions.php?id='.$this->cm->id . '&userid='.$auser->id.'&mode=single'.'&filter='.$filter.'&offset='.$offset++; $button = $OUTPUT->action_link($popup_url, $buttontext); $status = '<div id="up'.$auser->id.'" class="s'.$auser->status.'">'.$button.'</div>'; $finalgrade = '<span id="finalgrade_'.$auser->id.'">'.$final_grade->str_grade.'</span>'; $outcomes = ''; if ($uses_outcomes) { foreach($grading_info->outcomes as $n=>$outcome) { $outcomes .= '<div class="outcome"><label>'.$outcome->name.'</label>'; $options = make_grades_menu(-$outcome->scaleid); if ($outcome->grades[$auser->id]->locked or !$quickgrade) { $options[0] = get_string('nooutcome', 'grades'); $outcomes .= ': <span id="outcome_'.$n.'_'.$auser->id.'">'.$options[$outcome->grades[$auser->id]->grade].'</span>'; } else { $attributes = array(); $attributes['tabindex'] = $tabindex++; $attributes['id'] = 'outcome_'.$n.'_'.$auser->id; $outcomes .= ' '.html_writer::select($options, 'outcome_'.$n.'['.$auser->id.']', $outcome->grades[$auser->id]->grade, array(0=>get_string('nooutcome', 'grades')), $attributes); } $outcomes .= '</div>'; } } $userlink = '<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $auser->id . '&course=' . $course->id . '">' . fullname($auser, has_capability('moodle/site:viewfullnames', $this->context)) . '</a>'; $row = array($picture, $userlink, $grade, $comment, $studentmodified, $teachermodified, $status, $finalgrade); if ($uses_outcomes) { $row[] = $outcomes; } $table->add_data($row); } $currentposition++; } } $table->print_html(); /// Print the whole table /// Print quickgrade form around the table if ($quickgrade && $table->started_output){ $mailinfopref = false; if (get_user_preferences('assignment_mailinfo', 1)) { $mailinfopref = true; } $emailnotification = html_writer::checkbox('mailinfo', 1, $mailinfopref, get_string('enableemailnotification','assignment')); $emailnotification .= $OUTPUT->help_icon('enableemailnotification', 'assignment'); echo html_writer::tag('div', $emailnotification, array('class'=>'emailnotification')); $savefeedback = html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'fastg', 'value'=>get_string('saveallfeedback', 'assignment'))); echo html_writer::tag('div', $savefeedback, array('class'=>'fastgbutton')); echo html_writer::end_tag('form'); } else if ($quickgrade) { echo html_writer::end_tag('form'); } echo '</div>'; /// End of fast grading form /// Mini form for setting user preference $formaction = new moodle_url('/mod/assignment/submissions.php', array('id'=>$this->cm->id)); $mform = new MoodleQuickForm('optionspref', 'post', $formaction, '', array('class'=>'optionspref')); $mform->addElement('hidden', 'updatepref'); $mform->setDefault('updatepref', 1); $mform->addElement('header', 'qgprefs', get_string('optionalsettings', 'assignment')); $mform->addElement('select', 'filter', get_string('show'), $filters); $mform->setDefault('filter', $filter); $mform->addElement('text', 'perpage', get_string('pagesize', 'assignment'), array('size'=>1)); $mform->setDefault('perpage', $perpage); $mform->addElement('checkbox', 'quickgrade', get_string('quickgrade','assignment')); $mform->setDefault('quickgrade', $quickgrade); $mform->addHelpButton('quickgrade', 'quickgrade', 'assignment'); $mform->addElement('submit', 'savepreferences', get_string('savepreferences')); $mform->display(); echo $OUTPUT->footer(); }
/** * Renders a search form * * @param string $search Search string * @return string HTML */ protected function helper_search_form($search) { global $CFG; require_once $CFG->libdir . '/formslib.php'; $mform = new MoodleQuickForm('searchform', 'POST', $this->page->url); $mform->addElement('hidden', 'sesskey', sesskey()); $el[] = $mform->createElement('text', 'search', get_string('search'), array('size' => 20)); $mform->setDefault('search', $search); $el[] = $mform->createElement('submit', 'submitsearch', get_string('search')); $el[] = $mform->createElement('submit', 'clearsearch', get_string('clear')); $mform->addGroup($el, 'searchgroup', get_string('searchname', 'badges'), ' ', false); ob_start(); $mform->display(); $out = ob_get_clean(); return $out; }
/** * Render single users grading form * * @param object $course * @param object $cm * @param object $ouwiki * @param object $user */ public function ouwiki_render_user_grade($course, $cm, $ouwiki, $user, $pagename, $groupid) { global $CFG; require_once $CFG->libdir . '/gradelib.php'; $grading_info = grade_get_grades($course->id, 'mod', 'ouwiki', $ouwiki->id, $user->id); if ($grading_info) { if (!isset($grading_info->items[0]->grades[$user->id]->grade)) { $user->grade = -1; } else { $user->grade = abs($grading_info->items[0]->grades[$user->id]->grade); } $grademenu = make_grades_menu($ouwiki->grade); $grademenu[-1] = get_string('nograde'); $formparams = array(); $formparams['id'] = $cm->id; $formparams['user'] = $user->id; $formparams['page'] = $pagename; $formparams['group'] = $groupid; $formaction = new moodle_url('/mod/ouwiki/savegrades.php', $formparams); $mform = new MoodleQuickForm('savegrade', 'post', $formaction, '', array('class' => 'savegrade')); $mform->addElement('header', 'usergrade', get_string('usergrade', 'ouwiki')); $mform->addElement('select', 'grade', get_string('grade'), $grademenu); $mform->setDefault('grade', $user->grade); $mform->addElement('submit', 'savechanges', get_string('savechanges')); $mform->display(); } }
} } // Mini form for setting user preference. $formaction = new moodle_url('/mod/giportfolio/submissions.php', array('id' => $cm->id)); $mform = new MoodleQuickForm('optionspref', 'post', $formaction, '', array('class' => 'optionspref')); $mform->addElement('hidden', 'updatepref'); $mform->setDefault('updatepref', 1); $mform->addElement('header', 'qgprefs', get_string('optionalsettings', 'assignment')); $mform->setDefault('filter', $filter); $mform->addElement('text', 'perpage', get_string('pagesize', 'assignment'), array('size' => 1)); $mform->setDefault('perpage', $perpage); $mform->addElement('checkbox', 'quickgrade', get_string('quickgrade', 'assignment')); $mform->setDefault('quickgrade', $quickgrade); $mform->addHelpButton('quickgrade', 'quickgrade', 'assignment'); $mform->addElement('submit', 'savepreferences', get_string('savepreferences')); $mform->display(); echo $OUTPUT->footer(); /** * Checks if grading method allows quickgrade mode. At the moment it is hardcoded * that advanced grading methods do not allow quickgrade. * * Assignment type plugins are not allowed to override this method * * @param $cmid * @return boolean */ function quickgrade_mode_allowed($cmid) { global $CFG; require_once "{$CFG->dirroot}/grade/grading/lib.php"; $context = context_module::instance($cmid);
/** * Outputs the content of the administration tab and manages actions taken in this tab */ public function view_administration() { global $SESSION, $OUTPUT, $PAGE, $DB, $USER, $CFG; $output = $PAGE->get_renderer('mod_grouptool'); $id = $this->cm->id; $context = context_course::instance($this->course->id); // Get applicable roles! $rolenames = array(); if ($roles = get_profile_roles($context)) { foreach ($roles as $role) { $rolenames[$role->id] = strip_tags(role_get_name($role, $context)); } } $filter = optional_param('filter', null, PARAM_INT); if ($filter !== null) { set_user_preference('mod_grouptool_group_filter', $filter, $USER->id); } else { $filter = get_user_preferences('mod_grouptool_group_filter', self::FILTER_ACTIVE, $USER->id); } $inactivetabs = array(); $filtertabs['active'] = new tabobject(self::FILTER_ACTIVE, $CFG->wwwroot . '/mod/grouptool/view.php?id=' . $id . '&tab=group_admin&filter=' . self::FILTER_ACTIVE, get_string('active', 'grouptool'), '', false); $filtertabs['inactive'] = new tabobject(self::FILTER_INACTIVE, $CFG->wwwroot . '/mod/grouptool/view.php?id=' . $id . '&tab=group_admin&filter=' . self::FILTER_INACTIVE, get_string('inactive'), '', false); $filtertabs['all'] = new tabobject(self::FILTER_ALL, $CFG->wwwroot . '/mod/grouptool/view.php?id=' . $id . '&tab=group_admin&filter=' . self::FILTER_ALL, get_string('all'), '', false); echo html_writer::tag('div', $OUTPUT->tabtree($filtertabs, $filter, $inactivetabs), array('id' => 'filtertabs')); // Check if everything has been confirmed, so we can finally start working! if (optional_param('confirm', 0, PARAM_BOOL)) { if (isset($SESSION->grouptool->view_administration->createGroupings)) { require_capability('mod/grouptool:create_groupings', $this->context); $target = required_param('target', PARAM_INT); switch ($target) { // ...grpg_target | grpg_groupingname | use_all (0 sel | 1 all). case 0: // Invalid - no action! TODO Add message! $error = true; $preview = ''; break; case -2: // One grouping per group! list($error, $preview) = $this->create_group_groupings(); break; case -1: // One new grouping for all! list($error, $preview) = $this->update_grouping($target, required_param('name', PARAM_ALPHANUMEXT)); break; default: list($error, $preview) = $this->update_grouping($target); break; } $preview = html_writer::tag('div', $preview, array('class' => 'centered')); echo $OUTPUT->box($preview, 'generalbox'); } unset($SESSION->grouptool->view_administration); } if ($rename = optional_param('rename', 0, PARAM_INT)) { // Show Rename Form! $gform = new \mod_grouptool\group_rename_form(null, array('id' => $this->cm->id, 'instance' => $this->cm->instance, 'rename' => $rename)); if (!$gform->is_cancelled() && ($fromform = $gform->get_data())) { $group = new stdClass(); $group->id = $fromform->rename; $group->name = $fromform->name; $group->courseid = $fromform->courseid; groups_update_group($group); } else { if (!$gform->is_cancelled()) { $data = new stdClass(); $data->name = $DB->get_field('groups', 'name', array('id' => $rename)); $gform->set_data($data); $gform->display(); echo $OUTPUT->footer(); die; } } } if ($resize = optional_param('resize', 0, PARAM_INT)) { // Show Rename Form! $gform = new \mod_grouptool\group_resize_form(null, array('id' => $this->cm->id, 'instance' => $this->cm->instance, 'resize' => $resize)); if (!$gform->is_cancelled() && ($fromform = $gform->get_data())) { if (empty($fromform->size)) { $DB->set_field('grouptool_agrps', 'grpsize', null, array('groupid' => $fromform->resize, 'grouptoolid' => $this->cm->id)); } else { $group = new stdClass(); $group->id = $DB->get_field('grouptool_agrps', 'id', array('groupid' => $fromform->resize, 'grouptoolid' => $this->cm->instance)); $group->grpsize = $fromform->size; $DB->update_record('grouptool_agrps', $group); } } else { if (!$gform->is_cancelled()) { $data = new stdClass(); $data->size = $DB->get_field('grouptool_agrps', 'grpsize', array('groupid' => $resize, 'grouptoolid' => $this->cm->instance)); $gform->set_data($data); $gform->display(); echo $OUTPUT->footer(); die; } } } if ($delete = optional_param('delete', 0, PARAM_INT)) { if (!optional_param('confirm', 0, PARAM_BOOL)) { // Show Confirm! $cancel = new moodle_url($PAGE->url); $continue = new moodle_url($cancel, array('confirm' => 1, 'delete' => $delete)); $cancel = new single_button($cancel, get_string('no'), 'post'); $continue = new single_button($continue, get_string('yes'), 'post'); $confirmtext = get_string('confirm_delete', 'grouptool'); echo $this->confirm($confirmtext, $continue, $cancel); echo $OUTPUT->footer(); die; } else { // Delete it! groups_delete_group($delete); } } if ($toggle = optional_param('toggle', 0, PARAM_INT)) { if (!empty($toggle)) { $conditions = array('grouptoolid' => $this->cm->instance, 'groupid' => $toggle); if (!$DB->record_exists('grouptool_agrps', $conditions)) { echo $OUTPUT->box($OUTPUT->notification(get_string('group_not_found', 'grouptool'), 'notifyproblem', $conditions), 'generalbox'); } else { $record = $DB->get_record('grouptool_agrps', $conditions); if (!empty($record->active)) { $DB->set_field('grouptool_agrps', 'active', 0, $conditions); } else { $DB->set_field('grouptool_agrps', 'active', 1, $conditions); } } } } if (($bulkaction = optional_param('bulkaction', null, PARAM_ALPHA)) && ($selected = optional_param_array('selected', array(), PARAM_INT)) && optional_param('start_bulkaction', 0, PARAM_BOOL)) { switch ($bulkaction) { case 'activate': // ...also via ajax bulk action? // Activate now! $groups = optional_param_array('selected', null, PARAM_INT); if (!empty($groups)) { list($grpsql, $grpparams) = $DB->get_in_or_equal($groups); $DB->set_field_select("grouptool_agrps", "active", 1, " grouptoolid = ? AND groupid " . $grpsql, array_merge(array($this->cm->instance), $grpparams)); } echo $OUTPUT->notification(get_string('activated_groups', 'grouptool'), 'notifysuccess'); $continue = new moodle_url($PAGE->url, array('tab' => 'group_admin')); echo $this->confirm('', $continue); break; case 'deactivate': // ...also via ajax bulk action? // Deactivate now! $groups = optional_param_array('selected', null, PARAM_INT); if (!empty($groups)) { list($grpsql, $grpparams) = $DB->get_in_or_equal($groups); $DB->set_field_select("grouptool_agrps", "active", 0, " grouptoolid = ? AND groupid " . $grpsql, array_merge(array($this->cm->instance), $grpparams)); } echo $OUTPUT->notification(get_string('deactivated_groups', 'grouptool'), 'notifysuccess'); $continue = new moodle_url($PAGE->url, array('tab' => 'group_admin')); echo $this->confirm('', $continue); break; case 'delete': // ...also via ajax bulk action? // Show confirmation dialogue! if (optional_param('confirm', 0, PARAM_BOOL)) { $groups = optional_param_array('selected', null, PARAM_INT); $groups = $DB->get_records_list('groups', 'id', $groups); foreach ($groups as $group) { groups_delete_group($group); } echo $OUTPUT->notification(get_string('successfully_deleted_groups', 'grouptool'), 'notifysuccess'); $continue = new moodle_url($PAGE->url, array('tab' => 'group_admin')); echo $this->confirm('', $continue); } else { $cancel = new moodle_url($PAGE->url, array('tab' => 'group_admin')); $params = array('confirm' => 1, 'bulkaction' => 'delete', 'start_bulkaction' => 1); $text = get_string('confirm_delete', 'grouptool') . html_writer::start_tag('ul'); $groups = $DB->get_records_list('groups', 'id', $selected); foreach ($selected as $select) { $params['selected[' . $select . ']'] = $select; $text .= html_writer::tag('li', $groups[$select]->name); } $text .= html_writer::end_tag('ul'); $continue = new moodle_url($cancel, $params); echo $this->confirm($text, $continue, $cancel); echo $OUTPUT->footer(); die; } break; case 'grouping': // Show grouping creation form! $selected = optional_param_array('selected', array(), PARAM_INT); $mform = new \mod_grouptool\groupings_creation_form(null, array('id' => $id, 'selected' => $selected)); $groups = $DB->get_records_list('groups', 'id', $selected); if ($mform->is_cancelled()) { $bulkaction = null; $selected = array(); } else { if ($fromform = $mform->get_data()) { // Some groupings should be created... if ($fromform->target == -2) { // One new grouping per group! foreach ($groups as $group) { $grouping = new stdClass(); if (!($grouping->id = groups_get_grouping_by_name($this->course->id, $group->name))) { $grouping = new stdClass(); $grouping->courseid = $this->course->id; $grouping->name = $group->name; $grouping->id = groups_create_grouping($grouping); } // Insert group! groups_assign_grouping($grouping->id, $group->id); } } else { if ($fromform->target == -1) { // One new grouping! // Create grouping if it doesn't exist... $grouping = new stdClass(); if (!($grouping->id = groups_get_grouping_by_name($this->course->id, $fromform->name))) { $grouping = new stdClass(); $grouping->courseid = $this->course->id; $grouping->name = trim($fromform->name); $grouping->id = groups_create_grouping($grouping); } // Insert groups! foreach ($groups as $group) { groups_assign_grouping($grouping->id, $group->id); } } else { if ($fromform->target > 0) { // Existing Grouping! $grouping = groups_get_grouping($fromform->target); if ($grouping) { foreach ($groups as $group) { groups_assign_grouping($grouping->id, $group->id); } } } } } // ...redirect to show sortlist again! $url = new moodle_url('/mod/grouptool/view.php', array('id' => $this->cm->id, 'tab' => 'group_admin', 'filter' => $filter)); $text = $OUTPUT->notification(get_string('groupings_created_and_groups_added', 'grouptool'), 'notifymessage'); echo $this->confirm($text, $url); } else { $mform->display(); } } break; } } if (!$bulkaction || !$selected || !optional_param('start_bulkaction', 0, PARAM_BOOL)) { // Show form! $formaction = new moodle_url('/mod/grouptool/view.php', array('id' => $this->cm->id, 'tab' => 'group_admin', 'filter' => $filter)); $mform = new MoodleQuickForm('bulk', 'post', $formaction, ''); $mform->addElement('hidden', 'sesskey'); $mform->setDefault('sesskey', sesskey()); $sortlist = new \mod_grouptool\output\sortlist($this->course->id, $this->cm, $filter); $sortlistcontroller = new \mod_grouptool\output\sortlist_controller($sortlist); $mform->addElement('html', $output->render($sortlistcontroller)); $mform->addElement('html', $output->render($sortlist)); $actions = array('' => get_string('choose', 'grouptool'), 'activate' => get_string('setactive', 'grouptool'), 'deactivate' => get_string('setinactive', 'grouptool'), 'delete' => get_string('delete'), 'grouping' => get_string('createinsertgrouping', 'grouptool')); $grp = array(); $grp[] =& $mform->createElement('static', 'with_selection', '', get_string('with_selection', 'grouptool')); $grp[] =& $mform->createElement('select', 'bulkaction', '', $actions); $grp[] =& $mform->createElement('submit', 'start_bulkaction', get_string('start', 'grouptool')); $mform->addGroup($grp, 'actiongrp', '', ' ', false); $mform->disable_form_change_checker(); $mform->display(); switch ($filter) { case self::FILTER_ACTIVE: $curfilter = 'active'; break; case self::FILTER_INACTIVE: $curfilter = 'inactive'; break; case self::FILTER_ALL: $curfilter = 'all'; break; } $PAGE->requires->yui_module('moodle-mod_grouptool-administration', 'M.mod_grouptool.init_administration', array(array('lang' => current_language(), 'contextid' => $this->context->id, 'filter' => $curfilter, 'filterid' => $filter, 'globalsize' => $this->grouptool->grpsize))); $PAGE->requires->strings_for_js(array('active', 'inactive', 'confirm_delete'), 'mod_grouptool'); $PAGE->requires->string_for_js('ajax_edit_size_help', 'mod_grouptool'); $PAGE->requires->strings_for_js(array('yes', 'no'), 'moodle'); } }
public function display_allfilesform() { global $CFG, $OUTPUT, $DB, $USER; $cm = $this->coursemodule; $context = $this->context; $course = $this->course; $updatepref = optional_param('updatepref', 0, PARAM_BOOL); if ($updatepref) { $perpage = optional_param('perpage', 10, PARAM_INT); $perpage = $perpage <= 0 ? 10 : $perpage; $filter = optional_param('filter', 0, PARAM_INT); set_user_preference('publication_perpage', $perpage); } /* next we get perpage and quickgrade (allow quick grade) params * from database */ $perpage = get_user_preferences('publication_perpage', 10); $quickgrade = get_user_preferences('publication_quickgrade', 0); $filter = get_user_preferences('publicationfilter', 0); $page = optional_param('page', 0, PARAM_INT); $formattrs = array(); $formattrs['action'] = new moodle_url('/mod/publication/view.php'); $formattrs['id'] = 'fastg'; $formattrs['method'] = 'post'; $formattrs['class'] = 'mform'; $html = ''; $html .= html_writer::start_tag('form', $formattrs); $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'id', 'value' => $this->get_coursemodule()->id)); $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'page', 'value' => $page)); $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'sesskey', 'value' => sesskey())); echo $html; echo html_writer::start_tag('div', array('id' => 'id_allfiles', 'class' => 'clearfix', 'aria-live' => 'polite')); $title = has_capability('mod/publication:approve', $context) ? get_string('allfiles', 'publication') : get_string('publicfiles', 'publication'); echo html_writer::tag('div', $title, array('class' => 'legend')); echo html_writer::start_div('fcontainer clearfix'); // Check to see if groups are being used in this assignment. // Find out current groups mode. $groupmode = groups_get_activity_groupmode($cm); $currentgroup = groups_get_activity_group($cm, true); echo groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/publication/view.php?id=' . $cm->id, true); $html = ''; // Get all ppl that are allowed to submit assignments. list($esql, $params) = get_enrolled_sql($context, 'mod/publication:view', $currentgroup); $showall = false; if (has_capability('mod/publication:approve', $context) || has_capability('mod/publication:grantextension', $context)) { $showall = true; } if ($showall) { $sql = 'SELECT u.id FROM {user} u ' . 'LEFT JOIN (' . $esql . ') eu ON eu.id=u.id ' . 'WHERE u.deleted = 0 AND eu.id=u.id '; } else { $sql = 'SELECT u.id FROM {user} u ' . 'LEFT JOIN (' . $esql . ') eu ON eu.id=u.id ' . 'LEFT JOIN {publication_file} files ON (u.id = files.userid) ' . 'WHERE u.deleted = 0 AND eu.id=u.id ' . 'AND files.publication = ' . $this->get_instance()->id . ' '; if ($this->get_instance()->mode == PUBLICATION_MODE_UPLOAD) { // Node upload. if ($this->get_instance()->obtainteacherapproval) { // Need teacher approval. $where = 'files.teacherapproval = 1'; } else { // No need for teacher approval. // Teacher only hasnt rejected. $where = '(files.teacherapproval = 1 OR files.teacherapproval IS NULL)'; } } else { // Mode import. if (!$this->get_instance()->obtainstudentapproval) { // No need to ask student and teacher has approved. $where = 'files.teacherapproval = 1'; } else { // Student and teacher have approved. $where = 'files.teacherapproval = 1 AND files.studentapproval = 1'; } } $sql .= 'AND ' . $where . ' '; $sql .= 'GROUP BY u.id'; } $users = $DB->get_records_sql($sql, $params); if (!empty($users)) { $users = array_keys($users); } // If groupmembersonly used, remove users who are not in any group. if ($users and !empty($CFG->enablegroupmembersonly) and $cm->groupmembersonly) { if ($groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id')) { $users = array_intersect($users, array_keys($groupingusers)); } } $selectallnone = html_writer::checkbox('selectallnone', false, false, '', array('id' => 'selectallnone', 'onClick' => 'toggle_userselection()')); $tablecolumns = array('selection', 'fullname'); $tableheaders = array($selectallnone, get_string('fullnameuser')); $useridentity = $CFG->showuseridentity != '' ? explode(',', $CFG->showuseridentity) : array(); foreach ($useridentity as $cur) { if (!(get_config('publication', 'hideidnumberfromstudents') && $cur == "idnumber" && !has_capability('mod/publication:approve', $context)) && !($cur != "idnumber" && !has_capability('mod/publication:approve', $context))) { $tablecolumns[] = $cur; $tableheaders[] = $cur == 'phone1' ? get_string('phone') : get_string($cur); } } $tableheaders[] = get_string('lastmodified'); $tablecolumns[] = 'timemodified'; if (has_capability('mod/publication:approve', $context)) { // Not necessary in upload mode without studentapproval. if ($this->get_instance()->mode == PUBLICATION_MODE_IMPORT && $this->get_instance()->obtainstudentapproval) { $tablecolumns[] = 'studentapproval'; $tableheaders[] = get_string('studentapproval', 'publication') . ' ' . $OUTPUT->help_icon('studentapproval', 'publication'); } $tablecolumns[] = 'teacherapproval'; if ($this->get_instance()->mode == PUBLICATION_MODE_IMPORT && $this->get_instance()->obtainstudentapproval) { $tableheaders[] = get_string('obtainstudentapproval', 'publication'); } else { $tableheaders[] = get_string('teacherapproval', 'publication'); } $tablecolumns[] = 'visibleforstudents'; $tableheaders[] = get_string('visibleforstudents', 'publication'); } require_once $CFG->libdir . '/tablelib.php'; $table = new flexible_table('mod-publication-allfiles'); $table->define_columns($tablecolumns); $table->define_headers($tableheaders); $table->define_baseurl($CFG->wwwroot . '/mod/publication/view.php?id=' . $cm->id . '&currentgroup=' . $currentgroup); $table->sortable(true, 'lastname'); // Sorted by lastname by default. $table->collapsible(false); $table->initialbars(true); $table->column_class('fullname', 'fullname'); $table->column_class('timemodified', 'timemodified'); $table->set_attribute('cellspacing', '0'); $table->set_attribute('id', 'attempts'); $table->set_attribute('class', 'publications'); $table->set_attribute('width', '100%'); $table->no_sorting('studentapproval'); $table->no_sorting('selection'); $table->no_sorting('teacherapproval'); $table->no_sorting('visibleforstudents'); // Start working -- this is necessary as soon as the niceties are over. $table->setup(); // Construct the SQL. list($where, $params) = $table->get_sql_where(); if ($where) { $where .= ' AND '; } if ($sort = $table->get_sql_sort()) { $sort = ' ORDER BY ' . $sort; } $ufields = user_picture::fields('u'); $useridentityfields = $CFG->showuseridentity != '' ? 'u.' . str_replace(', ', ', u.', $CFG->showuseridentity) . ', ' : ''; $totalfiles = 0; if (!empty($users)) { $select = 'SELECT ' . $ufields . ', ' . $useridentityfields . ' username, COUNT(*) filecount, SUM(files.studentapproval) as status, MAX(files.timecreated) timemodified '; $sql = 'FROM {user} u ' . 'LEFT JOIN {publication_file} files ON u.id = files.userid AND files.publication = ' . $this->get_instance()->id . ' ' . 'WHERE ' . $where . 'u.id IN (' . implode(', ', $users) . ') ' . 'GROUP BY ' . $ufields . ', ' . $useridentityfields . ' username '; $ausers = $DB->get_records_sql($select . $sql . $sort, $params, $table->get_page_start(), $table->get_page_size()); $table->pagesize($perpage, count($users)); // Offset used to calculate index of student in that particular query, needed for the pop up to know who's next. $offset = $page * $perpage; $strupdate = get_string('update'); if ($ausers !== false) { $endposition = $offset + $perpage; $currentposition = 0; $valid = $OUTPUT->pix_icon('i/valid', get_string('student_approved', 'publication')); $questionmark = $OUTPUT->pix_icon('questionmark', get_string('student_pending', 'publication'), 'mod_publication'); $invalid = $OUTPUT->pix_icon('i/invalid', get_string('student_rejected', 'publication')); $visibleforstundetsyes = $OUTPUT->pix_icon('i/valid', get_string('visibleforstudents_yes', 'publication')); $visibleforstundetsno = $OUTPUT->pix_icon('i/invalid', get_string('visibleforstudents_no', 'publication')); $viewfullnames = has_capability('moodle/site:viewfullnames', $this->context); foreach ($ausers as $auser) { if ($currentposition >= $offset && $currentposition < $endposition) { // Calculate user status. $selecteduser = html_writer::checkbox('selectedeuser[' . $auser->id . ']', 'selected', false, null, array('class' => 'userselection')); $useridentity = $CFG->showuseridentity != '' ? explode(',', $CFG->showuseridentity) : array(); foreach ($useridentity as $cur) { if (!(get_config('publication', 'hideidnumberfromstudents') && $cur == "idnumber" && !has_capability('mod/publication:approve', $context)) && !($cur != "idnumber" && !has_capability('mod/publication:approve', $context))) { if (!empty($auser->{$cur})) { ${$cur} = html_writer::tag('div', $auser->{$cur}, array('id' => 'u' . $cur . $auser->id)); } else { ${$cur} = html_writer::tag('div', '-', array('id' => 'u' . $cur . $auser->id)); } } } $userlink = '<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $auser->id . '&course=' . $course->id . '">' . fullname($auser, $viewfullnames) . '</a>'; $extension = $this->user_extensionduedate($auser->id); if ($extension) { if (has_capability('mod/publication:grantextension', $context) || has_capability('mod/publication:approve', $context)) { $userlink .= '<br/>' . get_string('extensionto', 'publication') . ': ' . userdate($extension); } } $row = array($selecteduser, $userlink); $useridentity = $CFG->showuseridentity != '' ? explode(',', $CFG->showuseridentity) : array(); foreach ($useridentity as $cur) { if (!(get_config('publication', 'hideidnumberfromstudents') && $cur == "idnumber" && !has_capability('mod/publication:approve', $context)) && !($cur != "idnumber" && !has_capability('mod/publication:approve', $context))) { if (true) { $row[] = ${$cur}; } else { $row[] = ""; } } } $filearea = 'attachment'; $sid = $auser->id; $fs = get_file_storage(); $files = $fs->get_area_files($this->get_context()->id, 'mod_publication', $filearea, $sid, 'timemodified', false); $filetable = new html_table(); $filetable->attributes = array('class' => 'filetable'); $statustable = new html_table(); $statustable->attributes = array('class' => 'statustable'); $permissiontable = new html_table(); $permissiontable->attributes = array('class' => 'permissionstable'); $visibleforuserstable = new html_table(); $visibleforuserstable->attributes = array('class' => 'statustable'); $conditions = array(); $conditions['publication'] = $this->get_instance()->id; $conditions['userid'] = $auser->id; foreach ($files as $file) { $conditions['fileid'] = $file->get_id(); $filepermissions = $DB->get_record('publication_file', $conditions); $showfile = false; if (has_capability('mod/publication:approve', $context)) { $showfile = true; } else { if ($this->has_filepermission($file->get_id())) { $showfile = true; } } if ($this->has_filepermission($file->get_id())) { $visibleforuserstable->data[] = array($visibleforstundetsyes); } else { $visibleforuserstable->data[] = array($visibleforstundetsno); } if ($showfile) { $filerow = array(); $filerow[] = $OUTPUT->pix_icon(file_file_icon($file), get_mimetype_description($file)); $url = new moodle_url('/mod/publication/view.php', array('id' => $cm->id, 'download' => $file->get_id())); $filerow[] = html_writer::link($url, $file->get_filename()); if (has_capability('mod/publication:approve', $context)) { $checked = $filepermissions->teacherapproval; if (is_null($checked)) { $checked = ""; } else { $checked = $checked + 1; } $permissionrow = array(); $options = array(); $options['2'] = get_string('yes'); $options['1'] = get_string('no'); $permissionrow[] = html_writer::select($options, 'files[' . $file->get_id() . ']', $checked); $statusrow = array(); if (is_null($filepermissions->studentapproval)) { $statusrow[] = $questionmark; } else { if ($filepermissions->studentapproval) { $statusrow[] = $valid; } else { $statusrow[] = $invalid; } } $statustable->data[] = $statusrow; $permissiontable->data[] = $permissionrow; } $filetable->data[] = $filerow; $totalfiles++; } } $lastmodified = ""; if (count($filetable->data) > 0) { $lastmodified = html_writer::table($filetable); $lastmodified .= html_writer::span(userdate($auser->timemodified), "timemodified"); } else { $lastmodified = get_string('nofiles', 'publication'); } $row[] = $lastmodified; if (has_capability('mod/publication:approve', $context)) { // Not necessary in upload mode without studentapproval. if ($this->get_instance()->mode == PUBLICATION_MODE_IMPORT && $this->get_instance()->obtainstudentapproval) { if (count($statustable->data) > 0) { $status = html_writer::table($statustable); } else { $status = ''; } $row[] = $status; } if (count($permissiontable->data) > 0) { $permissions = html_writer::table($permissiontable); } else { $permissions = ''; } $row[] = $permissions; $row[] = html_writer::table($visibleforuserstable); } $table->add_data($row); } $currentposition++; } if (true) { // Always display download option. $html .= html_writer::start_tag('div', array('class' => 'mod-publication-download-link')); $html .= html_writer::link(new moodle_url('/mod/publication/view.php', array('id' => $this->coursemodule->id, 'action' => 'zip')), get_string('downloadall', 'publication')); $html .= html_writer::end_tag('div'); } echo $html; $html = ""; $table->print_html(); // Print the whole table. $options = array(); if (true) { // Always display download option. $options['zipusers'] = get_string('zipusers', 'publication'); } if ($totalfiles > 0) { if (has_capability('mod/publication:approve', $context)) { $options['approveusers'] = get_string('approveusers', 'publication'); $options['rejectusers'] = get_string('rejectusers', 'publication'); if ($this->get_instance()->mode == PUBLICATION_MODE_IMPORT && $this->get_instance()->obtainstudentapproval) { $options['resetstudentapproval'] = get_string('resetstudentapproval', 'publication'); } } } if (has_capability('mod/publication:grantextension', $this->get_context())) { $options['grantextension'] = get_string('grantextension', 'publication'); } if (count($options) > 0) { if (has_capability('mod/publication:approve', $context)) { $html .= html_writer::empty_tag('input', array('type' => 'reset', 'name' => 'resetvisibility', 'value' => get_string('reset', 'publication'), 'class' => 'visibilitysaver')); if ($this->get_instance()->mode == PUBLICATION_MODE_IMPORT && $this->get_instance()->obtainstudentapproval) { $html .= html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'savevisibility', 'value' => get_string('saveapproval', 'publication'), 'class' => 'visibilitysaver')); } else { $html .= html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'savevisibility', 'value' => get_string('saveteacherapproval', 'publication'), 'class' => 'visibilitysaver')); } } $html .= html_writer::start_div('withselection'); $html .= html_writer::span(get_string('withselected', 'publication')); $html .= html_writer::select($options, 'action'); $html .= html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'submitgo', 'value' => get_string('go', 'publication'))); $html .= html_writer::end_div(); } } else { $html .= html_writer::tag('div', get_string('nothingtodisplay', 'publication'), array('class' => 'nosubmisson')); } } else { $html .= html_writer::tag('div', get_string('nothingtodisplay', 'publication'), array('class' => 'nosubmisson')); } // Select all/none. $html .= html_writer::start_tag('div', array('class' => 'checkboxcontroller')); $html .= "<script type=\"text/javascript\">\n function toggle_userselection() {\n var checkboxes = document.getElementsByClassName('userselection');\n var sel = document.getElementById('selectallnone');\n\n if (checkboxes.length > 0) {\n checkboxes[0].checked = sel.checked;\n\n for(var i = 1; i < checkboxes.length;i++) {\n checkboxes[i].checked = checkboxes[0].checked;\n }\n }\n }\n </script>"; $html .= html_writer::end_div(); $html .= html_writer::end_div(); $html .= html_writer::end_div(); echo $html; echo html_writer::end_tag('form'); // Mini form for setting user preference. $html = ''; $formaction = new moodle_url('/mod/publication/view.php', array('id' => $this->coursemodule->id)); $mform = new MoodleQuickForm('optionspref', 'post', $formaction, '', array('class' => 'optionspref')); $mform->addElement('hidden', 'updatepref'); $mform->setDefault('updatepref', 1); $mform->addElement('header', 'qgprefs', get_string('optionalsettings', 'publication')); $mform->addElement('text', 'perpage', get_string('entiresperpage', 'publication'), array('size' => 1)); $mform->setDefault('perpage', $perpage); $mform->addElement('submit', 'savepreferences', get_string('savepreferences')); $mform->display(); return $html; }
/** * Render single users grading form * * @param object $course current course object * @param object $cm current course module object * @param object $oublog current oublog object * @param object $user current user participation object * @param id $groupid optional group id, no group = 0 */ public function render_user_grade($course, $cm, $oublog, $user, $groupid) { global $CFG, $USER; if (is_null($user->gradeobj->grade)) { $user->gradeobj->grade = -1; } if ($user->gradeobj->grade != -1) { $user->grade = abs($user->gradeobj->grade); } $grademenu = make_grades_menu($oublog->grade); $grademenu[-1] = get_string('nograde'); $formparams = array(); $formparams['id'] = $cm->id; $formparams['user'] = $user->user->id; $formparams['group'] = $groupid; $formparams['sesskey'] = $USER->sesskey; $formaction = new moodle_url('/mod/oublog/savegrades.php', $formparams); $mform = new MoodleQuickForm('savegrade', 'post', $formaction, '', array('class' => 'savegrade')); $mform->addElement('header', 'usergrade', get_string('usergrade', 'oublog')); $mform->addElement('select', 'grade', get_string('grade'), $grademenu); $mform->setDefault('grade', $user->gradeobj->grade); $mform->addElement('submit', 'savechanges', get_string('savechanges')); $mform->display(); }
/** * Render single user's grading form. * * @param int $cmid course module id * @param mod_forumng $forumng Forum * @param object $user object * @param int $groupid id of group to which user belongs */ function forumngfeature_userposts_display_user_grade($cmid, mod_forumng $forumng, $user, $groupid) { global $CFG; require_once $CFG->libdir . '/gradelib.php'; $grades = grade_get_grades($forumng->get_course_id(), 'mod', 'forumng', $forumng->get_id(), $user->id); if ($grades) { if (!isset($grades->items[0]->grades[$user->id]->grade)) { $user->grade = -1; } else { $user->grade = abs($grades->items[0]->grades[$user->id]->grade); } $grademenu = make_grades_menu($forumng->get_grading_scale()); $grademenu[-1] = get_string('nograde'); $formparams = array(); $formparams['id'] = $cmid; $formparams['user'] = $user->id; $formparams['group'] = $groupid; $formaction = new moodle_url('/mod/forumng/feature/userposts/savegrades.php', $formparams); $mform = new MoodleQuickForm('savegrade', 'post', $formaction, '', array('class' => 'savegrade')); $mform->addElement('header', 'usergrade', get_string('usergrade', 'forumngfeature_userposts')); $mform->addElement('select', 'grade', get_string('grade'), $grademenu); $mform->setDefault('grade', $user->grade); $mform->addElement('submit', 'savechanges', get_string('savechanges')); $mform->display(); } }
/** * Print html form. */ function display() { $this->_form->display(); }