ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.arConnectorCache.php
Go to the documentation of this file.
1 <?php
2 
22 
27 class arConnectorCache extends arConnector implements Request
28 {
30 
35  public function __construct(private arConnector $arConnector)
36  {
37  global $DIC;
38  $this->cache_container = $DIC->globalCache()->get($this);
39  }
40 
41  protected function buildCacheKey(ActiveRecord $activeRecord): string
42  {
43  return $activeRecord->getConnectorContainerName() . "_" . $activeRecord->getPrimaryFieldValue();
44  }
45 
46  public function getContainerKey(): string
47  {
48  return 'ar_cache';
49  }
50 
51  public function isForced(): bool
52  {
53  return false;
54  }
55 
59  public function nextID(ActiveRecord $activeRecord)
60  {
61  return $this->arConnector->nextID($activeRecord);
62  }
63 
64  public function checkConnection(ActiveRecord $activeRecord): bool
65  {
66  return $this->arConnector->checkConnection($activeRecord);
67  }
68 
69  public function installDatabase(ActiveRecord $activeRecord, array $fields): bool
70  {
71  return $this->arConnector->installDatabase($activeRecord, $fields);
72  }
73 
74  public function updateDatabase(ActiveRecord $activeRecord): bool
75  {
76  return $this->arConnector->updateDatabase($activeRecord);
77  }
78 
79  public function resetDatabase(ActiveRecord $activeRecord): bool
80  {
81  return $this->arConnector->resetDatabase($activeRecord);
82  }
83 
84  public function truncateDatabase(ActiveRecord $activeRecord): bool
85  {
86  return $this->arConnector->truncateDatabase($activeRecord);
87  }
88 
89  public function checkTableExists(ActiveRecord $activeRecord): bool
90  {
91  return $this->arConnector->checkTableExists($activeRecord);
92  }
93 
94  public function checkFieldExists(ActiveRecord $activeRecord, string $field_name): bool
95  {
96  return $this->arConnector->checkFieldExists($activeRecord, $field_name);
97  }
98 
99  public function removeField(ActiveRecord $activeRecord, string $field_name): bool
100  {
101  return $this->arConnector->removeField($activeRecord, $field_name);
102  }
103 
104  public function renameField(ActiveRecord $activeRecord, string $old_name, string $new_name): bool
105  {
106  return $this->arConnector->renameField($activeRecord, $old_name, $new_name);
107  }
108 
109  public function create(ActiveRecord $activeRecord): void
110  {
111  $this->arConnector->create($activeRecord);
112  $this->storeActiveRecordInCache($activeRecord);
113  }
114 
118  public function read(ActiveRecord $activeRecord): array
119  {
120  $key = $this->buildCacheKey($activeRecord);
121  if ($this->cache_container->has($key)) {
122  $cached_value = $this->cache_container->get(
123  $key,
124  new Transformation(function ($value): ?array {
125  return is_array($value) ? $value : null;
126  })
127  );
128  if (is_array($cached_value)) {
129  return array_map(function ($result): \stdClass {
130  return (object) $result;
131  }, $cached_value);
132  }
133  }
134 
135  $results = $this->arConnector->read($activeRecord);
136 
137  $this->cache_container->set(
138  $key,
139  array_map(function ($result): array {
140  return (array) $result;
141  }, $results)
142  );
143 
144  return $results;
145  }
146 
147  public function update(ActiveRecord $activeRecord): void
148  {
149  $this->arConnector->update($activeRecord);
150  $this->storeActiveRecordInCache($activeRecord);
151  }
152 
153  public function delete(ActiveRecord $activeRecord): void
154  {
155  $this->arConnector->delete($activeRecord);
156  $key = $this->buildCacheKey($activeRecord);
157  $this->cache_container->delete($key);
158  }
159 
163  public function readSet(ActiveRecordList $activeRecordList): array
164  {
165  return $this->arConnector->readSet($activeRecordList);
166  }
167 
168  public function affectedRows(ActiveRecordList $activeRecordList): int
169  {
170  return $this->arConnector->affectedRows($activeRecordList);
171  }
172 
176  public function quote($value, string $type): string
177  {
178  return $this->arConnector->quote($value, $type);
179  }
180 
181  public function updateIndices(ActiveRecord $activeRecord): void
182  {
183  $this->arConnector->updateIndices($activeRecord);
184  }
185 
189  private function storeActiveRecordInCache(ActiveRecord $activeRecord): void
190  {
191  $key = $this->buildCacheKey($activeRecord);
192  $value = $activeRecord->asArray();
193 
194  $this->cache_container->set($key, $value);
195  }
196 }
installDatabase(ActiveRecord $activeRecord, array $fields)
removeField(ActiveRecord $activeRecord, string $field_name)
quote(mixed $value, string $type)
Transform values according to custom configuration.
resetDatabase(ActiveRecord $activeRecord)
installDatabase(ActiveRecord $activeRecord, array $fields)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
renameField(ActiveRecord $activeRecord, string $old_name, string $new_name)
read(ActiveRecord $activeRecord)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
checkTableExists(ActiveRecord $activeRecord)
resetDatabase(ActiveRecord $activeRecord)
update(ActiveRecord $activeRecord)
updateDatabase(ActiveRecord $activeRecord)
checkConnection(ActiveRecord $activeRecord)
nextID(ActiveRecord $activeRecord)
create(ActiveRecord $activeRecord)
readSet(ActiveRecordList $activeRecordList)
truncateDatabase(ActiveRecord $activeRecord)
delete(ActiveRecord $activeRecord)
update(ActiveRecord $activeRecord)
checkFieldExists(ActiveRecord $activeRecord, string $field_name)
nextID(ActiveRecord $activeRecord)
buildCacheKey(ActiveRecord $activeRecord)
read(ActiveRecord $activeRecord)
removeField(ActiveRecord $activeRecord, string $field_name)
affectedRows(ActiveRecordList $activeRecordList)
updateDatabase(ActiveRecord $activeRecord)
getConnectorContainerName()
Return the Name of your Connector Table
create(ActiveRecord $activeRecord)
global $DIC
Definition: shib_login.php:25
storeActiveRecordInCache(ActiveRecord $activeRecord)
Stores an active record into the Cache.
__construct(private arConnector $arConnector)
ilGSStorageCache constructor.
Class ilGSStorageCache.
$results
checkConnection(ActiveRecord $activeRecord)
updateIndices(ActiveRecord $activeRecord)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
quote($value, string $type)
readSet(ActiveRecordList $activeRecordList)
checkTableExists(ActiveRecord $activeRecord)
affectedRows(ActiveRecordList $activeRecordList)
updateIndices(ActiveRecord $activeRecord)
checkFieldExists(ActiveRecord $activeRecord, string $field_name)
truncateDatabase(ActiveRecord $activeRecord)
renameField(ActiveRecord $activeRecord, string $old_name, string $new_name)