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