MDL-59243 mod_workshop: New WS mod_workshop_add_submission
This commit is contained in:
@@ -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()
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user