3 declare(strict_types=1);
30 $this->db_table =
"sahs_lm";
33 "Id" => [
"db_col" =>
"id",
"db_type" =>
"integer"],
34 "APIAdapterName" => [
"db_col" =>
"api_adapter",
"db_type" =>
"text"],
35 "APIFunctionsPrefix" => [
"db_col" =>
"api_func_prefix",
"db_type" =>
"text"],
36 "AssignedGlossary" => [
"db_col" =>
"glossary",
"db_type" =>
"integer"],
37 "AutoContinue" => [
"db_col" =>
"auto_continue",
"db_type" =>
"text"],
38 "AutoReviewChar" => [
"db_col" =>
"auto_review",
"db_type" =>
"text"],
39 "AutoSuspend" => [
"db_col" =>
"auto_suspend",
"db_type" =>
"text"],
40 "Auto_last_visited" => [
"db_col" =>
"auto_last_visited",
"db_type" =>
"text"],
41 "Check_values" => [
"db_col" =>
"check_values",
"db_type" =>
"text"],
42 "Comments" => [
"db_col" =>
"comments",
"db_type" =>
"text"],
43 "CreditMode" => [
"db_col" =>
"credit",
"db_type" =>
"text"],
44 "Debug" => [
"db_col" =>
"debug",
"db_type" =>
"text"],
45 "DebugPw" => [
"db_col" =>
"debugpw",
"db_type" =>
"text"],
46 "DefaultLessonMode" => [
"db_col" =>
"default_lesson_mode",
"db_type" =>
"text"],
47 "Editable" => [
"db_col" =>
"editable",
"db_type" =>
"integer"],
48 "Fourth_edition" => [
"db_col" =>
"fourth_edition",
"db_type" =>
"text"],
49 "Height" => [
"db_col" =>
"height",
"db_type" =>
"integer"],
50 "HideNavig" => [
"db_col" =>
"hide_navig",
"db_type" =>
"text"],
51 "Ie_force_render" => [
"db_col" =>
"ie_force_render",
"db_type" =>
"text"],
52 "Interactions" => [
"db_col" =>
"interactions",
"db_type" =>
"text"],
53 "Localization" => [
"db_col" =>
"localization",
"db_type" =>
"text"],
54 "MasteryScore" => [
"db_col" =>
"mastery_score",
"db_type" =>
"integer"],
55 "MaxAttempt" => [
"db_col" =>
"max_attempt",
"db_type" =>
"integer"],
56 "ModuleVersion" => [
"db_col" =>
"module_version",
"db_type" =>
"integer"],
57 "NoMenu" => [
"db_col" =>
"no_menu",
"db_type" =>
"text"],
58 "Objectives" => [
"db_col" =>
"objectives",
"db_type" =>
"text"],
59 "OfflineMode" => [
"db_col" =>
"offline_mode",
"db_type" =>
"text"],
60 "OpenMode" => [
"db_col" =>
"open_mode",
"db_type" =>
"integer"],
61 "Sequencing" => [
"db_col" =>
"sequencing",
"db_type" =>
"text"],
62 "SequencingExpertMode" => [
"db_col" =>
"seq_exp_mode",
"db_type" =>
"integer"],
63 "Session" => [
"db_col" =>
"unlimited_session",
"db_type" =>
"text"],
64 "StyleSheetId" => [
"db_col" =>
"stylesheet",
"db_type" =>
"integer"],
65 "SubType" => [
"db_col" =>
"c_type",
"db_type" =>
"text"],
66 "Time_from_lms" => [
"db_col" =>
"time_from_lms",
"db_type" =>
"text"],
67 "Tries" => [
"db_col" =>
"question_tries",
"db_type" =>
"integer"],
68 "Width" => [
"db_col" =>
"width",
"db_type" =>
"integer"],
69 "IdSetting" => [
"db_col" =>
"id_setting",
"db_type" =>
"integer"],
70 "NameSetting" => [
"db_col" =>
"name_setting",
"db_type" =>
"integer"]
73 $this->element_db_mapping = [];
74 foreach ($this->properties as
$key => $value) {
75 $this->element_db_mapping [$value[
"db_col"]] =
$key;
88 public function writeData(
string $a_entity,
string $a_version,
int $a_id, array
$data): void
91 $ilDB = $DIC->database();
93 if (count($data) > 0) {
95 foreach ($this->properties as
$key => $value) {
96 if (
$key ===
"Id" ||
$key ===
"title" ||
$key ===
"description") {
100 if (
$key ===
"MasteryScore" && isset($data[
$key][0]) && $data[$key][0] == 0) {
103 if ($key ===
"Localization" && isset($data[$key][0]) && $data[$key][0] ==
"") {
107 if ( isset( $data[ $key ] ) ) {
109 if ( is_array( $data[ $key ] ) ) {
110 $data_value = $data[
$key ][ 0 ] ??
'';
113 $data_value = $data[
$key ];
115 $columns [ $value[
"db_col" ] ] = [
121 if (is_array($columns)) {
122 if (count($columns) > 0) {
123 $conditions [
"id"] = [
"integer", $a_id];
124 $ilDB->update($this->db_table, $columns, $conditions);
129 $od_table =
"object_data";
131 "Title" => [
"db_col" =>
"title",
"db_type" =>
"text"],
132 "Description" => [
"db_col" =>
"description",
"db_type" =>
"text"]
134 foreach ($od_properties as
$key => $value) {
135 if ( isset( $data[
$key ] ) ) {
137 if ( is_array( $data[ $key ] ) ) {
138 $data_value = $data[
$key ][ 0 ] ??
'';
141 $data_value = $data[
$key ];
143 $od_columns [ $value[
"db_col" ] ] = [
149 if (isset($od_columns) && is_array($od_columns)) {
150 if (count($od_columns) > 0) {
151 $od_conditions [
"obj_id"] = [
"integer", $a_id];
152 $ilDB->update(
"object_data", $od_columns, $od_conditions);
157 $ilLog->write(
"no module properties for imported object");
166 string $a_schema_version,
168 string $a_field =
"",
169 bool $a_omit_header =
false,
170 bool $a_omit_types =
false 172 $GLOBALS[
'DIC'][
"ilLog"]->write(json_encode($this->
getTypes(
"sahs",
"5.1.0"), JSON_PRETTY_PRINT));
176 $this->
readData($a_entity, $a_schema_version, $a_ids, $a_field =
"");
177 $id = (
int) $this->data[
"id"];
181 $objTypeAndId =
"sahs_" .
$id;
182 $this->_archive[
'directories'] = [
185 ,
"archiveDir" => time() .
"__" .
IL_INST_ID .
"__" . $objTypeAndId
186 ,
"moduleDir" => $objTypeAndId
189 $this->_archive[
'files'] = [
190 "properties" =>
"properties.xml",
191 "metadata" =>
"metadata.xml",
192 "manifest" =>
'manifest.xml',
193 'scormFile' =>
"content.zip" 197 if (!file_exists($this->_archive[
'directories'][
'exportDir'])) {
198 mkdir($this->_archive[
'directories'][
'exportDir'], 0755,
true);
201 if (!file_exists($this->_archive[
'directories'][
'tempDir'])) {
202 mkdir($this->_archive[
'directories'][
'tempDir'], 0755,
true);
207 $this->_archive[
'directories'][
'tempDir'] .
"/" . $this->_archive[
'files'][
'metadata'],
213 $this->_archive[
'directories'][
'tempDir'] .
"/" . $this->_archive[
'files'][
'manifest'],
218 if (isset($this->_archive[
'files'][
'scormFile'])) {
220 ilFileUtils::zip($lmDir, $this->_archive[
'directories'][
'tempDir'] .
"/" . $this->_archive[
'files'][
'scormFile'],
true);
225 $this->_archive[
'directories'][
'tempDir'] .
"/" . $this->_archive[
'files'][
'properties'],
230 $fileName = $this->_archive[
'directories'][
'exportDir'] .
"/" . $this->_archive[
'directories'][
'archiveDir'] .
".zip";
232 if ($zArchive->open($fileName, ZipArchive::CREATE) !==
true) {
233 exit(
"cannot open <$fileName>\n");
236 $this->_archive[
'directories'][
'tempDir'] .
"/" . $this->_archive[
'files'][
'properties'],
237 $this->_archive[
'directories'][
'archiveDir'] .
'/properties.xml' 240 $this->_archive[
'directories'][
'tempDir'] .
"/" . $this->_archive[
'files'][
'manifest'],
241 $this->_archive[
'directories'][
'archiveDir'] .
'/' .
"manifest.xml" 244 $this->_archive[
'directories'][
'tempDir'] .
"/" . $this->_archive[
'files'][
'metadata'],
245 $this->_archive[
'directories'][
'archiveDir'] .
'/' .
"metadata.xml" 247 if (isset($this->_archive[
'files'][
'scormFile'])) {
249 $this->_archive[
'directories'][
'tempDir'] .
"/" . $this->_archive[
'files'][
'scormFile'],
250 $this->_archive[
'directories'][
'archiveDir'] .
'/content.zip' 256 unlink($this->_archive[
'directories'][
'tempDir'] .
"/metadata.xml");
257 unlink($this->_archive[
'directories'][
'tempDir'] .
"/manifest.xml");
258 unlink($this->_archive[
'directories'][
'tempDir'] .
"/properties.xml");
259 if (isset($this->_archive[
'files'][
'scormFile']) && file_exists($this->_archive[
'directories'][
'tempDir'] .
"/content.zip")) {
260 unlink($this->_archive[
'directories'][
'tempDir'] .
"/content.zip");
272 protected function getTypes(
string $a_entity,
string $a_version): array
274 if ($a_entity ===
"sahs") {
275 switch ($a_version) {
278 foreach ($this->properties as
$key => $value) {
279 $types[
$key] = $value[
"db_type"];
287 public function readData(
string $a_entity,
string $a_version, array $a_ids,
string $a_field =
""): void
290 $ilDB = $DIC->database();
292 $obj_id = (
int) $a_ids[0];
294 foreach ($this->properties as $property) {
295 $columns[] = $property[
"db_col"];
298 $query =
"SELECT " . implode(
",", $columns) .
" FROM " .
$this->db_table;
299 $query .=
" WHERE id=" .
$ilDB->quote($obj_id,
"integer");
300 $result =
$ilDB->query($query);
302 if ($dataset =
$ilDB->fetchAssoc($result)) {
303 $this->data = $dataset;
306 $query =
"SELECT title,description FROM object_data";
307 $query .=
" WHERE obj_id=" .
$ilDB->quote($obj_id,
"integer");
308 $result =
$ilDB->query($query);
309 while ($dataset =
$ilDB->fetchAssoc($result)) {
310 $this->data [
"title"] = $dataset[
"title"];
311 $this->data [
"description"] = $dataset[
"description"];
320 if ($db_col_name ===
"title") {
323 if ($db_col_name ===
"description") {
324 return "Description";
326 return $this->element_db_mapping[$db_col_name];
331 $md2xml =
new ilMD2XML($id, $id,
"sahs");
332 $md2xml->startExport();
333 return $md2xml->getXML();
339 protected function getXmlNamespace(
string $a_entity,
string $a_schema_version): string
341 return "http://www.ilias.de/xml/Modules/ScormAicc/" . $a_entity;
358 $manWriter->xmlHeader();
359 foreach ($this->_archive[
'files'] as
$key => $value) {
360 $manWriter->xmlElement(
$key, null, $value,
true,
true);
363 return $manWriter->xmlDumpMem(
true);
375 if (!$a_omit_header) {
376 $writer->xmlHeader();
379 $writer->appendXML(
"\n");
380 $writer->xmlStartTag(
'DataSet', array(
382 "InstallationUrl" => ILIAS_HTTP_PATH,
383 "TopEntity" => $a_entity
386 $writer->appendXML(
"\n");
388 foreach ($this->data as
$key => $value) {
390 $writer->appendXML(
"\n");
393 $writer->xmlEndTag(
"DataSet");
395 return $writer->xmlDumpMem(
false);
static getWebspaceDir(string $mode="filesystem")
get webspace directory
getDependencies(string $a_entity, string $a_version, ?array $a_rec=null, ?array $a_ids=null)
static getLogger(string $a_component_id)
Get component logger.
getTypes(string $a_entity, string $a_version)
Get field types for entity.
getXmlNamespace(string $a_entity, string $a_schema_version)
Get xml namespace.
array $element_db_mapping
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getExportDirectory(int $a_obj_id, string $a_type="xml", string $a_obj_type="", string $a_entity="")
Get export directory for an repository object.
getExtendedXmlRepresentation(string $a_entity, string $a_schema_version, array $a_ids, string $a_field="", bool $a_omit_header=false, bool $a_omit_types=false)
own getXmlRepresentation function to embed zipfile in xml
writeData(string $a_entity, string $a_version, int $a_id, array $data)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
buildProperties($a_entity, bool $a_omit_header=false)
static zip(string $a_dir, string $a_file, bool $compress_content=false)
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
readData(string $a_entity, string $a_version, array $a_ids, string $a_field="")
getElementNameByDbColumn(string $db_col_name)
retrieve element name by database column name