19declare(strict_types=1);
34 "LrsTypeId" => [
"db_col" =>
"lrs_type_id",
"db_type" =>
"integer"]
36 "ContentType" => [
"db_col" =>
"content_type",
"db_type" =>
"text"]
38 "SourceType" => [
"db_col" =>
"source_type",
"db_type" =>
"text"]
40 "ActivityId" => [
"db_col" =>
"activity_id",
"db_type" =>
"text"]
42 "Instructions" => [
"db_col" =>
"instructions",
"db_type" =>
"text"]
45 "LaunchUrl" => [
"db_col" =>
"launch_url",
"db_type" =>
"text"]
47 "AuthFetchUrl" => [
"db_col" =>
"auth_fetch_url",
"db_type" =>
"integer"]
49 "LaunchMethod" => [
"db_col" =>
"launch_method",
"db_type" =>
"text"]
51 "LaunchMode" => [
"db_col" =>
"launch_mode",
"db_type" =>
"text"]
53 "MasteryScore" => [
"db_col" =>
"mastery_score",
"db_type" =>
"float"]
55 "KeepLp" => [
"db_col" =>
"keep_lp",
"db_type" =>
"integer"]
57 "PrivacyIdent" => [
"db_col" =>
"privacy_ident",
"db_type" =>
"integer"]
59 "PrivacyName" => [
"db_col" =>
"privacy_name",
"db_type" =>
"integer"]
61 "UsrPrivacyComment" => [
"db_col" =>
"usr_privacy_comment",
"db_type" =>
"text"]
63 "ShowStatements" => [
"db_col" =>
"show_statements",
"db_type" =>
"integer"]
65 "XmlManifest" => [
"db_col" =>
"xml_manifest",
"db_type" =>
"text"]
67 "Version" => [
"db_col" =>
"version",
"db_type" =>
"integer"]
69 "HighscoreEnabled" => [
"db_col" =>
"highscore_enabled",
"db_type" =>
"integer"]
71 "HighscoreAchievedTs" => [
"db_col" =>
"highscore_achieved_ts",
"db_type" =>
"integer"]
73 "HighscorePercentage" => [
"db_col" =>
"highscore_percentage",
"db_type" =>
"integer"]
75 "HighscoreWtime" => [
"db_col" =>
"highscore_wtime",
"db_type" =>
"integer"]
77 "HighscoreOwnTable" => [
"db_col" =>
"highscore_own_table",
"db_type" =>
"integer"]
79 "HighscoreTopTable" => [
"db_col" =>
"highscore_top_table",
"db_type" =>
"integer"]
81 "HighscoreTopNum" => [
"db_col" =>
"highscore_top_num",
"db_type" =>
"integer"]
83 "BypassProxy" => [
"db_col" =>
"bypass_proxy",
"db_type" =>
"integer"]
85 "OnlyMoveon" => [
"db_col" =>
"only_moveon",
"db_type" =>
"integer"]
87 "Achieved" => [
"db_col" =>
"achieved",
"db_type" =>
"integer"]
89 "Answered" => [
"db_col" =>
"answered",
"db_type" =>
"integer"]
91 "Completed" => [
"db_col" =>
"completed",
"db_type" =>
"integer"]
93 "Failed" => [
"db_col" =>
"failed",
"db_type" =>
"integer"]
95 "Initialized" => [
"db_col" =>
"initialized",
"db_type" =>
"integer"]
97 "Passed" => [
"db_col" =>
"passed",
"db_type" =>
"integer"]
99 "Progressed" => [
"db_col" =>
"progressed",
"db_type" =>
"integer"]
101 "Satisfied" => [
"db_col" =>
"satisfied",
"db_type" =>
"integer"]
103 "Terminated" => [
"db_col" =>
"c_terminated",
"db_type" =>
"integer"]
105 "HideData" => [
"db_col" =>
"hide_data",
"db_type" =>
"integer"]
107 "Timestamp" => [
"db_col" =>
"c_timestamp",
"db_type" =>
"integer"]
109 "Duration" => [
"db_col" =>
"duration",
"db_type" =>
"integer"]
111 "NoSubstatements" => [
"db_col" =>
"no_substatements",
"db_type" =>
"integer"]
113 "PublisherId" => [
"db_col" =>
"publisher_id",
"db_type" =>
"text"]
115 "AnonymousHomepage" => [
"db_col" =>
"anonymous_homepage",
"db_type" =>
"integer"]
117 "MoveOn" => [
"db_col" =>
"moveon",
"db_type" =>
"text"]
119 "LaunchParameters" => [
"db_col" =>
"launch_parameters",
"db_type" =>
"text"]
121 "EntitlementKey" => [
"db_col" =>
"entitlement_key",
"db_type" =>
"text"]
123 "SwitchToReview" => [
"db_col" =>
"switch_to_review",
"db_type" =>
"integer"]
125 "DeleteData" => [
"db_col" =>
"delete_data",
"db_type" =>
"integer"]
132 public function __construct(
int $a_id = 0,
bool $a_reference =
true)
139 foreach ($this->_cmixSettingsProperties as $key => $value) {
140 $this->_element_db_mapping [$value[
"db_col"]] = $key;
151 ?array $a_rec =
null,
156 public function getCmiXapiXmlRepresentation(
158 string $a_schema_version,
160 string $a_field =
"",
161 bool $a_omit_header =
false,
162 bool $a_omit_types =
false
167 $GLOBALS[
"ilLog"]->write(json_encode($this->getTypes(
"cmix",
"5.1.0"), JSON_PRETTY_PRINT));
171 $this->readData($a_entity, $a_schema_version, $a_ids);
173 $id = (
int) $this->data[
"Id"];
176 $objTypeAndId =
"cmix_" .
$id;
177 $this->_archive[
'directories'] = [
180 "archiveDir" => time() .
"__" .
IL_INST_ID .
"__" . $objTypeAndId
182 "moduleDir" =>
"cmix_" .
$id
185 $this->_archive[
'files'] = [
186 "properties" =>
"properties.xml",
187 "metadata" =>
"metadata.xml",
188 "manifest" =>
'manifest.xml',
190 if (
false !== strpos($this->data[
'SourceType'],
'local')) {
191 $this->_archive[
'files'][
'content'] =
"content.zip";
203 if (isset($this->_archive[
'files'][
'content'])) {
205 $DIC->legacyArchives()->zip(
207 $exportArchiveDir . $this->_archive[
'files'][
'content'],
215 $exportArchiveDir . $this->_archive[
'files'][
'properties'],
216 $this->buildProperties($a_entity, $a_omit_header)
220 $fileName = $this->_archive[
'directories'][
'exportDir'] .
"/" . $this->_archive[
'directories'][
'archiveDir'] .
".zip";
231 protected function getTypes(
string $a_entity,
string $a_version): array
234 foreach ($this->_cmixSettingsProperties as $key => $value) {
235 $types[$key] = $value[
"db_type"];
238 if ($a_entity ==
"cmix") {
239 switch ($a_version) {
242 foreach ($this->_cmixSettingsProperties as $key => $value) {
243 $types[$key] = $value[
"db_type"];
252 public function readData(
string $a_entity,
string $a_version, array $a_ids): void
256 if (!is_array($a_ids)) {
257 $a_ids = array($a_ids);
261 if ($a_entity ==
"cmix") {
262 switch ($a_version) {
264 $this->getDirectDataFromQuery(
"SELECT obj_id id, title, description " .
265 " FROM object_data " .
267 $DIC->database()->in(
"obj_id", $a_ids,
false,
"integer"));
272 foreach ($this->data as $key =>
$data) {
273 $query =
"SELECT " . implode(
",", array_keys($this->_element_db_mapping)) .
" ";
274 $query .=
"FROM `cmix_settings` ";
275 $query .=
"WHERE " .
$DIC->database()->in(
"obj_id", $a_ids,
false,
"integer");
276 $result =
$DIC->database()->query($query);
278 if ($dataset =
$DIC->database()->fetchAssoc($result)) {
279 $this->_data = $dataset;
283 foreach ($this->_data as $dbColName => $value) {
284 $attr = $this->_element_db_mapping[$dbColName];
285 $this->data[$key][$attr] = $value;
289 $this->data = $this->data[0];
303 $manWriter->xmlHeader();
304 foreach ($this->_archive[
'files'] as $key => $value) {
305 $manWriter->xmlElement($key,
null, $value,
true,
true);
307 #$manWriter->appendXML ("</content>\n");
308 return $manWriter->xmlDumpMem(
true);
311 private function buildProperties(mixed $a_entity,
bool $a_omit_header =
false): string
315 "InstallationUrl" => ILIAS_HTTP_PATH,
316 "TopEntity" => $a_entity
321 $writer->xmlStartTag(
'DataSet', $atts);
323 if (!$a_omit_header) {
324 $writer->xmlHeader();
327 foreach ($this->data as $key => $value) {
328 $writer->xmlElement($key,
null, $value,
true,
true);
331 $writer->xmlEndTag(
"DataSet");
333 return $writer->xmlDumpMem(
true);
341 string $a_schema_version
347 if ($new_id = $a_mapping->
getMapping(
'components/ILIAS/Container',
'objs', $a_rec[
'Id'])) {
351 $newObj->setType(
"cmix");
352 $newObj->create(
true);
355 $newObj->setTitle($a_rec[
"Title"]);
356 $newObj->setDescription($a_rec[
"Description"]);
360 $a_mapping->
addMapping(
"components/ILIAS/CmiXapi",
"cmix", $a_rec[
"Id"], (
string) $newObj->getId());
362 "components/ILIAS/MetaData",
364 $a_rec[
"Id"] .
":0:cmix",
365 $newObj->getId() .
":0:cmix"
377 return array(
"5.1.0");
385 return "http://www.ilias.de/xml/Modules/CmiXapi/" . $a_entity;
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
getSupportedVersions()
Get supported versions.
array $_cmixSettingsProperties
getXmlNamespace(string $a_entity, string $a_schema_version)
Get xml namespace.
array $_element_db_mapping
readData(string $a_entity, string $a_version, array $a_ids)
Read data from DB.
getTypes(string $a_entity, string $a_version)
Get field types for entity.
buildProperties(mixed $a_entity, bool $a_omit_header=false)
getDependencies(string $a_entity, string $a_version, ?array $a_rec=null, ?array $a_ids=null)
Determine the dependent sets of data.
importRecord(string $a_entity, array $a_types, array $a_rec, ilImportMapping $a_mapping, string $a_schema_version)
Needs to be overwritten for import use case.
A dataset contains in data in a common structure that can be shared and transformed for different pur...
static _getExportDirectory(int $a_obj_id, string $a_type="xml", string $a_obj_type="", string $a_entity="")
@depricated Get export directory for an repository object
addMapping(string $a_comp, string $a_entity, string $a_old_id, string $a_new_id)
getMapping(string $a_comp, string $a_entity, string $a_old_id)
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc