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