[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Survey external API 19 * 20 * @package mod_survey 21 * @category external 22 * @copyright 2015 Juan Leyva <juan@moodle.com> 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 * @since Moodle 3.0 25 */ 26 27 defined('MOODLE_INTERNAL') || die; 28 29 require_once($CFG->libdir . '/externallib.php'); 30 require_once($CFG->dirroot . '/mod/survey/lib.php'); 31 32 /** 33 * Survey external functions 34 * 35 * @package mod_survey 36 * @category external 37 * @copyright 2015 Juan Leyva <juan@moodle.com> 38 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 39 * @since Moodle 3.0 40 */ 41 class mod_survey_external extends external_api { 42 43 /** 44 * Describes the parameters for get_surveys_by_courses. 45 * 46 * @return external_external_function_parameters 47 * @since Moodle 3.0 48 */ 49 public static function get_surveys_by_courses_parameters() { 50 return new external_function_parameters ( 51 array( 52 'courseids' => new external_multiple_structure( 53 new external_value(PARAM_INT, 'course id'), 'Array of course ids', VALUE_DEFAULT, array() 54 ), 55 ) 56 ); 57 } 58 59 /** 60 * Returns a list of surveys in a provided list of courses, 61 * if no list is provided all surveys that the user can view will be returned. 62 * 63 * @param array $courseids the course ids 64 * @return array of surveys details 65 * @since Moodle 3.0 66 */ 67 public static function get_surveys_by_courses($courseids = array()) { 68 global $CFG, $USER, $DB; 69 70 $returnedsurveys = array(); 71 $warnings = array(); 72 73 $params = self::validate_parameters(self::get_surveys_by_courses_parameters(), array('courseids' => $courseids)); 74 75 $mycourses = array(); 76 if (empty($params['courseids'])) { 77 $mycourses = enrol_get_my_courses(); 78 $params['courseids'] = array_keys($mycourses); 79 } 80 81 // Ensure there are courseids to loop through. 82 if (!empty($params['courseids'])) { 83 84 list($courses, $warnings) = external_util::validate_courses($params['courseids'], $mycourses); 85 86 // Get the surveys in this course, this function checks users visibility permissions. 87 // We can avoid then additional validate_context calls. 88 $surveys = get_all_instances_in_courses("survey", $courses); 89 foreach ($surveys as $survey) { 90 $context = context_module::instance($survey->coursemodule); 91 // Entry to return. 92 $surveydetails = array(); 93 // First, we return information that any user can see in the web interface. 94 $surveydetails['id'] = $survey->id; 95 $surveydetails['coursemodule'] = $survey->coursemodule; 96 $surveydetails['course'] = $survey->course; 97 $surveydetails['name'] = external_format_string($survey->name, $context->id); 98 99 if (has_capability('mod/survey:participate', $context)) { 100 $trimmedintro = trim($survey->intro); 101 if (empty($trimmedintro)) { 102 $tempo = $DB->get_field("survey", "intro", array("id" => $survey->template)); 103 $survey->intro = get_string($tempo, "survey"); 104 } 105 106 // Format intro. 107 list($surveydetails['intro'], $surveydetails['introformat']) = 108 external_format_text($survey->intro, $survey->introformat, $context->id, 'mod_survey', 'intro', null); 109 $surveydetails['introfiles'] = external_util::get_area_files($context->id, 'mod_survey', 'intro', false, 110 false); 111 112 $surveydetails['template'] = $survey->template; 113 $surveydetails['days'] = $survey->days; 114 $surveydetails['questions'] = $survey->questions; 115 $surveydetails['surveydone'] = survey_already_done($survey->id, $USER->id) ? 1 : 0; 116 117 } 118 119 if (has_capability('moodle/course:manageactivities', $context)) { 120 $surveydetails['timecreated'] = $survey->timecreated; 121 $surveydetails['timemodified'] = $survey->timemodified; 122 $surveydetails['section'] = $survey->section; 123 $surveydetails['visible'] = $survey->visible; 124 $surveydetails['groupmode'] = $survey->groupmode; 125 $surveydetails['groupingid'] = $survey->groupingid; 126 } 127 $returnedsurveys[] = $surveydetails; 128 } 129 } 130 $result = array(); 131 $result['surveys'] = $returnedsurveys; 132 $result['warnings'] = $warnings; 133 return $result; 134 } 135 136 /** 137 * Describes the get_surveys_by_courses return value. 138 * 139 * @return external_single_structure 140 * @since Moodle 3.0 141 */ 142 public static function get_surveys_by_courses_returns() { 143 return new external_single_structure( 144 array( 145 'surveys' => new external_multiple_structure( 146 new external_single_structure( 147 array( 148 'id' => new external_value(PARAM_INT, 'Survey id'), 149 'coursemodule' => new external_value(PARAM_INT, 'Course module id'), 150 'course' => new external_value(PARAM_INT, 'Course id'), 151 'name' => new external_value(PARAM_RAW, 'Survey name'), 152 'intro' => new external_value(PARAM_RAW, 'The Survey intro', VALUE_OPTIONAL), 153 'introformat' => new external_format_value('intro', VALUE_OPTIONAL), 154 'introfiles' => new external_files('Files in the introduction text', VALUE_OPTIONAL), 155 'template' => new external_value(PARAM_INT, 'Survey type', VALUE_OPTIONAL), 156 'days' => new external_value(PARAM_INT, 'Days', VALUE_OPTIONAL), 157 'questions' => new external_value(PARAM_RAW, 'Question ids', VALUE_OPTIONAL), 158 'surveydone' => new external_value(PARAM_INT, 'Did I finish the survey?', VALUE_OPTIONAL), 159 'timecreated' => new external_value(PARAM_INT, 'Time of creation', VALUE_OPTIONAL), 160 'timemodified' => new external_value(PARAM_INT, 'Time of last modification', VALUE_OPTIONAL), 161 'section' => new external_value(PARAM_INT, 'Course section id', VALUE_OPTIONAL), 162 'visible' => new external_value(PARAM_INT, 'Visible', VALUE_OPTIONAL), 163 'groupmode' => new external_value(PARAM_INT, 'Group mode', VALUE_OPTIONAL), 164 'groupingid' => new external_value(PARAM_INT, 'Group id', VALUE_OPTIONAL), 165 ), 'Surveys' 166 ) 167 ), 168 'warnings' => new external_warnings(), 169 ) 170 ); 171 } 172 173 /** 174 * Returns description of method parameters 175 * 176 * @return external_function_parameters 177 * @since Moodle 3.0 178 */ 179 public static function view_survey_parameters() { 180 return new external_function_parameters( 181 array( 182 'surveyid' => new external_value(PARAM_INT, 'survey instance id') 183 ) 184 ); 185 } 186 187 /** 188 * Trigger the course module viewed event and update the module completion status. 189 * 190 * @param int $surveyid the survey instance id 191 * @return array of warnings and status result 192 * @since Moodle 3.0 193 * @throws moodle_exception 194 */ 195 public static function view_survey($surveyid) { 196 global $DB, $USER; 197 198 $params = self::validate_parameters(self::view_survey_parameters(), 199 array( 200 'surveyid' => $surveyid 201 )); 202 $warnings = array(); 203 204 // Request and permission validation. 205 $survey = $DB->get_record('survey', array('id' => $params['surveyid']), '*', MUST_EXIST); 206 list($course, $cm) = get_course_and_cm_from_instance($survey, 'survey'); 207 208 $context = context_module::instance($cm->id); 209 self::validate_context($context); 210 require_capability('mod/survey:participate', $context); 211 212 $viewed = survey_already_done($survey->id, $USER->id) ? 'graph' : 'form'; 213 214 // Trigger course_module_viewed event and completion. 215 survey_view($survey, $course, $cm, $context, $viewed); 216 217 $result = array(); 218 $result['status'] = true; 219 $result['warnings'] = $warnings; 220 return $result; 221 } 222 223 /** 224 * Returns description of method result value 225 * 226 * @return external_description 227 * @since Moodle 3.0 228 */ 229 public static function view_survey_returns() { 230 return new external_single_structure( 231 array( 232 'status' => new external_value(PARAM_BOOL, 'status: true if success'), 233 'warnings' => new external_warnings() 234 ) 235 ); 236 } 237 238 /** 239 * Returns description of method parameters 240 * 241 * @return external_function_parameters 242 * @since Moodle 3.0 243 */ 244 public static function get_questions_parameters() { 245 return new external_function_parameters( 246 array( 247 'surveyid' => new external_value(PARAM_INT, 'survey instance id') 248 ) 249 ); 250 } 251 252 /** 253 * Get the complete list of questions for the survey, including subquestions. 254 * 255 * @param int $surveyid the survey instance id 256 * @return array of warnings and the question list 257 * @since Moodle 3.0 258 * @throws moodle_exception 259 */ 260 public static function get_questions($surveyid) { 261 global $DB, $USER; 262 263 $params = self::validate_parameters(self::get_questions_parameters(), 264 array( 265 'surveyid' => $surveyid 266 )); 267 $warnings = array(); 268 269 // Request and permission validation. 270 $survey = $DB->get_record('survey', array('id' => $params['surveyid']), '*', MUST_EXIST); 271 list($course, $cm) = get_course_and_cm_from_instance($survey, 'survey'); 272 273 $context = context_module::instance($cm->id); 274 self::validate_context($context); 275 require_capability('mod/survey:participate', $context); 276 277 $mainquestions = survey_get_questions($survey); 278 279 foreach ($mainquestions as $question) { 280 if ($question->type >= 0) { 281 // Parent is used in subquestions. 282 $question->parent = 0; 283 $questions[] = survey_translate_question($question); 284 285 // Check if the question has subquestions. 286 if ($question->multi) { 287 $subquestions = survey_get_subquestions($question); 288 foreach ($subquestions as $sq) { 289 $sq->parent = $question->id; 290 $questions[] = survey_translate_question($sq); 291 } 292 } 293 } 294 } 295 296 $result = array(); 297 $result['questions'] = $questions; 298 $result['warnings'] = $warnings; 299 return $result; 300 } 301 302 /** 303 * Returns description of method result value 304 * 305 * @return external_description 306 * @since Moodle 3.0 307 */ 308 public static function get_questions_returns() { 309 return new external_single_structure( 310 array( 311 'questions' => new external_multiple_structure( 312 new external_single_structure( 313 array( 314 'id' => new external_value(PARAM_INT, 'Question id'), 315 'text' => new external_value(PARAM_RAW, 'Question text'), 316 'shorttext' => new external_value(PARAM_RAW, 'Question short text'), 317 'multi' => new external_value(PARAM_RAW, 'Subquestions ids'), 318 'intro' => new external_value(PARAM_RAW, 'The question intro'), 319 'type' => new external_value(PARAM_INT, 'Question type'), 320 'options' => new external_value(PARAM_RAW, 'Question options'), 321 'parent' => new external_value(PARAM_INT, 'Parent question (for subquestions)'), 322 ), 'Questions' 323 ) 324 ), 325 'warnings' => new external_warnings() 326 ) 327 ); 328 } 329 330 /** 331 * Describes the parameters for submit_answers. 332 * 333 * @return external_function_parameters 334 * @since Moodle 3.0 335 */ 336 public static function submit_answers_parameters() { 337 return new external_function_parameters( 338 array( 339 'surveyid' => new external_value(PARAM_INT, 'Survey id'), 340 'answers' => new external_multiple_structure( 341 new external_single_structure( 342 array( 343 'key' => new external_value(PARAM_RAW, 'Answer key'), 344 'value' => new external_value(PARAM_RAW, 'Answer value') 345 ) 346 ) 347 ), 348 ) 349 ); 350 } 351 352 /** 353 * Submit the answers for a given survey. 354 * 355 * @param int $surveyid the survey instance id 356 * @param array $answers the survey answers 357 * @return array of warnings and status result 358 * @since Moodle 3.0 359 * @throws moodle_exception 360 */ 361 public static function submit_answers($surveyid, $answers) { 362 global $DB, $USER; 363 364 $params = self::validate_parameters(self::submit_answers_parameters(), 365 array( 366 'surveyid' => $surveyid, 367 'answers' => $answers 368 )); 369 $warnings = array(); 370 371 // Request and permission validation. 372 $survey = $DB->get_record('survey', array('id' => $params['surveyid']), '*', MUST_EXIST); 373 list($course, $cm) = get_course_and_cm_from_instance($survey, 'survey'); 374 375 $context = context_module::instance($cm->id); 376 self::validate_context($context); 377 require_capability('mod/survey:participate', $context); 378 379 if (survey_already_done($survey->id, $USER->id)) { 380 throw new moodle_exception("alreadysubmitted", "survey"); 381 } 382 383 // Build the answers array. Data is cleaned inside the survey_save_answers function. 384 $answers = array(); 385 foreach ($params['answers'] as $answer) { 386 $key = $answer['key']; 387 $answers[$key] = $answer['value']; 388 } 389 390 survey_save_answers($survey, $answers, $course, $context); 391 392 $result = array(); 393 $result['status'] = true; 394 $result['warnings'] = $warnings; 395 return $result; 396 } 397 398 /** 399 * Returns description of method result value 400 * 401 * @return external_description 402 * @since Moodle 3.0 403 */ 404 public static function submit_answers_returns() { 405 return new external_single_structure( 406 array( 407 'status' => new external_value(PARAM_BOOL, 'status: true if success'), 408 'warnings' => new external_warnings() 409 ) 410 ); 411 } 412 413 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |