all page types now served with model/view
authorDylan Lloyd <dylan@dylansserver.com>
Fri, 23 Mar 2012 09:23:43 +0000 (05:23 -0400)
committerDylan Lloyd <dylan@dylansserver.com>
Fri, 23 Mar 2012 09:23:43 +0000 (05:23 -0400)
12 files changed:
cms.php [deleted file]
index.php
model/archive.php [new file with mode: 0644]
model/captcha.php [new file with mode: 0644]
model/index.php [new file with mode: 0644]
model/page.php [new file with mode: 0644]
model/project.php [new file with mode: 0644]
model/rss.php [new file with mode: 0644]
view/index.php
view/note.php
view/page.php
view/rss.php

diff --git a/cms.php b/cms.php
deleted file mode 100644 (file)
index b5b3b20..0000000
--- a/cms.php
+++ /dev/null
@@ -1,266 +0,0 @@
-<?php
-
-require_once("model/model.php");
-
-abstract class cms {
-
-  private $config_file = '/etc/dylansserver.ini';
-  protected $model;
-  protected $recaptcha_publickey;
-  protected $recaptcha_privatekey;
-  public $title;
-  public $home_link;
-
-  public function __construct() {
-    $this->model = new model();
-    $config = parse_ini_file($this->config_file, true);
-    $this->db = new mysqli(
-      $config['database']['domain'],
-      $config['database']['user'],
-      $config['database']['password'],
-      $config['database']['database']);
-    if (mysqli_connect_errno()) {
-      echo "Problem connecting to database: ";
-      echo mysqli_connect_error();
-      exit();
-    }
-    $this->recaptcha_publickey = $config['recaptcha']['publickey'];
-    $this->recaptcha_privatekey = $config['recaptcha']['privatekey'];
-    $this->title = $config['site']['default_title'];
-    $this->home_link = $config['site']['home_link'];
-  }
-
-  public function query() {
-    $args = func_get_args();
-    $statement = $this->db->prepare($args[0]);
-    $args = array_slice($args, 1);
-    call_user_func_array(array($statement, 'bind_param'), &$args);
-    $statement->execute();
-    $return = array();
-    $statement->store_result();
-    $row = array();
-    $data = $statement->result_metadata();
-    $fields = array();
-    $fields[0] = &$statement;
-    while($field = $data->fetch_field()) {
-      $fields[] = &$row[$field->name];
-    }
-    call_user_func_array("mysqli_stmt_bind_result", $fields);
-    $i = 0;
-    while ($statement->fetch()) {
-        foreach ($row as $key=>$value) $return[$i][$key] = $value;
-      $i++;
-    }
-    $statement->free_result();
-    return $return;
-  }
-
-  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'] == '/') {
-      return 'index';
-    } else if (isset($_GET['project'])) {
-      return 'project';
-       } else if (isset($_GET['rss'])) {
-         return 'rss';
-       } else if (isset($_GET['challenge'])) {
-      return 'captcha';
-    }
-  }
-
-  public function init() {
-    switch (cms::determine_type()) {
-      case 'index':
-        $index = new index();
-        $index->display();
-        break;
-      case 'project':
-        $project = new project();
-        $project->display();
-        break;
-      case 'note':
-        require_once("model/note.php");
-        $note = new note();
-        require_once("view/note.php");
-        break;
-      case 'page':
-        require_once("model/page.php");
-        $page = new page();
-        require_once("view/page.php");
-        break;
-      case "rss":
-        require_once("model/rss.php");
-        $rss = new rss();
-        require_once("view/rss.php");
-        break;
-      case 'archive':
-        $archive = new archive;
-        $archive->display();
-        break;
-      case "captcha":
-        $captcha = new captcha;
-        $captcha->display();
-        break;
-    }
-  }
-
-}
-
-
-class index extends cms {
-
-  public function display() {
-      require_once("view/index.php");
-  }
-
-  protected function display_exhibits() {
-    echo "<div id='exhibit'>";
-    $sql = "SELECT text FROM projects ORDER BY rank";
-    $result = $this->db->query($sql);
-    while ($entry = $result->fetch_object()) {
-      echo $entry->text;
-    }
-    echo "</div>";
-  }
-
-  private function list_projects() {
-    $sql = "SELECT title FROM projects ORDER BY rank";
-    $result = $this->db->query($sql);
-    while ($entry = $result->fetch_object()) {
-      echo "<li><a class='tab' href='$entry->title'>$entry->title</a></li>";
-    }
-  }
-
-}
-
-
-class project extends index {
-
-  protected function display_exhibits() {
-    echo "<div id='exhibit'>";
-    $sql = "SELECT text FROM projects
-             WHERE title = ?";
-    $result = $this->query($sql, "s", $_GET['project']);
-    if ($result = $result[0]['text']) {
-      $text =  str_replace("class='exhibit'", "class='exhibit' style='display:block;'", $result);
-      echo $text;
-      echo "</div>";
-    } else {
-      throw new notFound();
-    }
-  }
-
-}
-
-
-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() {
-      require_once("view/archive.php");
-  }
-
-  public function display_notes() {
-    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) = ?
-                ORDER BY date_posted DESC";
-        $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) = ?
-                ORDER BY date_posted DESC";
-        $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) = ?
-                ORDER BY date_posted DESC";
-        $result = $this->query($sql, "ddd",
-                                $_GET['year'], $_GET['month'],
-                                $_GET['day']);
-        break;
-    }
-    if (count($result) >= 1) {
-      echo "<div id='notes'>";
-      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 "<div class='note'>";
-        echo "<h1><span class='date'>";
-        echo "$year_posted/$month_posted/$day_posted/";
-        echo "</span><a href='$url'>$title</a></h1>";
-        echo $entry['text'];
-        echo "</div>";
-      }
-      echo "</div>";
-    } else {
-      echo "<br>";
-      echo "<h1>sorry, nothing here</h2>";
-      echo "<pre>Empty set (0.00 sec)</pre>";
-    }
-  }
-
-}
-
-
-class notFound extends Exception {
-
-    public function __construct() {
-      header('HTTP/1.0 404 Not Found');
-      ob_end_clean();
-      include('404.php');
-      exit();
-    }
-
-}
-
-
-class captcha extends cms {
-
-    public function display() {
-      $challenge = $_GET['challenge'];
-      $response = $_GET['response'];
-      $remoteip = $_SERVER['REMOTE_ADDR'];
-      $curl = curl_init('http://api-verify.recaptcha.net/verify?');
-      curl_setopt ($curl, CURLOPT_POST, 4);
-      curl_setopt ($curl, CURLOPT_POSTFIELDS, "privatekey=$this->recaptcha_privatekey&remoteip=$remoteip&challenge=$challenge&response=$response");
-      $result = curl_exec ($curl);
-      curl_close ($curl);
-    }
-
-}
-
-?>
index 0964581..493069a 100644 (file)
--- a/index.php
+++ b/index.php
@@ -1,4 +1,4 @@
 <?php
