ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilExportOptions.php
Go to the documentation of this file.
1 <?php
25 {
26  private static ?ilExportOptions $instance = null;
27 
28  public const EXPORT_EXISTING = 1;
29  public const EXPORT_BUILD = 2;
30  public const EXPORT_OMIT = 3;
31 
32  public const KEY_INIT = 1;
33  public const KEY_ITEM_MODE = 2;
34  public const KEY_ROOT = 3;
35 
36  private int $export_id = 0;
37  private array $ref_options = array();
38  private array $obj_options = array();
39  private array $options = array();
40 
41  protected ilDBInterface $db;
42 
43  private function __construct(int $a_export_id)
44  {
45  global $DIC;
46 
47  $this->db = $DIC->database();
48  $this->export_id = $a_export_id;
49  if ($this->export_id) {
50  $this->read();
51  }
52  }
53 
54  public static function getInstance(): ?ilExportOptions
55  {
56  if (self::$instance) {
57  return self::$instance;
58  }
59  return null;
60  }
61 
62  public static function newInstance(int $a_export_id): ilExportOptions
63  {
64  return self::$instance = new ilExportOptions($a_export_id);
65  }
66 
67  public static function allocateExportId(): int
68  {
69  global $DIC;
70 
71  $ilDB = $DIC->database();
72 
73  // get last export id
74  $query = 'SELECT MAX(export_id) exp FROM export_options ' .
75  'GROUP BY export_id ';
76  $res = $ilDB->query($query);
77  $exp_id = 1;
78  while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
79  $exp_id = $row->exp + 1;
80  }
81  $query = 'INSERT INTO export_options (export_id,keyword,ref_id,obj_id,value) ' .
82  'VALUES( ' .
83  $ilDB->quote($exp_id, 'integer') . ', ' .
84  $ilDB->quote(self::KEY_INIT, 'integer') . ', ' .
85  $ilDB->quote(0, 'integer') . ', ' .
86  $ilDB->quote(0, 'integer') . ', ' .
87  $ilDB->quote(0, 'integer') . ' ' .
88  ')';
89  $ilDB->manipulate($query);
90  return (int) $exp_id;
91  }
92 
96  public function getSubitemsForCreation(int $a_source_id): array
97  {
98  $refs = array();
99  foreach ((array) $this->ref_options[self::KEY_ITEM_MODE] as $ref_id => $mode) {
100  if ($mode == self::EXPORT_BUILD) {
101  $refs[] = $ref_id;
102  }
103  }
104  return $refs;
105  }
106 
111  public function getSubitemsForExport()
112  {
113  $refs = array();
114  foreach ((array) $this->ref_options[self::KEY_ITEM_MODE] as $ref_id => $mode) {
115  if ($mode != self::EXPORT_OMIT) {
116  $refs[] = (int) $ref_id;
117  }
118  }
119  return $refs;
120  }
121 
122  public function getExportId(): int
123  {
124  return $this->export_id;
125  }
126 
133  public function addOption(int $a_keyword, int $a_ref_id, int $a_obj_id, $a_value): void
134  {
135  $query = "SELECT MAX(pos) position FROM export_options";
136  $res = $this->db->query($query);
137 
138  $pos = 0;
139  while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
140  $pos = (int) $row->position;
141  }
142  $pos++;
143 
144  $query = 'INSERT INTO export_options (export_id,keyword,ref_id,obj_id,value,pos) ' .
145  'VALUES( ' .
146  $this->db->quote($this->getExportId(), 'integer') . ', ' .
147  $this->db->quote($a_keyword, 'integer') . ', ' .
148  $this->db->quote($a_ref_id, 'integer') . ', ' .
149  $this->db->quote($a_obj_id, 'integer') . ', ' .
150  $this->db->quote($a_value, 'integer') . ', ' .
151  $this->db->quote($pos, 'integer') . ' ' .
152  ')';
153  $this->db->manipulate($query);
154  }
155 
160  public function getOption(int $a_keyword)
161  {
162  return $this->options[$a_keyword] ?? null;
163  }
164 
171  public function getOptionByObjId(int $a_obj_id, int $a_keyword)
172  {
173  return $this->obj_options[$a_keyword][$a_obj_id] ?? null;
174  }
175 
182  public function getOptionByRefId(int $a_ref_id, int $a_keyword)
183  {
184  return $this->ref_options[$a_keyword][$a_ref_id] ?? null;
185  }
186 
187  public function delete(): void
188  {
189  $query = "DELETE FROM export_options " .
190  "WHERE export_id = " . $this->db->quote($this->getExportId(), 'integer');
191  $this->db->manipulate($query);
192  }
193 
194  public function read(): void
195  {
196  $this->options = array();
197  $this->obj_options = array();
198  $this->ref_options = array();
199 
200  $query = "SELECT * FROM export_options " .
201  "WHERE export_id = " . $this->db->quote($this->getExportId(), 'integer') . ' ' .
202  "ORDER BY pos";
203  $res = $this->db->query($query);
204  while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
205  if ($row->ref_id) {
206  $this->ref_options[(int) $row->keyword][(int) $row->ref_id] = $row->value;
207  }
208  if ($row->obj_id) {
209  $this->obj_options[(int) $row->keyword][(int) $row->obj_id] = $row->value;
210  }
211  if (!$row->ref_id and !$row->obj_id) {
212  $this->options[(int) $row->keyword] = $row->value;
213  }
214  }
215  }
216 }
getOptionByRefId(int $a_ref_id, int $a_keyword)
Get option by.
$res
Definition: ltiservices.php:69
static newInstance(int $a_export_id)
getSubitemsForExport()
Get all subitems with mode != self::EXPORT_OMIT.
addOption(int $a_keyword, int $a_ref_id, int $a_obj_id, $a_value)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static ilExportOptions $instance
global $DIC
Definition: feed.php:28
getSubitemsForCreation(int $a_source_id)
Get all subitems with mode ilExportOptions::EXPORT_BUILD
$ref_id
Definition: ltiauth.php:67
$query
__construct(int $a_export_id)
getOption(int $a_keyword)
getOptionByObjId(int $a_obj_id, int $a_keyword)
Get option by.