Exemplo n.º 1
0
 /**
  * Performs class creation
  * @throws moodle_exception If there was an error in passed parameters.
  * @throws data_object_exception If there was an error creating the entity.
  * @param array $data The incoming data parameter.
  * @return array An array of parameters, if successful.
  */
 public static function class_create(array $data)
 {
     global $USER, $DB;
     if (static::require_elis_dependencies() !== true) {
         throw new moodle_exception('ws_function_requires_elis', 'local_datahub');
     }
     // Parameter validation.
     $params = self::validate_parameters(self::class_create_parameters(), array('data' => $data));
     // Context validation.
     $context = context_user::instance($USER->id);
     self::validate_context($context);
     // Capability checking.
     require_capability('local/elisprogram:class_create', context_system::instance());
     // Initialize version1elis importplugin for utility functions.
     $importplugin = rlip_dataplugin_factory::factory('dhimport_version1elis');
     // Create the class.
     $data = (object) $data;
     $data = $importplugin->add_custom_field_prefixes($data);
     // Parse startdate and enddate.
     foreach (array('startdate', 'enddate') as $date) {
         if (isset($data->{$date})) {
             $data->{$date} = $importplugin->parse_date($data->{$date});
         }
     }
     // Check for duplicate idnumbers.
     if ($DB->record_exists(pmclass::TABLE, array('idnumber' => $data->idnumber))) {
         throw new moodle_exception('ws_class_create_fail_duplicateidnumber', 'local_datahub');
     }
     // Do course assignment.
     $crsid = $DB->get_field(course::TABLE, 'id', array('idnumber' => $data->assignment));
     if (empty($crsid)) {
         throw new moodle_exception('ws_class_create_fail_invalidcourseassignment', 'local_datahub');
     }
     $data->courseid = $crsid;
     $class = new pmclass();
     $class->set_from_data($data);
     $class->save();
     // Associate this class instance to a track, if necessary.
     $importplugin->associate_class_to_track($data, $class->id);
     // Associate this class instance to a Moodle course, if necessary.
     $importplugin->associate_class_to_moodle_course($data, $class->id);
     // Respond.
     if (!empty($class->id)) {
         $classrec = (array) $DB->get_record(pmclass::TABLE, array('id' => $class->id));
         $classobj = $class->to_array();
         // Convert multi-valued custom field arrays to comma-separated listing.
         $fields = static::get_class_custom_fields();
         foreach ($fields as $field) {
             // Generate name using custom field prefix.
             $fullfieldname = data_object_with_custom_fields::CUSTOM_FIELD_PREFIX . $field->shortname;
             if ($field->multivalued && !empty($classobj[$fullfieldname]) && is_array($classobj[$fullfieldname])) {
                 $classobj[$fullfieldname] = implode(',', $classobj[$fullfieldname]);
             }
         }
         return array('messagecode' => get_string('ws_class_create_success_code', 'local_datahub'), 'message' => get_string('ws_class_create_success_msg', 'local_datahub'), 'record' => array_merge($classrec, $classobj));
     } else {
         throw new data_object_exception('ws_class_create_fail', 'local_datahub');
     }
 }