From 6b53559cb12395709e95721c31ea99cfccfa3808 Mon Sep 17 00:00:00 2001 From: Dylan Lloyd Date: Sun, 6 Mar 2011 00:47:13 -0500 Subject: [PATCH] Adding support for /notes/YYYY/MM/DD urls It is now working, but the results need to be paginated. There is already a pagination system in use for the page class, so it would nice to turn that into something separate that can be inherited. --- .htaccess | 8 +++-- includes/cms.php | 86 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) diff --git a/.htaccess b/.htaccess index f685a47..65a86c7 100644 --- a/.htaccess +++ b/.htaccess @@ -3,10 +3,14 @@ ErrorDocument 404 /404.php RewriteEngine on +RewriteRule ^([^/\.]+)/?$ /index.php?project=$1 [L] + RewriteRule ^note/([^/\.]+)?/?$ /index.php?note=$1 [L] RewriteRule ^notes/?$ notes/page/1 RewriteRule ^notes/page/?$ notes/page/1 -RewriteRule ^notes/page/([1-9]+)/?$ /index.php?page=$1 [L] +RewriteRule ^notes/page/([0-9]+)/?$ /index.php?page=$1 [L] -RewriteRule ^([^/\.]+)/?$ /index.php?project=$1 [L] +RewriteRule ^notes/([0-9]{4})/?$ /index.php?year=$1 [L] +RewriteRule ^notes/([0-9]{4})/([0-9]{2})/?$ /index.php?year=$1&month=$2 [L] +RewriteRule ^notes/([0-9]{4})/([0-9]{2})/([0-9]{2})/?$ /index.php?year=$1&month=$2&day=$3 [L] diff --git a/includes/cms.php b/includes/cms.php index cb414e2..de72f10 100644 --- a/includes/cms.php +++ b/includes/cms.php @@ -21,6 +21,8 @@ abstract class cms { public static function determine_type() { if (isset($_GET['page']) && is_numeric($_GET['page'])) { return 'page'; + } else if (isset($_GET['year'])) { + return 'archive'; } else if (isset($_GET['note'])) { return 'note'; } else if ($_SERVER['REQUEST_URI'] == '/') { @@ -321,6 +323,86 @@ class note extends cms { } } +class archive extends cms { + + public function __construct() { + parent::__construct(); + } + + private function check_exists() { + $sql = "SELECT COUNT(*) FROM notes + WHERE url = ?"; + $results = $this->query($sql, "s", $_GET['note']); + if ($results[0]["COUNT(*)"] != 1) { + $this->not_found(); + } + } + + public function display() { + // this really needs its own pagination... + // there should be a class for that. + $this->display_head(); + switch (true) { + case (isset($_GET['year']) && !isset($_GET['month']) + && !isset($_GET['day'])): + $sql = "SELECT title, url, date_posted, text + FROM notes WHERE YEAR(date_posted) = ?"; + $result = $this->query($sql, "d", + $_GET['year']); + break; + case (isset($_GET['year']) && isset($_GET['month']) + && !isset($_GET['day'])): + $sql = "SELECT title, url, date_posted, text + FROM notes WHERE YEAR(date_posted) = ? + AND MONTH(date_posted) = ?"; + $result = $this->query($sql, "dd", + $_GET['year'], $_GET['month']); + break; + case (isset($_GET['year']) && isset($_GET['month']) + && isset($_GET['day'])): + $sql = "SELECT title, url, date_posted, text + FROM notes WHERE YEAR(date_posted) = ? + AND MONTH(date_posted) = ? + AND DAY(date_posted) = ?"; + $result = $this->query($sql, "ddd", + $_GET['year'], $_GET['month'], + $_GET['day']); + break; + } + if (count($result) >= 1) { + foreach ($result as $row => $entry) { + $title = $entry['title']; + $url = '/note/' . $entry['url']; + $date_posted = explode("-", $entry['date_posted']); + $year_posted = $date_posted[0]; + $month_posted = $date_posted[1]; + $datetime_posted = explode(' ', $date_posted[2]); + $day_posted = $datetime_posted[0]; + echo "
"; + echo "

$year_posted/$month_posted/$day_posted/$title

"; + echo $entry['text']; + echo "
"; + } + echo ""; + $this->write_navigation(); + } else { + echo "
"; + echo "

sorry, can't find that

"; + echo "
Empty set (0.00 sec)
"; + } + $this->display_close(); + } + + private function write_navigation() { + echo "
"; + echo "
"; + echo "

"; + // fill me in! + echo "

"; + echo "
"; + } +} + ## now actually do something: switch (cms::determine_type()) { case "index": @@ -339,6 +421,10 @@ switch (cms::determine_type()) { $page = new page; $page->display(); break; + case "archive": + $archive = new archive; + $archive->display(); + break; } ?> -- 2.30.2