/**
  *  Will set up a repeating template, with elements for each piece of required data
  *
  *  Does not set defaults for the elements.
  *
  *  @param int $numSessions number of Sessions that have been created for the course
  */
 private function add_session_repeat_template($numSessions)
 {
     global $DB;
     $mform = $this->_form;
     $repeatoptions = array();
     $repeatarray = array();
     $repeatarray[] = $mform->createElement('header', 'sessionheader');
     $repeatarray[] = $mform->createElement('text', 'sessiontitle', get_string('session_title', 'local_metadata'));
     $repeatarray[] = $mform->createElement('text', 'sessionguestteacher', get_string('session_guest_teacher', 'local_metadata'));
     $repeatarray[] = $mform->createElement('select', 'sessiontype', get_string('session_type', 'local_metadata'), get_session_types());
     $repeatarray[] = $mform->createElement('select', 'sessionlength', get_string('session_length', 'local_metadata'), get_session_lengths());
     $repeatarray[] = $mform->createElement('date_selector', 'sessiondate', get_string('session_date', 'local_metadata'));
     $strategies = get_teaching_strategies();
     $teachingStrategyEl = $mform->createElement('select', 'sessionteachingstrategy', get_string('session_teaching_strategy', 'local_metadata'), $strategies, array('size' => count($strategies)));
     $teachingStrategyEl->setMultiple(true);
     $repeatarray[] = $teachingStrategyEl;
     // Set up the select for learning objectives
     // Will separate them based on type
     // Then, everytime need to deal with them, will also deal with them separated by type
     $learningObjectives = get_course_learning_objectives();
     $learningObjectivesList = array();
     foreach ($learningObjectives as $learningObjective) {
         $learningObjectivesList[$learningObjective->objectivetype][$learningObjective->id] = $learningObjective->objectivename;
     }
     $learningObjectiveTypes = get_learning_objective_types();
     foreach ($learningObjectiveTypes as $learningObjectiveType) {
         $options = array();
         if (array_key_exists($learningObjectiveType, $learningObjectivesList)) {
             $options = $learningObjectivesList[$learningObjectiveType];
         }
         $learningObjectivesEl = $mform->createElement('select', 'learning_objective_' . $learningObjectiveType, get_string('learning_objective_' . $learningObjectiveType, 'local_metadata'), $options);
         $learningObjectivesEl->setMultiple(true);
         $repeatarray[] = $learningObjectivesEl;
         $repeatoptions['learning_objective_' . $learningObjectiveType]['helpbutton'] = array('multi_select_help', 'local_metadata');
     }
     // Set up the select for assessments
     $assessments = get_table_data_for_course('courseassessment');
     $assessmentsList = array();
     foreach ($assessments as $assessment) {
         $assessmentsList[$assessment->id] = $assessment->assessmentname;
     }
     $assessmentsEl = $mform->createElement('select', 'assessments', get_string('related_assessments', 'local_metadata'), $assessmentsList);
     $assessmentsEl->setMultiple(true);
     $repeatarray[] = $assessmentsEl;
     $this->setup_topic_options($mform, $repeatarray, $repeatoptions);
     $repeatarray[] = $mform->createElement('submit', 'delete_session', get_string('deletesession', 'local_metadata'));
     $this->add_recurring_element_nosubmit_button($mform, 'delete_session');
     // Add needed hidden elements
     // Stores the id for each element
     $repeatarray[] = $mform->createElement('hidden', 'coursesession_id', -1);
     $repeatarray[] = $mform->createElement('hidden', 'was_deleted', false);
     $repeatoptions['sessionheader']['default'] = get_string('new_session_header', 'local_metadata');
     // Moodle complains if some elements aren't given a type
     $repeatoptions['sessiontitle']['type'] = PARAM_TEXT;
     $repeatoptions['sessionguestteacher']['type'] = PARAM_TEXT;
     $repeatoptions['all_topics_text_array']['type'] = PARAM_TEXT;
     $repeatoptions['new_topic']['type'] = PARAM_TEXT;
     $repeatoptions['coursesession_id']['type'] = PARAM_INT;
     $repeatoptions['was_deleted']['type'] = PARAM_RAW;
     $repeatoptions['sessionteachingstrategy']['helpbutton'] = array('session_teaching_strategy', 'local_metadata');
     // Add the repeating elements to the form
     $this->repeat_elements($repeatarray, $numSessions, $repeatoptions, 'sessions_list', 'sessions_list_add_element', 1, get_string('add_session', 'local_metadata'));
 }
 /**
  *  Will set up a repeating template, with elements for each piece of required data
  *
  *  Does not set defaults for the elements.
  *
  *  @param int $assessmentCount number of assessments that have been created for the course
  */
 function add_assessment_template($assessmentCount)
 {
     $mform = $this->_form;
     $elementArray = array();
     $optionsArray = array();
     //Set the options
     $optionsArray['assessmentname']['type'] = PARAM_TEXT;
     $optionsArray['assessmentprof']['type'] = PARAM_TEXT;
     $optionsArray['assessmentprof']['helpbutton'] = array('assessmentlecturer_help', 'local_metadata');
     $optionsArray['description']['type'] = PARAM_TEXT;
     $optionsArray['gradingDesc']['type'] = PARAM_TEXT;
     $optionsArray['gdescription']['helpbutton'] = array('assessment_grading_help', 'local_metadata');
     $optionsArray['assessmentweight']['type'] = PARAM_TEXT;
     // If is not an exam, should disable these two
     $optionsArray['assessmentprof']['disabledif'] = array('type', 'neq', 0);
     $optionsArray['assessmentexamtype']['disabledif'] = array('type', 'neq', 0);
     $optionsArray['assessment_knowledge']['setmultiple'] = true;
     $optionsArray['courseassessment_id']['type'] = PARAM_TEXT;
     $optionsArray['was_deleted']['type'] = PARAM_TEXT;
     $optionsArray['assessment_header']['default'] = get_string('new_assessment_header', 'local_metadata');
     // Form elements
     $elementArray[] = $mform->createElement('header', 'assessment_header');
     $elementArray[] = $mform->createElement('text', 'assessmentname', get_string('assessment_title', 'local_metadata'));
     $elementArray[] = $mform->createElement('select', 'type', get_string('assessment_type', 'local_metadata'), get_assessment_types(), '');
     $elementArray[] = $mform->createElement('text', 'assessmentprof', get_string('assessment_prof', 'local_metadata'));
     $exam_types = get_exam_types();
     $elementArray[] = $mform->createElement('select', 'assessmentexamtype', get_string('assessment_examtype', 'local_metadata'), $exam_types);
     $optionsArray['assessmentexamtype']['default'] = array_search('Other', $exam_types);
     $elementArray[] = $mform->createElement('text', 'assessmentweight', get_string('grade_weight', 'local_metadata'));
     $elementArray[] = $mform->createElement('date_selector', 'assessmentduedate', get_string('assessment_due', 'local_metadata'));
     $elementArray[] = $mform->createElement('textarea', 'description', get_string('assessment_description', 'local_metadata'));
     $elementArray[] = $mform->createElement('filepicker', 'gradingDescription_uploaded', get_string('assessment_grading_upload', 'local_metadata'), null, array('maxbytes' => 2000, 'accepted_types' => '*'));
     $elementArray[] = $mform->createElement('submit', 'gradingDescription_upload', get_string('assessment_grading_upload_submit', 'local_metadata'));
     $elementArray[] = $mform->createElement('textarea', 'gdescription', get_string('assessment_grading_desc', 'local_metadata'));
     // Add needed hidden elements
     // Stores the id for each element
     $elementArray[] = $mform->createElement('hidden', 'courseassessment_id', -1);
     $elementArray[] = $mform->createElement('hidden', 'was_deleted', false);
     //copied from session_form.php
     /////////////////////////////////////////////////
     $learningObjectives = get_course_learning_objectives();
     $learningObjectivesList = array();
     foreach ($learningObjectives as $learningObjective) {
         $learningObjectivesList[$learningObjective->objectivetype][$learningObjective->id] = $learningObjective->objectivename;
     }
     $learningObjectiveTypes = get_learning_objective_types();
     foreach ($learningObjectiveTypes as $learningObjectiveType) {
         $options = array();
         if (array_key_exists($learningObjectiveType, $learningObjectivesList)) {
             $options = $learningObjectivesList[$learningObjectiveType];
         }
         $learningObjectivesEl = $mform->createElement('select', 'learning_objective_' . $learningObjectiveType, get_string('learning_objective_' . $learningObjectiveType, 'local_metadata'), $options);
         $learningObjectivesEl->setMultiple(true);
         $elementArray[] = $learningObjectivesEl;
         $optionsArray['learning_objective_' . $learningObjectiveType]['helpbutton'] = array('multi_select_help', 'local_metadata');
     }
     /////////////////////////////////////////////////
     $elementArray[] = $mform->createElement('submit', 'delete_assessment', get_string('deleteassessment', 'local_metadata'));
     $this->add_recurring_element_nosubmit_button($mform, 'delete_assessment');
     $this->repeat_elements($elementArray, $assessmentCount, $optionsArray, 'assessment_list', 'assessment_list_add_element', 1, get_string('assessment_add', 'local_metadata'));
 }
 function definition()
 {
     global $CFG, $DB, $USER;
     //Declare our globals for use
     global $course, $courseId;
     // initialize the form.
     $mform = $this->_form;
     //Tell this object to initialize with the properties of the Moodle form.
     // retrieve data from course info and instructor table
     $courseinfo = $DB->get_record('courseinfo', array('courseid' => $courseId));
     if ($courseinfo != NULL) {
         $contactinfo = $DB->get_record('courseinstructors', array('courseid' => $courseinfo->id, 'userid' => $USER->id));
         $coursegradattributes = $DB->get_records('coursegradattributes', array('courseinfoid' => $courseinfo->id));
     } else {
         $contactinfo = NULL;
         $coursegradattributes = NULL;
     }
     $coursecategory = $DB->get_record('course_categories', array('id' => $course->category));
     $defcategories = $DB->get_records('coursecategories', array('categoryid' => $coursecategory->id));
     $coursereadings = get_course_readings();
     $graduateattributes = $DB->get_records('graduateattributes');
     $reading_list = array();
     foreach ($coursereadings as $reading) {
         $obj = new stdClass();
         $obj->id = $reading->id;
         $obj->name = $reading->readingname;
         $obj->url = $reading->readingurl;
         $reading_list[] = $obj;
     }
     $gradatt_list = array();
     if (!is_null($coursegradattributes)) {
         foreach ($coursegradattributes as $gradatt) {
             $obj = new stdClass();
             $obj->id = $gradatt->id;
             $gradatts = $DB->get_record('graduateattributes', array('id' => $gradatt->gradattid));
             $obj->gradattid = $gradatts->id;
             $gradatt_list[] = $obj;
         }
     }
     $learning_objectives = get_course_learning_objectives();
     $knowledge_list = array();
     $skill_list = array();
     $attitude_list = array();
     foreach ($learning_objectives as $obj) {
         if ($obj->objectivetype === 'Knowledge') {
             $knowledge_list[] = $this->get_learning_obj($obj->id, $obj->objectivename);
         } else {
             if ($obj->objectivetype === 'Skill') {
                 $skill_list[] = $this->get_learning_obj($obj->id, $obj->objectivename);
             } else {
                 $attitude_list[] = $this->get_learning_obj($obj->id, $obj->objectivename);
             }
         }
     }
     // setup form elements
     $this->setup_general($mform, $courseinfo, $contactinfo, $coursecategory, $defcategories);
     $this->setup_contact($mform, $courseinfo, $contactinfo);
     $this->setup_description($mform, $courseinfo);
     $this->setup_upload_req_reading($mform);
     $this->setup_req_reading($mform, $reading_list);
     $this->setup_format($mform, $courseinfo);
     $this->setup_upload_course_obj($mform);
     $this->setup_course_obj($mform, 'knowledge', $knowledge_list, 'skill');
     $this->setup_course_obj($mform, 'skill', $skill_list, 'attitude');
     $this->setup_course_obj($mform, 'attitude', $attitude_list, 'gradatt');
     $this->setup_graduate_attributes($mform, $graduateattributes, $gradatt_list);
     $this->setup_teaching_assumption($mform, $courseinfo);
     // Add form buttons
     $this->add_action_buttons(true, "Save general information");
 }