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

@ -12,6 +12,7 @@
namespace TheTempusProject\Classes; namespace TheTempusProject\Classes;
use TheTempusProject\Houdini\Classes\Forms; use TheTempusProject\Houdini\Classes\Forms;
use TheTempusProject\Houdini\Classes\Template;
use TheTempusProject\Canary\Bin\Canary as Debug; use TheTempusProject\Canary\Bin\Canary as Debug;
use TheTempusProject\Bedrock\Functions\Check; use TheTempusProject\Bedrock\Functions\Check;
use TheTempusProject\Bedrock\Functions\Input; use TheTempusProject\Bedrock\Functions\Input;
@ -19,7 +20,6 @@ use TheTempusProject\Bedrock\Classes\Config as BedrockConfig;
class Config extends BedrockConfig { class Config extends BedrockConfig {
public static function getFieldEditHtml( $name, $includeProtected = false ) { public static function getFieldEditHtml( $name, $includeProtected = false ) {
// @todo: includeProtected is unused here
$node = self::get( $name ); $node = self::get( $name );
if ( empty( $node ) ) { if ( empty( $node ) ) {
return; return;
@ -28,13 +28,57 @@ class Config extends BedrockConfig {
return; return;
} }
$fieldname = str_ireplace( '/', '-', $name ); $fieldname = str_ireplace( '/', '-', $name );
$html = Forms::getFormFieldHtml(
$fieldname, $html = '';
$node['pretty'], $fieldHtml = '';
$node['type'], switch ( $node['type'] ) {
$node['value'], case 'radio':
); case 'bool':
return $html; case 'boolean':
$fieldHtml = Forms::getSwitchHtml( $fieldname, [ 'true', 'false' ], $node['value'] );
break;
case 'select':
$fieldHtml = Forms::getSelectHtml( $fieldname, $options, $node['value'] );
break;
case 'block':
$fieldHtml = Forms::getTextBlockHtml( $fieldname, $node['value'] );
break;
case 'text':
case 'url':
$fieldHtml = Forms::getTextHtml( $fieldname, $node['value'] );
break;
case 'checkbox':
$fieldHtml = Forms::getCheckboxHtml( $fieldname, $node['value'] );
break;
case 'timezone':
$fieldHtml = Forms::getTimezoneHtml( $node['value'] );
break;
case 'file':
$fieldHtml = Forms::getFileHtml( $fieldname );
break;
case 'customSelect':
if ( empty( $options ) ) {
$options = '{' . $fieldname . '-options}';
}
$fieldHtml = Forms::getSelectHtml( $fieldname, $options, $node['value'] );
break;
}
$html .= '<div class="mb-3 row">';
$html .= '<label for="' . $fieldname . '" class="col-lg-3 col-form-label text-end">' . $node['pretty'] . '</label>';
$html .= '<div class="col-lg-6">';
$html .= $fieldHtml;
$html .= '</div>';
if ( 'file' === $node['type'] ) {
$html .= '<div class="mb-3 row">';
$html .= '<h4 class="col-lg-3 col-form-label text-end">Current Image</h4>';
$html .= '<div class="col-lg-6">';
$html .= '<img alt="User Avatar" src="{ROOT_URL}' . $node['value'] . '" class="img-circle img-fluid p-2 avatar-125">';
$html .= '</div>';
}
$html .= '</div>';
return Template::parse( $html );
} }
public static function getCategoryEditHtml( $category ) { public static function getCategoryEditHtml( $category ) {
@ -47,12 +91,12 @@ class Config extends BedrockConfig {
Debug::warn( "Config category not found: $category" ); Debug::warn( "Config category not found: $category" );
return; return;
} }
$categoryHeader = '<div class="form-group"><label>' . ucfirst( $category ) . ':</label><hr></div>'; $categoryHeader = '<div class=""><h3 class="text-center">' . ucfirst( $category ) . ':</h3><hr>';
foreach ( self::$config[$category] as $field => $node ) { foreach ( self::$config[$category] as $field => $node ) {
$html .= self::getFieldEditHtml( $category . '/' . $field ); $html .= self::getFieldEditHtml( $category . '/' . $field );
} }
if ( !empty( $html ) ) { if ( !empty( $html ) ) {
$html = $categoryHeader . $html; $html = $categoryHeader . $html . '</div>';
} }
return $html; return $html;
} }

View File

@ -15,6 +15,7 @@ use TheTempusProject\Canary\Bin\Canary as Debug;
use TheTempusProject\Bedrock\Functions\Check; use TheTempusProject\Bedrock\Functions\Check;
use TheTempusProject\Houdini\Classes\Forms; use TheTempusProject\Houdini\Classes\Forms;
use TheTempusProject\Bedrock\Functions\Input; use TheTempusProject\Bedrock\Functions\Input;
use TheTempusProject\Houdini\Classes\Template;
class Permissions { class Permissions {
public static $permissions = false; public static $permissions = false;
@ -237,8 +238,21 @@ class Permissions {
} else { } else {
$checked = false; $checked = false;
} }
$form .= Forms::getFormFieldHtml( $name, $details['pretty'], 'checkbox', $checked ); $form .= self::getFieldEditHtml( $name, $checked, $details['pretty'] );
} }
return $form; return $form;
} }
public static function getFieldEditHtml( $name, $default, $pretty ) {
$fieldname = str_ireplace( '/', '-', $name );
$fieldHtml = Forms::getSwitchHtml( $fieldname, [ 'true', 'false' ], $default );
$html = '';
$html .= '<div class="mb-3 row">';
$html .= '<label for="' . $fieldname . '" class="col-lg-6 col-form-label text-end">' . $pretty . '</label>';
$html .= '<div class="col-lg-6">';
$html .= $fieldHtml;
$html .= '</div>';
$html .= '</div>';
return Template::parse( $html );
}
} }

View File

@ -39,7 +39,7 @@ class Admin extends AdminController {
} }
public function index() { public function index() {
return Views::view( 'admin.logs.admin_list', self::$log->listPaginated( 'admin' ) ); return Views::view( 'admin.logs.admin_list', self::$log->list( 'admin' ) );
} }
public function view( $id = null ) { public function view( $id = null ) {

View File

@ -59,6 +59,6 @@ class Composer extends AdminController {
$out[] = (object) $versionsInstalled[ $name ]; $out[] = (object) $versionsInstalled[ $name ];
} }
Views::view( 'admin.modules.composer.dependencies', $out ); Views::view( 'admin.modules.dependencies', $out );
} }
} }

View File

@ -39,7 +39,7 @@ class Errors extends AdminController {
} }
public function index() { public function index() {
return Views::view( 'admin.logs.error_list', self::$log->listPaginated( 'error' ) ); return Views::view( 'admin.logs.error_list', self::$log->list( 'error' ) );
} }
public function view( $id = null ) { public function view( $id = null ) {

View File

@ -15,8 +15,11 @@ use TheTempusProject\Houdini\Classes\Views;
use TheTempusProject\Houdini\Classes\Components; use TheTempusProject\Houdini\Classes\Components;
use TheTempusProject\Classes\AdminController; use TheTempusProject\Classes\AdminController;
use TheTempusProject\Models\User; use TheTempusProject\Models\User;
use TheTempusProject\Plugins\Comments; use TheTempusProject\Models\Comments;
use TheTempusProject\Plugins\Blog; use TheTempusProject\Models\Posts;
use TheTempusProject\Plugins\Comments as CommentPlugin;
use TheTempusProject\Plugins\Blog as BlogPlugin;
use TheTempusProject\Canary\Bin\Canary as Debug;
class Home extends AdminController { class Home extends AdminController {
public static $user; public static $user;
@ -30,17 +33,29 @@ class Home extends AdminController {
public function index() { public function index() {
if ( class_exists( 'TheTempusProject\Plugins\Comments' ) ) { if ( class_exists( 'TheTempusProject\Plugins\Comments' ) ) {
$plugin = new CommentPlugin;
if ( ! $plugin->checkEnabled() ) {
Debug::info( 'Comments Plugin is disabled in the control panel.' );
Components::set( 'commentDash', '' );
} else {
$comments = new Comments; $comments = new Comments;
self::$comments = $comments->getModel(); $commentList = Views::simpleView( 'comments.admin.dashboard', $comments->recent( 'all', 5 ) );
$comments = Views::simpleView( 'comments.admin.dashboard', self::$comments->recent( 'all', 5 ) ); Components::set( 'commentDash', $commentList );
Components::set( 'commentDash', $comments ); }
} }
if ( class_exists( 'TheTempusProject\Plugins\Blog' ) ) { if ( class_exists( 'TheTempusProject\Plugins\Blog' ) ) {
$blog = new Blog; $plugin = new BlogPlugin;
self::$posts = $blog->posts;
$posts = Views::simpleView( 'blog.admin.dashboard', self::$posts->recent( 5 ) ); if ( ! $plugin->checkEnabled() ) {
Components::set( 'blogDash', $posts ); Debug::info( 'Blog Plugin is disabled in the control panel.' );
Components::set( 'blogDash', '' );
} else {
$posts = new Posts;
$postsList = Views::simpleView( 'blog.admin.dashboard', $posts->recent( 5 ) );
Components::set( 'blogDash', $postsList );
}
} }
self::$user = new User; self::$user = new User;

View File

@ -39,7 +39,7 @@ class Logins extends AdminController {
} }
public function index() { public function index() {
return Views::view( 'admin.logs.login_list', self::$log->listPaginated( 'login' ) ); return Views::view( 'admin.logs.login_list', self::$log->list( 'login' ) );
} }
public function view( $id = null ) { public function view( $id = null ) {

View File

@ -26,8 +26,8 @@ class Logs extends AdminController {
} }
public function index( $data = null ) { public function index( $data = null ) {
Views::view( 'admin.logs.error_list', self::$log->listPaginated( 'error' ) ); Views::view( 'admin.logs.error_list', self::$log->list( 'error' ) );
Views::view( 'admin.logs.admin_list', self::$log->listPaginated( 'admin' ) ); Views::view( 'admin.logs.admin_list', self::$log->list( 'admin' ) );
Views::view( 'admin.logs.login_list', self::$log->listPaginated( 'login' ) ); Views::view( 'admin.logs.login_list', self::$log->list( 'login' ) );
} }
} }

View File

@ -39,7 +39,12 @@ class Plugins extends AdminController {
} }
public function disable( $name = null ) { public function disable( $name = null ) {
if ( empty( $name ) ) {
Session::flash( 'error', 'Unknown Plugin.' );
Redirect::to( 'admin/plugins' );
}
Components::set( 'PLUGIN', $name ); Components::set( 'PLUGIN', $name );
self::$title = 'Admin - Disable ' . $name;
if ( !Input::exists( 'installHash' ) ) { if ( !Input::exists( 'installHash' ) ) {
return Views::view( 'admin.modules.plugins.disable' ); return Views::view( 'admin.modules.plugins.disable' );
} }
@ -52,7 +57,12 @@ class Plugins extends AdminController {
} }
public function enable( $name = null ) { public function enable( $name = null ) {
if ( empty( $name ) ) {
Session::flash( 'error', 'Unknown Plugin.' );
Redirect::to( 'admin/plugins' );
}
Components::set( 'PLUGIN', $name ); Components::set( 'PLUGIN', $name );
self::$title = 'Admin - Enable ' . $name;
if ( !Input::exists( 'installHash' ) ) { if ( !Input::exists( 'installHash' ) ) {
return Views::view( 'admin.modules.plugins.enable' ); return Views::view( 'admin.modules.plugins.enable' );
} }
@ -71,6 +81,7 @@ class Plugins extends AdminController {
} }
$name = strtolower( $name ); $name = strtolower( $name );
Components::set( 'PLUGIN', $name ); Components::set( 'PLUGIN', $name );
self::$title = 'Admin - Install ' . $name;
if ( ! Input::exists( 'installHash' ) ) { if ( ! Input::exists( 'installHash' ) ) {
return Views::view( 'admin.modules.plugins.install' ); return Views::view( 'admin.modules.plugins.install' );
} }
@ -95,6 +106,7 @@ class Plugins extends AdminController {
} }
$name = strtolower($name); $name = strtolower($name);
Components::set( 'PLUGIN', $name ); Components::set( 'PLUGIN', $name );
self::$title = 'Admin - Uninstall ' . $name;
if ( !Input::exists( 'uninstallHash' ) ) { if ( !Input::exists( 'uninstallHash' ) ) {
return Views::view( 'admin.modules.plugins.uninstall' ); return Views::view( 'admin.modules.plugins.uninstall' );

View File

@ -26,6 +26,7 @@ use TheTempusProject\Classes\AdminController;
use TheTempusProject\Models\User; use TheTempusProject\Models\User;
use TheTempusProject\Models\Group; use TheTempusProject\Models\Group;
use TheTempusProject\TheTempusProject as App; use TheTempusProject\TheTempusProject as App;
use TheTempusProject\Houdini\Classes\Template;
class Users extends AdminController { class Users extends AdminController {
public static $user; public static $user;
@ -63,8 +64,11 @@ class Users extends AdminController {
} }
} }
} }
$select = Forms::getSelectHtml(
$select = Forms::getFormFieldHtml( 'groupSelect', 'User Group', 'select', Config::getValue( 'group/defaultGroup' ), self::$group->listGroupsSimple() ); 'groupSelect',
self::$group->listGroupsSimple(),
Config::getValue( 'group/defaultGroup' ),
);
Components::set( 'groupSelect', $select ); Components::set( 'groupSelect', $select );
Views::view( 'admin.users.create' ); Views::view( 'admin.users.create' );
} }
@ -132,9 +136,15 @@ class Users extends AdminController {
$userGroup = $userData->userGroup; $userGroup = $userData->userGroup;
} }
Forms::selectRadio( 'confirmed', $userData->confirmed ); Forms::selectRadio( 'confirmed', $userData->confirmed );
$avatar = Forms::getFormFieldHtml( 'avatar', 'User Avatar', 'file', $avatarLocation );
$select = Forms::getFormFieldHtml( 'groupSelect', 'User Group', 'select', $userGroup, self::$group->listGroupsSimple() ); $avatar = $this->getAvatar( 'avatar', $avatarLocation );
Components::set( 'AvatarSettings', $avatar ); Components::set( 'AvatarSettings', $avatar );
$select = Forms::getSelectHtml(
'groupSelect',
self::$group->listGroupsSimple(),
$userGroup,
);
Components::set( 'groupSelect', $select ); Components::set( 'groupSelect', $select );
Views::view( 'admin.users.edit', $userData ); Views::view( 'admin.users.edit', $userData );
} }
@ -153,4 +163,28 @@ class Users extends AdminController {
} }
$this->index(); $this->index();
} }
private function getAvatar( $name, $value ) {
$fieldname = str_ireplace( '/', '-', $name );
$html = '';
$fieldHtml = '';
$fieldHtml = Forms::getFileHtml( $fieldname );
$html .= '<div class="mb-3 row">';
$html .= ' <label for="' . $fieldname . '" class="col-lg-6 col-form-label text-end">' . ucfirst( $fieldname ) . '</label>';
$html .= ' <div class="col-lg-2">';
$html .= ' ' . $fieldHtml;
$html .= ' </div>';
$html .= '</div>';
$html .= '<div class="mb-3 row">';
$html .= ' <h4 class="col-lg-6 col-form-label text-end">Current Image</h4>';
$html .= ' <div class="col-lg-2">';
$html .= ' <img alt="User Avatar" src="{ROOT_URL}' . $value . '" class="img-circle img-fluid p-2 avatar-125">';
$html .= ' </div>';
$html .= '</div>';
return Template::parse( $html );
}
} }

