예제 #1
0
 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);
 }
예제 #2
0
 /**
  * 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;
 }