diff --git a/coursework-blog/step-6/admin.php b/coursework-blog/step-6/admin.php new file mode 100644 index 0000000000000000000000000000000000000000..91f6afddc026b5755a13e17b0c75368c563d23bf --- /dev/null +++ b/coursework-blog/step-6/admin.php @@ -0,0 +1,30 @@ +<?php +error_reporting( E_ALL ); +ini_set( "display_errors", 1 ); + +include_once "../../../coursework_blog_config.php"; +$db = new PDO( $dbInfo, $dbUser, $dbPassword ); +$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + +$title = "PHP/MySQL blog demo"; +$css="css/blog.css"; +$embeddedStyle = ""; + +include_once "views/header.php"; +include_once "views/admin/admin-navigation.php"; + +$navigation = isset( $_GET['page'] ); +if ( $navigation ) { + //prepare to load corresponding controller + $contrl = $_GET['page']; +} else { + //or prepare to load default controller + $contrl = "entries"; +} +//load the controller +include_once "controllers/admin/$contrl.php"; + +include_once "views/footer.php"; + +?> + diff --git a/coursework-blog/step-6/controllers/admin/editor.php b/coursework-blog/step-6/controllers/admin/editor.php new file mode 100644 index 0000000000000000000000000000000000000000..4effa65124082aece3b8bc1b4b4f3111052195ab --- /dev/null +++ b/coursework-blog/step-6/controllers/admin/editor.php @@ -0,0 +1,38 @@ +<?php + +include_once "models/Blog_Entry_Table.class.php"; +$entryTable = new Blog_Entry_Table( $db ); + +//was editor form submitted? +$editorSubmitted = isset( $_POST['action'] ); +if ( $editorSubmitted ) { + $buttonClicked = $_POST['action']; + //was "save" button clicked + $insertNewEntry = ( $buttonClicked === 'save' ); + + if ( $insertNewEntry ) { + $title = $_POST['title']; + $entry = $_POST['entry']; + //save the new entry + $entryTable->saveEntry( $title, $entry ); + } +} + +$entryRequested = isset( $_GET['id'] ); +if ( $entryRequested ) { + $id = $_GET['id']; + $entryData = $entryTable->getEntry( $id ); + $entryData->entry_id = $id; +// $entryData->message = ""; +} else { + $entryData = new StdClass(); + $entryData->entry_id = 0; + $entryData->title = ""; + $entryData->entry_text = ""; +// $entryData->message = ""; +} + + +include_once "views/admin/editor-html.php"; + +?> diff --git a/coursework-blog/step-6/controllers/admin/entries.php b/coursework-blog/step-6/controllers/admin/entries.php new file mode 100644 index 0000000000000000000000000000000000000000..adf710348c5a3e9b33b3ec2a9a8bb193c7e9fad6 --- /dev/null +++ b/coursework-blog/step-6/controllers/admin/entries.php @@ -0,0 +1,10 @@ +<? + +include_once "models/Blog_Entry_Table.class.php"; +$entryTable = new Blog_Entry_Table( $db ); +$allEntries = $entryTable->getAllEntries(); + +include_once "views/admin/entries-html.php"; + + +?> diff --git a/coursework-blog/step-6/controllers/blog.php b/coursework-blog/step-6/controllers/blog.php new file mode 100644 index 0000000000000000000000000000000000000000..51823f9e6dc517223b0deb9cc598e62909aa7dcf --- /dev/null +++ b/coursework-blog/step-6/controllers/blog.php @@ -0,0 +1,16 @@ +<? +include_once "models/Blog_Entry_Table.class.php"; +$entryTable = new Blog_Entry_Table( $db ); + + +$entryClicked = isset( $_GET['id'] ); +if ($entryClicked ) { + $entryId = $_GET['id']; + $entryData = $entryTable->getEntry( $entryId ); +// print_r($entryData); + include_once "views/entry-html.php"; +} else { + $entries = $entryTable->getallentries(); + include_once "views/list-entries-html.php"; +} +?> diff --git a/coursework-blog/step-6/coursework-blog.sql b/coursework-blog/step-6/coursework-blog.sql new file mode 100644 index 0000000000000000000000000000000000000000..61ba3ff71306180219cf21698d4129ce56252898 --- /dev/null +++ b/coursework-blog/step-6/coursework-blog.sql @@ -0,0 +1,8 @@ +-- this will create a table for blog entries +CREATE TABLE blog_entry ( + entry_id INT NOT NULL AUTO_INCREMENT, + title VARCHAR( 150 ), + entry_text TEXT, + date_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY ( entry_id ) +) diff --git a/coursework-blog/step-6/css/blog.css b/coursework-blog/step-6/css/blog.css new file mode 100644 index 0000000000000000000000000000000000000000..c1b6d0670a8fd4ef1d0b8d9b856a04639d5d583e --- /dev/null +++ b/coursework-blog/step-6/css/blog.css @@ -0,0 +1,24 @@ +/* code listing for blog/css/blog.css */ +form#editor{ + width: 300px; + margin:0px; + padding:0px; +} + +form#editor label, form#editor input[type='text']{ + display:block; +} + +form#editor #editor-buttons{ + border:none; + text-align:right; +} + +form#editor textarea, form#editor input[type='text']{ + width:90%; + margin-bottom:2em; +} + +form#editor textarea{ + height:10em; +} diff --git a/coursework-blog/step-6/index.php b/coursework-blog/step-6/index.php new file mode 100644 index 0000000000000000000000000000000000000000..d15e46128c23bde74a1f5f5130449f4f805659a7 --- /dev/null +++ b/coursework-blog/step-6/index.php @@ -0,0 +1,19 @@ +<?php +error_reporting( E_ALL ); +ini_set( "display_errors", 1 ); + +include_once "../../../coursework_blog_config.php"; +$db = new PDO( $dbInfo, $dbUser, $dbPassword ); +$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + +$title = "PHP/MySQL blog demo"; +$css="css/blog.css"; +$embeddedStyle = ""; +include_once "views/header.php"; + +include_once "controllers/blog.php"; + +include_once "views/footer.php"; + +?> + diff --git a/coursework-blog/step-6/models/Blog_Entry_Table.class.php b/coursework-blog/step-6/models/Blog_Entry_Table.class.php new file mode 100644 index 0000000000000000000000000000000000000000..2063813168d498ca4037f4ad16ad0ffa1aafc8d5 --- /dev/null +++ b/coursework-blog/step-6/models/Blog_Entry_Table.class.php @@ -0,0 +1,53 @@ +<?php +class Blog_Entry_Table { + private $db; + + + public function __construct ( $db ) { + $this->db = $db; + } + + public function saveEntry ( $title, $entry ) { + $entrySQL = "INSERT INTO blog_entry ( title, entry_text ) + VALUES ( ?, ?)"; + $entryStatement = $this->db->prepare( $entrySQL ); + $formData = array( $title, $entry ); + try{ + $entryStatement->execute( $formData ); + } catch (Exception $e){ + $msg = "<p>You tried to run this sql: $entrySQL<p> + <p>Exception: $e</p>"; + trigger_error($msg); + } + } + + public function getAllEntries () { + $sql = "SELECT entry_id, title, SUBSTRING(entry_text, 1, 150) AS intro FROM blog_entry"; + $statement = $this->makeStatement($sql); + return $statement; + } + + + public function getEntry( $id ){ + $sql = "SELECT entry_id, title, entry_text, date_created FROM blog_entry WHERE entry_id = ?"; + $data = array($id); + $statement = $this->makeStatement( $sql, $data); + $model = $statement->fetchObject(); + return $model; + } + + public function makeStatement( $sql, $data = NULL) { + $statement = $this->db->prepare( $sql ); + try{ + $statement->execute( $data ); + } catch (Exception $e) { + $exceptionMessage = "<p>You tried to run this sql: $sql <p> + <p>Exception: $e</p>"; + trigger_error($exceptionMessage); + } + return $statement; + } + +} + +?> diff --git a/coursework-blog/step-6/views/admin/admin-navigation.php b/coursework-blog/step-6/views/admin/admin-navigation.php new file mode 100644 index 0000000000000000000000000000000000000000..c58b361f5687bc015c0bb084ec1adcfdf87c0c23 --- /dev/null +++ b/coursework-blog/step-6/views/admin/admin-navigation.php @@ -0,0 +1,11 @@ +<?php + +$out = " +<nav id='admin-navigation'> + <a href='admin.php?page=entries'>All entries</a> + <a href='admin.php?page=editor'>Editor</a> +</nav>"; + +echo $out; + +?> diff --git a/coursework-blog/step-6/views/admin/editor-html.php b/coursework-blog/step-6/views/admin/editor-html.php new file mode 100644 index 0000000000000000000000000000000000000000..bf86ba2747d1df2ea2e63ef21412315e0f2d8a2a --- /dev/null +++ b/coursework-blog/step-6/views/admin/editor-html.php @@ -0,0 +1,23 @@ +<?php + +$out = " +<form method='post' action='admin.php?page=editor' id='editor'> + <input type='hidden' name='id' value='$entryData->entry_id' /> + <fieldset> + <legend>New Entry Submission</legend> + <label>Title</label> + <input type='text' name='title' maxlength='150' value='$entryData->title' required /> + + <label>Entry</label> + <textarea name='entry'>$entryData->entry_text</textarea> + + <fieldset id='editor-buttons'> + <input type='submit' name='action' value='save' /> + </fieldset> + </fieldset> +</form> +"; + +echo $out; + +?> diff --git a/coursework-blog/step-6/views/admin/entries-html.php b/coursework-blog/step-6/views/admin/entries-html.php new file mode 100644 index 0000000000000000000000000000000000000000..2097a76b3afa1ec464ca5dccfc984d5ad63cfafe --- /dev/null +++ b/coursework-blog/step-6/views/admin/entries-html.php @@ -0,0 +1,16 @@ +<?php + +if ( isset( $allEntries ) === false ) { +trigger_error('views/admin/entries-html.php needs $allEntries'); +} + +$entriesAsHTML = "<ul>"; +while ( $entry = $allEntries->fetchObject() ) { + $href = "admin.php?page=editor&id=$entry->entry_id"; + $entriesAsHTML .= "<li><a href='$href'>$entry->title</a></li>"; +} + +$entriesAsHTML .= "</ul>"; +echo $entriesAsHTML; + +?> diff --git a/coursework-blog/step-6/views/entry-html.php b/coursework-blog/step-6/views/entry-html.php new file mode 100644 index 0000000000000000000000000000000000000000..44c629f34b48ce2b432a58a5fe9c6b0fd8c83e80 --- /dev/null +++ b/coursework-blog/step-6/views/entry-html.php @@ -0,0 +1,14 @@ +<?php + +//check if required data is available +$entryDataFound = isset( $entryData ); +if ( $entryDataFound === false ) { + trigger_error('views/entry-html.php needs an $entryData object'); +} +//properties available in $entry: entry_id, title, entry_text, date_created + +echo "<article> + <h1>$entryData->title</h1> + <div class='date'>$entryData->date_created</div> + $entryData->entry_text +</article>"; diff --git a/coursework-blog/step-6/views/footer.php b/coursework-blog/step-6/views/footer.php new file mode 100644 index 0000000000000000000000000000000000000000..e7373f51428a6aa5ef1ffa5d974b7d30d633c526 --- /dev/null +++ b/coursework-blog/step-6/views/footer.php @@ -0,0 +1,8 @@ +<?php +$out = " +</body> +</html> +"; + +echo $out; +?> diff --git a/coursework-blog/step-6/views/header.php b/coursework-blog/step-6/views/header.php new file mode 100644 index 0000000000000000000000000000000000000000..4c5a94f334184fa5e665e83abf16d0407fc05c98 --- /dev/null +++ b/coursework-blog/step-6/views/header.php @@ -0,0 +1,12 @@ +<?php +$out = "<!DOCTYPE html> +<html> + <head> + <title>$title</title> + <meta http-equiv='Content-Type' content='text/html;charset=utf-8' /> + <link rel='stylesheet' type='text/css' href='$css'> + <link rel='stylesheet' type='text/css' href='$embeddedStyle'> + </head>"; + +echo $out; +?> diff --git a/coursework-blog/step-6/views/list-entries-html.php b/coursework-blog/step-6/views/list-entries-html.php new file mode 100644 index 0000000000000000000000000000000000000000..f568bc89d29cae908caedf77b8d659b17599da94 --- /dev/null +++ b/coursework-blog/step-6/views/list-entries-html.php @@ -0,0 +1,24 @@ +<?php + +$entriesFound = isset( $entries ); +if ( $entriesFound === false ) { + trigger_error( 'views/list-entries-html.php needs $entries' ); +} + +$entriesHTML = "<ul id='blog-entries'>"; + +while ( $entry = $entries->fetchObject() ) { + $href = "index.php?page=blog&id=$entry->entry_id"; + //create an <li> for each of the entries + $entriesHTML .= "<li> + <h2>$entry->title</h2> + <div>$entry->intro + <p><a href='$href'>Read more</a></p> + </div> + </li>"; +} +$entriesHTML .= "</ul>"; + +echo $entriesHTML; + +?>