MDL-59243 mod_workshop: New WS mod_workshop_add_submission

This commit is contained in:
Juan Leyva
2017-09-06 14:00:17 +02:00
parent 4c776cae2d
commit c2cf2450ac
4 changed files with 242 additions and 1 deletions
+111
View File
@@ -197,6 +197,7 @@ class mod_workshop_external extends external_api {
if (is_null($result['assessingexamplesallowed'])) {
$result['assessingexamplesallowed'] = false;
}
$result['examplesassessed'] = $workshop->check_examples_assessed($USER->id);
$result['warnings'] = array();
return $result;
@@ -219,6 +220,8 @@ class mod_workshop_external extends external_api {
'Is the user allowed to create/edit his assessments?'),
'assessingexamplesallowed' => new external_value(PARAM_BOOL,
'Are reviewers allowed to create/edit their assessments of the example submissions?.'),
'examplesassessed' => new external_value(PARAM_BOOL,
'Whether the given user has assessed all his required examples (always true if there are no examples to assess).'),
'warnings' => new external_warnings()
);
@@ -419,4 +422,112 @@ class mod_workshop_external extends external_api {
)
);
}
/**
* Returns the description of the external function parameters.
*
* @return external_function_parameters
* @since Moodle 3.4
*/
public static function add_submission_parameters() {
return new external_function_parameters(array(
'workshopid' => new external_value(PARAM_INT, 'Workshop id'),
'title' => new external_value(PARAM_TEXT, 'Submission title'),
'content' => new external_value(PARAM_RAW, 'Submission text content', VALUE_DEFAULT, ''),
'contentformat' => new external_value(PARAM_INT, 'The format used for the content', VALUE_DEFAULT, FORMAT_MOODLE),
'inlineattachmentsid' => new external_value(PARAM_INT, 'The draft file area id for inline attachments in the content',
VALUE_DEFAULT, 0),
'attachmentsid' => new external_value(PARAM_INT, 'The draft file area id for attachments', VALUE_DEFAULT, 0),
));
}
/**
* Add a new submission to a given workshop.
*
* @param int $workshopid the workshop id
* @param string $title the submission title
* @param string $content the submission text content
* @param int $contentformat the format used for the content
* @param int $inlineattachmentsid the draft file area id for inline attachments in the content
* @param int $attachmentsid the draft file area id for attachments
* @return array Containing the new created submission id and warnings.
* @since Moodle 3.4
* @throws moodle_exception
*/
public static function add_submission($workshopid, $title, $content = '', $contentformat = FORMAT_MOODLE,
$inlineattachmentsid = 0, $attachmentsid = 0) {
global $USER;
$params = self::validate_parameters(self::add_submission_parameters(), array(
'workshopid' => $workshopid,
'title' => $title,
'content' => $content,
'contentformat' => $contentformat,
'inlineattachmentsid' => $inlineattachmentsid,
'attachmentsid' => $attachmentsid,
));
$warnings = array();
// Get and validate the workshop.
list($workshop, $course, $cm, $context) = self::validate_workshop($params['workshopid']);
require_capability('mod/workshop:submit', $context);
// Check if we can submit now.
$canaddsubmission = $workshop->creating_submission_allowed($USER->id);
$canaddsubmission = $canaddsubmission && $workshop->check_examples_assessed($USER->id);
if (!$canaddsubmission) {
throw new moodle_exception('nopermissions', 'error', '', 'add submission');
}
// Prepare the submission object.
$submission = new stdClass;
$submission->id = null;
$submission->cmid = $cm->id;
$submission->example = 0;
$submission->title = trim($params['title']);
$submission->content_editor = array(
'text' => $params['content'],
'format' => $params['contentformat'],
'itemid' => $params['inlineattachmentsid'],
);
$submission->attachment_filemanager = $params['attachmentsid'];
if (empty($submission->title)) {
throw new moodle_exception('errorinvalidparam', 'webservice', '', 'title');
}
$errors = $workshop->validate_submission_data((array) $submission);
// We can get several errors, return them in warnings.
if (!empty($errors)) {
$submission->id = 0;
foreach ($errors as $itemname => $message) {
$warnings[] = array(
'item' => $itemname,
'itemid' => 0,
'warningcode' => 'fielderror',
'message' => s($message)
);
}
} else {
$submission->id = $workshop->edit_submission($submission);
}
return array(
'submissionid' => $submission->id,
'warnings' => $warnings
);
}
/**
* Returns the description of the external function return value.
*
* @return external_description
* @since Moodle 3.4
*/
public static function add_submission_returns() {
return new external_single_structure(array(
'submissionid' => new external_value(PARAM_INT, 'New workshop submission id (0 if it wasn\'t created).'),
'warnings' => new external_warnings()
));
}
}