This commit is contained in:
Joey Kimsey
2025-01-28 17:33:12 -05:00
parent 2004837a8f
commit 9fe4829b47
34 changed files with 605 additions and 199 deletions

View File

@ -95,12 +95,6 @@ class Home extends Controller {
Views::view( 'about' ); Views::view( 'about' );
} }
public function contact() {
self::$title = 'Contact Us - {SITENAME}';
self::$pageDescription = 'On this page, you\'ll be able to reach out to the team directly with any questions, comments, or concerns you may have.';
Views::view( 'contact' );
}
public function privacy() { public function privacy() {
self::$title = 'Privacy Policy - {SITENAME}'; self::$title = 'Privacy Policy - {SITENAME}';
self::$pageDescription = 'At {SITENAME} you privacy is very important to us. On this page you can find a detailed outline of all the information we collect and how its used.'; self::$pageDescription = 'At {SITENAME} you privacy is very important to us. On this page you can find a detailed outline of all the information we collect and how its used.';

View File

@ -139,11 +139,9 @@ class Usercp extends Controller {
$prefs = new Preferences; $prefs = new Preferences;
$fields1 = $prefs->convertFormToArray( true, false ); $fields1 = $prefs->convertFormToArray( true, false );
$fields2 = [];
$fields3 = $fields1; $fields3 = $fields1;
if ( isset( $fields1[ $name ] ) ) { if ( isset( $fields1[ $name ] ) ) {
$fields2[ $name ] = $value;
$fields3[ $name ] = $value; $fields3[ $name ] = $value;
} }
$result = self::$user->updatePrefs( $fields3, App::$activeUser->ID ); $result = self::$user->updatePrefs( $fields3, App::$activeUser->ID );

View File

@ -95,12 +95,31 @@ $(document).ready(function() {
}); });
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', function () {
const ttpDarkmode = document.getElementById('dark-mode-pref');
const toggleButton = document.getElementById('dark-mode-toggle'); const toggleButton = document.getElementById('dark-mode-toggle');
const enableButton = document.getElementById('dark-mode-toggle-button'); const enableButton = document.getElementById('dark-mode-toggle-button');
const darkModeStylesheet = document.getElementById('dark-mode-stylesheet'); const darkModeStylesheet = document.getElementById('dark-mode-stylesheet');
let currentState = '';
// Check if dark mode is saved in localStorage // Check if dark mode is set by ttp
if (localStorage.getItem('darkMode') === 'enabled') { if ( ttpDarkmode ) {
if ( 'true' == ttpDarkmode.value ) {
currentState = 'enabled';
}
if ( 'false' == ttpDarkmode.value ) {
currentState = 'disabled';
}
}
// Check if dark mode is set in localStorage
if ( '' == currentState ) {
if ( localStorage.getItem('darkMode') === 'enabled' ) {
currentState = 'enabled';
}
}
// Update current button states
if ( 'enabled' == currentState ) {
darkModeStylesheet.disabled = false; darkModeStylesheet.disabled = false;
toggleButton.checked = true; toggleButton.checked = true;
@ -109,8 +128,9 @@ document.addEventListener('DOMContentLoaded', function () {
} }
} }
// Style striped table elements
document.querySelectorAll('.table-striped').forEach((table) => { document.querySelectorAll('.table-striped').forEach((table) => {
if (localStorage.getItem('darkMode') === 'enabled') { if ( 'enabled' == currentState ) {
table.classList.add('table-dark'); table.classList.add('table-dark');
} else { } else {
table.classList.add('table-light') table.classList.add('table-light')
@ -119,7 +139,7 @@ document.addEventListener('DOMContentLoaded', function () {
if ( enableButton ) { if ( enableButton ) {
enableButton.addEventListener('click', function () { enableButton.addEventListener('click', function () {
if (darkModeStylesheet.disabled) { if ( darkModeStylesheet.disabled ) {
darkModeStylesheet.disabled = false; darkModeStylesheet.disabled = false;
localStorage.setItem('darkMode', 'enabled'); localStorage.setItem('darkMode', 'enabled');
enableButton.innerText = 'Disable Now'; enableButton.innerText = 'Disable Now';
@ -141,7 +161,7 @@ document.addEventListener('DOMContentLoaded', function () {
darkModeStylesheet.disabled = true; darkModeStylesheet.disabled = true;
localStorage.setItem('darkMode', 'disabled'); localStorage.setItem('darkMode', 'disabled');
} }
document.querySelectorAll('.table-striped').forEach((table) => { document.querySelectorAll('.table-striped').forEach((table) => {
if (localStorage.getItem('darkMode') === 'enabled') { if (localStorage.getItem('darkMode') === 'enabled') {
table.classList.add('table-dark'); table.classList.add('table-dark');

View File

@ -31,13 +31,16 @@ class Group extends DatabaseModel {
'defaultGroup' => [ 'defaultGroup' => [
'type' => 'customSelect', 'type' => 'customSelect',
'pretty' => 'The Default Group for new registrations.', 'pretty' => 'The Default Group for new registrations.',
'default' => 5, 'default' => 4,
], ],
]; ];
public $databaseMatrix = [ public $databaseMatrix = [
[ 'name', 'varchar', '32' ], [ 'name', 'varchar', '32' ],
[ 'permissions', 'text', '' ], [ 'permissions', 'text', '' ],
]; ];
public $searchFields = [
'name',
];
public $permissionMatrix = [ public $permissionMatrix = [
'adminAccess' => [ 'adminAccess' => [
'pretty' => 'Access Administrator Areas', 'pretty' => 'Access Administrator Areas',

View File

@ -46,6 +46,9 @@ class Log extends DatabaseModel {
[ 'source', 'varchar', '64' ], [ 'source', 'varchar', '64' ],
[ 'action', 'text', '' ], [ 'action', 'text', '' ],
]; ];
public $searchFields = [
'source',
];
/** /**
* The model constructor. * The model constructor.

View File

@ -24,6 +24,9 @@ class Routes extends DatabaseModel {
[ 'original_url', 'varchar', '32' ], [ 'original_url', 'varchar', '32' ],
[ 'forwarded_url', 'text', '' ], [ 'forwarded_url', 'text', '' ],
]; ];
public $searchFields = [
'nickname',
];
public $resourceMatrix = [ public $resourceMatrix = [
[ [
'original_url' => 'fb', 'original_url' => 'fb',

View File

@ -36,6 +36,9 @@ class Sessions extends DatabaseModel {
[ 'username', 'varchar', '20' ], [ 'username', 'varchar', '20' ],
[ 'token', 'varchar', '120' ], [ 'token', 'varchar', '120' ],
]; ];
public $searchFields = [
'username',
];
public static $activeSession = false; public static $activeSession = false;
/** /**

View File

@ -31,6 +31,10 @@ class Token extends DatabaseModel {
[ 'createdBy', 'int', '10' ], [ 'createdBy', 'int', '10' ],
[ 'expiresAt', 'int', '10' ], [ 'expiresAt', 'int', '10' ],
]; ];
public $searchFields = [
'name',
'token',
];
public $permissionMatrix = [ public $permissionMatrix = [
'addAppToken' => [ 'addAppToken' => [
'pretty' => 'Add Application Tokens', 'pretty' => 'Add Application Tokens',

View File

@ -44,6 +44,9 @@ class User extends DatabaseModel {
[ 'confirmationCode', 'varchar', '80' ], [ 'confirmationCode', 'varchar', '80' ],
[ 'prefs', 'text', '' ], [ 'prefs', 'text', '' ],
]; ];
public $searchFields = [
'username',
];
public $permissionMatrix = [ public $permissionMatrix = [
'uploadImages' => [ 'uploadImages' => [
'pretty' => 'Upload images (such as avatars)', 'pretty' => 'Upload images (such as avatars)',

View File

@ -62,12 +62,17 @@ class Blog extends Controller {
return $this->index(); return $this->index();
} }
$plugin = new Comments; if ( class_exists( 'TheTempusProject\Plugins\Comments' ) ) {
if ( ! $plugin->checkEnabled() ) { $plugin = new Comments;
Issues::add( 'error', 'Comments are disabled.' ); if ( ! $plugin->checkEnabled() ) {
Issues::add( 'error', 'Comments are disabled.' );
return $this->index();
}
$comments = new CommentsModel;
} else {
Debug::info( 'error', 'Comments plugin missing.' );
return $this->index(); return $this->index();
} }
$comments = new CommentsModel;
switch ( $sub ) { switch ( $sub ) {
case 'post': case 'post':
@ -111,21 +116,22 @@ class Blog extends Controller {
Components::set( 'CONTENT_ID', $id ); Components::set( 'CONTENT_ID', $id );
Components::set( 'COMMENT_TYPE', self::$posts->tableName ); Components::set( 'COMMENT_TYPE', self::$posts->tableName );
Components::set( 'NEWCOMMENT', '' );
Components::set( 'count', '0' );
Components::set( 'COMMENTS', '' );
$plugin = new Comments; if ( class_exists( 'TheTempusProject\Plugins\Comments' ) ) {
if ( ! $plugin->checkEnabled() ) { $plugin = new Comments;
Components::set( 'NEWCOMMENT', '' ); if ( $plugin->checkEnabled() ) {
Components::set( 'count', '0' ); $comments = new CommentsModel;
Components::set( 'COMMENTS', '' ); if ( App::$isLoggedIn ) {
} else { Components::set( 'NEWCOMMENT', Views::simpleView( 'comments.create' ) );
$comments = new CommentsModel; } else {
if ( App::$isLoggedIn ) { Components::set( 'NEWCOMMENT', '' );
Components::set( 'NEWCOMMENT', Views::simpleView( 'comments.create' ) ); }
} else { Components::set( 'count', $comments->count( self::$posts->tableName, $post->ID ) );
Components::set( 'NEWCOMMENT', '' ); Components::set( 'COMMENTS', Views::simpleView( 'comments.list', $comments->display( 10, self::$posts->tableName, $post->ID ) ) );
} }
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 );

View File

@ -49,13 +49,13 @@ class Comments extends AdminController {
$this->index(); $this->index();
} }
public function viewComments( $contentIID = null ) { public function viewComments( $contentID = null ) {
if ( empty( $contentIID ) ) { if ( empty( $contentID ) ) {
Issues::add( 'error', 'Content ID not found.' ); Issues::add( 'error', 'Content ID not found.' );
return $this->index(); return $this->index();
} }
$contentData = self::$comments->findById( $data ); $contentData = self::$comments->findById( $data );
if ( empty( $contentIID ) ) { if ( empty( $contentID ) ) {
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

@ -19,6 +19,9 @@ use TheTempusProject\Houdini\Classes\Views;
use TheTempusProject\Houdini\Classes\Issues; use TheTempusProject\Houdini\Classes\Issues;
use TheTempusProject\Bedrock\Functions\Check; use TheTempusProject\Bedrock\Functions\Check;
use TheTempusProject\Bedrock\Functions\Input; use TheTempusProject\Bedrock\Functions\Input;
use TheTempusProject\TheTempusProject as App;
use TheTempusProject\Hermes\Functions\Redirect;
use TheTempusProject\Bedrock\Functions\Session;
class Messages extends Controller { class Messages extends Controller {
private static $message; private static $message;
@ -27,6 +30,10 @@ class Messages extends Controller {
parent::__construct(); parent::__construct();
self::$title = 'Messages'; self::$title = 'Messages';
self::$message = new Message; self::$message = new Message;
if ( ! App::$isLoggedIn ) {
Session::flash( 'error', 'You do not have permission to access this page.' );
return Redirect::home();
}
} }
public function create() { public function create() {
@ -71,8 +78,9 @@ class Messages extends Controller {
} }
public function index() { public function index() {
Views::view( 'messages.inbox', self::$message->getInbox() ); Components::set( 'message_inbox', Views::simpleView( 'messages.inbox', self::$message->getInbox() ) );
Views::view( 'messages.outbox', self::$message->getOutbox() ); Components::set( 'message_outbox', Views::simpleView( 'messages.outbox', self::$message->getOutbox() ) );
Views::view( 'messages.index' );
} }
public function read( $id = '' ) { public function read( $id = '' ) {

View File

@ -1 +1 @@
<span class="label label-danger">{MESSAGE_COUNT}</span> <span class="badge bg-danger rounded-pill">{MESSAGE_COUNT}</span>

View File

@ -1,7 +1,6 @@
<h2>Inbox</h2> <h2>Inbox</h2>
{PAGINATION}
<form action="{ROOT_URL}messages/delete" method="post"> <form action="{ROOT_URL}messages/delete" method="post">
<table class="table table-hover"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th style="width: 20%">From</th> <th style="width: 20%">From</th>

View File

@ -0,0 +1,8 @@
<div class="context-main context-main-bg col-10 offset-1 my-3 p-3">
<div class="my-3 p-3">
{message_inbox}
</div>
<div class="my-3 p-3">
{message_outbox}
</div>
</div>

View File

@ -1,43 +1,37 @@
<div class="container"> <div class="context-main context-main-bg col-8 offset-2 my-3 p-3">
<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="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 panel-primary"> <div class="card panel-primary">
{LOOP} {LOOP}
{SINGLE} {SINGLE}
<div class="card-header"> <div class="card-header context-main-bg">
<h3 class="card-title">{subject}</h3> <h5 class="card-title context-main">{subject}</h5>
</div>
{/SINGLE}
<div class="card-body">
<div class="row">
<div class="col-md-3 col-lg-3 " align="center">
<a href="{ROOT_URL}home/profile/{userFrom}">{userFrom}</a><br>
<img alt="User Pic" src="{ROOT_URL}{fromAvatar}" class="img-circle img-responsive">
</div> </div>
<div class=" col-md-9 col-lg-9 "> {/SINGLE}
<table class="table table-user-information"> <div class="card-body context-second-bg">
<tbody> <div class="row">
<td>{message}</td> <div class="col-md-3 col-lg-3 text-center">
</tbody> <a href="{ROOT_URL}home/profile/{userFrom}">{userFrom}</a><br>
</table> <img alt="User Pic" src="{ROOT_URL}{fromAvatar}" class="img-circle img-fluid">
</div>
<div class=" col-md-9 col-lg-9 context-main">
{message}
</div>
</div> </div>
</div> </div>
</div> <div class="card-footer context-main-bg">
<div class="card-footer"> {ADMIN}
{ADMIN} {ID}
{ID} <span class="float-right">
<span class="float-right"> {DTC}{sent}{/DTC}
{DTC}{sent}{/DTC} </span>
</span> {/ADMIN}
{/ADMIN} </div>
</div>
{/LOOP} {/LOOP}
</div> </div>
<form action="{ROOT_URL}messages/reply" method="post"> <form action="{ROOT_URL}messages/reply" method="post">
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<input type="hidden" name="messageID" value="{PID}"> <input type="hidden" name="messageID" value="{PID}">
<button name="submit" value="reply" type="submit" class="btn btn-sm btn-primary">Reply</button> <button name="submit" value="reply" type="submit" class="btn btn-md btn-primary my-4">Reply</button>
</form> </form>
</div> </div>
</div>
</div> </div>

View File

@ -1,49 +1,46 @@
<div class="dropdown nav-item mx-2"> <div class="dropdown nav-item mx-2">
<a <a
href="#" href="#"
class="d-block dropdown-toggle nav-link" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle"
id="messagesDropdown" id="messagesDropdown"
data-bs-toggle="dropdown" data-bs-toggle="dropdown"
aria-haspopup="true" aria-haspopup="true"
aria-expanded="false"> aria-expanded="false">
<i class="fa fa-fw fa-envelope"></i><span class="ml-3">{MBADGE}</span> <i class="fa fa-fw fa-envelope"></i><span class="">{MBADGE}</span>
</a> </a>
<ul class="dropdown-menu text-small" aria-labelledby="messagesDropdown"> <ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end text-small shadow" aria-labelledby="messagesDropdown">
<li class="message-header">
<div class="media">
<div class="media-body text-center" style="padding-bottom: 10px; padding-top: 10px">
{MESSAGE_COUNT} unread message(s) total
</div>
</div>
</li>
{LOOP} {LOOP}
<li class="message-preview"> <!-- Message Item -->
<a href="{ROOT_URL}messages/view/{ID}"> <li>
<div class="media"> <a href="{ROOT_URL}messages/view/{ID}" class="dropdown-item">
<span class="float-left"> <div class="d-flex">
<img class="media-object avatar-round-40" src="{ROOT_URL}{fromAvatar}" alt=""> <h5 class="media-heading text-start">
</span> <img class="" style="width: 40px;" src="{ROOT_URL}{fromAvatar}" alt="">
<div class="media-body"> <strong>{userFrom}</strong>
<h5 class="media-heading"><strong>{userFrom}</strong> </h5>
</h5> <div class="text-end">
<p class="small text-muted"><i class="fa fa-clock-o"></i> {DTC}{lastReply}{/DTC}</p> <div class="media-body">
{summary} <p class="small text-muted mb-1"><i class="fa fa-clock-o me-1"></i> {DTC}{lastReply}{/DTC}</p>
<span>{summary}</span>
</div>
</div> </div>
</div> </div>
</a> </a>
</li> </li>
{/LOOP} {/LOOP}
{ALT} {ALT}
<li class="message-preview"> <li class="px-3 text-center">
<div class="media"> <strong>No Messages</strong>
<div class="media-body text-center" style="padding-bottom: 10px; padding-top: 10px">
<h5 class="media-heading"><strong>No Messages</strong></h5>
</div>
</div>
</li> </li>
{/ALT} {/ALT}
<li class="message-footer text-center"> <!-- Footer -->
<a href="{ROOT_URL}messages" class="dropdown-item">Read All New Messages</a> <li>
<hr class="dropdown-divider">
</li>
<li>
<a href="/messages" class="dropdown-item text-center">
Read All New Messages
</a>
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -1,7 +1,6 @@
<h2>Outbox</h2> <h2>Outbox</h2>
{PAGINATION}
<form action="{ROOT_URL}messages/delete" method="post"> <form action="{ROOT_URL}messages/delete" method="post">
<table class="table table-hover"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th style="width: 20%">To</th> <th style="width: 20%">To</th>

View File

@ -1,14 +1,18 @@
<form action="" method="post" class="form-horizontal"> <div class="context-main context-main-bg col-8 offset-2 my-3 p-3">
<legend>Reply</legend> <form action="" method="post" class="form-horizontal">
<fieldset> <legend class="text-center">Reply</legend>
<div class="form-group"> <fieldset>
<label for="message" class="col-lg-3 control-label">Message:</label> <div class="form-group">
<div class="col-lg-6"> <div class="col-6 offset-3">
<textarea class="form-control" name="message" maxlength="2000" rows="10" cols="50" id="message"></textarea> <label for="message" class="control-label">Message:</label>
<textarea class="form-control" name="message" maxlength="2000" rows="10" cols="50" id="message"></textarea>
</div>
</div> </div>
</fieldset>
<input type="hidden" name="messageID" value="{messageID}">
<input type="hidden" name="token" value="{TOKEN}">
<div class="text-center">
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block my-3">Send</button>
</div> </div>
</fieldset> </form>
<input type="hidden" name="messageID" value="{messageID}"> </div>
<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>
</form>

View File

@ -17,6 +17,8 @@ use TheTempusProject\Houdini\Classes\Issues;
use TheTempusProject\Classes\Controller; use TheTempusProject\Classes\Controller;
use TheTempusProject\Models\Notification as NotificationsModel; use TheTempusProject\Models\Notification as NotificationsModel;
use TheTempusProject\TheTempusProject as App; use TheTempusProject\TheTempusProject as App;
use TheTempusProject\Hermes\Functions\Redirect;
use TheTempusProject\Bedrock\Functions\Session;
class Notifications extends Controller { class Notifications extends Controller {
protected static $notifications; protected static $notifications;
@ -26,6 +28,10 @@ class Notifications extends Controller {
self::$notifications = new NotificationsModel; self::$notifications = new NotificationsModel;
self::$title = 'Notifications - {SITENAME}'; self::$title = 'Notifications - {SITENAME}';
self::$pageDescription = 'Your recent notifications'; self::$pageDescription = 'Your recent notifications';
if ( ! App::$isLoggedIn ) {
Session::flash( 'error', 'You do not have permission to access this page.' );
return Redirect::home();
}
} }
public function index() { public function index() {

View File

@ -3,13 +3,13 @@
<a <a
href="#" href="#"
class="d-flex align-items-center text-white text-decoration-none dropdown-toggle" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle"
id="notiificationsDropdown" id="notificationsDropdown"
data-bs-toggle="dropdown" data-bs-toggle="dropdown"
aria-haspopup="true" aria-haspopup="true"
aria-expanded="false"> aria-expanded="false">
<i class="fa fa-fw fa-bell"></i><span class="ms-2">{NBADGE}</span> <i class="fa fa-fw fa-bell"></i><span class="">{NBADGE}</span>
</a> </a>
<ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end text-small shadow" aria-labelledby="notiificationsDropdown"> <ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end text-small shadow" aria-labelledby="notificationsDropdown">
{LOOP} {LOOP}
<!-- Notification Item --> <!-- Notification Item -->
<li> <li>

View File

@ -38,7 +38,9 @@ class Subscribe extends Plugin {
public function __construct( $load = false ) { public function __construct( $load = false ) {
parent::__construct( $load ); parent::__construct( $load );
if ( ! self::$loaded ) { if ( ! self::$loaded ) {
Components::append( 'FOOTER_RIGHT', Views::simpleView( 'subscribe.footer.right') ); if ( $this->checkEnabled() ) {
Components::append( 'FOOTER_RIGHT', Views::simpleView( 'subscribe.footer.right') );
}
self::$loaded = true; self::$loaded = true;
} }
} }

View File

@ -31,6 +31,7 @@ class DefaultLoader extends Loader {
if ( self::$loaded ) { if ( self::$loaded ) {
return; return;
} }
Components::set( 'DARK_MODE_SETTING', '' );
Components::set( 'TEMPLATE_URL', Template::parse( '{ROOT_URL}app/templates/default/' ) ); Components::set( 'TEMPLATE_URL', Template::parse( '{ROOT_URL}app/templates/default/' ) );
if ( VENDOR_AUTOLOADED === true ) { if ( VENDOR_AUTOLOADED === true ) {
Components::set( 'FONT_AWESOME_URL', '/vendor/fortawesome/font-awesome/css/' ); Components::set( 'FONT_AWESOME_URL', '/vendor/fortawesome/font-awesome/css/' );
@ -54,9 +55,11 @@ class DefaultLoader extends Loader {
*/ */
if ( App::$isLoggedIn ) { if ( App::$isLoggedIn ) {
if ( ! empty( App::$activePrefs['darkMode'] ) ) { if ( ! empty( App::$activePrefs['darkMode'] ) ) {
Components::set( 'DARK_MODE_SETTING', 'true' );
$this->addCss( '<link rel="stylesheet" href="{ROOT_URL}app/css/main.css">' ); $this->addCss( '<link rel="stylesheet" href="{ROOT_URL}app/css/main.css">' );
$this->addCss( '<link rel="stylesheet" href="{ROOT_URL}app/css/main-dark.css" id="dark-mode-stylesheet">' ); $this->addCss( '<link rel="stylesheet" href="{ROOT_URL}app/css/main-dark.css" id="dark-mode-stylesheet">' );
} else { } else {
Components::set( 'DARK_MODE_SETTING', 'false' );
$this->addCss( '<link rel="stylesheet" href="{ROOT_URL}app/css/main.css">' ); $this->addCss( '<link rel="stylesheet" href="{ROOT_URL}app/css/main.css">' );
$this->addCss( '<link rel="stylesheet" href="{ROOT_URL}app/css/main-dark.css" id="dark-mode-stylesheet" disabled>' ); $this->addCss( '<link rel="stylesheet" href="{ROOT_URL}app/css/main-dark.css" id="dark-mode-stylesheet" disabled>' );
} }

View File

@ -55,6 +55,7 @@
</header> </header>
<div class="d-flex flex-column min-vh-100"> <div class="d-flex flex-column min-vh-100">
<div class="flex-container flex-grow-1"> <div class="flex-container flex-grow-1">
<!-- Issues -->
{ISSUES} {ISSUES}
<div class="container pt-4"> <div class="container pt-4">
<div class="row"> <div class="row">
@ -65,10 +66,14 @@
</div> </div>
</div> </div>
{/ISSUES} {/ISSUES}
<!-- Main Page Content -->
{CONTENT} {CONTENT}
</div> </div>
<!-- Footer -->
{FOOT} {FOOT}
</div> </div>
<!-- User Pref to control Dark mode across frontend and backend -->
<input type="hidden" name="dark-mode-pref" id="dark-mode-pref" value="{DARK_MODE_SETTING}">
<!-- Bootstrap core JavaScript and jquery --> <!-- Bootstrap core JavaScript and jquery -->
<script crossorigin="anonymous" src="{JQUERY_CDN}jquery.min.js"></script> <script crossorigin="anonymous" src="{JQUERY_CDN}jquery.min.js"></script>
<script crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script> <script crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
@ -76,4 +81,4 @@
<!-- Custom javascript for this template --> <!-- Custom javascript for this template -->
{TEMPLATE_JS_INCLUDES} {TEMPLATE_JS_INCLUDES}
</body> </body>
</html> </html>

View File

@ -1,5 +1,5 @@
<div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4"> <div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4">
<h2 class="text-center mb-4">Welcome to {SITENAME}</h2> <h2 class="text-center mb-4">About {SITENAME}</h2>
<p class="lead"> <p class="lead">
{SITENAME} was built out of a need to create and manage web applications. {SITENAME} was built out of a need to create and manage web applications.
At the time, I had used wordpress but I didn't want or even need any of the blog functionality. At the time, I had used wordpress but I didn't want or even need any of the blog functionality.

View File

@ -1,9 +1,261 @@
<div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4"> <div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4">
<h2 class="text-center mb-4">Bedrock Changes</h2> <div class="card context-main-bg context-main">
<p class="lead"> <div class="card-body">
Here you can find a simple list of the important changes made to the Bedrock library. <h5 class="card-title">Bedrock Changes</h5>
</p> <p class="card-text">
<p class="text-muted"> Here you can find a simple list of the important changes made to the Bedrock library.
Not all changes may be addressed individually on this page. </p>
</p> </div>
<ul class="list-group list-group-flush">
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.1.1 <span class="badge text-bg-success">Latest</span></p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.1.1" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.1</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.1" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.11</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.11" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.10</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.10" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.9</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.9" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.8</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.8" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.7</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.7" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.6</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.6" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.5</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.5" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.4</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.4" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.3</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.3" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.2</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.2" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0.1</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0.1" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.0</p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.0" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
</ul>
<div class="card-body">
<p class="">
Bedrock actually began its life as TempusProjectCore on <a href="https://github.com/TheTempusProject/TempusProjectCore">Github</a>.
On March 18, 2018 the latest released tag was <strong>2.1.0</strong>.
Over the years this code has remained dormant, then received a ton of attention, then been forgotten again.
For most intents, this is the same code, just being actively developed.
</p>
<p class="text-muted text-center">
Not all changes may be addressed individually on this page.
</p>
</div>
</div>
</div> </div>

View File

@ -1,9 +1,40 @@
<div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4"> <div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4">
<h2 class="text-center mb-4">Canary Changes</h2> <div class="card context-main-bg context-main">
<p class="lead"> <div class="card-body">
Here you can find a simple list of the important changes made to the Canary library. <h5 class="card-title">Canary Changes</h5>
</p> <p class="card-text">
<p class="text-muted"> Here you can find a simple list of the important changes made to the Canary library.
Not all changes may be addressed individually on this page. </p>
</p> </div>
<ul class="list-group list-group-flush">
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.1.1 <span class="badge text-bg-success">Latest</span></p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.1.1" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
</ul>
<div class="card-body">
<p class="">
Bedrock actually began its life as TempusProjectCore on <a href="https://github.com/TheTempusProject/TempusProjectCore">Github</a>.
On March 18, 2018 the latest released tag was <strong>2.1.0</strong>.
Over the years this code has remained dormant, then received a ton of attention, then been forgotten again.
For most intents, this is the same code, just being actively developed.
</p>
<p class="text-muted text-center">
Not all changes may be addressed individually on this page.
</p>
</div>
</div>
</div> </div>

View File

@ -1,9 +1,40 @@
<div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4"> <div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4">
<h2 class="text-center mb-4">Hermes Changes</h2> <div class="card context-main-bg context-main">
<p class="lead"> <div class="card-body">
Here you can find a simple list of the important changes made to the Hermes library. <h5 class="card-title">Hermes Changes</h5>
</p> <p class="card-text">
<p class="text-muted"> Here you can find a simple list of the important changes made to the Hermes library.
Not all changes may be addressed individually on this page. </p>
</p> </div>
<ul class="list-group list-group-flush">
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.1.1 <span class="badge text-bg-success">Latest</span></p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.1.1" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
</ul>
<div class="card-body">
<p class="">
Bedrock actually began its life as TempusProjectCore on <a href="https://github.com/TheTempusProject/TempusProjectCore">Github</a>.
On March 18, 2018 the latest released tag was <strong>2.1.0</strong>.
Over the years this code has remained dormant, then received a ton of attention, then been forgotten again.
For most intents, this is the same code, just being actively developed.
</p>
<p class="text-muted text-center">
Not all changes may be addressed individually on this page.
</p>
</div>
</div>
</div> </div>

View File

@ -1,9 +1,40 @@
<div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4"> <div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4">
<h2 class="text-center mb-4">Houdini Changes</h2> <div class="card context-main-bg context-main">
<p class="lead"> <div class="card-body">
Here you can find a simple list of the important changes made to the Houdini library. <h5 class="card-title">Houdini Changes</h5>
</p> <p class="card-text">
<p class="text-muted"> Here you can find a simple list of the important changes made to the Houdini library.
Not all changes may be addressed individually on this page. </p>
</p> </div>
<ul class="list-group list-group-flush">
<li class="list-group-item context-main-bg context-main">
<div class="row">
<div class="col-3">
<p class="h5">1.1.1 <span class="badge text-bg-success">Latest</span></p>
</div>
<div class="col-9">
<ul>
<li>sssssssss</li>
</ul>
<p class="text-muted">
<a class="text-decoration-none" href="https://git.thetempusproject.com/the-tempus-project/bedrock/-/tags/1.1.1" target="_blank">
Gitlab
</a>
</p>
</div>
</div>
</li>
</ul>
<div class="card-body">
<p class="">
Bedrock actually began its life as TempusProjectCore on <a href="https://github.com/TheTempusProject/TempusProjectCore">Github</a>.
On March 18, 2018 the latest released tag was <strong>2.1.0</strong>.
Over the years this code has remained dormant, then received a ton of attention, then been forgotten again.
For most intents, this is the same code, just being actively developed.
</p>
<p class="text-muted text-center">
Not all changes may be addressed individually on this page.
</p>
</div>
</div>
</div> </div>

View File

@ -1,53 +1,55 @@
<div class="container"> <div class="container">
<div class="row"> <div id="myCarousel" class="carousel slide m-3" data-bs-ride="carousel">
<div class="col-md-12"> <div class="carousel-indicators">
<div id="carousel-home" class="carousel slide" data-ride="carousel"> <button type="button" data-bs-target="#myCarousel" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
<!-- Indicators --> <button type="button" data-bs-target="#myCarousel" data-bs-slide-to="1" aria-label="Slide 2"></button>
<ol class="carousel-indicators"> <button type="button" data-bs-target="#myCarousel" data-bs-slide-to="2" aria-label="Slide 3"></button>
<li data-bs-target="#carousel-home" data-slide-to="0" class="active"></li> </div>
<li data-bs-target="#carousel-home" data-slide-to="1"></li> <div class="carousel-inner">
<li data-bs-target="#carousel-home" data-slide-to="2"></li> <div class="carousel-item active">
</ol> <img src="{ROOT_URL}app/images/ttp.png" class="bd-placeholder-img" alt="First slide">
<div class="container">
<!-- Carousel Items --> <div class="carousel-caption text-start bg-dark px-4">
<div class="carousel-inner"> <h1>Powerful</h1>
<div class="carousel-item active"> <p>
<img src="{ROOT_URL}app/images/ttp.png" class="d-block w-100" alt="First slide"> The Tempus Project is built with expansion in mind. From a custom template engine to the simple to use MVC style, The Tempus Project is built to provide a powerful and stable foundation for web applications.
<div class="carousel-caption d-none d-md-block bg-primary slide-text-bg"> </p>
<h3>Powerful</h3> </div>
<p>The Tempus Project is built with expansion in mind. From a custom template engine to the simple to use MVC style, The Tempus Project is built to provide a powerful and stable foundation for web applications.</p> </div>
</div> </div>
</div> <div class="carousel-item">
<div class="carousel-item"> <img src="{ROOT_URL}app/images/ttp-install.png" class="bd-placeholder-img" alt="Second slide">
<img src="{ROOT_URL}app/images/ttp-install.png" class="d-block w-100" alt="Second slide"> <div class="container">
<div class="carousel-caption d-none d-md-block bg-primary slide-text-bg"> <div class="carousel-caption bg-dark px-4">
<h3>Quick and Simple Installation</h3> <h1>Quick and Simple Installation</h1>
<p>Built with rapid deployment in mind you can have The Tempus Project installed in just minutes.</p> <p>
</div> Built with rapid deployment in mind you can have The Tempus Project installed in just minutes.
</div> </p>
<div class="carousel-item"> </div>
<img src="{ROOT_URL}app/images/ttp-github.png" class="d-block w-100" alt="Third slide"> </div>
<div class="carousel-caption d-none d-md-block bg-primary slide-text-bg"> </div>
<h3>Open Source</h3> <div class="carousel-item">
<p>The Tempus Project is completely open source and only utilizes other open-source components. The Project is provided under the MIT license.</p> <img src="{ROOT_URL}app/images/ttp-github.png" class="bd-placeholder-img" alt="Third slide">
</div> <div class="container">
<div class="carousel-caption text-end bg-dark px-4">
<h1>Open Source</h1>
<p>
The Tempus Project is completely open source and only utilizes other open-source components. The Project is provided under the MIT license.
</p>
</div> </div>
</div> </div>
<!-- Controls -->
<a class="carousel-control-prev" href="#carousel-home" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carousel-home" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div> </div>
</div> </div>
<button class="carousel-control-prev" type="button" data-bs-target="#myCarousel" data-bs-slide="prev">
<span class="carousel-control-prev-icon text-dark" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#myCarousel" data-bs-slide="next">
<span class="carousel-control-next-icon text-dark" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div> </div>
<div class="row m-3">
<div class="row">
<div class="col-lg-9 col-md-9 col-sm-12 col-centered"> <div class="col-lg-9 col-md-9 col-sm-12 col-centered">
<div class="row"> <div class="row">
<div class="col-lg-12 col-md-12 col-sm-12"> <div class="col-lg-12 col-md-12 col-sm-12">
@ -65,7 +67,7 @@
<li>Bug reports and feedback forms included!</li> <li>Bug reports and feedback forms included!</li>
<li>Drag and drop simple to install</li> <li>Drag and drop simple to install</li>
</ul> </ul>
<p>DISCLAIMER: as of January 1, 2023 this code is not production ready! Please use at your own risk! That being said, I am always trying to improve this system. If you have any suggestions or need to report a bug, you can do so on my <a href="https://github.com/TheTempusProject/TheTempusProject">GitHub</a>.</p> <p>DISCLAIMER: as of January 1, 2025 this code is not production ready! Please use at your own risk! That being said, I am always trying to improve this system. If you have any suggestions or need to report a bug, you can do so on my <a href="https://github.com/TheTempusProject/TheTempusProject">GitHub</a>.</p>
</div> </div>
</div> </div>
</div> </div>

View File

@ -4,9 +4,9 @@
{installer-nav} {installer-nav}
<h1 class="mt-4">Welcome to The Tempus Project Installer.</h1> <h1 class="mt-4">Welcome to The Tempus Project Installer.</h1>
<p>This installer will guide you through the process of installing and configuring The Tempus Project. Do not forget to delete this file once you have completed installation.</p> <p>This installer will guide you through the process of installing and configuring The Tempus Project. Do not forget to delete this file once you have completed installation.</p>
<form method="post"> <form action="" method="post">
<input type="hidden" name="token" value="{TOKEN}"> <input type="hidden" name="token" value="{TOKEN}">
<button class="btn btn-lg btn-primary center-block" type="submit" name="submit" value="submit">Begin Installation</button><br> <button class="btn btn-lg btn-primary center-block" type="submit" name="submit" id="submit" value="submit">Begin Installation</button><br>
</form> </form>
</div> </div>
</div> </div>

View File

@ -42,7 +42,7 @@
<button name="submit" value="submit" type="submit" class="btn btn-primary flex-fill"> <button name="submit" value="submit" type="submit" class="btn btn-primary flex-fill">
Sign in Sign in
</button> </button>
<a href="{ROOT_URL}register" class="btn btn-outline-dark flex-fill"> <a href="{ROOT_URL}register" class="btn btn-outline-primary flex-fill">
Create new Create new
</a> </a>
</div> </div>

View File

@ -23,7 +23,7 @@ use TheTempusProject\Hermes\Functions\Route;
use TheTempusProject\Houdini\Classes\Components; use TheTempusProject\Houdini\Classes\Components;
use TheTempusProject\Houdini\Classes\Views; use TheTempusProject\Houdini\Classes\Views;
// I switched to cloudflare which uses a dynamic proxy kinda thing, so any IP address lookups go wonky unless i get the OG IIP // I switched to cloudflare which uses a dynamic proxy kinda thing, so any IP address lookups go wonky unless i get the OG IP
if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) && filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP ) ) { if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) && filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP ) ) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
} }
@ -36,21 +36,18 @@ if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) && filter_var( $_SERVER['HTTP_CF
*/ */
$url = ''; $url = '';
$app = new TheTempusProject();
if ( Input::exists( 'error' ) ) { if ( Input::exists( 'error' ) ) {
switch ( Input::get( 'error' ) ) { switch ( Input::get( 'error' ) ) {
case 'image404': case 'image404':
Redirect::to( 'images/imageNotFound.png' ); Redirect::to( 'images/imageNotFound.png' );
exit; exit;
default:
$app->setUrl( 'error/' . Input::get( 'error' ) );
break;
} }
} elseif ( stripos( Route::getUri(), 'install.php' ) ) { } elseif ( stripos( Route::getUri(), 'install.php' ) ) {
require_once 'install.php'; require_once 'install.php';
} }
$app = new TheTempusProject();
if ( CANARY_ENABLED ) { if ( CANARY_ENABLED ) {
ini_set( 'display_errors', '1' ); ini_set( 'display_errors', '1' );
ini_set( 'display_startup_errors', '1' ); ini_set( 'display_startup_errors', '1' );