-require_once("cms.php");
+require_once("controller.php");
 cms::init();
 ?>
diff --git a/model/archive.php b/model/archive.php
new file mode 100644 (file)
index 0000000..0f805d4
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+
+class archive extends model {
+
+  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() {
+      require_once("view/archive.php");
+  }
+
+  public function display_notes() {
+    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) = ?
+                ORDER BY date_posted DESC";
+        $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) = ?
+                ORDER BY date_posted DESC";
+        $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) = ?
+                ORDER BY date_posted DESC";
+        $result = $this->query($sql, "ddd",
+                                $_GET['year'], $_GET['month'],
+                                $_GET['day']);
+        break;
+    }
+    if (count($result) >= 1) {
+      echo "<div id='notes'>";
+      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 "<div class='note'>";
+        echo "<h1><span class='date'>";
+        echo "$year_posted/$month_posted/$day_posted/";
+        echo "</span><a href='$url'>$title</a></h1>";
+        echo $entry['text'];
+        echo "</div>";
+      }
+      echo "</div>";
+    } else {
+      echo "<br>";
+      echo "<h1>sorry, nothing here</h2>";
+      echo "<pre>Empty set (0.00 sec)</pre>";
+    }
+  }
+
+}
+
+?>
diff --git a/model/captcha.php b/model/captcha.php
new file mode 100644 (file)
index 0000000..b2af33c
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+
+class captcha extends model {
+
+    public function display() {
+      $challenge = $_GET['challenge'];
+      $response = $_GET['response'];
+      $remoteip = $_SERVER['REMOTE_ADDR'];
+      $curl = curl_init('http://api-verify.recaptcha.net/verify?');
+      curl_setopt ($curl, CURLOPT_POST, 4);
+      curl_setopt ($curl, CURLOPT_POSTFIELDS, "privatekey=$this->recaptcha_privatekey&remoteip=$remoteip&challenge=$challenge&response=$response");
+      $result = curl_exec ($curl);
+      curl_close ($curl);
+    }
+
+}
+
+?>
diff --git a/model/index.php b/model/index.php
new file mode 100644 (file)
index 0000000..dc8f6b3
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+class index extends model {
+
+  public function display() {
+      require_once("view/index.php");
+  }
+
+  public function display_exhibits() {
+    echo "<div id='exhibit'>";
+    $sql = "SELECT text FROM projects ORDER BY rank";
+    $result = $this->db->query($sql);
+    while ($entry = $result->fetch_object()) {
+      echo $entry->text;
+    }
+    echo "</div>";
+  }
+
+  public function list_projects() {
+    $sql = "SELECT title FROM projects ORDER BY rank";
+    $result = $this->db->query($sql);
+    while ($entry = $result->fetch_object()) {
+      echo "<li><a class='tab' href='$entry->title'>$entry->title</a></li>";
+    }
+  }
+
+}
+
+?>
diff --git a/model/page.php b/model/page.php
new file mode 100644 (file)
index 0000000..fe7d0a6
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+class page extends model {
+
+  public $page = 1;
+  public $offset = 0;
+  public $notes_per_page = 4;
+  public $number_of_pages = 1;
+
+  public function __construct() {
+    parent::__construct();
+    $this->page_offset();
+  }
+
+  private function page_offset() {
+    $sql = "SELECT COUNT(*) FROM notes";
+    $result = $this->db->query($sql);
+    $result = $result->fetch_array();
+    $this->number_of_pages = ceil($result[0] / $this->notes_per_page);
+    if (isset($_GET['page']) && is_numeric($_GET['page'])) {
+      $this->page = (int) $_GET['page'];
+    } else {
+      throw new notFound();
+    }
+    if ($this->page > $this->number_of_pages) {
+      throw new notFound();
+    }
+    if ($this->page < 1) {
+      throw new notFound();
+    }
+    $this->offset = ($this->page - 1) * $this->notes_per_page;
+  }
+
+  public function display() {
+      require_once("view/page.php");
+  }
+
+  public function display_notes() {
+    echo "<div id='notes'>";
+    $sql = "SELECT date_posted, title, url, text
+              FROM notes ORDER BY date_posted DESC
+              LIMIT ?, ?";
+    $result = $this->query($sql, "ii",
+                              $this->offset,
+                              $this->notes_per_page);
+    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];
+      $text = $entry['text'];
+      echo <<<END_NOTE
+      <div class='note'>
+      <h1>
+        <span class='date'>$year_posted/$month_posted/$day_posted/</span><a rel="canonical" href='$url'>$title</a>
+      </h1>
+      $text
+      </div>
+END_NOTE;
+    }
+    echo "</div>";
+  }
+}
+
+?>
diff --git a/model/project.php b/model/project.php
new file mode 100644 (file)
index 0000000..c7f780d
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+
+require_once("model/index.php");
+
+class project extends index {
+
+  public function display_exhibits() {
+    echo "<div id='exhibit'>";
+    $sql = "SELECT text FROM projects
+             WHERE title = ?";
+    $result = $this->query($sql, "s", $_GET['project']);
+    if ($result = $result[0]['text']) {
+      $text =  str_replace("class='exhibit'", "class='exhibit' style='display:block;'", $result);
+      echo $text;
+      echo "</div>";
+    } else {
+      throw new notFound();
+    }
+  }
+
+}
+
+?>
diff --git a/model/rss.php b/model/rss.php
new file mode 100644 (file)
index 0000000..b7c5164
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+class rss extends model {
+
+  public function display() {
+    require_once("view/rss.php");
+  }
+
+  public function display_items() {
+    $result = $this->db->query("SELECT date_posted, title, text, url
+                                         FROM notes ORDER BY date_posted DESC
+                                         LIMIT 5");
+       while ($entry = $result->fetch_object()) {
+         $title = $entry->title;
+         $date_posted = $entry->date_posted;
+         $url = "http://dylansserver.com/note/" . $entry->url;
+         $text = $entry->text;
+         $text = strip_tags($text);
+         $end_of_first_sentence = strpos($text, '.');
+         if ($end_of_first_sentence) {
+           $end_of_second_sentence = strpos($text, '.', ($end_of_first_sentence + 1));
+               if ($end_of_second_sentence) {
+                 $description = substr($text, '0', ($end_of_second_sentence + 1));
+               } else {
+                 $description = substr($text, '0', ($end_of_first_sentence + 1));
+               }
+         }
+      echo "<item>";
+      echo "  <title>$title</title>";
+      echo "  <link>$url</link>";
+      echo "  <guid>$url</guid>";
+      echo "  <description>$description</description>";
+      echo "</item>";
+       }
+  }
+}
+
+?>
index b90915e..fb2ed19 100644 (file)
@@ -3,7 +3,7 @@
 
 <html>
 <head>
-  <title><?php echo $this->title; ?></title>
+  <title><?php echo $this->title ?></title>
   <link rel="icon" href="/favicon.ico" type="image/png">
   <link href='/includes/style.css' rel='stylesheet' type='text/css'>
   <script type='text/javascript' src='/includes/index.js'></script>
index 3174f9d..367b334 100644 (file)
@@ -3,7 +3,7 @@
 
 <html>
 <head>
-  <title><?php echo $note->title; ?></title>
+  <title><?php echo $this->title; ?></title>
   <link rel="icon" href="/favicon.ico" type="image/png">
   <link href='/includes/style.css' rel='stylesheet' type='text/css'>
   <script type='text/javascript' src='/includes/syntax/scripts/shCore.js'></script>
@@ -29,7 +29,7 @@
 <body onload="return typeof highlight == 'function' ? highlight() : true">
   <div id="structure">
     <div id="banner">
-      <a href="<?php echo $note->home_link ?>">
+      <a href="<?php echo $this->home_link ?>">
       <img src="/images/dylansserver.png" alt="dylansserver"
       border="0"></a>
     </div>
       <div id='notes'>
         <div class='note'>
             <h1><span class='date'>
-              <?php echo "$note->year_posted/$note->month_posted/$note->day_posted/" ?>
-            </span><?php echo $note->title ?></h1>
-            <?php echo $note->text ?>
+              <?php echo "$this->year_posted/$this->month_posted/$this->day_posted/" ?>
+            </span><?php echo $this->title ?></h1>
+            <?php echo $this->text ?>
         </div>
         <br><br><br><br>
         <div id='navigation'>
-          <?php if ($note->comments_enabled) {
-            $note->display_comments();
-            $note->display_comment_form();
+          <?php if ($this->comments_enabled) {
+            $this->display_comments();
+            $this->display_comment_form();
           } ?>
           <h1>
-          <?php if (!$note->comments_enabled) $note->display_comment_link(); ?>
+          <?php if (!$this->comments_enabled) $this->display_comment_link(); ?>
           <a href="/notes/">back to notes/</a>
           </h1>
         </div>
index 8bba8ac..2829668 100644 (file)
@@ -3,7 +3,7 @@
 
 <html>
 <head>
-  <title><?php echo $page->title; ?></title>
+  <title><?php echo $this->title; ?></title>
   <link rel="icon" href="/favicon.ico" type="image/png">
   <link href='/includes/style.css' rel='stylesheet' type='text/css'>
   <script type='text/javascript' src='/includes/syntax/scripts/shCore.js'></script>
 <body onload="return typeof highlight == 'function' ? highlight() : true">
   <div id="structure">
     <div id="banner">
-      <a href="<?php echo $page->home_link ?>">
+      <a href="<?php echo $this->home_link ?>">
       <img src="/images/dylansserver.png" alt="dylansserver"
       border="0"></a>
     </div>
 
     <div id="content">
       <div id='notes'>
-        <?php $page->display_notes() ?>
+        <?php $this->display_notes() ?>
     <div id='navigation'>
     <h1>
     <?php
-    if($page->page > 1){
-      $previous_page = $page->page - 1;
+    if($this->page > 1){
+      $previous_page = $this->page - 1;
       echo "<a href='/notes/page/$previous_page'>prev</a>";
     }
-    if($page->page < $page->number_of_pages) {
-    $forward_page = $page->page + 1;
+    if($this->page < $this->number_of_pages) {
+    $forward_page = $this->page + 1;
     echo " <a href='/notes/page/$forward_page'>next</a>";
     } ?>
     </h1>
index 4e2609b..2f55ca3 100644 (file)
@@ -4,6 +4,6 @@
     <link>http://dylansserver.com/notes</link>
     <description>dylansserver.com/notes/rss</description>
     <atom:link href="http://dylansserver.com/notes/rss" rel="self" type="application/rss+xml" />
-    <?php $rss->display_items() ?>
+    <?php $this->display_items() ?>
   </channel>
 </rss>