ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
PageMetricsRepositoryImpl.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
24 use ilDBInterface;
26 
33 {
34  private ilDBInterface $db;
35 
36  public function __construct(ilDBInterface $db)
37  {
38  $this->db = $db;
39  }
40 
41  public function store(PageMetrics $pageMetrics): void
42  {
43  $this->db->replace(
44  'content_page_metrics',
45  [
46  'content_page_id' => ['integer', $pageMetrics->contentPageId()],
47  'page_id' => ['integer', $pageMetrics->pageId()],
48  'lang' => ['text', $pageMetrics->language()],
49  ],
50  [
51  'reading_time' => ['integer', $pageMetrics->readingTime()->minutes()],
52  ]
53  );
54  }
55 
56  public function delete(PageMetrics $pageMetrics): void
57  {
58  $this->db->queryF(
59  'DELETE FROM content_page_metrics WHERE content_page_id = %s AND page_id = %s AND lang = %s',
60  ['integer', 'integer', 'text'],
61  [$pageMetrics->contentPageId(), $pageMetrics->pageId(), $pageMetrics->language()]
62  );
63  }
64 
68  public function findBy(int $contentPageId, int $pageId, string $language): PageMetrics
69  {
70  $res = $this->db->queryF(
71  'SELECT * FROM content_page_metrics WHERE content_page_id = %s AND page_id = %s AND lang = %s',
72  ['integer', 'integer', 'text'],
73  [$contentPageId, $pageId, $language]
74  );
75  $row = $this->db->fetchAssoc($res);
76  if (is_array($row) && isset($row['content_page_id'])) {
77  return new PageMetrics(
78  (int) $row['content_page_id'],
79  (int) $row['page_id'],
80  $row['lang'],
81  new PageReadingTime((int) $row['reading_time'])
82  );
83  }
84 
85  throw CouldNotFindPageMetrics::by($contentPageId, $pageId, $language);
86  }
87 }
static by(int $contentPageId, int $pageId, string $language)
$res
Definition: ltiservices.php:69
findBy(int $contentPageId, int $pageId, string $language)