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