xref: /plugin/combo/ComboStrap/PageRules.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
137748cd8SNickeau<?php
237748cd8SNickeau
337748cd8SNickeaunamespace ComboStrap;
437748cd8SNickeau
537748cd8SNickeau/**
637748cd8SNickeau * The manager that handles the redirection metadata
737748cd8SNickeau *
837748cd8SNickeau */
937748cd8SNickeauclass PageRules
1037748cd8SNickeau{
1137748cd8SNickeau
1237748cd8SNickeau    // Name of the column
1337748cd8SNickeau    // Used also in the HTML form as name
1437748cd8SNickeau    const ID_NAME = 'ID';
1537748cd8SNickeau    const PRIORITY_NAME = 'PRIORITY';
1637748cd8SNickeau    const MATCHER_NAME = 'MATCHER';
1737748cd8SNickeau    const TARGET_NAME = 'TARGET';
1837748cd8SNickeau    const TIMESTAMP_NAME = 'TIMESTAMP';
1937748cd8SNickeau
20*04fd306cSNickeau    const CANONICAL = "page:rules";
21*04fd306cSNickeau
2237748cd8SNickeau
2337748cd8SNickeau    /**
2437748cd8SNickeau     * Delete Redirection
2537748cd8SNickeau     * @param string $ruleId
2637748cd8SNickeau     */
27c3437056SNickeau    function deleteRule(string $ruleId)
2837748cd8SNickeau    {
2937748cd8SNickeau
30c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
31c3437056SNickeau            ->createRequest()
32918039dbSgerardnico            ->setQueryParametrized('delete from PAGE_RULES where id = ?', [$ruleId]);
33c3437056SNickeau        try {
34c3437056SNickeau            $request->execute();
35*04fd306cSNickeau        } catch (ExceptionCompile $e) {
36c3437056SNickeau            LogUtility::msg("Something went wrong when deleting the redirections. {$e->getMessage()}");
37c3437056SNickeau        } finally {
38c3437056SNickeau            $request->close();
3937748cd8SNickeau        }
4037748cd8SNickeau
4137748cd8SNickeau    }
4237748cd8SNickeau
4337748cd8SNickeau
4437748cd8SNickeau    /**
4537748cd8SNickeau     * Is Redirection of a page Id Present
4637748cd8SNickeau     * @param integer $id
4737748cd8SNickeau     * @return boolean
4837748cd8SNickeau     */
49c3437056SNickeau    function ruleExists($id): bool
5037748cd8SNickeau    {
5137748cd8SNickeau        $id = strtolower($id);
5237748cd8SNickeau
5337748cd8SNickeau
54c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
55c3437056SNickeau            ->createRequest()
56c3437056SNickeau            ->setQueryParametrized("SELECT count(*) FROM PAGE_RULES where ID = ?", [$id]);
57c3437056SNickeau        $count = 0;
58c3437056SNickeau        try {
59c3437056SNickeau            $count = $request
60c3437056SNickeau                ->execute()
61c3437056SNickeau                ->getFirstCellValueAsInt();
62*04fd306cSNickeau        } catch (ExceptionCompile $e) {
63c3437056SNickeau            LogUtility::msg("Error during pattern exist statement. {$e->getMessage()}");
64c3437056SNickeau            return false;
65c3437056SNickeau        } finally {
66c3437056SNickeau            $request->close();
6737748cd8SNickeau        }
68c3437056SNickeau
69c3437056SNickeau        return $count === 1;
7037748cd8SNickeau
7137748cd8SNickeau
7237748cd8SNickeau    }
7337748cd8SNickeau
7437748cd8SNickeau    /**
7537748cd8SNickeau     * Is Redirection of a page Id Present
76c3437056SNickeau     * @param string $pattern
7737748cd8SNickeau     * @return boolean
7837748cd8SNickeau     */
79c3437056SNickeau    function patternExists(string $pattern): bool
8037748cd8SNickeau    {
8137748cd8SNickeau
8237748cd8SNickeau
83c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
84c3437056SNickeau            ->createRequest()
85c3437056SNickeau            ->setQueryParametrized("SELECT count(*) FROM PAGE_RULES where MATCHER = ?", [$pattern]);
86c3437056SNickeau        $count = 0;
87c3437056SNickeau        try {
88c3437056SNickeau            $count = $request->execute()
89c3437056SNickeau                ->getFirstCellValueAsInt();
90*04fd306cSNickeau        } catch (ExceptionCompile $e) {
91c3437056SNickeau            LogUtility::msg("Error during pattern exists query: {$e->getMessage()}");
92c3437056SNickeau            return false;
93c3437056SNickeau        } finally {
94c3437056SNickeau            $request->close();
9537748cd8SNickeau        }
96c3437056SNickeau
97c3437056SNickeau        return $count === 1;
9837748cd8SNickeau
9937748cd8SNickeau
10037748cd8SNickeau    }
10137748cd8SNickeau
10237748cd8SNickeau
10337748cd8SNickeau    /**
10437748cd8SNickeau     * @param $sourcePageId
10537748cd8SNickeau     * @param $targetPageId
10637748cd8SNickeau     * @param $priority
10737748cd8SNickeau     * @return int - the rule id
10837748cd8SNickeau     */
109*04fd306cSNickeau    function addRule($sourcePageId, $targetPageId, $priority): ?int
11037748cd8SNickeau    {
11137748cd8SNickeau        $currentDate = date("c");
11237748cd8SNickeau        return $this->addRuleWithDate($sourcePageId, $targetPageId, $priority, $currentDate);
11337748cd8SNickeau    }
11437748cd8SNickeau
11537748cd8SNickeau    /**
11637748cd8SNickeau     * Add Redirection
11737748cd8SNickeau     * This function was needed to migrate the date of the file conf store
11837748cd8SNickeau     * You would use normally the function addRedirection
11937748cd8SNickeau     * @param string $matcher
12037748cd8SNickeau     * @param string $target
12137748cd8SNickeau     * @param $priority
12237748cd8SNickeau     * @param $creationDate
12337748cd8SNickeau     * @return int - the last id
12437748cd8SNickeau     */
125c3437056SNickeau    function addRuleWithDate($matcher, $target, $priority, $creationDate): ?int
12637748cd8SNickeau    {
12737748cd8SNickeau
12837748cd8SNickeau        $entry = array(
12937748cd8SNickeau            'target' => $target,
13037748cd8SNickeau            'timestamp' => $creationDate,
13137748cd8SNickeau            'matcher' => $matcher,
13237748cd8SNickeau            'priority' => $priority
13337748cd8SNickeau        );
13437748cd8SNickeau
135c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
136c3437056SNickeau            ->createRequest()
137c3437056SNickeau            ->setTableRow('PAGE_RULES', $entry);
138c3437056SNickeau        $lastInsertId = null;
139c3437056SNickeau        try {
140c3437056SNickeau            $lastInsertId = $request->execute()
141c3437056SNickeau                ->getInsertId();
142*04fd306cSNickeau        } catch (ExceptionCompile $e) {
143c3437056SNickeau            LogUtility::msg("There was a problem during Pages Rule insertion. " . $e->getMessage());
144c3437056SNickeau            return null;
145c3437056SNickeau        } finally {
146c3437056SNickeau            $request->close();
14737748cd8SNickeau        }
148c3437056SNickeau
14937748cd8SNickeau        return $lastInsertId;
15037748cd8SNickeau
15137748cd8SNickeau    }
15237748cd8SNickeau
15337748cd8SNickeau    function updateRule($id, $matcher, $target, $priority)
15437748cd8SNickeau    {
15537748cd8SNickeau        $updateDate = date("c");
15637748cd8SNickeau
15737748cd8SNickeau        $entry = array(
15837748cd8SNickeau            'matcher' => $matcher,
15937748cd8SNickeau            'target' => $target,
16037748cd8SNickeau            'priority' => $priority,
16137748cd8SNickeau            'timestamp' => $updateDate,
16237748cd8SNickeau            'íd' => $id
16337748cd8SNickeau        );
16437748cd8SNickeau
16537748cd8SNickeau        $statement = 'update PAGE_RULES set matcher = ?, target = ?, priority = ?, timestamp = ? where id = ?';
166918039dbSgerardnico        $request = Sqlite::createOrGetSqlite()
167918039dbSgerardnico            ->createRequest()
168918039dbSgerardnico            ->setQueryParametrized($statement, $entry);
169918039dbSgerardnico        try {
170918039dbSgerardnico            $request->execute();
171*04fd306cSNickeau        } catch (ExceptionCompile $e) {
172*04fd306cSNickeau            LogUtility::error("There was a problem during the page rules update. Error: {$e->getMessage()}", self::CANONICAL);
173918039dbSgerardnico        } finally {
174918039dbSgerardnico            $request->close();
17537748cd8SNickeau        }
17637748cd8SNickeau
17737748cd8SNickeau    }
17837748cd8SNickeau
17937748cd8SNickeau
18037748cd8SNickeau    /**
18137748cd8SNickeau     * Delete all rules
18237748cd8SNickeau     * Use with caution
18337748cd8SNickeau     */
184*04fd306cSNickeau    public function deleteAll()
18537748cd8SNickeau    {
18637748cd8SNickeau
187918039dbSgerardnico        /** @noinspection SqlWithoutWhere */
188c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
189c3437056SNickeau            ->createRequest()
190c3437056SNickeau            ->setQuery("delete from PAGE_RULES");
191c3437056SNickeau        try {
192c3437056SNickeau            $request->execute();
193*04fd306cSNickeau        } catch (ExceptionCompile $e) {
194c3437056SNickeau            LogUtility::msg('Errors during delete of all redirections. ' . $e->getMessage());
195c3437056SNickeau        } finally {
196c3437056SNickeau            $request->close();
19737748cd8SNickeau        }
198c3437056SNickeau
19937748cd8SNickeau
20037748cd8SNickeau    }
20137748cd8SNickeau
20237748cd8SNickeau    /**
20337748cd8SNickeau     * Return the number of page rules
20437748cd8SNickeau     * @return integer
20537748cd8SNickeau     */
206*04fd306cSNickeau    public function count()
20737748cd8SNickeau    {
20837748cd8SNickeau
209c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
210c3437056SNickeau            ->createRequest()
211c3437056SNickeau            ->setQuery("select count(1) from PAGE_RULES");
212c3437056SNickeau
213c3437056SNickeau        $count = 0;
214c3437056SNickeau        try {
215c3437056SNickeau            $count = $request->execute()
216c3437056SNickeau                ->getFirstCellValueAsInt();
217*04fd306cSNickeau        } catch (ExceptionCompile $e) {
218c3437056SNickeau            LogUtility::msg("Page Rules Count. {$e->getMessage()}");
219c3437056SNickeau            return 0;
220c3437056SNickeau        } finally {
221c3437056SNickeau            $request->close();
22237748cd8SNickeau        }
223c3437056SNickeau
224c3437056SNickeau        return $count;
22537748cd8SNickeau
22637748cd8SNickeau    }
22737748cd8SNickeau
22837748cd8SNickeau
22937748cd8SNickeau    /**
23037748cd8SNickeau     * @return array
23137748cd8SNickeau     */
232*04fd306cSNickeau    public function getRules()
23337748cd8SNickeau    {
23437748cd8SNickeau
235c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
236c3437056SNickeau            ->createRequest()
237918039dbSgerardnico            ->setQuery("select * from PAGE_RULES order by PRIORITY");
238c3437056SNickeau
239c3437056SNickeau        try {
240c3437056SNickeau            return $request->execute()
241c3437056SNickeau                ->getRows();
242*04fd306cSNickeau        } catch (ExceptionCompile $e) {
243c3437056SNickeau            LogUtility::msg("Errors during select of all Page rules. {$e->getMessage()}");
244c3437056SNickeau            return [];
245c3437056SNickeau        } finally {
246c3437056SNickeau            $request->close();
24737748cd8SNickeau        }
24837748cd8SNickeau
24937748cd8SNickeau
25037748cd8SNickeau    }
25137748cd8SNickeau
252c3437056SNickeau    public function getRule($id): array
25337748cd8SNickeau    {
254c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
255c3437056SNickeau            ->createRequest()
256c3437056SNickeau            ->setQueryParametrized("SELECT * FROM PAGE_RULES where ID = ?", [$id]);
257c3437056SNickeau        try {
258c3437056SNickeau            return $request->execute()
259c3437056SNickeau                ->getFirstRow();
260*04fd306cSNickeau        } catch (ExceptionCompile $e) {
261c3437056SNickeau            LogUtility::msg("getRule Error {$e->getMessage()}");
262c3437056SNickeau            return [];
263c3437056SNickeau        } finally {
264c3437056SNickeau            $request->close();
26537748cd8SNickeau        }
26637748cd8SNickeau
267c3437056SNickeau    }
26837748cd8SNickeau
26937748cd8SNickeau
27037748cd8SNickeau}
271