function action_selem() { $id = required_param('id', PARAM_INT); $crs = new course($id); $crs->seturl(null, array('s' => 'crs', 'section' => 'curr', 'action' => 'selem')); $form = $crs->create_completion_form($this->optional_param('elemid', 0, PARAM_INT)); if (!$form->is_cancelled()) { $elemrecord = new Object(); $elemrecord->id = cm_get_param('elemid', 0); $elemrecord->idnumber = cm_get_param('idnumber', ''); $elemrecord->name = cm_get_param('name', ''); $elemrecord->description = cm_get_param('description', ''); $elemrecord->completion_grade = cm_get_param('completion_grade', 0); $elemrecord->required = cm_get_param('required', 0); $crs->save_completion_element($elemrecord); } $this->print_tabs('elem', array('id' => $id)); echo $this->get_completion_page($id); }
/** * Clone a course. * @param array $options options for cloning. Valid options are: * - 'classes': whether or not to clone classes (default: false) * - 'moodlecourses': whether or not to clone Moodle courses (if they were * autocreated). Values can be (default: "copyalways"): * - "copyalways": always copy course * - "copyautocreated": only copy autocreated courses * - "autocreatenew": autocreate new courses from course template * - "link": link to existing course * - 'targetcluster': the cluster id or cluster object (if any) to * associate the clones with (default: none) * @return array array of array of object IDs created. Key in outer array * is type of object (plural). Key in inner array is original object ID, * value is new object ID. Outer array also has an entry called 'errors', * which is an array of any errors encountered when duplicating the * object. */ function duplicate(array $options) { require_once elispm::lib('data/pmclass.class.php'); require_once elispm::lib('data/coursetemplate.class.php'); $objs = array('errors' => array()); if (isset($options['targetcluster'])) { $userset = $options['targetcluster']; if (!is_object($userset) || !is_a($userset, 'userset')) { $options['targetcluster'] = $userset = new userset($userset); } } // Due to lazy loading, we need to pre-load this object $this->load(); // clone main course object $clone = new course($this); unset($clone->id); $idnumber = $clone->idnumber; $name = $clone->name; if (isset($userset)) { $to_append = ' - ' . $userset->name; // if cluster specified, append cluster's name to course $idnumber = append_once($idnumber, $to_append, array('maxlength' => 95)); $name = append_once($name, $to_append, array('maxlength' => 250)); } //get a unique idnumber $clone->idnumber = generate_unique_identifier(course::TABLE, 'idnumber', $idnumber, array('idnumber' => $idnumber)); if ($clone->idnumber != $idnumber) { //get the suffix appended and add it to the name $parts = explode('.', $clone->idnumber); $suffix = end($parts); $clone->name = $name . '.' . $suffix; } else { $clone->name = $name; } $clone->save(); $objs['courses'] = array($this->id => $clone->id); $options['targetcourse'] = $clone->id; // copy completion elements $compelems = $this->get_completion_elements(); foreach ($compelems as $compelem) { unset($compelem->id); $clone->save_completion_element($compelem); } unset($compelems); // copy template $template = $this->_db->get_record(coursetemplate::TABLE, array('courseid' => $this->id)); $template = new coursetemplate($template); unset($template->id); $template->courseid = $clone->id; $template->save(); // copy the classes if (!empty($options['classes'])) { $classes = pmclass_get_record_by_courseid($this->id); if (!empty($classes)) { $objs['classes'] = array(); foreach ($classes as $class) { $class = new pmclass($class); $rv = $class->duplicate($options); if (isset($rv['errors']) && !empty($rv['errors'])) { $objs['errors'] = array_merge($objs['errors'], $rv['errors']); } if (isset($rv['classes'])) { $objs['classes'] = $objs['classes'] + $rv['classes']; } } } } return $objs; }