xref: /template/strap/ComboStrap/PageRules.php (revision 918039db4917787782d4545087ae34a1f6bf9204)
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
2037748cd8SNickeau
2137748cd8SNickeau    /**
2237748cd8SNickeau     * Delete Redirection
2337748cd8SNickeau     * @param string $ruleId
2437748cd8SNickeau     */
25c3437056SNickeau    function deleteRule(string $ruleId)
2637748cd8SNickeau    {
2737748cd8SNickeau
28c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
29c3437056SNickeau            ->createRequest()
30*918039dbSgerardnico            ->setQueryParametrized('delete from PAGE_RULES where id = ?', [$ruleId]);
31c3437056SNickeau        try {
32c3437056SNickeau            $request->execute();
33c3437056SNickeau        } catch (ExceptionCombo $e) {
34c3437056SNickeau            LogUtility::msg("Something went wrong when deleting the redirections. {$e->getMessage()}");
35c3437056SNickeau        } finally {
36c3437056SNickeau            $request->close();
3737748cd8SNickeau        }
3837748cd8SNickeau
3937748cd8SNickeau    }
4037748cd8SNickeau
4137748cd8SNickeau
4237748cd8SNickeau    /**
4337748cd8SNickeau     * Is Redirection of a page Id Present
4437748cd8SNickeau     * @param integer $id
4537748cd8SNickeau     * @return boolean
4637748cd8SNickeau     */
47c3437056SNickeau    function ruleExists($id): bool
4837748cd8SNickeau    {
4937748cd8SNickeau        $id = strtolower($id);
5037748cd8SNickeau
5137748cd8SNickeau
52c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
53c3437056SNickeau            ->createRequest()
54c3437056SNickeau            ->setQueryParametrized("SELECT count(*) FROM PAGE_RULES where ID = ?", [$id]);
55c3437056SNickeau        $count = 0;
56c3437056SNickeau        try {
57c3437056SNickeau            $count = $request
58c3437056SNickeau                ->execute()
59c3437056SNickeau                ->getFirstCellValueAsInt();
60c3437056SNickeau        } catch (ExceptionCombo $e) {
61c3437056SNickeau            LogUtility::msg("Error during pattern exist statement. {$e->getMessage()}");
62c3437056SNickeau            return false;
63c3437056SNickeau        } finally {
64c3437056SNickeau            $request->close();
6537748cd8SNickeau        }
66c3437056SNickeau
67c3437056SNickeau        return $count === 1;
6837748cd8SNickeau
6937748cd8SNickeau
7037748cd8SNickeau    }
7137748cd8SNickeau
7237748cd8SNickeau    /**
7337748cd8SNickeau     * Is Redirection of a page Id Present
74c3437056SNickeau     * @param string $pattern
7537748cd8SNickeau     * @return boolean
7637748cd8SNickeau     */
77c3437056SNickeau    function patternExists(string $pattern): bool
7837748cd8SNickeau    {
7937748cd8SNickeau
8037748cd8SNickeau
81c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
82c3437056SNickeau            ->createRequest()
83c3437056SNickeau            ->setQueryParametrized("SELECT count(*) FROM PAGE_RULES where MATCHER = ?", [$pattern]);
84c3437056SNickeau        $count = 0;
85c3437056SNickeau        try {
86c3437056SNickeau            $count = $request->execute()
87c3437056SNickeau                ->getFirstCellValueAsInt();
88c3437056SNickeau        } catch (ExceptionCombo $e) {
89c3437056SNickeau            LogUtility::msg("Error during pattern exists query: {$e->getMessage()}");
90c3437056SNickeau            return false;
91c3437056SNickeau        } finally {
92c3437056SNickeau            $request->close();
9337748cd8SNickeau        }
94c3437056SNickeau
95c3437056SNickeau        return $count === 1;
9637748cd8SNickeau
9737748cd8SNickeau
9837748cd8SNickeau    }
9937748cd8SNickeau
10037748cd8SNickeau
10137748cd8SNickeau    /**
10237748cd8SNickeau     * @param $sourcePageId
10337748cd8SNickeau     * @param $targetPageId
10437748cd8SNickeau     * @param $priority
10537748cd8SNickeau     * @return int - the rule id
10637748cd8SNickeau     */
10737748cd8SNickeau    function addRule($sourcePageId, $targetPageId, $priority)
10837748cd8SNickeau    {
10937748cd8SNickeau        $currentDate = date("c");
11037748cd8SNickeau        return $this->addRuleWithDate($sourcePageId, $targetPageId, $priority, $currentDate);
11137748cd8SNickeau    }
11237748cd8SNickeau
11337748cd8SNickeau    /**
11437748cd8SNickeau     * Add Redirection
11537748cd8SNickeau     * This function was needed to migrate the date of the file conf store
11637748cd8SNickeau     * You would use normally the function addRedirection
11737748cd8SNickeau     * @param string $matcher
11837748cd8SNickeau     * @param string $target
11937748cd8SNickeau     * @param $priority
12037748cd8SNickeau     * @param $creationDate
12137748cd8SNickeau     * @return int - the last id
12237748cd8SNickeau     */
123c3437056SNickeau    function addRuleWithDate($matcher, $target, $priority, $creationDate): ?int
12437748cd8SNickeau    {
12537748cd8SNickeau
12637748cd8SNickeau        $entry = array(
12737748cd8SNickeau            'target' => $target,
12837748cd8SNickeau            'timestamp' => $creationDate,
12937748cd8SNickeau            'matcher' => $matcher,
13037748cd8SNickeau            'priority' => $priority
13137748cd8SNickeau        );
13237748cd8SNickeau
133c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
134c3437056SNickeau            ->createRequest()
135c3437056SNickeau            ->setTableRow('PAGE_RULES', $entry);
136c3437056SNickeau        $lastInsertId = null;
137c3437056SNickeau        try {
138c3437056SNickeau            $lastInsertId = $request->execute()
139c3437056SNickeau                ->getInsertId();
140c3437056SNickeau        } catch (ExceptionCombo $e) {
141c3437056SNickeau            LogUtility::msg("There was a problem during Pages Rule insertion. " . $e->getMessage());
142c3437056SNickeau            return null;
143c3437056SNickeau        } finally {
144c3437056SNickeau            $request->close();
14537748cd8SNickeau        }
146c3437056SNickeau
14737748cd8SNickeau        return $lastInsertId;
14837748cd8SNickeau
14937748cd8SNickeau    }
15037748cd8SNickeau
15137748cd8SNickeau    function updateRule($id, $matcher, $target, $priority)
15237748cd8SNickeau    {
15337748cd8SNickeau        $updateDate = date("c");
15437748cd8SNickeau
15537748cd8SNickeau        $entry = array(
15637748cd8SNickeau            'matcher' => $matcher,
15737748cd8SNickeau            'target' => $target,
15837748cd8SNickeau            'priority' => $priority,
15937748cd8SNickeau            'timestamp' => $updateDate,
16037748cd8SNickeau            'íd' => $id
16137748cd8SNickeau        );
16237748cd8SNickeau
16337748cd8SNickeau        $statement = 'update PAGE_RULES set matcher = ?, target = ?, priority = ?, timestamp = ? where id = ?';
164*918039dbSgerardnico        $request = Sqlite::createOrGetSqlite()
165*918039dbSgerardnico            ->createRequest()
166*918039dbSgerardnico            ->setQueryParametrized($statement, $entry);
167*918039dbSgerardnico        try {
168*918039dbSgerardnico            $request->execute();
169*918039dbSgerardnico        } catch (ExceptionCombo $e) {
170*918039dbSgerardnico            LogUtility::msg("There was a problem during the update. Error: {$e->getMessage()}");
171*918039dbSgerardnico        } finally {
172*918039dbSgerardnico            $request->close();
17337748cd8SNickeau        }
17437748cd8SNickeau
17537748cd8SNickeau    }
17637748cd8SNickeau
17737748cd8SNickeau
17837748cd8SNickeau    /**
17937748cd8SNickeau     * Delete all rules
18037748cd8SNickeau     * Use with caution
18137748cd8SNickeau     */
18237748cd8SNickeau    function deleteAll()
18337748cd8SNickeau    {
18437748cd8SNickeau
185*918039dbSgerardnico        /** @noinspection SqlWithoutWhere */
186c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
187c3437056SNickeau            ->createRequest()
188c3437056SNickeau            ->setQuery("delete from PAGE_RULES");
189c3437056SNickeau        try {
190c3437056SNickeau            $request->execute();
191c3437056SNickeau        } catch (ExceptionCombo $e) {
192c3437056SNickeau            LogUtility::msg('Errors during delete of all redirections. ' . $e->getMessage());
193c3437056SNickeau        } finally {
194c3437056SNickeau            $request->close();
19537748cd8SNickeau        }
196c3437056SNickeau
19737748cd8SNickeau
19837748cd8SNickeau    }
19937748cd8SNickeau
20037748cd8SNickeau    /**
20137748cd8SNickeau     * Return the number of page rules
20237748cd8SNickeau     * @return integer
20337748cd8SNickeau     */
20437748cd8SNickeau    function count()
20537748cd8SNickeau    {
20637748cd8SNickeau
207c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
208c3437056SNickeau            ->createRequest()
209c3437056SNickeau            ->setQuery("select count(1) from PAGE_RULES");
210c3437056SNickeau
211c3437056SNickeau        $count = 0;
212c3437056SNickeau        try {
213c3437056SNickeau            $count = $request->execute()
214c3437056SNickeau                ->getFirstCellValueAsInt();
215c3437056SNickeau        } catch (ExceptionCombo $e) {
216c3437056SNickeau            LogUtility::msg("Page Rules Count. {$e->getMessage()}");
217c3437056SNickeau            return 0;
218c3437056SNickeau        } finally {
219c3437056SNickeau            $request->close();
22037748cd8SNickeau        }
221c3437056SNickeau
222c3437056SNickeau        return $count;
22337748cd8SNickeau
22437748cd8SNickeau    }
22537748cd8SNickeau
22637748cd8SNickeau
22737748cd8SNickeau    /**
22837748cd8SNickeau     * @return array
22937748cd8SNickeau     */
23037748cd8SNickeau    function getRules()
23137748cd8SNickeau    {
23237748cd8SNickeau
233c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
234c3437056SNickeau            ->createRequest()
235*918039dbSgerardnico            ->setQuery("select * from PAGE_RULES order by PRIORITY");
236c3437056SNickeau
237c3437056SNickeau        try {
238c3437056SNickeau            return $request->execute()
239c3437056SNickeau                ->getRows();
240c3437056SNickeau        } catch (ExceptionCombo $e) {
241c3437056SNickeau            LogUtility::msg("Errors during select of all Page rules. {$e->getMessage()}");
242c3437056SNickeau            return [];
243c3437056SNickeau        } finally {
244c3437056SNickeau            $request->close();
24537748cd8SNickeau        }
24637748cd8SNickeau
24737748cd8SNickeau
24837748cd8SNickeau    }
24937748cd8SNickeau
250c3437056SNickeau    public function getRule($id): array
25137748cd8SNickeau    {
252c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
253c3437056SNickeau            ->createRequest()
254c3437056SNickeau            ->setQueryParametrized("SELECT * FROM PAGE_RULES where ID = ?", [$id]);
255c3437056SNickeau        try {
256c3437056SNickeau            return $request->execute()
257c3437056SNickeau                ->getFirstRow();
258c3437056SNickeau        } catch (ExceptionCombo $e) {
259c3437056SNickeau            LogUtility::msg("getRule Error {$e->getMessage()}");
260c3437056SNickeau            return [];
261c3437056SNickeau        } finally {
262c3437056SNickeau            $request->close();
26337748cd8SNickeau        }
26437748cd8SNickeau
265c3437056SNickeau    }
26637748cd8SNickeau
26737748cd8SNickeau
26837748cd8SNickeau}
269