View File

@ -15,6 +15,9 @@
.context-main-bg { .context-main-bg {
background-color: #2c2c2c; background-color: #2c2c2c;
} }
.context-second-bg {
background-color: #1e1e1e;
}
.bg-default { .bg-default {
background-color: #2c2c2c; background-color: #2c2c2c;
} }
@ -109,8 +112,6 @@ body {
*/ */
.b-example-divider { .b-example-divider {
background-color: rgba(255, 255, 255, .1); background-color: rgba(255, 255, 255, .1);
border: solid rgba(255, 255, 255, .15);
box-shadow: inset 0 .5em 1.5em rgba(255, 255, 255, .1), inset 0 .125em .5em rgba(255, 255, 255, .15);
} }
/** /**

View File

@ -27,15 +27,6 @@ function checkAll(ele) {
} }
} }
function copyAll( ele ) {
var eleName = '#' + ele;
var text = $( eleName ).text();
text = text.replaceAll( "''", "\n" ).trim();
text = text.substring( 1, text.length - 1 );
navigator.clipboard.writeText( text );
console.log( '#' + ele );
}
function insertTag( box, tag ) { function insertTag( box, tag ) {
var Field = document.getElementById( box ); var Field = document.getElementById( box );
var currentPos = cursorPos( Field ); var currentPos = cursorPos( Field );
@ -69,6 +60,26 @@ function getRandomInt(min, max) {
return Math.floor(Math.random() * (maxFloored - minCeiled) + minCeiled); return Math.floor(Math.random() * (maxFloored - minCeiled) + minCeiled);
} }
function copyElementText( id ) {
const inputElement = document.getElementById( id );
const textToCopy = inputElement.value;
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(textToCopy)
.then(() => alert('Copied to clipboard!'))
.catch((err) => console.error('Failed to copy: ', err));
} else {
// Fallback for older browsers
inputElement.select();
try {
document.execCommand('copy');
alert('Copied to clipboard!');
} catch (err) {
console.error('Failed to copy: ', err);
}
}
}
$(document).ready(function() { $(document).ready(function() {
$('select').each(function() { $('select').each(function() {
var selectedValue = $(this).attr('value'); var selectedValue = $(this).attr('value');
@ -99,6 +110,14 @@ $(document).ready(function() {
} }
} }
document.querySelectorAll('.table-striped').forEach((table) => {
if (localStorage.getItem('darkMode') === 'enabled') {
table.classList.add('table-dark');
} else {
table.classList.add('table-light')
}
});
if ( enableButton ) { if ( enableButton ) {
enableButton.addEventListener('click', function () { enableButton.addEventListener('click', function () {
if (darkModeStylesheet.disabled) { if (darkModeStylesheet.disabled) {
@ -121,5 +140,15 @@ $(document).ready(function() {
darkModeStylesheet.disabled = true; darkModeStylesheet.disabled = true;
localStorage.setItem('darkMode', 'disabled'); localStorage.setItem('darkMode', 'disabled');
} }
document.querySelectorAll('.table-striped').forEach((table) => {
if (localStorage.getItem('darkMode') === 'enabled') {
table.classList.add('table-dark');
table.classList.remove('table-light');
} else {
table.classList.add('table-light');
table.classList.remove('table-dark');
}
});
}); });
}); });

View File

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

View File

@ -27,17 +27,16 @@ use TheTempusProject\Plugins\Blog as BlogPlugin;
use TheTempusProject\TheTempusProject as App; use TheTempusProject\TheTempusProject as App;
use TheTempusProject\Plugins\Comments; use TheTempusProject\Plugins\Comments;
use TheTempusProject\Models\Comments as CommentsModel; use TheTempusProject\Models\Comments as CommentsModel;
use TheTempusProject\Models\Posts as PostsModel;
class Blog extends Controller { class Blog extends Controller {
protected static $blog; protected static $blog;
protected static $comments;
protected static $posts; protected static $posts;
public function __construct() { public function __construct() {
parent::__construct(); parent::__construct();
Template::setTemplate( 'blog' ); Template::setTemplate( 'blog' );
$blog = new BlogPlugin; self::$posts = new PostsModel;
self::$posts = $blog->posts;
} }
public function index() { public function index() {
@ -57,39 +56,41 @@ class Blog extends Controller {
public function comments( $sub = null, $data = null ) { public function comments( $sub = null, $data = null ) {
Debug::log( 'Controller initiated: ' . __METHOD__ . '.' ); Debug::log( 'Controller initiated: ' . __METHOD__ . '.' );
if ( empty( self::$comments ) ) {
self::$comments = new CommentsModel;
}
$plugin = new Comments;
if ( empty( $sub ) || empty( $data ) ) { if ( empty( $sub ) || empty( $data ) ) {
Session::flash( 'error', 'Whoops, try again.' ); Issues::add( 'error', 'There was an issue with your request. Please check the url and try again.' );
Redirect::to( 'blog' ); return $this->index();
} }
$plugin = new Comments;
if ( ! $plugin->checkEnabled() ) {
Issues::add( 'error', 'Comments are disabled.' );
return $this->index();
}
$comments = new CommentsModel;
switch ( $sub ) { switch ( $sub ) {
case 'post': case 'post':
$content = self::$posts->findById( (int) $data ); $content = self::$posts->findById( (int) $data );
if ( empty( $content ) ) { if ( empty( $content ) ) {
Session::flash( 'error', 'Unknown Post.' ); Issues::add( 'error', 'Unknown Content.' );
Redirect::to( 'blog' ); return $this->index();
} }
return $plugin->formPost( self::$posts->tableName, $content, 'blog/post/' ); return $plugin->formPost( self::$posts->tableName, $content, 'blog/post/' );
return self::$comments->formPost( 'blog', $content, 'blog/post/' );
case 'edit': case 'edit':
$content = self::$comments->findById( $data ); $content = $comments->findById( $data );
if ( empty( $content ) ) { if ( empty( $content ) ) {
Session::flash( 'error', 'Unknown Comment.' ); Issues::add( 'error', 'Unknown Comment.' );
Redirect::to( 'blog' ); return $this->index();
} }
return $plugin->formEdit( self::$posts->tableName, $content, 'blog/post/' ); return $plugin->formEdit( self::$posts->tableName, $content, 'blog/post/' );
return self::$comments->formEdit( 'blog', $content, 'blog/post/' );
case 'delete': case 'delete':
$content = self::$comments->findById( $data ); $content = $comments->findById( $data );
if ( empty( $content ) ) { if ( empty( $content ) ) {
Session::flash( 'error', 'Unknown Comment.' ); Issues::add( 'error', 'Unknown Comment.' );
Redirect::to( 'blog' ); return $this->index();
} }
return $plugin->formDelete( self::$posts->tableName, $content, 'blog/post/' ); 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 ) ) { if ( empty( $post ) ) {
return $this->index(); return $this->index();
} }
if ( empty( self::$comments ) ) {
self::$comments = new CommentsModel;
}
Debug::log( 'Controller initiated: ' . __METHOD__ . '.' ); Debug::log( 'Controller initiated: ' . __METHOD__ . '.' );
self::$title = 'Blog Post'; 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' ) ) { if ( Input::exists( 'contentId' ) ) {
$this->comments( 'post', Input::post( 'contentId' ) ); $this->comments( 'post', Input::post( 'contentId' ) );
} }
Components::set( 'CONTENT_ID', $id ); Components::set( 'CONTENT_ID', $id );
Components::set( 'COMMENT_TYPE', 'blog' ); 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 ) { if ( App::$isLoggedIn ) {
Components::set( 'NEWCOMMENT', Views::simpleView( 'comments.create' ) ); Components::set( 'NEWCOMMENT', Views::simpleView( 'comments.create' ) );
} else { } else {
Components::set( 'NEWCOMMENT', '' ); 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 ); $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::$title .= ' - ' . $post->title;
self::$pageDescription = strip_tags( $post->contentSummaryNoLink ); self::$pageDescription = strip_tags( $post->contentSummaryNoLink );
Views::view( 'blog.post', $post ); Views::view( 'blog.post', $post );

View File

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

View File

@ -1,31 +1,47 @@
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data"> <div class="context-main-bg context-main p-3">
<legend>New Blog Post</legend> <legend class="text-center">Add Blog Post</legend>
<div class="form-group"> <hr>
<label for="title" class="col-lg-3 control-label">Title</label> {ADMIN_BREADCRUMBS}
<div class="col-lg-3"> <form action="" method="post">
<input type="text" class="form-check-input" name="title" id="title"> <fieldset>
</div> <!-- Title -->
</div> <div class="mb-3 row">
<div class="form-group"> <label for="title" class="col-lg-3 col-form-label text-end">Title:</label>
<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"> <div class="col-lg-6">
<textarea class="form-control" name="blogPost" maxlength="2000" rows="10" cols="50" id="blogPost"></textarea> <input type="text" class="form-control" name="title" id="title" required>
</div> </div>
</div> </div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3"> <!-- form buttons -->
<button name="submit" value="publish" type="submit" class="btn btn-lg btn-primary">Publish</button> <div class="mb-3 row">
<button name="submit" value="saveDraft" type="submit" class="btn btn-lg btn-primary">Save as Draft</button> <div class="offset-3 col-lg-6">
<button name="submit" value="preview" type="submit" class="btn btn-lg btn-primary">Preview</button> <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> </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}"> <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>
</form> </form>
</div>

View File

@ -1,31 +1,47 @@
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data"> <div class="context-main-bg context-main p-3">
<legend>Edit Blog Post</legend> <legend class="text-center">Edit Blog Post</legend>
<div class="form-group"> <hr>
<label for="title" class="col-lg-3 control-label">Title</label> {ADMIN_BREADCRUMBS}
<div class="col-lg-3"> <form action="" method="post">
<input type="text" class="form-check-input" name="title" id="title" value="{title}"> <fieldset>
</div> <!-- Title -->
</div> <div class="mb-3 row">
<div class="form-group"> <label for="title" class="col-lg-3 col-form-label text-end">Title:</label>
<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"> <div class="col-lg-6">
<textarea class="form-control" name="blogPost" maxlength="2000" rows="10" cols="50" id="blogPost">{content}</textarea> <input type="text" class="form-control" name="title" id="title" value="{title}" required>
</div> </div>
</div> </div>
<div class="form-group">
<div class="col-lg-6 col-lg-offset-3"> <!-- form buttons -->
<button name="submit" value="publish" type="submit" class="btn btn-lg btn-primary">Publish</button> <div class="mb-3 row">
<button name="submit" value="saveDraft" type="submit" class="btn btn-lg btn-primary">Save as Draft</button> <div class="offset-3 col-lg-6">
<button name="submit" value="preview" type="submit" class="btn btn-lg btn-primary">Preview</button> <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> </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}"> <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>
</form> </form>
</div>

View File

@ -1,5 +1,7 @@
<legend>Blog Posts</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Blog Posts</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/blog/delete" method="post"> <form action="{ROOT_URL}admin/blog/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -41,5 +43,6 @@
</tbody> </tbody>
</table> </table>
<a href="{ROOT_URL}admin/blog/create" class="btn btn-sm btn-primary">Create</a> <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> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
</div>

View File

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

View File

@ -7,8 +7,8 @@
{content} {content}
{ADMIN} {ADMIN}
<hr> <hr>
<a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-md btn-danger">Delete</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">Edit</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> <hr>
{/ADMIN} {/ADMIN}
</div><!-- /.blog-post --> </div><!-- /.blog-post -->

View File

@ -41,7 +41,7 @@ class Bugreport extends Controller {
return Views::view( 'bugreport.create' ); return Views::view( 'bugreport.create' );
} }
$result = self::$bugreport->create( App::$activeUser->ID, Input::post( 'url' ), Input::post( 'ourl' ), Input::post( 'repeat' ), Input::post( 'entry' ) ); $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.' ); 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' ); Redirect::to( 'home/index' );
} else { } else {

View File

@ -1,5 +1,7 @@
<legend>Bug Reports</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Bug Reports</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/bugreport/delete" method="post"> <form action="{ROOT_URL}admin/bugreport/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -36,7 +38,8 @@
{/ALT} {/ALT}
</tbody> </tbody>
</table> </table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
<br /> <br />
<a href="{ROOT_URL}admin/bugreport/clear">clear all</a> <a href="{ROOT_URL}admin/bugreport/clear">clear all</a>
</div>

View File

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

View File

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

View File

@ -25,9 +25,10 @@ use TheTempusProject\Houdini\Classes\Views;
use TheTempusProject\Classes\Forms; use TheTempusProject\Classes\Forms;
use TheTempusProject\Hermes\Functions\Redirect; use TheTempusProject\Hermes\Functions\Redirect;
use TheTempusProject\Bedrock\Functions\Session; use TheTempusProject\Bedrock\Functions\Session;
use TheTempusProject\Models\Comments as CommentModel; use TheTempusProject\Models\Comments as CommentsModel;
class Comments extends Plugin { class Comments extends Plugin {
protected static $comments;
public $pluginName = 'TP Comments'; public $pluginName = 'TP Comments';
public $pluginAuthor = 'JoeyK'; public $pluginAuthor = 'JoeyK';
public $pluginWebsite = 'https://TheTempusProject.com'; public $pluginWebsite = 'https://TheTempusProject.com';
@ -61,7 +62,6 @@ class Comments extends Plugin {
] ]
], ],
]; ];
public $comments;
public function __construct( $load = false ) { public function __construct( $load = false ) {
if ( !empty(App::$activePerms) ) { if ( !empty(App::$activePerms) ) {
@ -75,11 +75,16 @@ class Comments extends Plugin {
'replace' => ( App::$isMod ? '$1' : '' ), 'replace' => ( App::$isMod ? '$1' : '' ),
'enabled' => true, 'enabled' => true,
]; ];
$this->getModel(); self::$comments = new CommentsModel;
parent::__construct( $load ); parent::__construct( $load );
} }
public function formPost( $type, $content, $redirect ) { 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 ) { if ( !App::$isLoggedIn ) {
Session::flash( 'notice', 'You must be logged in to post comments.' ); Session::flash( 'notice', 'You must be logged in to post comments.' );
return Redirect::to( $redirect . $content->ID ); 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() ] ); Session::flash( 'error', [ 'There was a problem with your comment form.' => Check::userErrors() ] );
return Redirect::to( $redirect . $content->ID ); 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() ] ); Session::flash( 'error', [ 'There was a problem posting your comment.' => Check::userErrors() ] );
} else { } else {
Session::flash( 'success', 'Comment posted' ); Session::flash( 'success', 'Comment posted' );
@ -97,6 +102,11 @@ class Comments extends Plugin {
} }
public function formEdit( $type, $content, $redirect ) { 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 ) { if ( !App::$isLoggedIn ) {
Session::flash( 'notice', 'You must be logged in to do that.' ); Session::flash( 'notice', 'You must be logged in to do that.' );
return Redirect::to( $type ); return Redirect::to( $type );
@ -112,7 +122,7 @@ class Comments extends Plugin {
Issues::add( 'error', [ 'There was a problem editing your comment.' => Check::userErrors() ] ); Issues::add( 'error', [ 'There was a problem editing your comment.' => Check::userErrors() ] );
return Views::view( 'comments.admin.edit', $content ); 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() ] ); Issues::add( 'error', [ 'There was a problem editing your comment.' => Check::userErrors() ] );
return Views::view( 'comments.admin.edit', $content ); return Views::view( 'comments.admin.edit', $content );
} }
@ -121,6 +131,11 @@ class Comments extends Plugin {
} }
public function formDelete( $type, $content, $redirect ) { 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 ) { if ( !App::$isLoggedIn ) {
Session::flash( 'notice', 'You must be logged in to do that.' ); Session::flash( 'notice', 'You must be logged in to do that.' );
return Redirect::to( $type ); return Redirect::to( $type );
@ -129,18 +144,11 @@ class Comments extends Plugin {
Session::flash( 'error', 'You do not have permission to edit this comment' ); Session::flash( 'error', 'You do not have permission to edit this comment' );
return Redirect::to( $type ); 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.' ); Session::flash( 'error', 'There was an error with your request.' );
} else { } else {
Session::flash( 'success', 'Comment has been deleted' ); Session::flash( 'success', 'Comment has been deleted' );
} }
return Redirect::to( $redirect . $content->contentID ); 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="mb-4 mt-4">
<div class="form-group center-block"> <div class="offset-md-1 col-10 p-3 context-main-bg">
<div class="col-lg-4 col-lg-offset-4"> <legend class="text-center">Edit Comment</legend>
<textarea class="form-control" name="comment" maxlength="2000" rows="10" cols="50" id="comment">{content}</textarea> <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>
</div> </div>
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Comment</button>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{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> </form>
</div>
</div>

View File

@ -1,5 +1,7 @@
<legend>Recent Comments</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Recent Comments</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/comments/delete" method="post"> <form action="{ROOT_URL}admin/comments/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -38,6 +40,6 @@
{/ALT} {/ALT}
</tbody> </tbody>
</table> </table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
<br /> </div>

View File

@ -1,14 +1,14 @@
<div class="card"> <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"> <h3 class="card-title mb-0">
<i class="fa fa-fw fa-comment"></i> Comments <i class="fa fa-fw fa-comment"></i> Comments
</h3> </h3>
<span class="badge bg-primary">{count}</span> <span class="badge bg-primary">{count}</span>
</div> </div>
<div class="card-body bg-light"> <div class="card-body context-main-bg context-main">
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
{LOOP} {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="d-flex align-items-start">
<div class="me-3"> <div class="me-3">
<img src="{ROOT_URL}{avatar}" class="rounded-circle" alt="User Avatar" style="width: 50px; height: 50px;"> <img src="{ROOT_URL}{avatar}" class="rounded-circle" alt="User Avatar" style="width: 50px; height: 50px;">

View File

@ -1,5 +1,7 @@
<legend>Contact Forms</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Contact Forms</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/contact/delete" method="post"> <form action="{ROOT_URL}admin/contact/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -36,7 +38,8 @@
{/ALT} {/ALT}
</tbody> </tbody>
</table> </table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
<br /> <br />
<a href="{ROOT_URL}admin/contact/clear">clear all</a> <a href="{ROOT_URL}admin/contact/clear">clear all</a>
</div>

View File

@ -1,37 +1,41 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<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="col-md-8">
<div class="card"> {ADMIN_BREADCRUMBS}
<div class="card-header bg-dark"> <div class="card shadow">
<h3 class="card-title">Contact</h3> <!-- Card Header -->
<div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">Contact Form</h3>
</div> </div>
<!-- Card Body -->
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row align-items-center">
<div class=" col-md-12 col-lg-12 "> <!-- Log Details -->
<table class="table table-user-primary"> <table class="table table-borderless">
<tbody> <tbody>
<tr> <tr>
<td align="left" width="200">ID:</td> <th scope="row">ID:</th>
<td align="right">{ID}</td> <td>{ID}</td>
</tr> </tr>
<tr> <tr>
<td>Time submitted:</td> <th scope="row">Time submitted</th>
<td align="right">{DTC}{time}{/DTC}</td> <td>{DTC}{time}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>IP:</td> <th scope="row">Email:</th>
<td align="right">{ip}</td> <td>{email}</td>
</tr> </tr>
<tr> <tr>
<td>Email:</td> <th scope="row">Name:</th>
<td align="right">{email}</td> <td>{name}</td>
</tr> </tr>
<tr> <tr>
<td>Name</td> <th scope="row">IP:</th>
<td align="right">{name}</td> <td>{ip}</td>
</tr> </tr>
<tr> <tr>
<td align="center" colspan="2">Feedback</td> <th scope="row" colspan="2">Feedback:</th>
</tr> </tr>
<tr> <tr>
<td colspan="2">{feedback}</td> <td colspan="2">{feedback}</td>
@ -40,13 +44,14 @@
</table> </table>
</div> </div>
</div> </div>
</div>
<div class="card-footer"> <!-- Admin Controls -->
<div class="card-footer text-center">
{ADMIN} {ADMIN}
<form action="{ROOT_URL}admin/contact/delete" method="post"> <form action="{ROOT_URL}admin/contact/delete" method="post">
<INPUT type="hidden" name="F_" value="{ID}"/> <INPUT type="hidden" name="F_" value="{ID}"/>
<input type="hidden" name="token" value="{TOKEN}" /> <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> </form>
{/ADMIN} {/ADMIN}
</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() { 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 ); Components::set( 'groupSelect', $select );
if ( ! Input::exists( 'submit' ) ) { if ( ! Input::exists( 'submit' ) ) {
return Views::view( 'notifications.admin.send' ); return Views::view( 'notifications.admin.send' );

View File

@ -1,12 +1,23 @@
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data"> <div class="context-main-bg context-main p-3">
<legend>Send Notification</legend> <legend class="text-center">Send Notification</legend>
<div class="form-group"> <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} {groupSelect}
</div> </div>
<div class="form-group"> </div>
<label for="expiration" class="col-lg-3 control-label">Expiration </label>
<div class="col-lg-3"> <!-- Recipients -->
<select id="expiration" name="expiration" class="form-control custom-select"> <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="0">forever</option>
<option value="1800">30 Minutes</option> <option value="1800">30 Minutes</option>
<option value="3600">60 Minutes</option> <option value="3600">60 Minutes</option>
@ -29,16 +40,23 @@
</select> </select>
</div> </div>
</div> </div>
<div class="form-group">
<label for="notification" class="col-lg-3 control-label">Notification</label> <!-- 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"> <div class="col-lg-6">
<textarea class="form-control" name="notification" maxlength="2000" rows="10" cols="50" id="notification"></textarea> <textarea class="form-control" name="notification" id="notification" rows="6" maxlength="2000" required></textarea>
</div> <small class="form-text text-muted">Max: 2000 characters</small>
</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>
</div> </div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{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>
</form> </form>
</div>

View File

@ -1,5 +1,24 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<input type="email" placeholder="Email" id="email" name="email"> <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}"> <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> </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> </form>
</div>

View File

@ -1,5 +1,7 @@
<legend>Subscribers</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Subscribers</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/subscriptions/delete" method="post"> <form action="{ROOT_URL}admin/subscriptions/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -33,5 +35,6 @@
</tbody> </tbody>
</table> </table>
<a href="{ROOT_URL}admin/subscriptions/add" class="btn btn-sm btn-primary">Add</a> <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> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
</div>

View File

@ -30,8 +30,8 @@
<!-- Side Navigation --> <!-- Side Navigation -->
<div class="d-flex flex-column flex-shrink-0 p-3 text-bg-dark" style="width: 280px;"> <div class="d-flex flex-column flex-shrink-0 p-3 text-bg-dark" style="width: 280px;">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none"> <a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none">
<img src="/images/logo.png" class="bi me-2" width="40" height="32" role="img" aria-label="All The Bookmarks Logo"> <img src="{ROOT_URL}{LOGO}" class="bi me-2" width="40" height="32" role="img" aria-label="{SITENAME} Logo" />
<span class="fs-4">All The Bookmarks</span> <span class="fs-4">{SITENAME}</span>
</a> </a>
<hr> <hr>
{ADMIN} {ADMIN}
@ -62,7 +62,6 @@
</div> </div>
</div> </div>
{/ISSUES} {/ISSUES}
{ADMIN_BREADCRUMBS}
{CONTENT} {CONTENT}
</div> </div>
@ -71,6 +70,12 @@
<div class="container pb-4 pt-3 align-items-center"> <div class="container pb-4 pt-3 align-items-center">
<div class="d-flex justify-content-between align-items-center context-main-bg"> <div class="d-flex justify-content-between align-items-center context-main-bg">
{COPY} {COPY}
<div class="col-6 col-md-2">
<div class="material-switch">
<input name="dark-mode-toggle" type="checkbox" id="dark-mode-toggle" class="form-check-input">
<label for="dark-mode-toggle" class="label-default"></label>
</div>
</div>
{SOCIAL} {SOCIAL}
</div> </div>
</div> </div>

View File

@ -7,6 +7,10 @@
Right now this entire system was built and managed by myself. As stated, I have used my own version of this for years but translating it to publicly available is not a 1 to 1 job. There may be bugs or issues encountered while you use the produxct. I can't guarantee a fix for every need in every case immidiately, but I do actively keep track of bugs and work hard to ensure everyone has a great experiience usiing the app. Right now this entire system was built and managed by myself. As stated, I have used my own version of this for years but translating it to publicly available is not a 1 to 1 job. There may be bugs or issues encountered while you use the produxct. I can't guarantee a fix for every need in every case immidiately, but I do actively keep track of bugs and work hard to ensure everyone has a great experiience usiing the app.
</p> </p>
<p> <p>
If you encounter any bugs, feel free to report it here. Likewise, there are forms for feedback, reviews, suggestions, and a general contact form. Thanks for taking the time to check out the product! If you encounter any bugs, feel free to report them <a href="/bugreport" class="text-primary text-decoration-underline">here</a>. Likewise, there are forms for feedback, reviews, suggestions, and a general contact form. Thanks for taking the time to check out the product!
</p> </p>
<div class="text-center mt-4 pb-4">
{loggedin}<a href="/bugreport" class="btn btn-primary btn-lg px-5">Report a Bug</a>{/loggedin}
<a href="/contact" class="btn btn-outline-secondary btn-lg px-5 ms-3">Contact Us</a>
</div>
</div> </div>

View File

@ -1,10 +1,34 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>Send Email</legend> <legend class="text-center">Send Email</legend>
<p>Please be very careful with this feature. This form allows you to send an email (formatted within the default site email template) to registered emails from various sources including newsletter subscribers, call to action subscribers, and all registered user accounts.</p> <hr>
{ADMIN_BREADCRUMBS}
<div class="col-lg-6 offset-md-3">
<p>
Please be very careful with this feature. This form allows you to send an email (formatted within the default site email template) to registered emails from various sources including newsletter subscribers, call to action subscribers, and all registered user accounts.
</p>
</div>
<form action="" method="post">
<fieldset> <fieldset>
<div class="form-group"> <!-- Subject -->
<label for="mailType" class="col-lg-3 control-label">Recipients:</label> <div class="mb-3 row">
<div class="col-lg-2"> <label for="mailSubject" class="col-lg-3 col-form-label text-end">Subject:</label>
<div class="col-lg-6">
<input type="text" class="form-control" name="mailSubject" id="mailSubject" required>
</div>
</div>
<!-- Title -->
<div class="mb-3 row">
<label for="mailTitle" class="col-lg-3 col-form-label text-end">Title:</label>
<div class="col-lg-6">
<input type="text" class="form-control" name="mailTitle" id="mailTitle" required>
</div>
</div>
<!-- Recipients -->
<div class="mb-3 row">
<label for="mailType" class="col-lg-3 col-form-label text-end">Recipients:</label>
<div class="col-lg-6">
<select class="form-control" name="mailType" id="mailType"> <select class="form-control" name="mailType" id="mailType">
<option value='none' checked>none</option> <option value='none' checked>none</option>
<option value='registered'>all registered users</option> <option value='registered'>all registered users</option>
@ -15,25 +39,31 @@
</select> </select>
</div> </div>
</div> </div>
<div class="form-group">
<label for="mailSubject" class="col-lg-3 control-label">Subject:</label> <!-- Email (Optional) -->
<div class="col-lg-2"> <div class="mb-3 row">
<input class="form-control" type="text" name="mailSubject" id="mailSubject"> <label for="contactEmail" class="col-lg-3 col-form-label text-end">E-mail: (optional)</label>
</div>
</div>
<div class="form-group">
<label for="mailTitle" class="col-lg-3 control-label">Title:</label>
<div class="col-lg-2">
<input class="form-control" type="text" name="mailTitle" id="mailTitle">
</div>
</div>
<div class="form-group">
<label for="mailMessage" class="col-lg-3 control-label">Body:<br> (max:2000 characters)</label>
<div class="col-lg-6"> <div class="col-lg-6">
<textarea class="form-control" name="mailMessage" maxlength="2000" rows="10" cols="50" id="mailMessage"></textarea> <input type="email" class="form-control" name="contactEmail" id="contactEmail">
</div> </div>
</div> </div>
</fieldset>
<!-- Message -->
<div class="mb-3 row">
<label for="mailMessage" class="col-lg-3 col-form-label text-end">Body:</label>
<div class="col-lg-6">
<textarea class="form-control" name="mailMessage" id="mailMessage" 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}"> <input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Send</button><br> </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> </form>
</div>

View File

@ -1,12 +1,26 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>New Group</legend> <legend class="text-center">Add Group</legend>
<div class="form-group"> <hr>
<label for="name" class="col-lg-3 control-label">Name</label> {ADMIN_BREADCRUMBS}
<div class="col-lg-3"> <form method="post">
<input type="text" class="form-check-input" name="name" id="name"> <fieldset>
<!-- Name -->
<div class="mb-3 row">
<label for="name" class="col-lg-6 col-form-label text-end">Name:</label>
<div class="col-lg-2">
<input type="text" class="form-control" name="name" id="name" required>
</div> </div>
</div> </div>
{PERMISSIONS_FORM} {PERMISSIONS_FORM}
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Create</button>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{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">Create</button>
</div>
</fieldset>
</form> </form>
</div>

View File

@ -1,12 +1,26 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>Edit Group: {name}</legend> <legend class="text-center">Edit Group: {name}</legend>
<div class="form-group"> <hr>
<label for="name" class="col-lg-3 control-label">Name</label> {ADMIN_BREADCRUMBS}
<div class="col-lg-3"> <form method="post">
<input type="text" class="form-check-input" name="name" id="name" value="{name}"> <fieldset>
<!-- Name -->
<div class="mb-3 row">
<label for="name" class="col-lg-6 col-form-label text-end">Name:</label>
<div class="col-lg-2">
<input type="text" class="form-control" name="name" id="name" value="{name}" required>
</div> </div>
</div> </div>
{PERMISSIONS_FORM} {PERMISSIONS_FORM}
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Save</button>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{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> </form>
</div>

View File

@ -1,5 +1,7 @@
<legend>Groups</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Groups</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/groups/delete" method="post"> <form action="{ROOT_URL}admin/groups/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -35,5 +37,6 @@
</tbody> </tbody>
</table> </table>
<a href="{ROOT_URL}admin/groups/create" class="btn btn-sm btn-primary">Create</a> <a href="{ROOT_URL}admin/groups/create" class="btn btn-sm btn-primary">Create</a>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
</div>

View File

@ -36,5 +36,5 @@
{/ALT} {/ALT}
</tbody> </tbody>
</table> </table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>

View File

@ -1,24 +1,29 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<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="col-md-8">
<div class="card"> {ADMIN_BREADCRUMBS}
<div class="card-header bg-dark"> <div class="card shadow">
<h3 class="card-title">{name}</h3> <!-- Card Header -->
<div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">{name}</h3>
</div> </div>
<!-- Card Body -->
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row align-items-center">
<div class=" col-md-9 col-lg-9 "> <!-- Log Details -->
<table class="table table-user-primary"> <table class="table table-borderless">
<tbody> <tbody>
{PERMISSIONS_ROWS} {PERMISSIONS_ROWS}
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div>
<div class="card-footer"> <!-- Admin Controls -->
<a href="{ROOT_URL}admin/groups/edit/{ID}" class="btn btn-sm btn-warning">Edit</a> <div class="card-footer text-center">
<a href="{ROOT_URL}admin/groups/delete/{ID}" class="btn btn-sm btn-danger">Delete</a> <a href="{ROOT_URL}admin/groups/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{ROOT_URL}admin/groups/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,46 +1,52 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xs-offset-0 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" > <div class="col-md-8">
<div class="panel panel-primary"> <div class="card shadow">
<div class="panel-heading"> <!-- Card Header -->
<h3 class="panel-title">Admin Log</h3> <div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">Admin Log</h3>
</div> </div>
<div class="panel-body">
<div class="row"> <!-- Card Body -->
<div class=" col-md-12 col-lg-12 "> <div class="card-body">
<table class="table table-user-primary"> <div class="row align-items-center">
<!-- Log Details -->
<div class="col-md-8">
<table class="table table-borderless">
<tbody> <tbody>
<tr> <tr>
<td align="left" width="200">ID</td> <th scope="row">ID:</th>
<td align="right">{ID}</td> <td>{ID}</td>
</tr> </tr>
<tr> <tr>
<td>User:</td> <th scope="row">User:</th>
<td align="right">{logUser}</td> <td>{logUser}</td>
</tr> </tr>
<tr> <tr>
<td>Time:</td> <th scope="row">Time:</th>
<td align="right">{DTC}{time}{/DTC}</td> <td>{DTC}{time}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>IP:</td> <th scope="row">IP:</th>
<td align="right">{ip}</td> <td>{ip}</td>
</tr> </tr>
<tr> <tr>
<td align="left">Log:</td> <th scope="row">Log:</th>
<td align="right">{action}</td> <td>{action}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
<div class="panel-footer">
<!-- Admin Controls -->
<div class="card-footer text-center">
{ADMIN} {ADMIN}
<form action="{ROOT_URL}admin/admin/delete" method="post"> <form action="{ROOT_URL}admin/admin/delete" method="post">
<INPUT type="hidden" name="L_" value="{ID}"/> <INPUT type="hidden" name="L_" value="{ID}"/>
<input type="hidden" name="token" value="{TOKEN}" /> <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> </form>
{/ADMIN} {/ADMIN}
</div> </div>

View File

@ -1,5 +1,7 @@
<legend>Admin Logs</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Admin Logs</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/admin/delete" method="post"> <form action="{ROOT_URL}admin/admin/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -36,5 +38,6 @@
{/ALT} {/ALT}
</tbody> </tbody>
</table> </table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
</div>

View File

@ -1,38 +1,45 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xs-offset-0 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" > <div class="col-md-8">
<div class="panel panel-primary"> <div class="card shadow">
<div class="panel-heading"> <!-- Card Header -->
<h3 class="panel-title">Error</h3> <div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">Error Log</h3>
</div> </div>
<div class="panel-body">
<div class="row"> <!-- Card Body -->
<div class=" col-md-12 col-lg-12 "> <div class="card-body">
<table class="table table-user-primary"> <div class="row align-items-center">
<!-- Log Details -->
<div class="col-md-8">
<table class="table table-borderless">
<tbody> <tbody>
<tr> <tr>
<td align="left" width="200">ID</td> <th scope="row">ID:</th>
<td align="right">{ID}</td> <td>{ID}</td>
</tr> </tr>
<tr> <tr>
<td>Time submitted:</td> <th scope="row">Class:</th>
<td align="right">{DTC}{time}{/DTC}</td> <td>{class}</td>
</tr> </tr>
<tr> <tr>
<td>IP:</td> <th scope="row">Function:</th>
<td align="right">{ip}</td> <td>{function}</td>
</tr> </tr>
<tr> <tr>
<td align="left">Class:</td> <th scope="row">Time:</th>
<td align="right">{class}</td> <td>{DTC}{time}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td align="left">Function</td> <th scope="row">IP:</th>
<td align="right">{function}</td> <td>{ip}</td>
</tr> </tr>
<tr> <tr>
<td align="left">Error:</td> <th scope="row">Error:</th>
<td align="right">{error}</td> <td>{error}</td>
</tr>
<tr>
<th scope="row" colspan="2">Description:</th>
</tr> </tr>
<tr> <tr>
<td colspan="2">{description}</td> <td colspan="2">{description}</td>
@ -42,12 +49,14 @@
</div> </div>
</div> </div>
</div> </div>
<div class="panel-footer">
<!-- Admin Controls -->
<div class="card-footer text-center">
{ADMIN} {ADMIN}
<form action="{ROOT_URL}admin/errors/delete" method="post"> <form action="{ROOT_URL}admin/errors/delete" method="post">
<INPUT type="hidden" name="E_" value="{ID}"/> <INPUT type="hidden" name="E_" value="{ID}"/>
<input type="hidden" name="token" value="{TOKEN}" /> <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> </form>
{/ADMIN} {/ADMIN}
</div> </div>

View File

@ -1,5 +1,7 @@
<legend>Errors</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Errors</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/errors/delete" method="post"> <form action="{ROOT_URL}admin/errors/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -34,7 +36,8 @@
{/ALT} {/ALT}
</tbody> </tbody>
</table> </table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
<br /> <br />
<a href="{ROOT_URL}admin/errors/clear">clear all</a> <a href="{ROOT_URL}admin/errors/clear">clear all</a>
</div>

View File

@ -1,46 +1,52 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xs-offset-0 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" > <div class="col-md-8">
<div class="panel panel-primary"> <div class="card shadow">
<div class="panel-heading"> <!-- Card Header -->
<h3 class="panel-title">Login Record</h3> <div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">Login Log</h3>
</div> </div>
<div class="panel-body">
<div class="row"> <!-- Card Body -->
<div class=" col-md-12 col-lg-12 "> <div class="card-body">
<table class="table table-user-primary"> <div class="row align-items-center">
<!-- Log Details -->
<div class="col-md-8">
<table class="table table-borderless">
<tbody> <tbody>
<tr> <tr>
<td align="left" width="200">ID</td> <th scope="row">ID:</th>
<td align="right">{ID}</td> <td>{ID}</td>
</tr> </tr>
<tr> <tr>
<td>User:</td> <th scope="row">User:</th>
<td align="right">{logUser}</td> <td>{logUser}</td>
</tr> </tr>
<tr> <tr>
<td>Time:</td> <th scope="row">Time:</th>
<td align="right">{DTC}{time}{/DTC}</td> <td>{DTC}{time}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>IP:</td> <th scope="row">IP:</th>
<td align="right">{ip}</td> <td>{ip}</td>
</tr> </tr>
<tr> <tr>
<td align="left">Pass or Fail:</td> <th scope="row">Pass or Fail:</th>
<td align="right">{action}</td> <td>{action}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div> </div>
<div class="panel-footer">
<!-- Admin Controls -->
<div class="card-footer text-center">
{ADMIN} {ADMIN}
<form action="{ROOT_URL}admin/logins/delete" method="post"> <form action="{ROOT_URL}admin/logins/delete" method="post">
<INPUT type="hidden" name="L_" value="{ID}"/> <INPUT type="hidden" name="L_" value="{ID}"/>
<input type="hidden" name="token" value="{TOKEN}" /> <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> </form>
{/ADMIN} {/ADMIN}
</div> </div>

View File

@ -1,5 +1,7 @@
<legend>Logins</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Logins</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/logins/delete" method="post"> <form action="{ROOT_URL}admin/logins/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -36,7 +38,8 @@
{/ALT} {/ALT}
</tbody> </tbody>
</table> </table>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
<br /> <br />
<a href="{ROOT_URL}admin/logins/clear">clear all</a> <a href="{ROOT_URL}admin/logins/clear">clear all</a>
</div>

View File

@ -1,26 +0,0 @@
<legend><h2>Installed Dependencies</h2></legend>
<table class="table table-striped">
<thead>
<tr>
<th style="width: 40%">Name</th>
<th style="width: 40%">Required Version</th>
<th style="width: 20%">Installed Version</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td><a href="{ROOT_URL}admin/dependencies/viewInfo/{name}">{name}</a></td>
<td>{requiredVersion}</td>
<td>{version}</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>

View File

@ -0,0 +1,30 @@
<div class="context-main-bg context-main p-3">
<legend class="text-center">Installed Dependencies</legend>
<hr>
{ADMIN_BREADCRUMBS}
<table class="table table-striped">
<thead>
<tr>
<th style="width: 40%">Name</th>
<th style="width: 40%">Required Version</th>
<th style="width: 20%">Installed Version</th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td><b>{name}</b></td>
<td>{requiredVersion}</td>
<td>{version}</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
</div>

View File

@ -1,6 +0,0 @@
<form action="" method="post" class="form-horizontal">
<legend>Install {MODEL}</legend>
<p>The Tempus Project cannot guarantee the safety or effectiveness of any models not offered directly from the organizations GitHub at <a href="https://github.com/TheTempusProject">The Tempus Project</a></p>
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Install</button>
<input type="hidden" name="installHash" value="{TOKEN}">
</form><br>

View File

@ -1,34 +0,0 @@
<legend><h2>Installed Models</h2></legend>
<table class="table table-striped">
<thead>
<tr>
<th style="width: 40%">Name</th>
<th style="width: 15%">Install Status</th>
<th style="width: 5%">File Version</th>
<th style="width: 5%">Installed Version</th>
<th style="width: 15%">Install Date</th>
<th style="width: 15%">Last Updated</th>
<th style="width: 10%"></th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td><a href="{ROOT_URL}admin/models/view/{name}">{name}</a></td>
<td>{installStatus}</td>
<td>{version}</td>
<td>{installedVersion}</td>
<td>{DTC=date}{installDate}{/DTC}</td>
<td>{DTC=date}{lastUpdate}{/DTC}</td>
<td><a href="{ROOT_URL}admin/models/view/{name}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
</tr>
{/LOOP}
{ALT}
<tr>
<td colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>

View File

@ -1,6 +0,0 @@
<form action="" method="post" class="form-horizontal">
<legend>Uninstall {MODEL}</legend>
<p>Are you sure you would like to uninstall this model and all of its components? There is no guarantee that your site will continue to run without error. This is especially the case when uninstalling core TTP models.</p>
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Uninstall</button>
<input type="hidden" name="uninstallHash" value="{TOKEN}">
</form><br>

View File

@ -1,69 +0,0 @@
<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">Model Info</h3>
</div>
<div class="card-body">
<div class="row">
<div class=" col-md-12 col-lg-12 ">
<table class="table table-user-primary">
<tbody>
<tr>
<td align="left" width="200">Name:</td>
<td align="right">{name}</td>
</tr>
<tr>
<td>Status:</td>
<td align="right">{installStatus}</td>
</tr>
<tr>
<td>Installed:</td>
<td align="right">{DTC}{installDate}{/DTC}</td>
</tr>
<tr>
<td>Last Updated:</td>
<td align="right">{DTC}{lastUpdate}{/DTC}</td>
</tr>
<tr>
<td>File Version:</td>
<td align="right">{version}</td>
</tr>
<tr>
<td>Installed Version:</td>
<td align="right">{installedVersion}</td>
</tr>
<tr>
<td>installTable:</td>
<td align="right">{installTable}</td>
</tr>
<tr>
<td>installPermissions:</td>
<td align="right">{installPermissions}</td>
</tr>
<tr>
<td>installConfigs:</td>
<td align="right">{installConfigs}</td>
</tr>
<tr>
<td>installResources:</td>
<td align="right">{installResources}</td>
</tr>
<tr>
<td>installPreferences:</td>
<td align="right">{installPreferences}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card-footer">
<a href="{ROOT_URL}admin/models/install/{name}" class="btn btn-sm btn-warning">Install</a>
<a href="{ROOT_URL}admin/models/uninstall/{name}" class="btn btn-sm btn-danger">Uninstall</a>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,7 +1,13 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>Disable {PLUGIN}</legend> <legend class="text-center">Disable {PLUGIN}</legend>
<hr>
{ADMIN_BREADCRUMBS}
<div class="col-lg-6 offset-md-3 text-center">
<p>Are you absolutely <b>SURE</b> you wish to <b>Disable</b> this plugin?</p> <p>Are you absolutely <b>SURE</b> you wish to <b>Disable</b> this plugin?</p>
<p>The Tempus Project cannot guarantee the safety or effectiveness of any plugins not offered directly from the organization's GitHub at <a href="https://github.com/TheTempusProject">The Tempus Project</a></p> <p>The Tempus Project cannot guarantee the safety or effectiveness of any plugins not offered directly from the organization's GitHub at <a href="https://github.com/TheTempusProject">The Tempus Project</a></p>
<form method="post">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Disable</button> <button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Disable</button>
<input type="hidden" name="installHash" value="{TOKEN}"> <input type="hidden" name="installHash" value="{TOKEN}">
</form><br> </form>
</div>
</div>

View File

@ -1,7 +1,13 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>Enable {PLUGIN}</legend> <legend class="text-center">Enable {PLUGIN}</legend>
<hr>
{ADMIN_BREADCRUMBS}
<div class="col-lg-6 offset-md-3 text-center">
<p>Are you absolutely <b>SURE</b> you wish to <b>Enable</b> this plugin?</p> <p>Are you absolutely <b>SURE</b> you wish to <b>Enable</b> this plugin?</p>
<p>The Tempus Project cannot guarantee the safety or effectiveness of any plugins not offered directly from the organization's GitHub at <a href="https://github.com/TheTempusProject">The Tempus Project</a></p> <p>The Tempus Project cannot guarantee the safety or effectiveness of any plugins not offered directly from the organization's GitHub at <a href="https://github.com/TheTempusProject">The Tempus Project</a></p>
<form method="post">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Enable</button> <button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Enable</button>
<input type="hidden" name="installHash" value="{TOKEN}"> <input type="hidden" name="installHash" value="{TOKEN}">
</form><br> </form>
</div>
</div>

View File

@ -1,6 +1,12 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>Install {PLUGIN}</legend> <legend class="text-center">Install {PLUGIN}</legend>
<hr>
{ADMIN_BREADCRUMBS}
<div class="col-lg-6 offset-md-3 text-center">
<p>The Tempus Project cannot guarantee the safety or effectiveness of any plugins not offered directly from the organization's GitHub at <a href="https://github.com/TheTempusProject">The Tempus Project</a></p> <p>The Tempus Project cannot guarantee the safety or effectiveness of any plugins not offered directly from the organization's GitHub at <a href="https://github.com/TheTempusProject">The Tempus Project</a></p>
<form method="post">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Install</button> <button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Install</button>
<input type="hidden" name="installHash" value="{TOKEN}"> <input type="hidden" name="installHash" value="{TOKEN}">
</form><br> </form>
</div>
</div>

View File

@ -1,4 +1,7 @@
<legend><h2>Installed Plugins</h2></legend> <div class="context-main-bg context-main p-3">
<legend class="text-center">Installed Plugins</legend>
<hr>
{ADMIN_BREADCRUMBS}
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
@ -32,3 +35,4 @@
{/ALT} {/ALT}
</tbody> </tbody>
</table> </table>
</div>

View File

@ -1,6 +1,12 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>Uninstall {PLUGIN}</legend> <legend class="text-center">Uninstall {PLUGIN}</legend>
<hr>
{ADMIN_BREADCRUMBS}
<div class="col-lg-6 offset-md-3 text-center">
<p>Are you sure you would like to uninstall this plugin and all of its components? There is no guarantee that your site will continue to run without error.</p> <p>Are you sure you would like to uninstall this plugin and all of its components? There is no guarantee that your site will continue to run without error.</p>
<form method="post">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Uninstall</button> <button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Uninstall</button>
<input type="hidden" name="uninstallHash" value="{TOKEN}"> <input type="hidden" name="uninstallHash" value="{TOKEN}">
</form><br> </form>
</div>
</div>

View File

@ -1,69 +1,74 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<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="col-md-8">
<div class="card"> {ADMIN_BREADCRUMBS}
<div class="card-header bg-dark"> <div class="card shadow">
<h3 class="card-title">Plugin Info</h3> <!-- Card Header -->
<div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">Plugin: {name}</h3>
</div> </div>
<!-- Card Body -->
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row align-items-center">
<div class=" col-md-12 col-lg-12 "> <!-- Log Details -->
<table class="table table-user-primary"> <table class="table table-borderless">
<tbody> <tbody>
<tr> <tr>
<td align="left" width="200">Name:</td> <th scope="row" class="col-3">Name</th>
<td align="right">{name}</td> <td>{name}</td>
</tr> </tr>
<tr> <tr>
<td>Enabled:</td> <th scope="row">Enabled</th>
<td align="right">{enabled_txt}</td> <td>{enabled_txt}</td>
</tr> </tr>
<tr> <tr>
<td>Status:</td> <th scope="row">Status</th>
<td align="right">{installStatus}</td> <td>{installStatus}</td>
</tr> </tr>
<tr> <tr>
<td>Install Date:</td> <th scope="row">Install Date</th>
<td align="right">{DTC}{installDate}{/DTC}</td> <td>{DTC}{installDate}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>Last Updated:</td> <th scope="row">Last Updated</th>
<td align="right">{DTC}{lastUpdate}{/DTC}</td> <td>{DTC}{lastUpdate}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>File Version:</td> <th scope="row">File Version</th>
<td align="right">{version}</td> <td>{version}</td>
</tr> </tr>
<tr> <tr>
<td>Installed Version:</td> <th scope="row">Installed Version</th>
<td align="right">{installedVersion}</td> <td>{installedVersion}</td>
</tr> </tr>
<tr> <tr>
<td>Preferences Installed:</td> <th scope="row">Preferences Installed</th>
<td align="right">{preferences_installed}</td> <td>{preferences_installed}</td>
</tr> </tr>
<tr> <tr>
<td>Permissions Installed:</td> <th scope="row">Permissions Installed</th>
<td align="right">{permissions_installed}</td> <td>{permissions_installed}</td>
</tr> </tr>
<tr> <tr>
<td>Configs Installed:</td> <th scope="row">Configs Installed</th>
<td align="right">{configs_installed}</td> <td>{configs_installed}</td>
</tr> </tr>
<tr> <tr>
<td>Models Installed:</td> <th scope="row">Models Installed</th>
<td align="right">{models_installed}</td> <td>{models_installed}</td>
</tr> </tr>
<tr> <tr>
<td>Resources Installed:</td> <th scope="row">Resources Installed</th>
<td align="right">{resources_installed}</td> <td>{resources_installed}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div>
<div class="card-footer"> <!-- Admin Controls -->
<div class="card-footer text-center">
<a href="{ROOT_URL}admin/plugins/install/{name}" class="btn btn-sm btn-primary">Install</a> <a href="{ROOT_URL}admin/plugins/install/{name}" class="btn btn-sm btn-primary">Install</a>
<a href="{ROOT_URL}admin/plugins/enable/{name}" class="btn btn-sm btn-success">Enable</a> <a href="{ROOT_URL}admin/plugins/enable/{name}" class="btn btn-sm btn-success">Enable</a>
<a href="{ROOT_URL}admin/plugins/disable/{name}" class="btn btn-sm btn-danger">Disable</a> <a href="{ROOT_URL}admin/plugins/disable/{name}" class="btn btn-sm btn-danger">Disable</a>

View File

@ -1,34 +1,51 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>New Route</legend> <legend class="text-center">Edit Route: {nickname}</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form method="post">
<fieldset> <fieldset>
<div class="form-group"> <!-- Name -->
<label for="nickname" class="col-lg-6 control-label">Nickname:</label> <div class="mb-3 row">
<label for="nickname" class="col-lg-6 col-form-label text-end">Nickname:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<input class="form-control" type="text" name="nickname" id="nickname"> <input type="text" class="form-control" name="nickname" id="nickname" required>
</div> </div>
</div> </div>
<div class="form-group">
<label for="original_url" class="col-lg-6 control-label">Original URL:</label> <!-- Original URL -->
<div class="mb-3 row">
<label for="original_url" class="col-lg-6 col-form-label text-end">Original URL:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<input class="form-control" type="text" name="original_url" id="original_url"> <input type="text" class="form-control" name="original_url" id="original_url" required>
</div> </div>
</div> </div>
<div class="form-group">
<label for="forwarded_url" class="col-lg-6 control-label">Forward URL:</label> <!-- Forward URL -->
<div class="mb-3 row">
<label for="forwarded_url" class="col-lg-6 col-form-label text-end">Forward URL:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<input class="form-control" type="text" name="forwarded_url" id="forwarded_url"> <input type="text" class="form-control" name="forwarded_url" id="forwarded_url" required>
</div> </div>
</div> </div>
<div class="form-group">
<label for="redirect_type" class="col-lg-6 control-label">Redirect Type:</label> <!-- Redirect Type -->
<div class="mb-3 row">
<label for="redirect_type" class="col-lg-6 col-form-label text-end">Redirect Type:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<select name="redirect_type" id="redirect_type" class=""> <select name="redirect_type" id="redirect_type" class="form-control">
<option value='internal' selected>Internal</option>
<option value='external'>External</option> <option value='external'>External</option>
<option value='internal'>Internal</option>
</select> </select>
</div> </div>
</div> </div>
</fieldset>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Create</button><br>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form> </form>
</div>

View File

@ -1,35 +1,52 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>Edit Route</legend> <legend class="text-center">Edit Route: {nickname}</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form method="post">
<fieldset> <fieldset>
<div class="form-group"> <!-- Name -->
<label for="nickname" class="col-lg-6 control-label">Nickname:</label> <div class="mb-3 row">
<label for="nickname" class="col-lg-6 col-form-label text-end">Nickname:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<input class="form-control" type="text" name="nickname" id="nickname" value="{nickname}"> <input type="text" class="form-control" name="nickname" id="nickname" value="{nickname}" required>
</div> </div>
</div> </div>
<div class="form-group">
<label for="original_url" class="col-lg-6 control-label">Original URL:</label> <!-- Original URL -->
<div class="mb-3 row">
<label for="original_url" class="col-lg-6 col-form-label text-end">Original URL:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<input class="form-control" type="text" name="original_url" id="original_url" value="{original_url}"> <input type="text" class="form-control" name="original_url" id="original_url" value="{original_url}" required>
</div> </div>
</div> </div>
<div class="form-group">
<label for="forwarded_url" class="col-lg-6 control-label">Forward URL:</label> <!-- Forward URL -->
<div class="mb-3 row">
<label for="forwarded_url" class="col-lg-6 col-form-label text-end">Forward URL:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<input class="form-control" type="text" name="forwarded_url" id="forwarded_url" value="{forwarded_url}"> <input type="text" class="form-control" name="forwarded_url" id="forwarded_url" value="{forwarded_url}" required>
</div> </div>
</div> </div>
<div class="form-group">
<label for="redirect_type" class="col-lg-6 control-label">Redirect Type:</label> <!-- Redirect Type -->
<div class="mb-3 row">
<label for="redirect_type" class="col-lg-6 col-form-label text-end">Redirect Type:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<select name="redirect_type" id="redirect_type" class=""> <select name="redirect_type" id="redirect_type" class="form-control">
{OPTION=redirect_type} {OPTION=redirect_type}
<option value='external'>External</option> <option value='external'>External</option>
<option value='internal'>Internal</option> <option value='internal'>Internal</option>
</select> </select>
</div> </div>
</div> </div>
</fieldset>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Save</button><br>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form> </form>
</div>

View File

@ -1,5 +1,7 @@
<legend>Redirects</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Redirects</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/routes/delete" method="post"> <form action="{ROOT_URL}admin/routes/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -41,5 +43,6 @@
</tbody> </tbody>
</table> </table>
<a href="{ROOT_URL}admin/routes/create" class="btn btn-sm btn-primary">Create</a> <a href="{ROOT_URL}admin/routes/create" class="btn btn-sm btn-primary">Create</a>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
</div>

View File

@ -1,35 +1,40 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<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="col-md-8">
<div class="card"> {ADMIN_BREADCRUMBS}
<div class="card-header bg-dark"> <div class="card shadow">
<h3 class="card-title">{nickname}</h3> <!-- Card Header -->
<div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">{nickname}</h3>
</div> </div>
<!-- Card Body -->
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row align-items-center">
<div class=" col-md-9 col-lg-9 "> <!-- Log Details -->
<table class="table table-user-primary"> <table class="table table-borderless">
<tbody> <tbody>
<tr> <tr>
<td>Type</td> <th scope="row" class="col-3">Type</th>
<td>{redirect_type}</td> <td>{redirect_type}</td>
</tr> </tr>
<tr> <tr>
<td>Original URL</td> <th scope="row" class="col-3">Original URL</th>
<td>{original_url}</td> <td>{original_url}</td>
</tr> </tr>
<tr> <tr>
<td>Destination URL</td> <th scope="row" class="col-3">Destination URL</th>
<td>{forwarded_url}</td> <td>{forwarded_url}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div>
<div class="card-footer"> <!-- Admin Controls -->
<a href="{ROOT_URL}admin/routes/edit/{ID}" class="btn btn-sm btn-warning">Edit</a> <div class="card-footer text-center">
<a href="{ROOT_URL}admin/routes/delete/{ID}" class="btn btn-sm btn-danger">Delete</a> <a href="{ROOT_URL}admin/routes/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{ROOT_URL}admin/routes/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,6 +1,16 @@
<div class="context-main-bg context-main p-3">
{ADMIN_BREADCRUMBS}
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data"> <form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
<legend>Settings</legend> <fieldset>
{configForm} {configForm}
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Save</button><br> </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> </form>
</div>

View File

@ -1,28 +1,40 @@
<form action="" method="post" class="form-horizontal"> <div class="mb-4 mt-4">
<legend>Create Token</legend> <div class="offset-md-1 col-10 py-3 context-main-bg">
<legend class="text-center">Create Token</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="" method="post" class="container py-4">
<fieldset> <fieldset>
<div class="form-group"> <div class="mb-3 row">
<label for="name" class="col-lg-6 control-label">Name:</label> <label for="name" class="col-lg-5 col-form-label text-end">Name</label>
<div class="col-lg-2"> <div class="col-lg-3">
<input class="form-control" type="text" name="name" id="name"> <input type="text" class="form-control" name="name" id="name" required>
</div> </div>
</div> </div>
<div class="form-group"> <div class="mb-3 row">
<label for="notes" class="col-lg-3 control-label">Notes</label> <label for="token_type" class="col-lg-5 col-form-label text-end">Token Type</label>
<div class="col-lg-6"> <div class="col-lg-3">
<textarea class="form-control" name="notes" maxlength="2000" rows="10" cols="50" id="notes"></textarea> <select id="token_type" name="token_type" class="form-select">
</div>
</div>
<div class="form-group">
<label for="token_type" class="col-lg-6 control-label">Token Type:</label>
<div class="col-lg-2">
<select name="token_type" id="token_type" class="">
<option value='app' selected>Application</option> <option value='app' selected>Application</option>
<option value='user'>User</option> <option value='user'>User</option>
</select> </select>
</div> </div>
</div> </div>
</fieldset> <div class="mb-3 row">
<label for="notes" class="col-lg-5 col-form-label text-end">Notes:</label>
<div class="col-lg-3">
<textarea class="form-control" name="notes" maxlength="2000" rows="5" cols="50" id="notes"></textarea>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Create</button><br>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Create</button>
</div>
</fieldset>
</form> </form>
</div>
</div>

View File

@ -1,29 +1,41 @@
<form action="" method="post" class="form-horizontal"> <div class="mb-4 mt-4">
<legend>Edit Token</legend> <div class="offset-md-1 col-10 p-3 context-main-bg">
<legend class="text-center">Edit Token</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="" method="post" class="container py-4">
<fieldset> <fieldset>
<div class="form-group"> <div class="mb-3 row">
<label for="name" class="col-lg-6 control-label">Name:</label> <label for="name" class="col-lg-5 col-form-label text-end">Name</label>
<div class="col-lg-2"> <div class="col-lg-3">
<input class="form-control" type="text" name="name" id="name" value="{name}"> <input type="text" class="form-control" name="name" id="name" value="{name}" required>
</div> </div>
</div> </div>
<div class="form-group"> <div class="mb-3 row">
<label for="notes" class="col-lg-3 control-label">Notes</label> <label for="token_type" class="col-lg-5 col-form-label text-end">Token Type</label>
<div class="col-lg-6"> <div class="col-lg-3">
<textarea class="form-control" name="notes" maxlength="2000" rows="10" cols="50" id="notes">{notes}</textarea> <select id="token_type" name="token_type" class="form-select">
</div>
</div>
<div class="form-group">
<label for="token_type" class="col-lg-6 control-label">Token Type:</label>
<div class="col-lg-2">
<select name="token_type" id="token_type" class="">
{OPTION=token_type} {OPTION=token_type}
<option value='app'>Application</option> <option value='app' selected>Application</option>
<option value='user'>User</option> <option value='user'>User</option>
</select> </select>
</div> </div>
</div> </div>
</fieldset> <div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Notes:</label>
<div class="col-lg-3">
<textarea class="form-control" name="notes" maxlength="2000" rows="5" cols="50" id="notes">{notes}</textarea>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Save</button><br>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form> </form>
</div>
</div>

View File

@ -1,20 +1,22 @@
<legend>Tokens</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Tokens</legend>
<hr>
{ADMIN_BREADCRUMBS}
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th style="width: 15%">ID</th> <th style="width: 55%">Name</th>
<th style="width: 45%">Name</th>
<th style="width: 25%">Type</th> <th style="width: 25%">Type</th>
<th style="width: 15%">Delete</th> <th style="width: 10%">Delete</th>
<th style="width: 10%">Delete</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{LOOP} {LOOP}
<tr> <tr>
<td align="center">{ID}</td>
<td><a href='{ROOT_URL}admin/tokens/view/{ID}'>{name}</a></td> <td><a href='{ROOT_URL}admin/tokens/view/{ID}'>{name}</a></td>
<td>{token_type}</td> <td>{token_type}</td>
<td><a href="{ROOT_URL}admin/tokens/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}admin/tokens/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td> <td><a href="{ROOT_URL}admin/tokens/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</tr> </tr>
{/LOOP} {/LOOP}
@ -28,3 +30,4 @@
</tbody> </tbody>
</table> </table>
<a href="{ROOT_URL}admin/tokens/create" class="btn btn-sm btn-primary">Create</a> <a href="{ROOT_URL}admin/tokens/create" class="btn btn-sm btn-primary">Create</a>
</div>

View File

@ -1,46 +1,51 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<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="col-md-8">
<div class="card"> {ADMIN_BREADCRUMBS}
<div class="card-header bg-dark"> <div class="card shadow">
<h3 class="card-title">{name}</h3> <!-- Card Header -->
<div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">{name}</h3>
</div> </div>
<!-- Card Body -->
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row align-items-center">
<div class=" col-md-9 col-lg-9 "> <!-- Log Details -->
<table class="table table-user-primary"> <table class="table table-borderless">
<tbody> <tbody>
<tr> <tr>
<td>Type</td> <th scope="row" class="col-3">Type</th>
<td>{token_type}</td> <td>{token_type}</td>
</tr> </tr>
<tr> <tr>
<td>Created At</td> <th scope="row">Created At</th>
<td>{DTC}{createdAt}{/DTC}</td> <td>{DTC}{createdAt}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>Expires At</td> <th scope="row">Expires At</th>
<td>{DTC}{expiresAt}{/DTC}</td> <td>{DTC}{expiresAt}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>Token</td> <th scope="row">Token</th>
<td>{token}</td> <td class="text-break">{token}</td>
</tr> </tr>
<tr> <tr>
<td>Secret</td> <th scope="row">Secret</th>
<td>{secret}</td> <td class="text-break">{secret}</td>
</tr> </tr>
<tr> <tr>
<td>Notes</td> <th scope="row">Notes</th>
<td>{notes}</td> <td>{notes}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
</div>
<div class="card-footer"> <!-- Admin Controls -->
<a href="{ROOT_URL}admin/tokens/delete/{ID}" class="btn btn-sm btn-danger">Delete</a> <div class="card-footer text-center">
<a href="{ROOT_URL}admin/tokens/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,44 +1,74 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main-bg context-main p-3">
<legend>Register</legend> <legend class="text-center">Add User</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form method="post">
<fieldset> <fieldset>
<div class="form-group"> <!-- Group -->
<label for="username" class="col-lg-3 control-label">Username:</label> <div class="mb-3 row">
<label for="groupSelect" class="col-lg-6 col-form-label text-end">Group:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<input class="form-control" type="text" name="username" id="username">
</div>
</div>
<div class="form-group">
<label for="email" class="col-lg-3 control-label">Email:</label>
<div class="col-lg-2">
<input class="form-control" type="email" name="email" id="email">
</div>
</div>
<div class="form-group">
<label for="email2" class="col-lg-3 control-label">Re-Enter Email:</label>
<div class="col-lg-2">
<input class="form-control" type="email" name="email2" id="email2">
</div>
</div>
<div class="form-group">
<label for="password" class="col-lg-3 control-label">Password:</label>
<div class="col-lg-2">
<input class="form-control" type="password" name="password" id="password">
</div>
</div>
<div class="form-group">
<label for="password2" class="col-lg-3 control-label">Re-Enter Password:</label>
<div class="col-lg-2">
<input class="form-control" type="password" name="password2" id="password2">
</div>
</div>
<div class="form-group">
<label for="confirmation" class="col-lg-3 control-label">Send Confirmation Email?:</label>
<div class="col-lg-2">
<input class="form-control" type="checkbox" name="confirmation" id="confirmation">
</div>
</div>
{groupSelect} {groupSelect}
</fieldset> </div>
</div>
<!-- Username -->
<div class="mb-3 row">
<label for="username" class="col-lg-6 col-form-label text-end">Username:</label>
<div class="col-lg-2">
<input type="text" class="form-control" name="username" id="username" required>
</div>
</div>
<!-- Email -->
<div class="mb-3 row">
<label for="email" class="col-lg-6 col-form-label text-end">Email:</label>
<div class="col-lg-2">
<input type="email" class="form-control" name="email" id="email" required>
</div>
</div>
<!-- Re-enter Email -->
<div class="mb-3 row">
<label for="email2" class="col-lg-6 col-form-label text-end">Re-Enter Email:</label>
<div class="col-lg-2">
<input type="email" class="form-control" name="email2" id="email2" required>
</div>
</div>
<!-- Password -->
<div class="mb-3 row">
<label for="password" class="col-lg-6 col-form-label text-end">Password:</label>
<div class="col-lg-2">
<input type="password" class="form-control" name="password" id="password" required>
</div>
</div>
<!-- Re-enter Password -->
<div class="mb-3 row">
<label for="password2" class="col-lg-6 col-form-label text-end">Re-Enter Password:</label>
<div class="col-lg-2">
<input type="password" class="form-control" name="password2" id="password2" required>
</div>
</div>
<!-- Confirmation -->
<div class="mb-3 row">
<label for="confirmation" class="col-lg-6 col-form-label text-end">Send Confirmation:</label>
<div class="col-lg-2">
<div class="mb-3 form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" name="confirmation" id="confirmation" value="true">
</div>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Create</button><br>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Create</button>
</div>
</fieldset>
</form> </form>
</div>

View File

@ -1,45 +1,78 @@
<form action="{ROOT_URL}admin/users/edit/{ID}" method="post" class="form-horizontal" enctype="multipart/form-data"> <div class="context-main-bg context-main p-3">
<legend>Edit User: <b>{USERNAME}</b></legend> <legend class="text-center">Edit User: <b>{USERNAME}</b></legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/users/edit/{ID}" method="post" enctype="multipart/form-data">
<fieldset> <fieldset>
<div class="form-group"> <!-- Group -->
<label for="username" class="col-lg-3 control-label">Username:</label> <div class="mb-3 row">
<label for="groupSelect" class="col-lg-6 col-form-label text-end">Group:</label>
<div class="col-lg-2"> <div class="col-lg-2">
<input class="form-control" type="text" name="username" id="username" value="{username}">
</div>
</div>
<div class="form-group">
<label for="email" class="col-lg-3 control-label">Email:</label>
<div class="col-lg-2">
<input class="form-control" type="email" name="email" id="email" value="{email}">
</div>
</div>
<div class="form-group">
<label for="confirmation" class="col-lg-3 control-label">Send Confirmation Email? (when updating the email):</label>
<div class="col-lg-2">
<input class="form-control" type="checkbox" name="confirmation" id="confirmation">
</div>
</div>
<div class="form-group">
<label for="password" class="col-lg-3 control-label">New Password:</label>
<div class="col-lg-2">
<input class="form-control" type="password" name="password" id="password" value="">
</div>
</div>
<div class="form-group">
<label for="password2" class="col-lg-3 control-label">Re-Enter New Password:</label>
<div class="col-lg-2">
<input class="form-control" type="password" name="password2" id="password2" value="">
</div>
</div>
{AvatarSettings}
<div class="form-group">
<label for="confirmed" class="col-lg-3 control-label">Email is confirmed:</label>
<div class="col-lg-2">
<input class="form-control" type="checkbox" name="confirmed" id="confirmed" value="true" {CHECKED:confirmed=1}>
</div>
</div>
{groupSelect} {groupSelect}
</fieldset> </div>
</div>
<!-- Username -->
<div class="mb-3 row">
<label for="username" class="col-lg-6 col-form-label text-end">Username:</label>
<div class="col-lg-2">
<input type="text" class="form-control" name="username" id="username" value="{username}" required>
</div>
</div>
<!-- Email -->
<div class="mb-3 row">
<label for="email" class="col-lg-6 col-form-label text-end">Email:</label>
<div class="col-lg-2">
<input type="email" class="form-control" name="email" id="email" value="{email}" required>
</div>
</div>
{AvatarSettings}
<!-- Password -->
<div class="mb-3 row">
<label for="password" class="col-lg-6 col-form-label text-end">Password:</label>
<div class="col-lg-2">
<input type="password" class="form-control" name="password" id="password" value="" required>
</div>
</div>
<!-- Re-enter Password -->
<div class="mb-3 row">
<label for="password2" class="col-lg-6 col-form-label text-end">Re-Enter Password:</label>
<div class="col-lg-2">
<input type="password" class="form-control" name="password2" id="password2" value="" required>
</div>
</div>
<!-- Confirmation -->
<div class="mb-3 row">
<label for="confirmation" class="col-lg-6 col-form-label text-end">Send Confirmation:</label>
<div class="col-lg-2">
<div class="mb-3 form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" name="confirmation" id="confirmation" value="true">
</div>
</div>
</div>
<!-- Confirmed -->
<div class="mb-3 row">
<label for="confirmed" class="col-lg-6 col-form-label text-end">Email is confirmed:</label>
<div class="col-lg-2">
<div class="mb-3 form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" name="confirmed" id="confirmed" value="true">
</div>
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Update</button><br>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form> </form>
</div>

View File

@ -1,5 +1,7 @@
<legend>Users</legend> <div class="context-main-bg context-main p-3">
{PAGINATION} <legend class="text-center">Users</legend>
<hr>
{ADMIN_BREADCRUMBS}
<form action="{ROOT_URL}admin/users/delete" method="post"> <form action="{ROOT_URL}admin/users/delete" method="post">
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
@ -37,5 +39,6 @@
</tbody> </tbody>
</table> </table>
<a href="{ROOT_URL}admin/users/create" class="btn btn-sm btn-primary">Create</a> <a href="{ROOT_URL}admin/users/create" class="btn btn-sm btn-primary">Create</a>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
</form> </form>
</div>

View File

@ -1,46 +1,54 @@
<div class="container"> <div class="container py-4">
<div class="row"> <div class="row justify-content-center">
<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="col-md-8">
<div class="card"> {ADMIN_BREADCRUMBS}
<div class="card-header bg-dark"> <div class="card shadow">
<h3 class="card-title">{username}</h3> <!-- Card Header -->
<div class="card-header text-center bg-dark text-white">
<h3 class="card-title mb-0">{username}</h3>
</div> </div>
<!-- Card Body -->
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row align-items-center">
<div class="col-md-3 col-lg-3 " align="center"> <!-- User Image -->
<img alt="User Pic" src="{ROOT_URL}{avatar}" class="img-circle img-responsive"> <div class="col-md-4 text-center">
<img src="{ROOT_URL}{avatar}" alt="User Pic" class="rounded-circle img-fluid" style="max-width: 150px;">
</div> </div>
<div class=" col-md-9 col-lg-9 ">
<table class="table table-user-primary"> <!-- User Details -->
<div class="col-md-8">
<table class="table table-borderless">
<tbody> <tbody>
{ADMIN} {ADMIN}
<tr> <tr>
<td>Confirmed:</td> <th scope="row">Confirmed:</th>
<td>{confirmedText}</td> <td>{confirmedText}</td>
</tr> </tr>
<tr> <tr>
<td>Group:</td> <th scope="row">Group:</th>
<td><a href="{ROOT_URL}admin/groups/view/{userGroup}">{groupName}</a></td> <td><a href="{ROOT_URL}admin/groups/view/{userGroup}">{groupName}</a></td>
</tr> </tr>
{/ADMIN} {/ADMIN}
<tr> <tr>
<td>Registered:</td> <th scope="row">Registered:</th>
<td>{DTC date}{registered}{/DTC}</td> <td>{DTC}{registered}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>Last seen</td> <th scope="row">Last Seen:</th>
<td>{DTC date}{lastLogin}{/DTC}</td> <td>{DTC}{lastLogin}{/DTC}</td>
</tr> </tr>
<tr> <tr>
<td>Gender</td> <th scope="row">Gender:</th>
<td>{gender}</td> <td>{gender}</td>
</tr> </tr>
{ADMIN} {ADMIN}
<tr> <tr>
<td>Email</td> <th scope="row">Email:</th>
<td><a href="mailto:{email}">{email}</a></td> <td><a href="mailto:{email}">{email}</a></td>
</tr> </tr>
<td>User ID</td> <tr>
<th scope="row">User ID:</th>
<td>{ID}</td> <td>{ID}</td>
</tr> </tr>
{/ADMIN} {/ADMIN}
@ -49,17 +57,19 @@
</div> </div>
</div> </div>
</div> </div>
<div class="card-footer">
<a href="{ROOT_URL}messages/create?prepopuser={USERNAME}" data-original-title="Broadcast Message" data-bs-toggle="tooltip" type="button" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-envelope"></i></a> <!-- Admin Controls -->
<div class="card-footer text-center">
{ADMIN} {ADMIN}
<span class="float-right"> <a href="{ROOT_URL}messages/create?prepopuser={USERNAME}" class="btn btn-primary btn-sm me-2" data-bs-toggle="tooltip" title="Broadcast Message">
<a href="{ROOT_URL}admin/users/edit/{ID}"> <i class="fa fa-fw fa-envelope"></i>
<button name="submit" value="edit" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></button>
</a> </a>
<a href="{ROOT_URL}admin/users/delete/{ID}"> <a href="{ROOT_URL}admin/users/edit/{ID}" class="btn btn-warning btn-sm me-2" data-bs-toggle="tooltip" title="Edit User">
<button name="submit" value="delete" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-times"></i></button> <i class="fa fa-fw fa-pencil"></i>
</a>
<a href="{ROOT_URL}admin/users/delete/{ID}" class="btn btn-danger btn-sm" data-bs-toggle="tooltip" title="Delete User">
<i class="fa fa-fw fa-trash"></i>
</a> </a>
</span>
{/ADMIN} {/ADMIN}
</div> </div>
</div> </div>

View File

@ -1,14 +0,0 @@
<form action="" method="post" class="form-horizontal">
<legend>Email Confirmation</legend>
<p>Please enter the confirmation code you received in your email.</p>
<fieldset>
<div class="form-group">
<label for="confirmationCode" class="col-lg-3 control-label">Confirmation Code:</label>
<div class="col-lg-3">
<input class="form-control" type="text" name="confirmationCode" id="confirmationCode">
</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

@ -1,6 +0,0 @@
<form action="" method="post" class="form-horizontal">
<p>Please click the resend button to resend your email confirmation. Don't forget to check the spam folder!</p>
<input type="hidden" name="resendConfirmation" value="true">
<input type="hidden" name="token" value="{TOKEN}">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Resend Confirmation</button><br>
</form>

View File

@ -63,7 +63,7 @@
<i class="fa fa-pencil"></i> Edit <i class="fa fa-pencil"></i> Edit
</a> </a>
<a href="{ROOT_URL}admin/users/delete/{ID}" class="btn btn-danger btn-sm" data-bs-toggle="tooltip" title="Delete User"> <a href="{ROOT_URL}admin/users/delete/{ID}" class="btn btn-danger btn-sm" data-bs-toggle="tooltip" title="Delete User">
<i class="fa fa-times"></i> Delete <i class="fa fa-trash"></i> Delete
</a> </a>
{/ADMIN} {/ADMIN}
</div> </div>

View File

@ -94,7 +94,7 @@ class TheTempusProject extends Bedrock {
], ],
[ [
'text' => '<i class="fa fa-fw fa-phone"></i> Contact', 'text' => '<i class="fa fa-fw fa-phone"></i> Contact',
'url' => '{ROOT_URL}admin/contact', 'url' => '{ROOT_URL}admin/SendMail',
], ],
[ [
'text' => '<i class="fa fa-fw fa-shield-halved"></i> Tokens', 'text' => '<i class="fa fa-fw fa-shield-halved"></i> Tokens',