Bugfixes and Bootstrap 5 finalized

This commit is contained in:
Joey Kimsey
2024-12-17 22:57:55 -05:00
parent 2220c6cda3
commit a859fb7ace
79 changed files with 2011 additions and 1597 deletions

View File

@ -20,15 +20,14 @@ use TheTempusProject\Houdini\Classes\Navigation;
use TheTempusProject\Houdini\Classes\Components;
use TheTempusProject\Classes\AdminController;
use TheTempusProject\Classes\Forms;
use TheTempusProject\Plugins\Blog as BlogPlugin;
use TheTempusProject\Models\Posts;
class Blog extends AdminController {
public static $posts;
public function __construct() {
parent::__construct();
$blog = new BlogPlugin;
self::$posts = $blog->posts;
self::$posts = new Posts;
self::$title = 'Admin - Blog';
$view = Navigation::activePageSelect( 'nav.admin', '/admin/blog' );
Components::set( 'ADMINNAV', $view );

View File

@ -27,17 +27,16 @@ use TheTempusProject\Plugins\Blog as BlogPlugin;
use TheTempusProject\TheTempusProject as App;
use TheTempusProject\Plugins\Comments;
use TheTempusProject\Models\Comments as CommentsModel;
use TheTempusProject\Models\Posts as PostsModel;
class Blog extends Controller {
protected static $blog;
protected static $comments;
protected static $posts;
public function __construct() {
parent::__construct();
Template::setTemplate( 'blog' );
$blog = new BlogPlugin;
self::$posts = $blog->posts;
self::$posts = new PostsModel;
}
public function index() {
@ -57,39 +56,41 @@ class Blog extends Controller {
public function comments( $sub = null, $data = null ) {
Debug::log( 'Controller initiated: ' . __METHOD__ . '.' );
if ( empty( self::$comments ) ) {
self::$comments = new CommentsModel;
}
$plugin = new Comments;
if ( empty( $sub ) || empty( $data ) ) {
Session::flash( 'error', 'Whoops, try again.' );
Redirect::to( 'blog' );
Issues::add( 'error', 'There was an issue with your request. Please check the url and try again.' );
return $this->index();
}
$plugin = new Comments;
if ( ! $plugin->checkEnabled() ) {
Issues::add( 'error', 'Comments are disabled.' );
return $this->index();
}
$comments = new CommentsModel;
switch ( $sub ) {
case 'post':
$content = self::$posts->findById( (int) $data );
if ( empty( $content ) ) {
Session::flash( 'error', 'Unknown Post.' );
Redirect::to( 'blog' );
Issues::add( 'error', 'Unknown Content.' );
return $this->index();
}
return $plugin->formPost( self::$posts->tableName, $content, 'blog/post/' );
return self::$comments->formPost( 'blog', $content, 'blog/post/' );
case 'edit':
$content = self::$comments->findById( $data );
$content = $comments->findById( $data );
if ( empty( $content ) ) {
Session::flash( 'error', 'Unknown Comment.' );
Redirect::to( 'blog' );
Issues::add( 'error', 'Unknown Comment.' );
return $this->index();
}
return $plugin->formEdit( self::$posts->tableName, $content, 'blog/post/' );
return self::$comments->formEdit( 'blog', $content, 'blog/post/' );
case 'delete':
$content = self::$comments->findById( $data );
$content = $comments->findById( $data );
if ( empty( $content ) ) {
Session::flash( 'error', 'Unknown Comment.' );
Redirect::to( 'blog' );
Issues::add( 'error', 'Unknown Comment.' );
return $this->index();
}
return $plugin->formDelete( self::$posts->tableName, $content, 'blog/post/' );
return self::$comments->formDelete( 'blog', $content, 'blog/post/' );
}
}
@ -101,26 +102,34 @@ class Blog extends Controller {
if ( empty( $post ) ) {
return $this->index();
}
if ( empty( self::$comments ) ) {
self::$comments = new CommentsModel;
}
Debug::log( 'Controller initiated: ' . __METHOD__ . '.' );
self::$title = 'Blog Post';
// I removed this once because i didn't realize.
// this triggers the comment post controller method when the comment form is submitted on the post viewing page
if ( Input::exists( 'contentId' ) ) {
$this->comments( 'post', Input::post( 'contentId' ) );
}
Components::set( 'CONTENT_ID', $id );
Components::set( 'COMMENT_TYPE', 'blog' );
if ( App::$isLoggedIn ) {
Components::set( 'NEWCOMMENT', Views::simpleView( 'comments.create' ) );
} else {
Components::set( 'COMMENT_TYPE', self::$posts->tableName );
$plugin = new Comments;
if ( ! $plugin->checkEnabled() ) {
Components::set( 'NEWCOMMENT', '' );
Components::set( 'count', '0' );
Components::set( 'COMMENTS', '' );
} else {
$comments = new CommentsModel;
if ( App::$isLoggedIn ) {
Components::set( 'NEWCOMMENT', Views::simpleView( 'comments.create' ) );
} else {
Components::set( 'NEWCOMMENT', '' );
}
Components::set( 'count', $comments->count( self::$posts->tableName, $post->ID ) );
Components::set( 'COMMENTS', Views::simpleView( 'comments.list', $comments->display( 10, self::$posts->tableName, $post->ID ) ) );
}
$post = self::$posts->findById( $id );
Components::set( 'count', self::$comments->count( self::$posts->tableName, $post->ID ) );
Components::set( 'COMMENTS', Views::simpleView( 'comments.list', self::$comments->display( 10, self::$posts->tableName, $post->ID ) ) );
self::$title .= ' - ' . $post->title;
self::$pageDescription = strip_tags( $post->contentSummaryNoLink );
Views::view( 'blog.post', $post );

View File

@ -12,12 +12,7 @@
*/
namespace TheTempusProject\Plugins;
use ReflectionClass;
use TheTempusProject\Classes\Installer;
use TheTempusProject\Houdini\Classes\Navigation;
use TheTempusProject\Classes\Plugin;
use TheTempusProject\Models\Posts;
use TheTempusProject\TheTempusProject as App;
class Blog extends Plugin {
public $pluginName = 'TP Blog';
@ -50,10 +45,4 @@ class Blog extends Plugin {
],
],
];
public $posts;
public function __construct( $load = false ) {
$this->posts = new Posts;
parent::__construct( $load );
}
}

View File

@ -12,7 +12,7 @@
*/
namespace TheTempusProject\Templates;
use TheTempusProject\Plugins\Blog;
use TheTempusProject\Models\Posts;
use TheTempusProject\Houdini\Classes\Components;
use TheTempusProject\Houdini\Classes\Navigation;
use TheTempusProject\Houdini\Classes\Views;
@ -25,8 +25,7 @@ class BlogLoader extends DefaultLoader {
* needed by this template.
*/
public function __construct() {
$blog = new Blog;
$posts = $blog->posts;
$posts = new Posts;
Components::set('SIDEBAR', Views::simpleView('blog.sidebar', $posts->recent(5)));
Components::set('SIDEBAR2', Views::simpleView('blog.sidebar2', $posts->archive()));
Components::set('SIDEBARABOUT', Views::simpleView('blog.about'));

View File

@ -1,31 +1,47 @@
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
<legend>New Blog Post</legend>
<div class="form-group">
<label for="title" class="col-lg-3 control-label">Title</label>
<div class="col-lg-3">
<input type="text" class="form-check-input" name="title" id="title">
<div class="context-main-bg context-main p-3">
<legend class="text-center">Add Blog Post</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="" method="post">
<fieldset>
<!-- Title -->
<div class="mb-3 row">
<label for="title" class="col-lg-3 col-form-label text-end">Title:</label>
<div class="col-lg-6">
<input type="text" class="form-control" name="title" id="title" required>
</div>
</div>
<!-- form buttons -->
<div class="mb-3 row">
<div class="offset-3 col-lg-6">
<div class="btn-group w-100">
<button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag ('blogPost', 'c');">&#10004;</button>
<button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag ('blogPost', 'x');">&#10006;</button>
<button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag ('blogPost', '!');">&#10069;</button>
<button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag ('blogPost', '?');">&#10068;</button>
</div>
</div>
</div>
<!-- Message -->
<div class="mb-3 row">
<label for="blogPost" class="col-lg-3 col-form-label text-end">Post:</label>
<div class="col-lg-6">
<textarea class="form-control" name="blogPost" id="blogPost" rows="6" maxlength="2000" required></textarea>
<small class="form-text text-muted">Max: 2000 characters</small>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
</fieldset>
<!-- Submit Button -->
<div class="text-center">
<button name="submit" value="publish" type="submit" class="mx-2 btn btn-lg btn-primary">Publish</button>
<button name="submit" value="saveDraft" type="submit" class="mx-2 btn btn-lg btn-primary">Save as Draft</button>
<button name="submit" value="preview" type="submit" class="mx-2 btn btn-lg btn-primary">Preview</button>
</div>
</div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3 btn-group">
<button type="button" class="btn btn-sm btn-primary" onclick="insertTag ('blogPost', 'c');">&#10004;</button>
<button type="button" class="btn btn-sm btn-primary" onclick="insertTag ('blogPost', 'x');">&#10006;</button>
<button type="button" class="btn btn-sm btn-primary" onclick="insertTag ('blogPost', '!');">&#10069;</button>
<button type="button" class="btn btn-sm btn-primary" onclick="insertTag ('blogPost', '?');">&#10068;</button>
</div>
</div>
<div class="form-group">
<label for="blogPost" class="col-lg-3 control-label">Post</label>
<div class="col-lg-6">
<textarea class="form-control" name="blogPost" maxlength="2000" rows="10" cols="50" id="blogPost"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3">
<button name="submit" value="publish" type="submit" class="btn btn-lg btn-primary">Publish</button>
<button name="submit" value="saveDraft" type="submit" class="btn btn-lg btn-primary">Save as Draft</button>
<button name="submit" value="preview" type="submit" class="btn btn-lg btn-primary">Preview</button>
</div>
</div>
<input type="hidden" name="token" value="{TOKEN}">
</form>
</form>
</div>

View File

@ -1,31 +1,47 @@
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
<legend>Edit Blog Post</legend>
<div class="form-group">
<label for="title" class="col-lg-3 control-label">Title</label>
<div class="col-lg-3">
<input type="text" class="form-check-input" name="title" id="title" value="{title}">
<div class="context-main-bg context-main p-3">
<legend class="text-center">Edit Blog Post</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="" method="post">
<fieldset>
<!-- Title -->
<div class="mb-3 row">
<label for="title" class="col-lg-3 col-form-label text-end">Title:</label>
<div class="col-lg-6">
<input type="text" class="form-control" name="title" id="title" value="{title}" required>
</div>
</div>
<!-- form buttons -->
<div class="mb-3 row">
<div class="offset-3 col-lg-6">
<div class="btn-group w-100">
<button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag ('blogPost', 'c');">&#10004;</button>
<button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag ('blogPost', 'x');">&#10006;</button>
<button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag ('blogPost', '!');">&#10069;</button>
<button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag ('blogPost', '?');">&#10068;</button>
</div>
</div>
</div>
<!-- Message -->
<div class="mb-3 row">
<label for="blogPost" class="col-lg-3 col-form-label text-end">Post:</label>
<div class="col-lg-6">
<textarea class="form-control" name="blogPost" id="blogPost" rows="6" maxlength="2000" required>{content}</textarea>
<small class="form-text text-muted">Max: 2000 characters</small>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
</fieldset>
<!-- Submit Button -->
<div class="text-center">
<button name="submit" value="publish" type="submit" class="mx-2 btn btn-lg btn-primary">Publish</button>
<button name="submit" value="saveDraft" type="submit" class="mx-2 btn btn-lg btn-primary">Save as Draft</button>
<button name="submit" value="preview" type="submit" class="mx-2 btn btn-lg btn-primary">Preview</button>
</div>
</div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3 btn-group">
<button type="button" class="btn btn-sm btn-primary" onclick="insertTag ('blogPost', 'c');">&#10004;</button>
<button type="button" class="btn btn-sm btn-primary" onclick="insertTag ('blogPost', 'x');">&#10006;</button>
<button type="button" class="btn btn-sm btn-primary" onclick="insertTag ('blogPost', '!');">&#10069;</button>
<button type="button" class="btn btn-sm btn-primary" onclick="insertTag ('blogPost', '?');">&#10068;</button>
</div>
</div>
<div class="form-group">
<label for="blogPost" class="col-lg-3 control-label">Post</label>
<div class="col-lg-6">
<textarea class="form-control" name="blogPost" maxlength="2000" rows="10" cols="50" id="blogPost">{content}</textarea>
</div>
</div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3">
<button name="submit" value="publish" type="submit" class="btn btn-lg btn-primary">Publish</button>
<button name="submit" value="saveDraft" type="submit" class="btn btn-lg btn-primary">Save as Draft</button>
<button name="submit" value="preview" type="submit" class="btn btn-lg btn-primary">Preview</button>
</div>
</div>
<input type="hidden" name="token" value="{TOKEN}">
</form>
</form>
</div>

View File

@ -1,45 +1,48 @@
<legend>Blog Posts</legend>
{PAGINATION}
<form action="{ROOT_URL}admin/blog/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 30%">Title</th>
<th style="width: 20%">Author</th>
<th style="width: 10%">comments</th>
<th style="width: 10%">Created</th>
<th style="width: 10%">Updated</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 10%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.b" value="B_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td><a href="{ROOT_URL}admin/blog/view/{ID}">{title}</a>{isDraft}</td>
<td>{authorName}</td>
<td>{commentCount}</td>
<td>{DTC}{created}{/DTC}</td>
<td>{DTC}{edited}{/DTC}</td>
<td><a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="B_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td colspan="7">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<a href="{ROOT_URL}admin/blog/create" class="btn btn-sm btn-primary">Create</a>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button>
</form>
<div class="context-main-bg context-main p-3">
<legend class="text-center">Blog Posts</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/blog/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 30%">Title</th>
<th style="width: 20%">Author</th>
<th style="width: 10%">comments</th>
<th style="width: 10%">Created</th>
<th style="width: 10%">Updated</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 10%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.b" value="B_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td><a href="{ROOT_URL}admin/blog/view/{ID}">{title}</a>{isDraft}</td>
<td>{authorName}</td>
<td>{commentCount}</td>
<td>{DTC}{created}{/DTC}</td>
<td>{DTC}{edited}{/DTC}</td>
<td><a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="B_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td colspan="7">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<a href="{ROOT_URL}admin/blog/create" class="btn btn-sm btn-primary">Create</a>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form>
</div>

View File

@ -1,9 +1,14 @@
<div class="row">
<div class="col-sm-8 blog-main">
<h1>{title} <small>{DTC}{created}{/DTC} by <a href="{ROOT_URL}admin/users/view/{author}">{authorName}</a></small></h1>
<div class="well">{content}</div>
<a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-md btn-danger">Delete</a>
<a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-md btn-warning">Edit</a>
<div class="context-main-bg context-main p-3">
<legend class="text-center">Blog Post: {title}</legend>
<hr>
{ADMIN_BREADCRUMBS}
<p class="blog-post-meta">{DTC date}{created}{/DTC} by <a href="{ROOT_URL}admin/users/view/{author}">{authorName}</a></p>
<div class="well">{content}</div>
{ADMIN}
<hr>
<a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-md btn-danger"><i class="fa fa-fw fa-trash"></i></a>
<a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-md btn-warning"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{ROOT_URL}admin/comments/blog/{ID}" class="btn btn-md btn-primary">View Comments</a>
</div><!-- /.blog-main -->
</div><!-- /.row -->
<hr>
{/ADMIN}
</div>

View File

@ -7,8 +7,8 @@
{content}
{ADMIN}
<hr>
<a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-md btn-danger">Delete</a>
<a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-md btn-warning">Edit</a>
<a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-md btn-danger"><i class="fa fa-fw fa-trash"></i></a>
<a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-md btn-warning"><i class="fa fa-fw fa-pencil"></i></a>
<hr>
{/ADMIN}
</div><!-- /.blog-post -->

View File

@ -41,7 +41,7 @@ class Bugreport extends Controller {
return Views::view( 'bugreport.create' );
}
$result = self::$bugreport->create( App::$activeUser->ID, Input::post( 'url' ), Input::post( 'ourl' ), Input::post( 'repeat' ), Input::post( 'entry' ) );
if ( true === $result ) {
if ( false != $result ) {
Session::flash( 'success', 'Your Bug Report has been received. We may contact you for more information at the email address you provided.' );
Redirect::to( 'home/index' );
} else {

View File

@ -1,42 +1,45 @@
<legend>Bug Reports</legend>
{PAGINATION}
<form action="{ROOT_URL}admin/bugreport/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 5%">ID</th>
<th style="width: 20%">Time</th>
<th style="width: 60%">Description</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.br" value="BR_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td align="center">{ID}</td>
<td align="center">{DTC}{time}{/DTC}</td>
<td>{description}</td>
<td><a href="{ROOT_URL}admin/bugreport/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}admin/bugreport/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="BR_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td align="center" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button>
</form>
<br />
<a href="{ROOT_URL}admin/bugreport/clear">clear all</a>
<div class="context-main-bg context-main p-3">
<legend class="text-center">Bug Reports</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/bugreport/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 5%">ID</th>
<th style="width: 20%">Time</th>
<th style="width: 60%">Description</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.br" value="BR_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td align="center">{ID}</td>
<td align="center">{DTC}{time}{/DTC}</td>
<td>{description}</td>
<td><a href="{ROOT_URL}admin/bugreport/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}admin/bugreport/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="BR_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td align="center" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form>
<br />
<a href="{ROOT_URL}admin/bugreport/clear">clear all</a>
</div>

View File

@ -1,64 +1,69 @@
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad bg-dark" >
<div class="card">
<div class="card-header">
<h3 class="card-title">Bug Report</h3>
</div>
<div class="card-body">
<div class="row">
<div class=" col-md-12 col-lg-12 ">
<table class="table table-user-primary">
<tbody>
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-md-8">
{ADMIN_BREADCRUMBS}
<div class="card shadow">
<!-- Card Header -->
<div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">Bug Report</h3>
</div>
<!-- Card Body -->
<div class="card-body">
<div class="row align-items-center">
<!-- Log Details -->
<table class="table table-borderless">
<tbody>
<tr>
<th scope="row">ID:</th>
<td>{ID}</td>
</tr>
<tr>
<td align="left" width="200"><b>ID</b></td>
<td align="right">{ID}</td>
<th scope="row">Time submitted</th>
<td>{DTC}{time}{/DTC}</td>
</tr>
<tr>
<td><b>Time submitted</b></td>
<td align="right">{DTC}{time}{/DTC}</td>
<th scope="row">URL:</th>
<td><a href="{URL}">{URL}</a></td>
</tr>
<tr>
<td><b>Submitted by</b></td>
<td align="right"><a href="{ROOT_URL}admin/users/view/{userID}">{submittedBy}</a></td>
<th scope="row">Original URL</th>
<td><a href="{OURL}">{OURL}</a></td>
</tr>
<tr>
<td><b>IP</b></td>
<td align="right">{ip}</td>
<th scope="row">Multiple occurrences?</th>
<td>{repeatText}</td>
</tr>
<tr>
<th scope="row">IP:</th>
<td>{ip}</td>
</tr>
<tr>
<th scope="row">User:</th>
<td><a href="{ROOT_URL}admin/users/view/{userID}">{submittedBy}</a></td>
</tr>
<tr>
<td><b>URL:</b></td>
<td align="right"><a href="{URL}">{URL}</a></td>
</tr>
<tr>
<td><b>Original URL</b></td>
<td align="right"><a href="{OURL}">{OURL}</a></td>
</tr>
<tr>
<td><b>Multiple occurrences?</b></td>
<td align="right">{repeatText}</td>
</tr>
<tr>
<td align="center" colspan="2"><b>Description</b></td>
<th scope="row" colspan="2">Description:</th>
</tr>
<tr>
<td colspan="2">{description}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card-footer">
</tbody>
</table>
</div>
</div>
<!-- Admin Controls -->
<div class="card-footer text-center">
{ADMIN}
<form action="{ROOT_URL}admin/bugreport/delete" method="post">
<INPUT type="hidden" name="BR_" value="{ID}"/>
<input type="hidden" name="token" value="{TOKEN}" />
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-times"></i></button>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form>
{/ADMIN}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -49,9 +49,13 @@ class Comments extends AdminController {
$this->index();
}
public function viewComment( $data = null ) {
$commentData = self::$comments->findById( $data );
if ( $commentData !== false ) {
public function viewComments( $contentIID = null ) {
if ( empty( $contentIID ) ) {
Issues::add( 'error', 'Content ID not found.' );
return $this->index();
}
$contentData = self::$comments->findById( $data );
if ( empty( $contentIID ) ) {
return Views::view( 'comments.list', $commentData );
}
Issues::add( 'error', 'Comment not found.' );

View File

@ -25,9 +25,10 @@ use TheTempusProject\Houdini\Classes\Views;
use TheTempusProject\Classes\Forms;
use TheTempusProject\Hermes\Functions\Redirect;
use TheTempusProject\Bedrock\Functions\Session;
use TheTempusProject\Models\Comments as CommentModel;
use TheTempusProject\Models\Comments as CommentsModel;
class Comments extends Plugin {
protected static $comments;
public $pluginName = 'TP Comments';
public $pluginAuthor = 'JoeyK';
public $pluginWebsite = 'https://TheTempusProject.com';
@ -61,7 +62,6 @@ class Comments extends Plugin {
]
],
];
public $comments;
public function __construct( $load = false ) {
if ( !empty(App::$activePerms) ) {
@ -75,11 +75,16 @@ class Comments extends Plugin {
'replace' => ( App::$isMod ? '$1' : '' ),
'enabled' => true,
];
$this->getModel();
self::$comments = new CommentsModel;
parent::__construct( $load );
}
public function formPost( $type, $content, $redirect ) {
if ( ! $this->checkEnabled() ) {
Debug::info( 'Comments Plugin is disabled in the control panel.' );
Issues::add( 'error', 'Comments are disabled.' );
return false;
}
if ( !App::$isLoggedIn ) {
Session::flash( 'notice', 'You must be logged in to post comments.' );
return Redirect::to( $redirect . $content->ID );
@ -88,7 +93,7 @@ class Comments extends Plugin {
Session::flash( 'error', [ 'There was a problem with your comment form.' => Check::userErrors() ] );
return Redirect::to( $redirect . $content->ID );
}
if ( !$this->comments->create( $type, $content->ID, Input::post( 'comment' ) ) ) {
if ( !self::$comments->create( $type, $content->ID, Input::post( 'comment' ) ) ) {
Session::flash( 'error', [ 'There was a problem posting your comment.' => Check::userErrors() ] );
} else {
Session::flash( 'success', 'Comment posted' );
@ -97,6 +102,11 @@ class Comments extends Plugin {
}
public function formEdit( $type, $content, $redirect ) {
if ( ! $this->checkEnabled() ) {
Debug::info( 'Comments Plugin is disabled in the control panel.' );
Issues::add( 'error', 'Comments are disabled.' );
return false;
}
if ( !App::$isLoggedIn ) {
Session::flash( 'notice', 'You must be logged in to do that.' );
return Redirect::to( $type );
@ -112,7 +122,7 @@ class Comments extends Plugin {
Issues::add( 'error', [ 'There was a problem editing your comment.' => Check::userErrors() ] );
return Views::view( 'comments.admin.edit', $content );
}
if ( !$this->comments->update( $content->ID, Input::post( 'comment' ) ) ) {
if ( !self::$comments->update( $content->ID, Input::post( 'comment' ) ) ) {
Issues::add( 'error', [ 'There was a problem editing your comment.' => Check::userErrors() ] );
return Views::view( 'comments.admin.edit', $content );
}
@ -121,6 +131,11 @@ class Comments extends Plugin {
}
public function formDelete( $type, $content, $redirect ) {
if ( ! $this->checkEnabled() ) {
Debug::info( 'Comments Plugin is disabled in the control panel.' );
Issues::add( 'error', 'Comments are disabled.' );
return false;
}
if ( !App::$isLoggedIn ) {
Session::flash( 'notice', 'You must be logged in to do that.' );
return Redirect::to( $type );
@ -129,18 +144,11 @@ class Comments extends Plugin {
Session::flash( 'error', 'You do not have permission to edit this comment' );
return Redirect::to( $type );
}
if ( !$this->comments->delete( (array) $content->ID ) ) {
if ( !self::$comments->delete( (array) $content->ID ) ) {
Session::flash( 'error', 'There was an error with your request.' );
} else {
Session::flash( 'success', 'Comment has been deleted' );
}
return Redirect::to( $redirect . $content->contentID );
}
public function getModel() {
if ( empty($this->comments) ) {
$this->comments = new CommentModel;
}
return $this->comments;
}
}

View File

@ -1,9 +1,25 @@
<form action="" method="post" class="form-horizontal">
<div class="form-group center-block">
<div class="col-lg-4 col-lg-offset-4">
<textarea class="form-control" name="comment" maxlength="2000" rows="10" cols="50" id="comment">{content}</textarea>
</div>
<div class="mb-4 mt-4">
<div class="offset-md-1 col-10 p-3 context-main-bg">
<legend class="text-center">Edit Comment</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="" method="post" class="container py-4">
<fieldset>
<div class="mb-3 row">
<label for="comment" class="col-lg-5 col-form-label text-end">Comment:</label>
<div class="col-lg-3">
<textarea class="form-control" name="comment" maxlength="2000" rows="5" cols="50" id="comment">{content}</textarea>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form>
</div>
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Comment</button>
<input type="hidden" name="token" value="{TOKEN}">
</form>
</div>

View File

@ -1,43 +1,45 @@
<legend>Recent Comments</legend>
{PAGINATION}
<form action="{ROOT_URL}admin/comments/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 20%">Author</th>
<th style="width: 20%">Subject</th>
<th style="width: 35%">Comment</th>
<th style="width: 10%">Time</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.c" value="C_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td><a href="{ROOT_URL}admin/users/view/{author}">{authorName}</a></td>
<td><a href="{ROOT_URL}admin/blog/view/{contentID}">{contentTitle}</a></td>
<td>{content}</td>
<td>{DTC}{created}{/DTC}</td>
<td><a href="{ROOT_URL}admin/comments/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}admin/comments/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="C_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td align="center" colspan="7">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button>
</form>
<br />
<div class="context-main-bg context-main p-3">
<legend class="text-center">Recent Comments</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/comments/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 20%">Author</th>
<th style="width: 20%">Subject</th>
<th style="width: 35%">Comment</th>
<th style="width: 10%">Time</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.c" value="C_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td><a href="{ROOT_URL}admin/users/view/{author}">{authorName}</a></td>
<td><a href="{ROOT_URL}admin/blog/view/{contentID}">{contentTitle}</a></td>
<td>{content}</td>
<td>{DTC}{created}{/DTC}</td>
<td><a href="{ROOT_URL}admin/comments/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}admin/comments/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="C_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td align="center" colspan="7">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form>
</div>

View File

@ -1,14 +1,14 @@
<div class="card">
<div class="card-header bg-secondary text-white d-flex align-items-center justify-content-between">
<div class="card-header d-flex align-items-center justify-content-between context-second-bg context-main">
<h3 class="card-title mb-0">
<i class="fa fa-fw fa-comment"></i> Comments
</h3>
<span class="badge bg-primary">{count}</span>
</div>
<div class="card-body bg-light">
<div class="card-body context-main-bg context-main">
<ul class="list-group list-group-flush">
{LOOP}
<li class="list-group-item">
<li class="list-group-item context-second-bg context-main mb-2">
<div class="d-flex align-items-start">
<div class="me-3">
<img src="{ROOT_URL}{avatar}" class="rounded-circle" alt="User Avatar" style="width: 50px; height: 50px;">

View File

@ -1,42 +1,45 @@
<legend>Contact Forms</legend>
{PAGINATION}
<form action="{ROOT_URL}admin/contact/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 5%">ID</th>
<th style="width: 25%">Time</th>
<th style="width: 55%">Feedback</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.f" value="F_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td>{ID}</td>
<td>{DTC}{time}{/DTC}</td>
<td>{feedback}</td>
<td><a href="{ROOT_URL}admin/contact/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}admin/contact/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="F_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td align="center" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button>
</form>
<br />
<a href="{ROOT_URL}admin/contact/clear">clear all</a>
<div class="context-main-bg context-main p-3">
<legend class="text-center">Contact Forms</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/contact/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 5%">ID</th>
<th style="width: 25%">Time</th>
<th style="width: 55%">Feedback</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.f" value="F_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td>{ID}</td>
<td>{DTC}{time}{/DTC}</td>
<td>{feedback}</td>
<td><a href="{ROOT_URL}admin/contact/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}admin/contact/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="F_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td align="center" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form>
<br />
<a href="{ROOT_URL}admin/contact/clear">clear all</a>
</div>

View File

@ -1,56 +1,61 @@
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
<div class="card">
<div class="card-header bg-dark">
<h3 class="card-title">Contact</h3>
</div>
<div class="card-body">
<div class="row">
<div class=" col-md-12 col-lg-12 ">
<table class="table table-user-primary">
<tbody>
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-md-8">
{ADMIN_BREADCRUMBS}
<div class="card shadow">
<!-- Card Header -->
<div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">Contact Form</h3>
</div>
<!-- Card Body -->
<div class="card-body">
<div class="row align-items-center">
<!-- Log Details -->
<table class="table table-borderless">
<tbody>
<tr>
<th scope="row">ID:</th>
<td>{ID}</td>
</tr>
<tr>
<td align="left" width="200">ID:</td>
<td align="right">{ID}</td>
<th scope="row">Time submitted</th>
<td>{DTC}{time}{/DTC}</td>
</tr>
<tr>
<td>Time submitted:</td>
<td align="right">{DTC}{time}{/DTC}</td>
<th scope="row">Email:</th>
<td>{email}</td>
</tr>
<tr>
<td>IP:</td>
<td align="right">{ip}</td>
<th scope="row">Name:</th>
<td>{name}</td>
</tr>
<tr>
<th scope="row">IP:</th>
<td>{ip}</td>
</tr>
<tr>
<td>Email:</td>
<td align="right">{email}</td>
</tr>
<tr>
<td>Name</td>
<td align="right">{name}</td>
</tr>
<tr>
<td align="center" colspan="2">Feedback</td>
<th scope="row" colspan="2">Feedback:</th>
</tr>
<tr>
<td colspan="2">{feedback}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card-footer">
</tbody>
</table>
</div>
</div>
<!-- Admin Controls -->
<div class="card-footer text-center">
{ADMIN}
<form action="{ROOT_URL}admin/contact/delete" method="post">
<INPUT type="hidden" name="F_" value="{ID}"/>
<input type="hidden" name="token" value="{TOKEN}" />
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-times"></i></button>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form>
{/ADMIN}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,27 +0,0 @@
<form action="" method="post" class="form-horizontal">
<legend>Feedback</legend>
<p>Here at {SITENAME} we highly value your feedback. We constantly strive to provide our users with the highest level of quality in everything we do.</p>
<p>If you would like to provide any suggestions or comments on our service, we ask that you please fill out the quick form below and let us know what's on your mind.</p>
<fieldset>
<div class="form-group">
<label for="name" class="col-lg-1 control-label">Name:</label>
<div class="col-lg-2">
<input class="form-control" type="text" name="name" id="name">
</div>
</div>
<div class="form-group">
<label for="feedbackEmail" class="col-lg-1 control-label">E-mail: (optional)</label>
<div class="col-lg-2">
<input class="form-control" type="text" name="feedbackEmail" id="feedbackEmail">
</div>
</div>
<div class="form-group">
<label for="entry" class="col-lg-3 control-label">Feedback:<br> (max:2000 characters)</label>
<div class="col-lg-6">
<textarea class="form-control" name="entry" maxlength="2000" rows="10" cols="50" id="entry"></textarea>
</div>
</div>
</fieldset>
<input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Submit</button><br>
</form>

View File

@ -45,7 +45,10 @@ class Notifications extends AdminController {
}
public function create() {
$select = Forms::getFormFieldHtml( 'groupSelect', 'User Group', 'select', 'All', self::$group->listGroupsSimple( true ) );
$select = Forms::getSelectHtml(
'groupSelect',
self::$group->listGroupsSimple( true )
);
Components::set( 'groupSelect', $select );
if ( ! Input::exists( 'submit' ) ) {
return Views::view( 'notifications.admin.send' );

View File

@ -1,44 +1,62 @@
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
<legend>Send Notification</legend>
<div class="form-group">
{groupSelect}
</div>
<div class="form-group">
<label for="expiration" class="col-lg-3 control-label">Expiration </label>
<div class="col-lg-3">
<select id="expiration" name="expiration" class="form-control custom-select">
<option value="0">forever</option>
<option value="1800">30 Minutes</option>
<option value="3600">60 Minutes</option>
<option value="14400">4 hours</option>
<option value="28800">8 hours</option>
<option value="43200">12 hours</option>
<option value="86400">24 hours</option>
<option value="172800">2 days</option>
<option value="259200">3 days</option>
<option value="432000">5 days</option>
<option value="604800">7 days</option>
<option value="1209600">2 weeks</option>
<option value="1814400">3 weeks</option>
<option value="2419200">4 weeks</option>
<option value="2592000">1 month</option>
<option value="5184000">2 months</option>
<option value="7776000">3 months</option>
<option value="15552000">6 months</option>
<option value="31536000">12 months</option>
</select>
<div class="context-main-bg context-main p-3">
<legend class="text-center">Send Notification</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="" method="post" enctype="multipart/form-data">
<fieldset>
<!-- Group -->
<div class="mb-3 row">
<label for="groupSelect" class="col-lg-3 col-form-label text-end">Group:</label>
<div class="col-lg-6">
{groupSelect}
</div>
</div>
<!-- Recipients -->
<div class="mb-3 row">
<label for="expiration" class="col-lg-3 col-form-label text-end">Expiration:</label>
<div class="col-lg-6">
<select class="form-control" name="expiration" id="expiration">
<option value="0">forever</option>
<option value="1800">30 Minutes</option>
<option value="3600">60 Minutes</option>
<option value="14400">4 hours</option>
<option value="28800">8 hours</option>
<option value="43200">12 hours</option>
<option value="86400">24 hours</option>
<option value="172800">2 days</option>
<option value="259200">3 days</option>
<option value="432000">5 days</option>
<option value="604800">7 days</option>
<option value="1209600">2 weeks</option>
<option value="1814400">3 weeks</option>
<option value="2419200">4 weeks</option>
<option value="2592000">1 month</option>
<option value="5184000">2 months</option>
<option value="7776000">3 months</option>
<option value="15552000">6 months</option>
<option value="31536000">12 months</option>
</select>
</div>
</div>
<!-- Notification -->
<div class="mb-3 row">
<label for="notification" class="col-lg-3 col-form-label text-end">Notification:</label>
<div class="col-lg-6">
<textarea class="form-control" name="notification" id="notification" rows="6" maxlength="2000" required></textarea>
<small class="form-text text-muted">Max: 2000 characters</small>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
</fieldset>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg center-block">Send</button>
</div>
</div>
<div class="form-group">
<label for="notification" class="col-lg-3 control-label">Notification</label>
<div class="col-lg-6">
<textarea class="form-control" name="notification" maxlength="2000" rows="10" cols="50" id="notification"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3">
<button name="submit" value="publish" type="submit" class="btn btn-lg btn-primary">Send</button>
</div>
</div>
<input type="hidden" name="token" value="{TOKEN}">
</form>
</form>
</div>

View File

@ -1,5 +1,24 @@
<form action="" method="post" class="form-horizontal">
<input type="email" placeholder="Email" id="email" name="email">
<input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Submit</button><br>
</form>
<div class="context-main-bg context-main p-3">
<legend class="text-center">Add Subscriber</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="" method="post">
<fieldset>
<!-- Subject -->
<div class="mb-3 row">
<label for="email" class="col-lg-5 col-form-label text-end">Email:</label>
<div class="col-lg-3">
<input type="email" class="form-control" name="email" id="email" required>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
</fieldset>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg center-block">Submit</button>
</div>
</form>
</div>

View File

@ -1,37 +1,40 @@
<legend>Subscribers</legend>
{PAGINATION}
<form action="{ROOT_URL}admin/subscriptions/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 5%">ID</th>
<th style="width: 85%">email</th>
<th style="width: 5%"></th>
<th style="width: 5%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.s" value="S_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td align="center">{ID}</td>
<td>{EMAIL}</td>
<td><a href="{ROOT_URL}admin/subscriptions/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="S_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td align="center" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<a href="{ROOT_URL}admin/subscriptions/add" class="btn btn-sm btn-primary">Add</a>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button>
</form>
<div class="context-main-bg context-main p-3">
<legend class="text-center">Subscribers</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/subscriptions/delete" method="post">
<table class="table table-striped">
<thead>
<tr>
<th style="width: 5%">ID</th>
<th style="width: 85%">email</th>
<th style="width: 5%"></th>
<th style="width: 5%">
<INPUT type="checkbox" onchange="checkAll(this)" name="check.s" value="S_[]"/>
</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td align="center">{ID}</td>
<td>{EMAIL}</td>
<td><a href="{ROOT_URL}admin/subscriptions/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="S_[]">
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td align="center" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<a href="{ROOT_URL}admin/subscriptions/add" class="btn btn-sm btn-primary">Add</a>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form>
</div>