xref: /template/strap/ComboStrap/PageRules.php (revision c3437056399326d621a01da73b649707fbb0ae69)
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     */
25*c3437056SNickeau    function deleteRule(string $ruleId)
2637748cd8SNickeau    {
2737748cd8SNickeau
28*c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
29*c3437056SNickeau            ->createRequest()
30*c3437056SNickeau            ->setQueryParametrized('delete from PAGE_RULES where id = ?', $ruleId);
31*c3437056SNickeau        try {
32*c3437056SNickeau            $request->execute();
33*c3437056SNickeau        } catch (ExceptionCombo $e) {
34*c3437056SNickeau            LogUtility::msg("Something went wrong when deleting the redirections. {$e->getMessage()}");
35*c3437056SNickeau        } finally {
36*c3437056SNickeau            $request->close();
3737748cd8SNickeau        }
3837748cd8SNickeau
3937748cd8SNickeau    }
4037748cd8SNickeau
4137748cd8SNickeau
4237748cd8SNickeau    /**
4337748cd8SNickeau     * Is Redirection of a page Id Present
4437748cd8SNickeau     * @param integer $id
4537748cd8SNickeau     * @return boolean
4637748cd8SNickeau     */
47*c3437056SNickeau    function ruleExists($id): bool
4837748cd8SNickeau    {
4937748cd8SNickeau        $id = strtolower($id);
5037748cd8SNickeau
5137748cd8SNickeau
52*c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
53*c3437056SNickeau            ->createRequest()
54*c3437056SNickeau            ->setQueryParametrized("SELECT count(*) FROM PAGE_RULES where ID = ?", [$id]);
55*c3437056SNickeau        $count = 0;
56*c3437056SNickeau        try {
57*c3437056SNickeau            $count = $request
58*c3437056SNickeau                ->execute()
59*c3437056SNickeau                ->getFirstCellValueAsInt();
60*c3437056SNickeau        } catch (ExceptionCombo $e) {
61*c3437056SNickeau            LogUtility::msg("Error during pattern exist statement. {$e->getMessage()}");
62*c3437056SNickeau            return false;
63*c3437056SNickeau        } finally {
64*c3437056SNickeau            $request->close();
6537748cd8SNickeau        }
66*c3437056SNickeau
67*c3437056SNickeau        return $count === 1;
6837748cd8SNickeau
6937748cd8SNickeau
7037748cd8SNickeau    }
7137748cd8SNickeau
7237748cd8SNickeau    /**
7337748cd8SNickeau     * Is Redirection of a page Id Present
74*c3437056SNickeau     * @param string $pattern
7537748cd8SNickeau     * @return boolean
7637748cd8SNickeau     */
77*c3437056SNickeau    function patternExists(string $pattern): bool
7837748cd8SNickeau    {
7937748cd8SNickeau
8037748cd8SNickeau
81*c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
82*c3437056SNickeau            ->createRequest()
83*c3437056SNickeau            ->setQueryParametrized("SELECT count(*) FROM PAGE_RULES where MATCHER = ?", [$pattern]);
84*c3437056SNickeau        $count = 0;
85*c3437056SNickeau        try {
86*c3437056SNickeau            $count = $request->execute()
87*c3437056SNickeau                ->getFirstCellValueAsInt();
88*c3437056SNickeau        } catch (ExceptionCombo $e) {
89*c3437056SNickeau            LogUtility::msg("Error during pattern exists query: {$e->getMessage()}");
90*c3437056SNickeau            return false;
91*c3437056SNickeau        } finally {
92*c3437056SNickeau            $request->close();
9337748cd8SNickeau        }
94*c3437056SNickeau
95*c3437056SNickeau        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     */
123*c3437056SNickeau    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
133*c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
134*c3437056SNickeau            ->createRequest()
135*c3437056SNickeau            ->setTableRow('PAGE_RULES', $entry);
136*c3437056SNickeau        $lastInsertId = null;
137*c3437056SNickeau        try {
138*c3437056SNickeau            $lastInsertId = $request->execute()
139*c3437056SNickeau                ->getInsertId();
140*c3437056SNickeau        } catch (ExceptionCombo $e) {
141*c3437056SNickeau            LogUtility::msg("There was a problem during Pages Rule insertion. " . $e->getMessage());
142*c3437056SNickeau            return null;
143*c3437056SNickeau        } finally {
144*c3437056SNickeau            $request->close();
14537748cd8SNickeau        }
146*c3437056SNickeau
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 = ?';
16437748cd8SNickeau        $res = $this->sqlite->query($statement, $entry);
16537748cd8SNickeau        if (!$res) {
16637748cd8SNickeau            LogUtility::msg("There was a problem during the update");
16737748cd8SNickeau        }
16837748cd8SNickeau        $this->sqlite->res_close($res);
16937748cd8SNickeau
17037748cd8SNickeau    }
17137748cd8SNickeau
17237748cd8SNickeau
17337748cd8SNickeau    /**
17437748cd8SNickeau     * Delete all rules
17537748cd8SNickeau     * Use with caution
17637748cd8SNickeau     */
17737748cd8SNickeau    function deleteAll()
17837748cd8SNickeau    {
17937748cd8SNickeau
180*c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
181*c3437056SNickeau            ->createRequest()
182*c3437056SNickeau            ->setQuery("delete from PAGE_RULES");
183*c3437056SNickeau        try {
184*c3437056SNickeau            $request->execute();
185*c3437056SNickeau        } catch (ExceptionCombo $e) {
186*c3437056SNickeau            LogUtility::msg('Errors during delete of all redirections. ' . $e->getMessage());
187*c3437056SNickeau        } finally {
188*c3437056SNickeau            $request->close();
18937748cd8SNickeau        }
190*c3437056SNickeau
19137748cd8SNickeau
19237748cd8SNickeau    }
19337748cd8SNickeau
19437748cd8SNickeau    /**
19537748cd8SNickeau     * Return the number of page rules
19637748cd8SNickeau     * @return integer
19737748cd8SNickeau     */
19837748cd8SNickeau    function count()
19937748cd8SNickeau    {
20037748cd8SNickeau
201*c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
202*c3437056SNickeau            ->createRequest()
203*c3437056SNickeau            ->setQuery("select count(1) from PAGE_RULES");
204*c3437056SNickeau
205*c3437056SNickeau        $count = 0;
206*c3437056SNickeau        try {
207*c3437056SNickeau            $count = $request->execute()
208*c3437056SNickeau                ->getFirstCellValueAsInt();
209*c3437056SNickeau        } catch (ExceptionCombo $e) {
210*c3437056SNickeau            LogUtility::msg("Page Rules Count. {$e->getMessage()}");
211*c3437056SNickeau            return 0;
212*c3437056SNickeau        } finally {
213*c3437056SNickeau            $request->close();
21437748cd8SNickeau        }
215*c3437056SNickeau
216*c3437056SNickeau        return $count;
21737748cd8SNickeau
21837748cd8SNickeau    }
21937748cd8SNickeau
22037748cd8SNickeau
22137748cd8SNickeau    /**
22237748cd8SNickeau     * @return array
22337748cd8SNickeau     */
22437748cd8SNickeau    function getRules()
22537748cd8SNickeau    {
22637748cd8SNickeau
227*c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
228*c3437056SNickeau            ->createRequest()
229*c3437056SNickeau            ->setQuery("select * from PAGE_RULES order by PRIORITY asc");
230*c3437056SNickeau
231*c3437056SNickeau        try {
232*c3437056SNickeau            return $request->execute()
233*c3437056SNickeau                ->getRows();
234*c3437056SNickeau        } catch (ExceptionCombo $e) {
235*c3437056SNickeau            LogUtility::msg("Errors during select of all Page rules. {$e->getMessage()}");
236*c3437056SNickeau            return [];
237*c3437056SNickeau        } finally {
238*c3437056SNickeau            $request->close();
23937748cd8SNickeau        }
24037748cd8SNickeau
24137748cd8SNickeau
24237748cd8SNickeau    }
24337748cd8SNickeau
244*c3437056SNickeau    public function getRule($id): array
24537748cd8SNickeau    {
246*c3437056SNickeau        $request = Sqlite::createOrGetSqlite()
247*c3437056SNickeau            ->createRequest()
248*c3437056SNickeau            ->setQueryParametrized("SELECT * FROM PAGE_RULES where ID = ?", [$id]);
249*c3437056SNickeau        try {
250*c3437056SNickeau            return $request->execute()
251*c3437056SNickeau                ->getFirstRow();
252*c3437056SNickeau        } catch (ExceptionCombo $e) {
253*c3437056SNickeau            LogUtility::msg("getRule Error {$e->getMessage()}");
254*c3437056SNickeau            return [];
255*c3437056SNickeau        } finally {
256*c3437056SNickeau            $request->close();
25737748cd8SNickeau        }
25837748cd8SNickeau
259*c3437056SNickeau    }
26037748cd8SNickeau
26137748cd8SNickeau
26237748cd8SNickeau}
263