xref: /plugin/combo/ComboStrap/PageRules.php (revision 70bbd7f1f72440223cc13f3495efdcb2b0a11514)
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
2004fd306cSNickeau    const CANONICAL = "page:rules";
2104fd306cSNickeau
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();
3504fd306cSNickeau        } 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();
6204fd306cSNickeau        } 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();
9004fd306cSNickeau        } 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     */
10904fd306cSNickeau    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();
14204fd306cSNickeau        } 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(
158*70bbd7f1Sgerardnico            $matcher,
159*70bbd7f1Sgerardnico            $target,
160*70bbd7f1Sgerardnico            $priority,
161*70bbd7f1Sgerardnico            $updateDate,
162*70bbd7f1Sgerardnico            $id
16337748cd8SNickeau        );
16437748cd8SNickeau
16537748cd8SNickeau        $statement = 'update PAGE_RULES set matcher = ?, target = ?, priority = ?, timestamp = ? where id = ?';
166*70bbd7f1Sgerardnico        try {
167918039dbSgerardnico            $request = Sqlite::createOrGetSqlite()
168918039dbSgerardnico                ->createRequest()
169918039dbSgerardnico                ->setQueryParametrized($statement, $entry);
170*70bbd7f1Sgerardnico        } catch (ExceptionSqliteNotAvailable $e) {
171*70bbd7f1Sgerardnico            return;
172*70bbd7f1Sgerardnico        }
173918039dbSgerardnico        try {
174918039dbSgerardnico            $request->execute();
17504fd306cSNickeau        } catch (ExceptionCompile $e) {
17604fd306cSNickeau            LogUtility::error("There was a problem during the page rules update. Error: {$e->getMessage()}", self::CANONICAL);
177918039dbSgerardnico        } finally {
178918039dbSgerardnico            $request->close();
17937748cd8SNickeau        }
18037748cd8SNickeau
18137748cd8SNickeau    }
18237748cd8SNickeau
18337748cd8SNickeau
18437748cd8SNickeau    /**
18537748cd8SNickeau     * Delete all rules
18637748cd8SNickeau     * Use with caution
18737748cd8SNickeau     */
18804fd306cSNickeau    public function deleteAll()
18937748cd8SNickeau    {
19037748cd8SNickeau
191918039dbSgerardnico        /** @noinspection SqlWithoutWhere */
192c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
193c3437056SNickeau            ->createRequest()
194c3437056SNickeau            ->setQuery("delete from PAGE_RULES");
195c3437056SNickeau        try {
196c3437056SNickeau            $request->execute();
19704fd306cSNickeau        } catch (ExceptionCompile $e) {
198c3437056SNickeau            LogUtility::msg('Errors during delete of all redirections. ' . $e->getMessage());
199c3437056SNickeau        } finally {
200c3437056SNickeau            $request->close();
20137748cd8SNickeau        }
202c3437056SNickeau
20337748cd8SNickeau
20437748cd8SNickeau    }
20537748cd8SNickeau
20637748cd8SNickeau    /**
20737748cd8SNickeau     * Return the number of page rules
20837748cd8SNickeau     * @return integer
20937748cd8SNickeau     */
21004fd306cSNickeau    public function count()
21137748cd8SNickeau    {
21237748cd8SNickeau
213c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
214c3437056SNickeau            ->createRequest()
215c3437056SNickeau            ->setQuery("select count(1) from PAGE_RULES");
216c3437056SNickeau
217c3437056SNickeau        $count = 0;
218c3437056SNickeau        try {
219c3437056SNickeau            $count = $request->execute()
220c3437056SNickeau                ->getFirstCellValueAsInt();
22104fd306cSNickeau        } catch (ExceptionCompile $e) {
222c3437056SNickeau            LogUtility::msg("Page Rules Count. {$e->getMessage()}");
223c3437056SNickeau            return 0;
224c3437056SNickeau        } finally {
225c3437056SNickeau            $request->close();
22637748cd8SNickeau        }
227c3437056SNickeau
228c3437056SNickeau        return $count;
22937748cd8SNickeau
23037748cd8SNickeau    }
23137748cd8SNickeau
23237748cd8SNickeau
23337748cd8SNickeau    /**
23437748cd8SNickeau     * @return array
23537748cd8SNickeau     */
23604fd306cSNickeau    public function getRules()
23737748cd8SNickeau    {
23837748cd8SNickeau
239c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
240c3437056SNickeau            ->createRequest()
241918039dbSgerardnico            ->setQuery("select * from PAGE_RULES order by PRIORITY");
242c3437056SNickeau
243c3437056SNickeau        try {
244c3437056SNickeau            return $request->execute()
245c3437056SNickeau                ->getRows();
24604fd306cSNickeau        } catch (ExceptionCompile $e) {
247c3437056SNickeau            LogUtility::msg("Errors during select of all Page rules. {$e->getMessage()}");
248c3437056SNickeau            return [];
249c3437056SNickeau        } finally {
250c3437056SNickeau            $request->close();
25137748cd8SNickeau        }
25237748cd8SNickeau
25337748cd8SNickeau
25437748cd8SNickeau    }
25537748cd8SNickeau
256c3437056SNickeau    public function getRule($id): array
25737748cd8SNickeau    {
258c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
259c3437056SNickeau            ->createRequest()
260c3437056SNickeau            ->setQueryParametrized("SELECT * FROM PAGE_RULES where ID = ?", [$id]);
261c3437056SNickeau        try {
262c3437056SNickeau            return $request->execute()
263c3437056SNickeau                ->getFirstRow();
26404fd306cSNickeau        } catch (ExceptionCompile $e) {
265c3437056SNickeau            LogUtility::msg("getRule Error {$e->getMessage()}");
266c3437056SNickeau            return [];
267c3437056SNickeau        } finally {
268c3437056SNickeau            $request->close();
26937748cd8SNickeau        }
27037748cd8SNickeau
271c3437056SNickeau    }
27237748cd8SNickeau
27337748cd8SNickeau
27437748cd8SNickeau}
275