ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
FlavourDBRepository.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
27 
32 {
33  protected const TABLE_NAME = 'il_resource_flavour';
34  protected const F_RESOURCE_ID = 'rid';
35  protected const F_REVISION = 'revision';
36  protected const F_DEFINITION = 'definition_id';
37  protected const F_VARIANT = 'variant';
38  private array $results_cache = [];
39  private \ilDBInterface $db;
40 
41  public function __construct(\ilDBInterface $db)
42  {
43  $this->db = $db;
44  }
45 
46 
47  public function has(ResourceIdentification $rid, int $revision, FlavourDefinition $definition): bool
48  {
49  return $this->buildResult($rid, $revision, $definition, false)->numRows() > 0;
50  }
51 
52  public function store(Flavour $flavour): void
53  {
54  if (!$this->has($flavour->getResourceId(), $flavour->getRevision(), $flavour->getDefinition())) {
55  $this->db->insert(
56  self::TABLE_NAME,
57  [
58  self::F_RESOURCE_ID => ['text', $flavour->getResourceId()->serialize()],
59  self::F_REVISION => ['integer', $flavour->getRevision()],
60  self::F_DEFINITION => ['text', $flavour->getDefinition()->getId()],
61  self::F_VARIANT => ['text', $flavour->getDefinition()->getVariantName() ?? '']
62  ]
63  );
64  }
65  }
66 
67  public function get(ResourceIdentification $rid, int $revision, FlavourDefinition $definition): Flavour
68  {
69  return new Flavour(
70  $definition,
71  $rid,
72  $revision
73  );
74  }
75 
76 
77  public function delete(Flavour $flavour): void
78  {
79  $rid = $flavour->getResourceId();
80  $definition = $flavour->getDefinition();
81 
82  $r = $this->db->manipulateF(
83  "DELETE FROM " . self::TABLE_NAME
84  . " WHERE " . self::F_RESOURCE_ID . " = %s AND "
85  . self::F_REVISION . " = %s AND "
86  . self::F_DEFINITION . " = %s AND (" . self::F_VARIANT . " = %s OR " . self::F_VARIANT . " IS NULL)",
87  ['text', 'integer', 'text', 'text'],
88  [$rid->serialize(), $flavour->getRevision(), $definition->getId(), $definition->getVariantName()]
89  );
90  }
91 
92 
93  public function preload(array $identification_strings): void
94  {
95  // TODO: Implement preload() method.
96  }
97 
98  public function populateFromArray(array $data): void
99  {
100  // TODO: Implement populateFromArray() method.
101  }
102 
103 
104  private function buildResult(
106  int $revision,
107  FlavourDefinition $definition,
108  bool $use_cache = true
109  ): \ilDBStatement {
110  $rcache = $rid->serialize() . $definition->getId() . $definition->getVariantName();
111  if ($use_cache && isset($this->results_cache[$rcache])) {
112  return $this->results_cache[$rcache];
113  }
114 
115  $r = $this->db->queryF(
116  "SELECT * FROM " . self::TABLE_NAME
117  . " WHERE " . self::F_RESOURCE_ID . " = %s AND "
118  . self::F_REVISION . " = %s AND "
119  . self::F_DEFINITION . " = %s AND (" . self::F_VARIANT . " = %s OR " . self::F_VARIANT . " IS NULL)",
120  [
121  'text',
122  'integer',
123  'text',
124  'text'
125  ],
126  [
127  $rid->serialize(),
128  $revision,
129  $definition->getId(),
130  $definition->getVariantName() ?? ''
131  ]
132  );
133  return $this->results_cache[$rcache] = $r;
134  }
135 }
getVariantName()
If a definition can be used in several variants (e.g.
buildResult(ResourceIdentification $rid, int $revision, FlavourDefinition $definition, bool $use_cache=true)
has(ResourceIdentification $rid, int $revision, FlavourDefinition $definition)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$r