. // // // /////////////////////////////////////////////////////////////////////////// /* * @package course * @subpackage publish * @author Jerome Mouneyrac * @license http://www.gnu.org/copyleft/gpl.html GNU GPL * @copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com * * This page display the publication metadata form */ require_once('../../config.php'); require_once($CFG->libdir . '/filelib.php'); //check user access capability to this page $id = required_param('id', PARAM_INT); $course = $DB->get_record('course', array('id' => $id), '*', MUST_EXIST); require_login($course); //page settings $PAGE->set_url('/course/publish/metadata.php', array('id' => $course->id)); $PAGE->set_pagelayout('incourse'); $PAGE->set_title(get_string('course') . ': ' . $course->fullname); $PAGE->set_heading($course->fullname); $context = context_course::instance($course->id); if (empty($CFG->enablecoursepublishing) || !has_capability('moodle/course:publish', $context)) { throw new moodle_exception('nopermission'); } // Retrieve hub name and hub url. require_sesskey(); // Set the publication form. $advertise = optional_param('advertise', false, PARAM_BOOL); $publicationid = optional_param('publicationid', false, PARAM_INT); $formparams = array('course' => $course, 'advertise' => $advertise); if ($publicationid) { $publication = \core\hub\publication::get_publication($publicationid, $course->id, MUST_EXIST); $formparams['publication'] = $publication; $advertise = $formparams['advertise'] = $publication->enrollable; } $share = !$advertise; $coursepublicationform = new \core\hub\course_publication_form('', $formparams); $fromform = $coursepublicationform->get_data(); if (!empty($fromform)) { // Retrieve the course information. $courseinfo = new stdClass(); $courseinfo->fullname = $fromform->name; $courseinfo->shortname = $fromform->courseshortname; $courseinfo->description = $fromform->description; $courseinfo->language = $fromform->language; $courseinfo->publishername = $fromform->publishername; $courseinfo->publisheremail = $fromform->publisheremail; $courseinfo->contributornames = $fromform->contributornames; $courseinfo->coverage = $fromform->coverage; $courseinfo->creatorname = $fromform->creatorname; $courseinfo->licenceshortname = $fromform->licence; $courseinfo->subject = $fromform->subject; $courseinfo->audience = $fromform->audience; $courseinfo->educationallevel = $fromform->educationallevel; $creatornotes = $fromform->creatornotes; $courseinfo->creatornotes = $creatornotes['text']; $courseinfo->creatornotesformat = $creatornotes['format']; $courseinfo->sitecourseid = $id; if (!empty($fromform->deletescreenshots)) { $courseinfo->deletescreenshots = $fromform->deletescreenshots; } if ($share) { $courseinfo->demourl = $fromform->demourl; $courseinfo->enrollable = false; } else { $courseinfo->courseurl = $fromform->courseurl; $courseinfo->enrollable = true; } // Retrieve the outcomes of this course. require_once($CFG->libdir . '/grade/grade_outcome.php'); $outcomes = grade_outcome::fetch_all_available($id); if (!empty($outcomes)) { foreach ($outcomes as $outcome) { $sentoutcome = new stdClass(); $sentoutcome->fullname = $outcome->fullname; $courseinfo->outcomes[] = $sentoutcome; } } // Retrieve the content information from the course. $coursecontext = context_course::instance($course->id); $courseblocks = \core\hub\publication::get_block_instances_by_context($coursecontext->id); if (!empty($courseblocks)) { $blockname = ''; foreach ($courseblocks as $courseblock) { if ($courseblock->blockname != $blockname) { if (!empty($blockname)) { $courseinfo->contents[] = $content; } $blockname = $courseblock->blockname; $content = new stdClass(); $content->moduletype = 'block'; $content->modulename = $courseblock->blockname; $content->contentcount = 1; } else { $content->contentcount = $content->contentcount + 1; } } $courseinfo->contents[] = $content; } $activities = get_fast_modinfo($course, $USER->id); foreach ($activities->instances as $activityname => $activitydetails) { $content = new stdClass(); $content->moduletype = 'activity'; $content->modulename = $activityname; $content->contentcount = count($activities->instances[$activityname]); $courseinfo->contents[] = $content; } // Save into screenshots field the references to the screenshot content hash // (it will be like a unique id from the hub perspective). if (!empty($fromform->deletescreenshots) or $share) { $courseinfo->screenshots = 0; } else { $courseinfo->screenshots = $fromform->existingscreenshotnumber; } $files = []; if (!empty($fromform->screenshots)) { $fs = get_file_storage(); $files = $fs->get_area_files(context_user::instance($USER->id)->id, 'user', 'draft', $fromform->screenshots, 'filepath, filename', false); $files = array_filter($files, function(stored_file $file) { return $file->is_valid_image(); }); $courseinfo->screenshots += count($files); } // PUBLISH ACTION. $hubcourseid = \core\hub\publication::publish_course($courseinfo, $files); // Redirect to the backup process page. if ($share) { $params = array('sesskey' => sesskey(), 'id' => $id, 'hubcourseid' => $hubcourseid); $backupprocessurl = new moodle_url("/course/publish/backup.php", $params); redirect($backupprocessurl); } else { // Redirect to the index publis page. redirect(new moodle_url('/course/publish/index.php', ['id' => $id]), get_string('coursepublished', 'hub', 'Moodle.net'), null, \core\output\notification::NOTIFY_SUCCESS); } } // OUTPUT SECTION. echo $OUTPUT->header(); echo $OUTPUT->heading(get_string('publishcourseon', 'hub', 'Moodle.net'), 3, 'main'); // Display hub information (logo, name, description). $renderer = $PAGE->get_renderer('core', 'course'); if ($hubinfo = \core\hub\registration::get_moodlenet_info()) { echo $renderer->hubinfo($hubinfo); } // Display metadata form. $coursepublicationform->display(); echo $OUTPUT->footer();