19declare(strict_types=1);
42 $q = $this->db->queryF(
43 'SELECT 1 FROM ' . self::TABLE_NAME .
' WHERE id = %s',
48 return $q->numRows() > 0;
50 public function has(
string $shortlink): bool
52 $q = $this->db->queryF(
53 'SELECT 1 FROM ' . self::TABLE_NAME .
' WHERE alias = %s',
58 return $q->numRows() > 0;
63 json_decode((
string) $row[
'target_type_data'],
true);
64 $target_type_data =
new TypeData([]);
65 $target_type_data->unserialize($row[
'target_type_data']);
71 (
int) $row[
'position'],
72 (
bool) $row[
'active'],
80 $q = $this->db->queryF(
81 'SELECT * FROM ' . self::TABLE_NAME .
' WHERE alias = %s',
85 $row = $this->db->fetchAssoc(
$q);
91 $q = $this->db->queryF(
92 'SELECT * FROM ' . self::TABLE_NAME .
' WHERE id = %s',
96 $row = $this->db->fetchAssoc(
$q);
114 if (empty($shortlink->
getId())) {
116 $this->db->manipulateF(
117 'UPDATE ' . self::TABLE_NAME .
' SET position = position + 1 WHERE position >= %s',
122 $shortlink = $shortlink->
withId(
146 return $this->db->manipulateF(
147 'DELETE FROM ' . self::TABLE_NAME .
' WHERE id = %s',
149 [$shortlink->getId()]
153 public function getRange(
int $start,
int $limit): \Generator
155 throw new \RuntimeException(
'Not implemented yet');
160 $q = $this->db->query(
161 'SELECT * FROM ' . self::TABLE_NAME .
' ORDER BY position ASC'
163 while ($row = $this->db->fetchAssoc(
$q)) {
170 $q = $this->db->query(
171 'SELECT COUNT(*) AS cnt FROM ' . self::TABLE_NAME
173 $row = $this->db->fetchAssoc(
$q);
174 return (
int) $row[
'cnt'];
186 return $this->type_data_resolver;
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
store(Shortlink $shortlink)
rowToShortlink(array $row)
blank(Type $type=Type::REPO)
getRange(int $start, int $limit)
increaseUsage(Shortlink $shortlink)
__construct(private readonly \ilDBInterface $db, private TypeDataResolver $type_data_resolver)
getByAlias(string $shortlink)