Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
$sanders_includes = array(
'lib/init.php',
'lib/assets.php',
'lib/admin/messages/init.php',
'lib/admin/messages/service.php',
'lib/admin/messages/table.php',
'lib/admin/messages/model.php',
'lib/services/news/remote_news_feed.php',
'lib/services/news/news_feed.php',
'lib/services/events/remote_events.php',
Expand Down
15 changes: 15 additions & 0 deletions lib/admin/messages/init.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php
namespace SandersForPresident\Wordpress\Admin\Messages\Init;

function register_menus() {
add_menu_page('Messages', 'Messages', 'manage_options', 'contact_messages', __NAMESPACE__ . '\\render_page', 'dashicons-email');
}
add_action('admin_menu', __NAMESPACE__ . '\\register_menus');

function render_page() {
if (isset($_REQUEST['post'])) {
include_once(__DIR__ . '/views/message.php');
} else {
include_once(__DIR__ . '/views/messages.php');
}
}
26 changes: 26 additions & 0 deletions lib/admin/messages/model.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace SandersForPresident\Wordpress\Admin\Messages;

class MessageModel {
public $id;
public $title;
public $body;
public $read;
public $date;
public $from;

public function __construct($args=array()) {
foreach ($args as $key=>$val) {
$this->$key = $val;
}
}

public function getDate() {
return date('F d, Y h:ia', $this->date);
}

public function getBody() {
return apply_filters('the_content', $this->body);
}
}
27 changes: 27 additions & 0 deletions lib/admin/messages/service.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace SandersForPresident\Wordpress\Admin\Messages;

class MessageService {
const POST_TYPE_SLUG = 'contact_message';

private $mocks = array();

public function __construct() {
$this->mocks[0] = new MessageModel(array('id' => 1, 'title' => 'A new message', 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum posuere iaculis consequat. Donec eget metus in urna egestas tempor. Maecenas suscipit ullamcorper ipsum sit amet egestas. Suspendisse malesuada magna sit amet lorem imperdiet accumsan. Pellentesque ornare iaculis interdum. Nam varius malesuada ipsum vitae convallis. Quisque luctus ligula dui, nec fermentum eros tincidunt ac. Fusce non imperdiet nisi, a venenatis turpis. Aenean a convallis lacus. Nam at turpis eget mi sodales imperdiet. Proin eleifend justo vel lectus fermentum volutpat. Maecenas ullamcorper posuere risus vel bibendum. Vestibulum sagittis hendrerit tincidunt.', 'read' => false, 'date' => time(), 'from' => array('name' => 'Atticus White', 'email' => '[email protected]')));
$this->mocks[1] = new MessageModel(array('id' => 2, 'title' => 'Another meessage', 'body' => 'This is just another one', 'read' => true, 'date' => time(), 'from' => array('name' => 'Atticus White', 'email' => '[email protected]')));
}

public function getMessages() {
return $this->mocks;
}

public function getMessage($id) {
foreach ($this->mocks as $mock) {
if ($mock->id == $id) {
return $mock;
}
}
return null;
}
}
85 changes: 85 additions & 0 deletions lib/admin/messages/table.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php
namespace SandersForPresident\Wordpress\Admin\Messages;

if(!class_exists('WP_List_Table')){
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
}

use WP_List_Table;

class MessageTable extends WP_List_Table {
private $service;

public function __construct() {
parent::__construct(array(
'singular' => 'Message',
'plural' => 'Messages',
'ajax' => false
));
$this->service = new MessageService();
}

public function get_columns() {
return array(
'cb' => '<input type="checkbox" />',
'message_title' => 'Title',
'message_from' => 'From',
'message_date' => 'Date'
);
}

public function get_views() {
return array(
'all' => '<a href="#">All</a>',
'trash' => '<a href="#">Trash</a>'
);
}

public function column_cb($item) {
return "<input type=\"checkbox\" name=\"message[]\" value=\"{$item->id}\" />";
}

public function column_message_title($item) {
if (!$item->read) {
$title = "<strong>{$item->title}</strong>";
} else {
$title = $item->title;
}

$actions = array(
'view' => "<a href=\"?page={$_REQUEST['page']}&action=view&post={$item->id}\">View</a>"
);
return $title . $this->row_actions($actions, false);
}

public function column_message_from($item) {
$name = $item->from['name'];
$email = "<a href=\"mailto:{$item->from['email']}\">{$item->from['email']}</a>";
return $name . "<br/>" . $email;
}

public function column_message_date($item) {
return $item->getDate();
}

public function get_sortable_columns() {
return array(
'message_title' => array('message_title', false)
);
}

public function get_bulk_actions() {
return array(
'delete' => 'Delete'
);
}

public function prepare_items() {
$this->_column_headers = array($this->get_columns(), array(), array());
$this->items = $this->service->getMessages();
$this->set_pagination_args(array(
'total_items' => count($this->items),
'per_page' => 10
));
}
}
59 changes: 59 additions & 0 deletions lib/admin/messages/views/message.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php
use SandersForPresident\Wordpress\Admin\Messages\MessageService;
$service = new MessageService();
$message = $service->getMessage($_REQUEST['post']);
?>

<div class="wrap">

<h2>View Message</h2>

<div id="poststuff">
<div id="post-body" class="columns-2">

<div id="post-body-content">
<div class="postbox">
<h3 class="hndle "><?php echo $message->title; ?></h3>
<div class="inside">
<?php echo $message->getBody(); ?>
</div>
</div>
</div>

<div id="postbox-container-1">
<div id="submitdiv" class="postbox">
<h3 class="hndle">Message Information</h3>
<div class="inside">
<div id="submitpost" class="submitbox">

<div id="misc-publishing-actions">
<div class="misc-pub-section">
<label style="font-weight:bold;">From:</label>
<span><?php echo $message->from['name']; ?></span>
</div>
<div class="misc-pub-section">
<label style="font-weight:bold;">Email:</label>
<span><?php echo $message->from['email']; ?></span>
</div>
<div class="misc-pub-section">
<label style="font-weight:bold;">Date:</label>
<span><?php echo $message->getDate(); ?></span>
</div>
</div>

<div id="major-publishing-actions">
<div id="delete-action">
<a href="#" class="submitdelete deletion">Trash</a>
</div>
<div id="publishing-action">
<input type="button" value="Okay" id="publish" class="button button-primary button-large" />
</div>
<div class="clear"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
14 changes: 14 additions & 0 deletions lib/admin/messages/views/messages.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php
use SandersForPresident\Wordpress\Admin\Messages\MessageTable;
$table = new MessageTable();
$table->prepare_items();
?>

<div class="wrap">
<h2>Messages</h2>

<form method="post">
<?php $table->views(); ?>
<?php $table->display(); ?>
</form>
</div>
19 changes: 19 additions & 0 deletions lib/init.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,22 @@ function acf_json_load($paths) {
return $paths;
}
add_filter('acf/settings/load_json', __NAMESPACE__ . '\\acf_json_load');

/**
* Custom post types
*/
function custom_post_types() {
$args = array (
'labels' => array(
'name' => 'Messages',
'singular_name' => 'Message'
),
'public' => false,
'publicly_queryable' => false,
'show_ui' => false,
'show_in_menu' => false,
'query_var' => false
);
register_post_type('contact_message', $args);
}
add_action('init', __NAMESPACE__ . '\\custom_post_types');