ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
class.ilExportOptions.php
Go to the documentation of this file.
1<?php
2
26{
27 private static ?ilExportOptions $instance = null;
28
29 public const EXPORT_EXISTING = 1;
30 public const EXPORT_BUILD = 2;
31 public const EXPORT_OMIT = 3;
32
33 public const KEY_INIT = 1;
34 public const KEY_ITEM_MODE = 2;
35 public const KEY_ROOT = 3;
36
37 private int $export_id = 0;
38 private array $ref_options = array();
39 private array $obj_options = array();
40 private array $options = array();
41
42 protected ilDBInterface $db;
43
44 private function __construct(int $a_export_id)
45 {
46 global $DIC;
47
48 $this->db = $DIC->database();
49 $this->export_id = $a_export_id;
50 if ($this->export_id) {
51 $this->read();
52 }
53 }
54
55 public static function getInstance(): ?ilExportOptions
56 {
57 if (self::$instance) {
58 return self::$instance;
59 }
60 return null;
61 }
62
63 public static function newInstance(int $a_export_id): ilExportOptions
64 {
65 return self::$instance = new ilExportOptions($a_export_id);
66 }
67
68 public static function allocateExportId(): int
69 {
70 global $DIC;
71
72 $ilDB = $DIC->database();
73
74 // get last export id
75 $query = 'SELECT MAX(export_id) exp FROM export_options ' .
76 'GROUP BY export_id ';
77 $res = $ilDB->query($query);
78 $exp_id = 1;
79 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
80 $exp_id = $row->exp + 1;
81 }
82 $query = 'INSERT INTO export_options (export_id,keyword,ref_id,obj_id,value) ' .
83 'VALUES( ' .
84 $ilDB->quote($exp_id, 'integer') . ', ' .
85 $ilDB->quote(self::KEY_INIT, 'integer') . ', ' .
86 $ilDB->quote(0, 'integer') . ', ' .
87 $ilDB->quote(0, 'integer') . ', ' .
88 $ilDB->quote(0, 'integer') . ' ' .
89 ')';
90 $ilDB->manipulate($query);
91 return (int) $exp_id;
92 }
93
97 public function getSubitemsForCreation(int $a_source_id): array
98 {
99 $refs = array();
100 foreach ((array) $this->ref_options[self::KEY_ITEM_MODE] as $ref_id => $mode) {
101 if ($mode == self::EXPORT_BUILD) {
102 $refs[] = $ref_id;
103 }
104 }
105 return $refs;
106 }
107
112 public function getSubitemsForExport()
113 {
114 $refs = array();
115 foreach ((array) $this->ref_options[self::KEY_ITEM_MODE] as $ref_id => $mode) {
116 if ($mode != self::EXPORT_OMIT) {
117 $refs[] = (int) $ref_id;
118 }
119 }
120 return $refs;
121 }
122
123 public function getExportId(): int
124 {
125 return $this->export_id;
126 }
127
134 public function addOption(int $a_keyword, int $a_ref_id, int $a_obj_id, $a_value): void
135 {
136 $query = "SELECT MAX(pos) position FROM export_options";
137 $res = $this->db->query($query);
138
139 $pos = 0;
140 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
141 $pos = (int) $row->position;
142 }
143 $pos++;
144
145 $query = 'INSERT INTO export_options (export_id,keyword,ref_id,obj_id,value,pos) ' .
146 'VALUES( ' .
147 $this->db->quote($this->getExportId(), ilDBConstants::T_INTEGER) . ', ' .
148 $this->db->quote($a_keyword, ilDBConstants::T_INTEGER) . ', ' .
149 $this->db->quote($a_ref_id, ilDBConstants::T_INTEGER) . ', ' .
150 $this->db->quote($a_obj_id, ilDBConstants::T_INTEGER) . ', ' .
151 $this->db->quote($a_value, ilDBConstants::T_INTEGER) . ', ' .
152 $this->db->quote($pos, ilDBConstants::T_INTEGER) . ' ' .
153 ')';
154 $this->db->manipulate($query);
155 }
156
157 public function addOptions(
158 int $parent_ref_id,
159 ilObjectDefinition $object_definition,
160 ilAccessHandler $il_access,
161 array $child_nodes,
162 array $cp_options
163 ): bool {
164 global $DIC;
165 $items_selected = false;
166 foreach ($child_nodes as $node) {
167 if ($node['type'] === 'rolf') {
168 continue;
169 }
170 if ((int) $node['ref_id'] === $parent_ref_id) {
171 $this->addOption(
173 (int) $node['ref_id'],
174 (int) $node['obj_id'],
176 );
177 continue;
178 }
179 // no export available or no access
180 if (!$object_definition->allowExport($node['type']) || !$il_access->checkAccess(
181 'write',
182 '',
183 (int) $node['ref_id']
184 )) {
185 $this->addOption(
187 (int) $node['ref_id'],
188 (int) $node['obj_id'],
190 );
191 continue;
192 }
193
194 $mode = $cp_options[$node['ref_id']]['type'] ?? ilExportOptions::EXPORT_OMIT;
195 $this->addOption(
197 (int) $node['ref_id'],
198 (int) $node['obj_id'],
199 $mode
200 );
201 if ($mode != ilExportOptions::EXPORT_OMIT) {
202 $items_selected = true;
203 }
204 }
205 return $items_selected;
206 }
207
212 public function getOption(int $a_keyword)
213 {
214 return $this->options[$a_keyword] ?? null;
215 }
216
223 public function getOptionByObjId(int $a_obj_id, int $a_keyword)
224 {
225 return $this->obj_options[$a_keyword][$a_obj_id] ?? null;
226 }
227
234 public function getOptionByRefId(int $a_ref_id, int $a_keyword)
235 {
236 return $this->ref_options[$a_keyword][$a_ref_id] ?? null;
237 }
238
239 public function delete(): void
240 {
241 $query = "DELETE FROM export_options " .
242 "WHERE export_id = " . $this->db->quote($this->getExportId(), ilDBConstants::T_INTEGER);
243 $this->db->manipulate($query);
244 }
245
246 public function read(): void
247 {
248 $this->options = array();
249 $this->obj_options = array();
250 $this->ref_options = array();
251
252 $query = "SELECT * FROM export_options " .
253 "WHERE export_id = " . $this->db->quote($this->getExportId(), ilDBConstants::T_INTEGER) . ' ' .
254 "ORDER BY pos";
255 $res = $this->db->query($query);
256 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
257 if ($row->ref_id) {
258 $this->ref_options[(int) $row->keyword][(int) $row->ref_id] = $row->value;
259 }
260 if ($row->obj_id) {
261 $this->obj_options[(int) $row->keyword][(int) $row->obj_id] = $row->value;
262 }
263 if (!$row->ref_id and !$row->obj_id) {
264 $this->options[(int) $row->keyword] = $row->value;
265 }
266 }
267 }
268}
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getOptionByRefId(int $a_ref_id, int $a_keyword)
Get option by.
getSubitemsForCreation(int $a_source_id)
Get all subitems with mode ilExportOptions::EXPORT_BUILD
addOptions(int $parent_ref_id, ilObjectDefinition $object_definition, ilAccessHandler $il_access, array $child_nodes, array $cp_options)
__construct(int $a_export_id)
static newInstance(int $a_export_id)
getSubitemsForExport()
Get all subitems with mode != self::EXPORT_OMIT.
getOption(int $a_keyword)
getOptionByObjId(int $a_obj_id, int $a_keyword)
Get option by.
static ilExportOptions $instance
addOption(int $a_keyword, int $a_ref_id, int $a_obj_id, $a_value)
parses the objects.xml it handles the xml-description of all ilias objects
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
Interface ilDBInterface.
checkAccess(string $a_permission, string $a_cmd, int $a_ref_id, string $a_type="", ?int $a_obj_id=null, ?int $a_tree_id=null)
check access for an object (provide $a_type and $a_obj_id if available for better performance)
$ref_id
Definition: ltiauth.php:66
$res
Definition: ltiservices.php:69
global $DIC
Definition: shib_login.php:26