/** * Convert ECS content to rule matchable values * * @param string $a_resource_id * @param int $a_server_id * @param object $a_ecs_content * @param int $a_owner * @return array */ public static function getMatchableContent($a_resource_id, $a_server_id, $a_ecs_content, $a_owner) { include_once './Services/WebServices/ECS/classes/class.ilECSCategoryMappingRule.php'; include_once './Services/WebServices/ECS/classes/class.ilECSCommunitiesCache.php'; // see ilECSCategoryMapping::getPossibleFields(); $res = array(); $res["part_id"] = array($a_owner, ilECSCategoryMappingRule::ATTR_INT); $res["community"] = array(ilECSCommunitiesCache::getInstance()->lookupTitle($a_server_id, $a_owner), ilECSCategoryMappingRule::ATTR_STRING); $definition = self::getEContentDefinition($a_resource_id); $timePlace = null; foreach ($definition as $id => $type) { if (is_array($type)) { $target = $type[1]; $type = $type[0]; } else { $target = $id; } switch ($type) { case ilECSUtils::TYPE_ARRAY: $value = array(implode(',', (array) $a_ecs_content->{$target}), ilECSCategoryMappingRule::ATTR_ARRAY); break; case ilECSUtils::TYPE_INT: $value = array((int) $a_ecs_content->{$target}, ilECSCategoryMappingRule::ATTR_INT); break; case ilECSUtils::TYPE_STRING: $value = array((string) $a_ecs_content->{$target}, ilECSCategoryMappingRule::ATTR_STRING); break; case ilECSUtils::TYPE_TIMEPLACE: if (!is_object($timePlace)) { include_once './Services/WebServices/ECS/classes/class.ilECSTimePlace.php'; if (is_object($a_ecs_content->{$target})) { $timePlace = new ilECSTimePlace(); $timePlace->loadFromJSON($a_ecs_content->{$target}); } else { $timePlace = new ilECSTimePlace(); } } switch ($id) { case 'begin': case 'end': $value = array($timePlace->{'getUT' . ucfirst($id)}(), ilECSCategoryMappingRule::ATTR_INT); break; case 'room': case 'cycle': $value = array($timePlace->{'get' . ucfirst($id)}(), ilECSCategoryMappingRule::ATTR_STRING); break; } break; } $res[$id] = $value; } return $res; }
/** * Add advanced metadata to json (export) * * @param object $a_json * @param ilECSSetting $a_server * @param array $a_definition * @param int $a_mapping_mode */ protected function importMetadataFromJson($a_json, ilECSSetting $a_server, array $a_definition, $a_mapping_mode) { global $ilLog; $ilLog->write("importing metadata from json: " . print_r($a_definition, true)); include_once './Services/WebServices/ECS/classes/class.ilECSDataMappingSettings.php'; include_once './Services/AdvancedMetaData/classes/class.ilAdvancedMDValues.php'; include_once './Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php'; $mappings = ilECSDataMappingSettings::getInstanceByServerId($a_server->getServerId()); foreach ($a_definition as $id => $type) { if (is_array($type)) { $target = $type[1]; $type = $type[0]; } else { $target = $id; } $timePlace = null; if ($field = $mappings->getMappingByECSName($a_mapping_mode, $id)) { switch ($type) { case ilECSUtils::TYPE_ARRAY: $value = implode(',', (array) $a_json->{$target}); break; case ilECSUtils::TYPE_INT: $value = (int) $a_json->{$target}; break; case ilECSUtils::TYPE_STRING: $value = (string) $a_json->{$target}; break; case ilECSUtils::TYPE_TIMEPLACE: if (!is_object($timePlace)) { include_once './Services/WebServices/ECS/classes/class.ilECSTimePlace.php'; if (is_object($a_json->{$target})) { $timePlace = new ilECSTimePlace(); $timePlace->loadFromJSON($a_json->{$target}); } else { $timePlace = new ilECSTimePlace(); } } switch ($id) { case 'begin': case 'end': $field_type = ilAdvancedMDFieldDefinition::_lookupFieldType($field); if ($field_type == ilAdvancedMDFieldDefinition::TYPE_DATE || $field_type == ilAdvancedMDFieldDefinition::TYPE_DATETIME) { $value = $timePlace->{'getUT' . ucfirst($id)}(); break; } // fallthrough // fallthrough case 'room': case 'cycle': $value = $timePlace->{'get' . ucfirst($id)}(); break; } break; } include_once './Services/AdvancedMetaData/classes/class.ilAdvancedMDValue.php'; $mdv = ilAdvancedMDValue::_getInstance($this->getId(), $field); $mdv->toggleDisabledStatus(true); $mdv->setValue($value); $mdv->save(); } } }
/** * Add advanced metadata to json (export) * * @param object $a_json * @param ilECSSetting $a_server * @param array $a_definition * @param int $a_mapping_mode */ protected function importMetadataFromJson($a_json, ilECSSetting $a_server, array $a_definition, $a_mapping_mode) { global $ilLog; $ilLog->write("importing metadata from json: " . print_r($a_json, true)); include_once './Services/WebServices/ECS/classes/class.ilECSDataMappingSettings.php'; include_once './Services/AdvancedMetaData/classes/class.ilAdvancedMDValues.php'; include_once './Services/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php'; $mappings = ilECSDataMappingSettings::getInstanceByServerId($a_server->getServerId()); $values_records = ilAdvancedMDValues::getInstancesForObjectId($this->getId(), $this->getType()); foreach ($values_records as $values_record) { // this correctly binds group and definitions $values_record->read(); } $do_save = false; foreach ($a_definition as $id => $type) { if (is_array($type)) { $target = $type[1]; $type = $type[0]; } else { $target = $id; } $timePlace = null; if ($field = $mappings->getMappingByECSName($a_mapping_mode, $id)) { // find element in records $adv_md_def = null; foreach ($values_records as $values_record) { $adv_md_defs = $values_record->getDefinitions(); if (isset($adv_md_defs[$field])) { $adv_md_def = $adv_md_defs[$field]; break; } } if (!$adv_md_def) { continue; } $raw_value = $a_json->{$target}; if ($type == ilECSUtils::TYPE_TIMEPLACE) { if (!is_object($timePlace)) { include_once './Services/WebServices/ECS/classes/class.ilECSTimePlace.php'; if (is_object($raw_value)) { $timePlace = new ilECSTimePlace(); $timePlace->loadFromJSON($raw_value); } else { $timePlace = new ilECSTimePlace(); } } $raw_value = $timePlace; } if ($adv_md_def->importFromECS($type, $raw_value, $id)) { $do_save = true; } } } if ($do_save) { foreach ($values_records as $values_record) { $additional = array(); foreach ($values_record->getADTGroup()->getElements() as $element_id => $element) { if (!$element->isNull()) { $additional[$element_id] = array("disabled" => array("integer", 1)); } } $values_record->write($additional); } } }