/** * Adds module specific settings to the settings block * * @param settings_navigation $settings The settings navigation object * @param navigation_node $questionnairenode The node to add module settings to */ function questionnaire_extend_settings_navigation(settings_navigation $settings, navigation_node $questionnairenode) { global $PAGE, $DB, $USER, $CFG; $individualresponse = optional_param('individualresponse', false, PARAM_INT); $rid = optional_param('rid', false, PARAM_INT); // Response id. $currentgroupid = optional_param('group', 0, PARAM_INT); // Group id. require_once $CFG->dirroot . '/mod/questionnaire/questionnaire.class.php'; $context = $PAGE->cm->context; $cmid = $PAGE->cm->id; $cm = $PAGE->cm; $course = $PAGE->course; if (!($questionnaire = $DB->get_record("questionnaire", array("id" => $cm->instance)))) { print_error('invalidcoursemodule'); } $courseid = $course->id; $questionnaire = new questionnaire(0, $questionnaire, $course, $cm); if ($survey = $DB->get_record('questionnaire_survey', array('id' => $questionnaire->sid))) { $owner = trim($survey->owner) == trim($courseid); } else { $survey = false; $owner = true; } // On view page, currentgroupid is not yet sent as an optional_param, so get it. $groupmode = groups_get_activity_groupmode($cm, $course); if ($groupmode > 0 && $currentgroupid == 0) { $currentgroupid = groups_get_activity_group($questionnaire->cm); if (!groups_is_member($currentgroupid, $USER->id)) { $currentgroupid = 0; } } // We want to add these new nodes after the Edit settings node, and before the // Locally assigned roles node. Of course, both of those are controlled by capabilities. $keys = $questionnairenode->get_children_key_list(); $beforekey = null; $i = array_search('modedit', $keys); if ($i === false and array_key_exists(0, $keys)) { $beforekey = $keys[0]; } else { if (array_key_exists($i + 1, $keys)) { $beforekey = $keys[$i + 1]; } } if (has_capability('mod/questionnaire:manage', $context) && $owner) { $url = '/mod/questionnaire/qsettings.php'; $node = navigation_node::create(get_string('advancedsettings'), new moodle_url($url, array('id' => $cmid)), navigation_node::TYPE_SETTING, null, 'advancedsettings', new pix_icon('t/edit', '')); $questionnairenode->add_node($node, $beforekey); } if (has_capability('mod/questionnaire:editquestions', $context) && $owner) { $url = '/mod/questionnaire/questions.php'; $node = navigation_node::create(get_string('questions', 'questionnaire'), new moodle_url($url, array('id' => $cmid)), navigation_node::TYPE_SETTING, null, 'questions', new pix_icon('t/edit', '')); $questionnairenode->add_node($node, $beforekey); } if (has_capability('mod/questionnaire:preview', $context)) { $url = '/mod/questionnaire/preview.php'; $node = navigation_node::create(get_string('preview_label', 'questionnaire'), new moodle_url($url, array('id' => $cmid)), navigation_node::TYPE_SETTING, null, 'preview', new pix_icon('t/preview', '')); $questionnairenode->add_node($node, $beforekey); } if ($questionnaire->user_can_take($USER->id)) { $url = '/mod/questionnaire/complete.php'; $node = navigation_node::create(get_string('answerquestions', 'questionnaire'), new moodle_url($url, array('id' => $cmid)), navigation_node::TYPE_SETTING, null, '', new pix_icon('i/info', 'answerquestions')); $questionnairenode->add_node($node, $beforekey); } $usernumresp = $questionnaire->count_submissions($USER->id); if ($questionnaire->capabilities->readownresponses && $usernumresp > 0) { $url = '/mod/questionnaire/myreport.php'; if ($usernumresp > 1) { $node = navigation_node::create(get_string('yourresponses', 'questionnaire'), new moodle_url($url, array('instance' => $questionnaire->id, 'userid' => $USER->id, 'byresponse' => 0, 'action' => 'summary', 'group' => $currentgroupid)), navigation_node::TYPE_SETTING, null, 'yourresponses'); $myreportnode = $questionnairenode->add_node($node, $beforekey); $summary = $myreportnode->add(get_string('summary', 'questionnaire'), new moodle_url('/mod/questionnaire/myreport.php', array('instance' => $questionnaire->id, 'userid' => $USER->id, 'byresponse' => 0, 'action' => 'summary', 'group' => $currentgroupid))); $byresponsenode = $myreportnode->add(get_string('viewindividualresponse', 'questionnaire'), new moodle_url('/mod/questionnaire/myreport.php', array('instance' => $questionnaire->id, 'userid' => $USER->id, 'byresponse' => 1, 'action' => 'vresp', 'group' => $currentgroupid))); $allmyresponsesnode = $myreportnode->add(get_string('myresponses', 'questionnaire'), new moodle_url('/mod/questionnaire/myreport.php', array('instance' => $questionnaire->id, 'userid' => $USER->id, 'byresponse' => 0, 'action' => 'vall', 'group' => $currentgroupid))); if ($questionnaire->capabilities->downloadresponses) { $downloadmyresponsesnode = $myreportnode->add(get_string('downloadtext'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'user' => $USER->id, 'action' => 'dwnpg', 'group' => $currentgroupid))); } } else { $node = navigation_node::create(get_string('yourresponse', 'questionnaire'), new moodle_url($url, array('instance' => $questionnaire->id, 'userid' => $USER->id, 'byresponse' => 1, 'action' => 'vresp', 'group' => $currentgroupid)), navigation_node::TYPE_SETTING, null, 'yourresponse'); $myreportnode = $questionnairenode->add_node($node, $beforekey); } } $numresp = $questionnaire->count_submissions(); // Number of responses in currently selected group (or all participants etc.). if (isset($SESSION->questionnaire->numselectedresps)) { $numselectedresps = $SESSION->questionnaire->numselectedresps; } else { $numselectedresps = $numresp; } // If questionnaire is set to separate groups, prevent user who is not member of any group // and is not a non-editing teacher to view All responses. $canviewgroups = true; $groupmode = groups_get_activity_groupmode($cm, $course); if ($groupmode == 1) { $canviewgroups = groups_has_membership($cm, $USER->id); } $canviewallgroups = has_capability('moodle/site:accessallgroups', $context); if (($canviewallgroups || $canviewgroups && $questionnaire->capabilities->readallresponseanytime) && $numresp > 0 && $owner && $numselectedresps > 0 || $questionnaire->capabilities->readallresponses && $numresp > 0 && $canviewgroups && ($questionnaire->resp_view == QUESTIONNAIRE_STUDENTVIEWRESPONSES_ALWAYS || $questionnaire->resp_view == QUESTIONNAIRE_STUDENTVIEWRESPONSES_WHENCLOSED && $questionnaire->is_closed() || $questionnaire->resp_view == QUESTIONNAIRE_STUDENTVIEWRESPONSES_WHENANSWERED && $usernumresp > 0) && $questionnaire->is_survey_owner()) { $url = '/mod/questionnaire/report.php'; $node = navigation_node::create(get_string('viewallresponses', 'questionnaire'), new moodle_url($url, array('instance' => $questionnaire->id, 'action' => 'vall')), navigation_node::TYPE_SETTING, null, 'vall'); $reportnode = $questionnairenode->add_node($node, $beforekey); if ($questionnaire->capabilities->viewsingleresponse) { $summarynode = $reportnode->add(get_string('summary', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'vall'))); } else { $summarynode = $reportnode; } $defaultordernode = $summarynode->add(get_string('order_default', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'vall', 'group' => $currentgroupid))); $ascendingordernode = $summarynode->add(get_string('order_ascending', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'vallasort', 'group' => $currentgroupid))); $descendingordernode = $summarynode->add(get_string('order_descending', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'vallarsort', 'group' => $currentgroupid))); if ($questionnaire->capabilities->deleteresponses) { $deleteallnode = $summarynode->add(get_string('deleteallresponses', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'delallresp', 'group' => $currentgroupid))); } if ($questionnaire->capabilities->downloadresponses) { $downloadresponsesnode = $summarynode->add(get_string('downloadtextformat', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'dwnpg', 'group' => $currentgroupid))); } if ($questionnaire->capabilities->viewsingleresponse) { $byresponsenode = $reportnode->add(get_string('viewbyresponse', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'vresp', 'byresponse' => 1, 'group' => $currentgroupid))); $viewindividualresponsenode = $byresponsenode->add(get_string('view', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'vresp', 'byresponse' => 1, 'group' => $currentgroupid))); if ($individualresponse) { $deleteindividualresponsenode = $byresponsenode->add(get_string('deleteresp', 'questionnaire'), new moodle_url('/mod/questionnaire/report.php', array('instance' => $questionnaire->id, 'action' => 'dresp', 'byresponse' => 1, 'rid' => $rid, 'group' => $currentgroupid, 'individualresponse' => 1))); } } } if ($questionnaire->capabilities->viewsingleresponse && ($canviewallgroups || $canviewgroups)) { $url = '/mod/questionnaire/show_nonrespondents.php'; $node = navigation_node::create(get_string('show_nonrespondents', 'questionnaire'), new moodle_url($url, array('id' => $cmid)), navigation_node::TYPE_SETTING, null, 'nonrespondents'); $nonrespondentsnode = $questionnairenode->add_node($node, $beforekey); } }
/** * This function prints the recent activity (since current user's last login) * for specified courses. * @param array $courses Array of courses to print activity for. * @param string by reference $htmlarray Array of html snippets for display some * -where, which this function adds its new html to. */ function questionnaire_print_overview($courses, &$htmlarray) { global $DB, $USER, $CFG; require_once $CFG->dirroot . '/mod/questionnaire/locallib.php'; if (empty($courses) || !is_array($courses) || count($courses) == 0) { return array(); } if (!($questionnaires = get_all_instances_in_courses('questionnaire', $courses))) { return; } // Get all questionnaire logs in ONE query (much better!). $params = array(); $sql = "SELECT instance,cmid,l.course,COUNT(l.id) as count FROM {log} l " . " JOIN {course_modules} cm ON cm.id = cmid " . " JOIN {questionnaire} q ON cm.instance = q.id " . " WHERE ("; foreach ($courses as $course) { $sql .= '(l.course = ? AND l.time > ?) OR '; $params[] = $course->id; $params[] = $course->lastaccess; } $sql = substr($sql, 0, -3); // Take off the last OR. $sql .= ") AND l.module = 'questionnaire' AND action = 'submit' " . " AND userid != ?" . " AND q.resp_view <> ?" . " GROUP BY cmid,l.course,instance"; $params[] = $USER->id; $params[] = QUESTIONNAIRE_STUDENTVIEWRESPONSES_WHENANSWERED; if (!($new = $DB->get_records_sql($sql, $params))) { $new = array(); // Avoid warnings. } $strquestionnaires = get_string('modulename', 'questionnaire'); $site = get_site(); if (count($courses) == 1 && isset($courses[$site->id])) { $strnumrespsince1 = get_string('overviewnumresplog1', 'questionnaire'); $strnumrespsince = get_string('overviewnumresplog', 'questionnaire'); } else { $strnumrespsince1 = get_string('overviewnumrespvw1', 'questionnaire'); $strnumrespsince = get_string('overviewnumrespvw', 'questionnaire'); } // Go through the list of all questionnaires build previously, and check whether // they have had any activity. require_once $CFG->dirroot . '/mod/questionnaire/questionnaire.class.php'; foreach ($questionnaires as $questionnaire) { if (array_key_exists($questionnaire->id, $new) && !empty($new[$questionnaire->id])) { $cm = get_coursemodule_from_instance('questionnaire', $questionnaire->id); $context = context_module::instance($cm->id); $qobject = new questionnaire($questionnaire->id, $questionnaire, $questionnaire->course, $cm); $isclosed = $qobject->is_closed(); $answered = !$qobject->user_can_take($USER->id); $count = $new[$questionnaire->id]->count; if ($count > 0 && (has_capability('mod/questionnaire:readallresponseanytime', $context) || has_capability('mod/questionnaire:readallresponses', $context) && ($questionnaire->resp_view == QUESTIONNAIRE_STUDENTVIEWRESPONSES_ALWAYS || $questionnaire->resp_view == QUESTIONNAIRE_STUDENTVIEWRESPONSES_WHENCLOSED && $isclosed || $questionnaire->resp_view == QUESTIONNAIRE_STUDENTVIEWRESPONSES_WHENANSWERED && $answered))) { if ($count == 1) { $strresp = $strnumrespsince1; } else { $strresp = $strnumrespsince; } $str = '<div class="overview questionnaire"><div class="name">' . $strquestionnaires . ': <a title="' . $strquestionnaires . '" href="' . $CFG->wwwroot . '/mod/questionnaire/view.php?a=' . $questionnaire->id . '">' . $questionnaire->name . '</a></div>'; $str .= '<div class="info">'; $str .= $count . ' ' . $strresp; $str .= '</div></div>'; if (!array_key_exists($questionnaire->course, $htmlarray)) { $htmlarray[$questionnaire->course] = array(); } if (!array_key_exists('questionnaire', $htmlarray[$questionnaire->course])) { $htmlarray[$questionnaire->course]['questionnaire'] = ''; // Initialize, avoid warnings. } $htmlarray[$questionnaire->course]['questionnaire'] .= $str; } } } }
$rid = required_param('rid', PARAM_INT); $courseid = required_param('courseid', PARAM_INT); $sec = required_param('sec', PARAM_INT); $null = null; $referer = $CFG->wwwroot . '/mod/questionnaire/report.php'; if (!($questionnaire = get_record("questionnaire", "id", $qid))) { error("Course module is incorrect"); } if (!($course = get_record("course", "id", $questionnaire->course))) { error("Course is misconfigured"); } if (!($cm = get_coursemodule_from_instance("questionnaire", $questionnaire->id, $course->id))) { error("Course Module ID was incorrect"); } /// Check login and get context. require_login($courseid); $questionnaire = new questionnaire(0, $questionnaire, $course, $cm); if (!$questionnaire->user_can_take($USER->id)) { /// Should never happen, unless called directly by a snoop... print_error('nopermissions', 'questionnaire', $CFG->wwwroot . '/mod/questionnaire/view.php?id=' . $cm->id); } $currentcss = ''; if (!empty($questionnaire->survey->theme)) { $currentcss = '<link rel="stylesheet" type="text/css" href="' . $CFG->wwwroot . '/mod/questionnaire/css/' . $questionnaire->survey->theme . '" />'; } else { $currentcss = '<link rel="stylesheet" type="text/css" href="' . $CFG->wwwroot . '/mod/questionnaire/css/default.css" />'; } print_header('Print Survey', '', '', '', $currentcss, true, '', ''); $questionnaire->survey_print_render('', '', $courseid); close_window_button(); echo '</body></html>';