diff --git a/app/classes/config.php b/app/classes/config.php index b8f99d8..6f3609c 100644 --- a/app/classes/config.php +++ b/app/classes/config.php @@ -35,7 +35,7 @@ class Config extends BedrockConfig { case 'radio': case 'bool': case 'boolean': - $fieldHtml = Forms::getSwitchHtml( $fieldname, [ 'true', 'false' ], $node['value'] ); + $fieldHtml = Forms::getSwitchHtml( $fieldname, $node['value'] ); break; case 'select': $fieldHtml = Forms::getSelectHtml( $fieldname, $options, $node['value'] ); diff --git a/app/classes/preferences.php b/app/classes/preferences.php index 3bf15fa..3f05c9e 100644 --- a/app/classes/preferences.php +++ b/app/classes/preferences.php @@ -19,6 +19,7 @@ use TheTempusProject\Bedrock\Functions\Check; use TheTempusProject\Bedrock\Functions\Upload; use TheTempusProject\Bedrock\Functions\Input; use TheTempusProject\TheTempusProject as App; +use TheTempusProject\Bedrock\Classes\Config; class Preferences { public static $preferences = false; @@ -208,6 +209,15 @@ class Preferences { if ( $tempPrefsArray['type'] == 'checkbox' ) { $tempPrefsArray['type'] = 'switch'; } + + if ( 'file' === $tempPrefsArray['type'] ) { + // dv( Config::getValue( 'uploads/images' ) ); + if ( ! Config::getValue( 'uploads/images' ) ) { + Debug::info( 'Preference hidden because uploads are disabled.' ); + continue; + } + } + $inputTypes[ $tempPrefsArray['type'] ][] = self::getFormFieldHtml( $name, $tempPrefsArray['pretty'], $tempPrefsArray['type'], $tempPrefsArray['value'], $tempPrefsArray['options'] ); } foreach ( $inputTypes as $skip => $items ) { @@ -295,6 +305,7 @@ class Preferences { $prefsArray[$name] = $route . Upload::last(); } else { Issues::add( 'error', [ 'There was an error with your upload.' => Check::userErrors() ] ); + unset( $prefsArray[$name] ); } } } diff --git a/app/controllers/admin/groups.php b/app/controllers/admin/groups.php index 44e8ccc..b6ed9d9 100644 --- a/app/controllers/admin/groups.php +++ b/app/controllers/admin/groups.php @@ -32,8 +32,6 @@ class Groups extends AdminController { self::$title = 'Admin - Groups'; self::$group = new Group; self::$permissions = new Permissions; - $view = Navigation::activePageSelect( 'nav.admin', '/admin/groups' ); - Components::set( 'ADMINNAV', $view ); } public function create( $data = null ) { diff --git a/app/controllers/admin/home.php b/app/controllers/admin/home.php index c4a7704..dedddb1 100644 --- a/app/controllers/admin/home.php +++ b/app/controllers/admin/home.php @@ -17,9 +17,12 @@ use TheTempusProject\Classes\AdminController; use TheTempusProject\Models\User; use TheTempusProject\Models\Comments; use TheTempusProject\Models\Posts; +use TheTempusProject\Models\Contact; use TheTempusProject\Plugins\Comments as CommentPlugin; use TheTempusProject\Plugins\Blog as BlogPlugin; +use TheTempusProject\Plugins\Contact as ContactPlugin; use TheTempusProject\Canary\Bin\Canary as Debug; +use TheTempusProject\Bedrock\Functions\Input; class Home extends AdminController { public static $user; @@ -32,12 +35,12 @@ class Home extends AdminController { } public function index() { + Components::set( 'commentDash', '' ); 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; $commentList = Views::simpleView( 'comments.admin.dashboard', $comments->recent( 'all', 5 ) ); @@ -58,10 +61,28 @@ class Home extends AdminController { } } + if ( class_exists( 'TheTempusProject\Plugins\Contact' ) ) { + $plugin = new ContactPlugin; + + if ( ! $plugin->checkEnabled() ) { + Debug::info( 'Contact Plugin is disabled in the control panel.' ); + Components::set( 'contactDash', '' ); + } else { + $posts = new Contact; + $postsList = Views::simpleView( 'contact.admin.dashboard', $posts->listPaginated( 5 ) ); + Components::set( 'contactDash', $postsList ); + } + } + self::$user = new User; $users = Views::simpleView( 'admin.dashboard.users', self::$user->recent( 5 ) ); Components::set( 'userDash', $users ); + if ( Input::exists( 'submit' ) ) { + $results = Views::simpleView( 'admin.dashboard.users', self::$user->search( Input::post('searchTerm') ) ); + Components::set( 'searchResults', $results ); + } + Views::view( 'admin.dashboard.dash' ); } } diff --git a/app/controllers/admin/images.php b/app/controllers/admin/images.php new file mode 100644 index 0000000..0499c41 --- /dev/null +++ b/app/controllers/admin/images.php @@ -0,0 +1,114 @@ + + * @link https://TheTempusProject.com + * @license https://opensource.org/licenses/MIT [MIT LICENSE] + */ +namespace TheTempusProject\Controllers\Admin; + +use TheTempusProject\Classes\Forms as TTPForms; +use TheTempusProject\Houdini\Classes\Views; +use TheTempusProject\Houdini\Classes\Issues; +use TheTempusProject\Houdini\Classes\Navigation; +use TheTempusProject\Houdini\Classes\Components; +use TheTempusProject\Houdini\Classes\Forms; +use TheTempusProject\Classes\AdminController; +use TheTempusProject\Models\Token; +use TheTempusProject\Bedrock\Functions\Input; +use TheTempusProject\Bedrock\Functions\Check; +use TheTempusProject\Hermes\Functions\Redirect; +use TheTempusProject\Bedrock\Functions\Session; + +class Images extends AdminController { + + public function __construct() { + parent::__construct(); + self::$title = 'Admin - Images'; + } + + public function create() { + if ( Input::exists( 'submit' ) ) { + if ( !TTPForms::check( 'addImage' ) ) { + Issues::add( 'error', [ 'There was an error with your image.' => Check::userErrors() ] ); + } + + if ( Input::exists( 'folder' ) ) { + $folder = Input::post('folder'); + } else { + // IMAGE_DIRECTORY + $folder = UPLOAD_DIRECTORY . App::$activeUser->username . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR; + } + + $upload = Upload::image( 'upload', $folder ); + + if ( $upload ) { + $route = str_replace( APP_ROOT_DIRECTORY, '', $folder ); + $out = $route . Upload::last(); + } else { + Debug::error( 'There was an error with your upload.'); + Issues::add( 'error', [ 'There was an error with your upload.' => Check::userErrors() ] ); + } + + + + + + + + + + // if ( self::$token->create( + // Input::post( 'name' ), + // Input::post( 'notes' ), + // Input::post( 'token_type' ) + // ) ) { + // Session::flash( 'success', 'Token Created' ); + // Redirect::to( 'admin/images' ); + // } + + + } + Views::view( 'admin.images.create' ); + } + + public function delete( $id = null ) { + if ( self::$token->delete( [ $id ] ) ) { + Session::flash( 'success', 'Token deleted.' ); + } + Redirect::to( 'admin/images' ); + } + + public function edit( $id = null ) { + $token = self::$token->findById( $id ); + if ( Input::exists( 'submit' ) ) { + if ( !TTPForms::check( 'adminEditToken' ) ) { + Issues::add( 'error', [ 'There was an error with your token.' => Check::userErrors() ] ); + } else { + if ( self::$token->update( + $id, + Input::post( 'name' ), + Input::post( 'notes' ), + Input::post( 'token_type' ) + ) ) { + Session::flash( 'success', 'Token Updated' ); + Redirect::to( 'admin/images' ); + } + } + } + Forms::selectOption( $token->token_type ); + return Views::view( 'admin.images.edit', $token ); + } + + public function index() { + return Views::view( 'admin.images.list', self::$token->listPaginated() ); + } + + public function view( $id = null ) { + return Views::view( 'admin.images.view', self::$token->findById( $id ) ); + } +} diff --git a/app/controllers/admin/plugins.php b/app/controllers/admin/plugins.php index ea152e8..34ae918 100644 --- a/app/controllers/admin/plugins.php +++ b/app/controllers/admin/plugins.php @@ -30,8 +30,6 @@ class Plugins extends AdminController { self::$title = 'Admin - Installed Plugins'; $this->installer = new Installer; $this->plugins = $this->installer->getAvailablePlugins(); - $view = Navigation::activePageSelect( 'nav.admin', '/admin/plugins' ); - Components::set( 'ADMINNAV', $view ); } public function index() { diff --git a/app/controllers/admin/routes.php b/app/controllers/admin/routes.php index 1f8b84c..116394b 100644 --- a/app/controllers/admin/routes.php +++ b/app/controllers/admin/routes.php @@ -31,8 +31,6 @@ class Routes extends AdminController { parent::__construct(); self::$title = 'Admin - Redirects'; self::$routes = new RoutesClass; - $view = Navigation::activePageSelect( 'nav.admin', '/admin/routes' ); - Components::set( 'ADMINNAV', $view ); } public function create() { diff --git a/app/controllers/admin/send_mail.php b/app/controllers/admin/send_mail.php index e89a3dd..e2065e5 100644 --- a/app/controllers/admin/send_mail.php +++ b/app/controllers/admin/send_mail.php @@ -18,6 +18,7 @@ use TheTempusProject\Houdini\Classes\Issues; use TheTempusProject\Houdini\Classes\Views; use TheTempusProject\Models\User; use TheTempusProject\Models\Subscribe; +use TheTempusProject\Plugins\Subscribe as Plugin; class SendMail extends AdminController { public static $user; @@ -27,10 +28,24 @@ class SendMail extends AdminController { parent::__construct(); self::$title = 'Admin - Send Mail'; self::$user = new User; - self::$subscribe = new Subscribe; + + if ( class_exists( 'TheTempusProject\Plugins\Subscribe' ) ) { + $plugin = new Plugin; + if ( ! $plugin->checkEnabled() ) { + Issues::add( 'notice', 'Subscriptions are disabled so those feature will be unavailable.' ); + } else { + self::$subscribe = new Subscribe; + } + } else { + Issues::add( 'notice', 'Subscriptions plugin is not installed so those feature will be unavailable.' ); + } } private function emailSubscribers( $params ) { + if ( empty( self::$subscribe ) ) { + Issues::add( 'error', 'Subscriptions plugin is unavailable' ); + return; + } $list = self::$subscribe->list(); if ( empty( $list ) ) { Issues::add( 'error', 'No subscribers found' ); diff --git a/app/controllers/admin/tokens.php b/app/controllers/admin/tokens.php index 5655b22..a60aa75 100644 --- a/app/controllers/admin/tokens.php +++ b/app/controllers/admin/tokens.php @@ -31,8 +31,6 @@ class Tokens extends AdminController { parent::__construct(); self::$title = 'Admin - Tokens'; self::$token = new Token; - $view = Navigation::activePageSelect( 'nav.admin', '/admin/tokens' ); - Components::set( 'ADMINNAV', $view ); } public function create() { diff --git a/app/controllers/admin/users.php b/app/controllers/admin/users.php index 0cff516..d97aa97 100644 --- a/app/controllers/admin/users.php +++ b/app/controllers/admin/users.php @@ -37,8 +37,6 @@ class Users extends AdminController { self::$title = 'Admin - Users'; self::$user = new User; self::$group = new Group; - $view = Navigation::activePageSelect( 'nav.admin', '/admin/users' ); - Components::set( 'ADMINNAV', $view ); } public function create() { diff --git a/app/controllers/alpha.php b/app/controllers/alpha.php deleted file mode 100644 index 1f6c806..0000000 --- a/app/controllers/alpha.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @link https://TheTempusProject.com - * @license https://opensource.org/licenses/MIT [MIT LICENSE] - */ -namespace TheTempusProject\Controllers; - -use TheTempusProject\Classes\Controller; -use TheTempusProject\Houdini\Classes\Views; - -class Alpha extends Controller { - public function index() { - self::$title = 'Friends and Family Alpha'; - self::$pageDescription = 'The Tempus Project friends and family alpha has begun. Please join me and take part in bringing a dream to reality.'; - Views::view( 'alpha.index' ); - } - - public function crashcourse() { - self::$title = 'Friends and Family Crash-Course'; - self::$pageDescription = 'The Tempus Project runs not only this site, but it can be used and deployed for any number of sites. This crash course is intended to give you all the knowledge you will need to start building your own applications powered by The Tempus Project.'; - Views::view( 'alpha.crashcourse' ); - } - - public function certification() { - self::$title = 'Friends and Family Certification'; - self::$pageDescription = 'The Tempus Project runs not only this site, but it can be used and deployed for any number of sites. This certification course is intended to give experienced users all the information they will need to start building your own applications powered by The Tempus Project.'; - Views::view( 'alpha.certification' ); - } -} diff --git a/app/controllers/plugins.php b/app/controllers/plugins.php deleted file mode 100644 index c2970ff..0000000 --- a/app/controllers/plugins.php +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/app/controllers/register.php b/app/controllers/register.php index 275fdc2..da84cc5 100644 --- a/app/controllers/register.php +++ b/app/controllers/register.php @@ -24,6 +24,7 @@ use TheTempusProject\Houdini\Classes\Views; use TheTempusProject\TheTempusProject as App; use TheTempusProject\Classes\Controller; use TheTempusProject\Classes\Forms; +use TheTempusProject\Bedrock\Classes\Config; class Register extends Controller { public function confirm( $code = null ) { @@ -46,6 +47,11 @@ class Register extends Controller { public function index() { self::$title = '{SITENAME} Sign Up'; self::$pageDescription = 'Many features of {SITENAME} are disabled or hidden from unregistered users. On this page you can sign up for an account to access all the app has to offer.'; + + if ( ! Config::getValue( 'main/registrationEnabled' ) ) { + return Issues::add( 'notice', 'The site administrator has disable the ability to register a new account.' ); + } + Components::set( 'TERMS', Views::simpleView( 'terms' ) ); if ( App::$isLoggedIn ) { return Issues::add( 'notice', 'You are currently logged in.' ); diff --git a/app/controllers/usercp.php b/app/controllers/usercp.php index 39a5444..12b162d 100644 --- a/app/controllers/usercp.php +++ b/app/controllers/usercp.php @@ -101,7 +101,7 @@ class Usercp extends Controller { $menu = Views::simpleView( 'nav.usercp', App::$userCPlinks ); Navigation::activePageSelect( $menu, null, true, true ); $prefs = new Preferences; - $fields = App::$activePrefs; + $userPrefs = App::$activePrefs; if ( Input::exists( 'submit' ) ) { $fields = $prefs->convertFormToArray( true, false ); // @TODO now i may need to rework the form checker to work with this.... @@ -110,6 +110,12 @@ class Usercp extends Controller { // } self::$user->updatePrefs( $fields, App::$activeUser->ID ); Issues::add( 'success', 'Your preferences have been updated.' ); + // if the image upload fails, need to fall back on original + if ( empty( $fields['avatar'] ) ) { + $fields['avatar'] = $userPrefs['avatar']; + } + } else { + $fields = $userPrefs; } Components::set( 'AVATAR_SETTINGS', $fields['avatar'] ); Components::set( 'PREFERENCES_FORM', $prefs->getFormHtml( $fields ) ); diff --git a/app/css/main-dark.css b/app/css/main-dark.css index ce195ba..ce8a267 100644 --- a/app/css/main-dark.css +++ b/app/css/main-dark.css @@ -21,9 +21,18 @@ .context-second-bg { background-color: #1e1e1e; } +.context-third-bg { + background-color: #3a3a3a; +} .bg-default { background-color: #2c2c2c; } + +hr { + color: #f5f5f5; +} + + .bg-none,.bg-warning { color: #000 !important; } @@ -140,11 +149,10 @@ body { background-color: #1f1f1f; color: #e0e0e0; } + .form-control:focus { color: #e0e0e0; - /* border-color: #85bd3e; */ - border-color: #1b947f; + border-color: #1e90ff; background-color: #1f1f1f; - /* box-shadow: 0 0 0 .25rem #1b947f; */ - box-shadow: 0 0 0 .25rem #85bd3e; + box-shadow: 0 0 0 .25rem rgba(30, 144, 255, .5); } \ No newline at end of file diff --git a/app/css/main.css b/app/css/main.css index c05624d..e984dd3 100644 --- a/app/css/main.css +++ b/app/css/main.css @@ -8,11 +8,17 @@ * @link https://TheTempusProject.com * @license https://opensource.org/licenses/MIT [MIT LICENSE] */ - - .context-other-bg { +.context-other-bg { background-color: #eaeaea; } - + +.nav-link.active { + font-weight: bold; /* Make the text bold */ +} + +hr { + color: #000; +} .context-main-bg { background-color: #f7f7f7; @@ -57,7 +63,7 @@ bottom: 2.5px; left: 5px; transition: transform 0.3s ease-in-out; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 4px #00000033; } /* Change background color when checked */ @@ -70,14 +76,6 @@ transform: translateX(25px); /* Adjust based on switch width */ } - - - - - - - - .context-main { color: #000; } diff --git a/app/css/wysiwyg.css b/app/css/wysiwyg.css deleted file mode 100644 index eeb25b2..0000000 --- a/app/css/wysiwyg.css +++ /dev/null @@ -1,218 +0,0 @@ -/** - * app/css/wysiwyg.css - * - * This file is for the wysiwyg editor's css. - * - * @version 3.0 - * @author Joey Kimsey - * @link https://TheTempusProject.com - * @license https://opensource.org/licenses/MIT [MIT LICENSE] - */ -body { - margin: 0; - height: 100vh; - display: flex; - justify-content: center; - align-items: center; - font-family: 'Helvetica Neue', 'Helvetica', arial, sans-serif; -} - -/* WYSIWYG Editor */ -.wp-webdeasy-comment-editor { - width: 40rem; - min-height: 18rem; - box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.3); - border-top: 6px solid #4a4a4a; - border-radius: 3px; - margin: 2rem 0; - - .toolbar { - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.2); - - .line { - display: flex; - border-bottom: 1px solid #e2e2e2; - - &:last-child { - border-bottom: none; - } - - .box { - display: flex; - border-left: 1px solid #e2e2e2; - - .editor-btn { - display: block; - display: flex; - align-items: center; - justify-content: center; - position: relative; - transition: .2s ease all; - - &:hover, &.active { - background-color: #e1e1e1; - cursor: pointer; - } - - &.icon img { - width: 15px; - padding: 9px; - box-sizing: content-box; - } - - &.icon.smaller img { - width: 16px; - } - - &.has-submenu { - width: 20px; - padding: 0 10px; - - &::after { - content: ''; - width: 6px; - height: 6px; - position: absolute; - background-image: url(https://img.icons8.com/ios-glyphs/30/000000/chevron-down.png); - background-repeat: no-repeat; - background-size: cover; - background-position: center; - right: 4px; - } - - .submenu { - display: none; - position: absolute; - top: 34px; - left: -1px; - z-index: 10; - background-color: #FFF; - border: 1px solid #b5b5b5; - border-top: none; - - .btn { - width: 39px; - } - - &:hover { - display: block; - } - } - - &:hover .submenu { - display: block; - } - } - } - } - } - } - - .content-area { - padding: 15px 12px; - line-height: 1.5; - - .visuell-view { - outline: none; - min-height: 12rem; - - p { - margin: 12px 0; - } - } - - .html-view { - outline: none; - display: none; - width: 100%; - height: 200px; - border: none; - resize: none; - } - } -} - - -/* Modal */ -.modal { - z-index: 40; - display: none; - - .modal-wrapper { - background-color: #FFF; - padding: 1rem; - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - width: 20rem; - min-height: 10rem; - z-index: 41; - - .close { - position: absolute; - top: 1rem; - right: 1rem; - cursor: pointer; - } - - .modal-content { - flex-direction: column; - - h3 { - margin-top: 0; - } - - input { - margin: 1rem 0; - padding: .5rem; - } - - input[type="text"] { - width: calc(100% - 1rem); - } - - .row { - - label { - margin-left: .5rem; - } - } - - button { - background-color: #D2434F; - border: 0; - color: #FFF; - padding: .5rem 1.2rem; - cursor: pointer; - } - } - } - - .modal-bg { - position: fixed; - background-color: rgba(0, 0, 0, .3); - width: 100vw; - height: 100vh; - top: 0; - left: 0; - } -} - -/* Codepen Footer */ -footer { - position: fixed; - bottom: 0; - display: flex; - - p { - margin: 0.5rem 1rem; - font-size: 12px; - } - - a { - text-decoration: none; - font-weight: bold; - color: #000; - } -} \ No newline at end of file diff --git a/app/js/main.js b/app/js/main.js index d759dd5..461b5fe 100644 --- a/app/js/main.js +++ b/app/js/main.js @@ -121,7 +121,10 @@ document.addEventListener('DOMContentLoaded', function () { // Update current button states if ( 'enabled' == currentState ) { darkModeStylesheet.disabled = false; - toggleButton.checked = true; + + if ( toggleButton ) { + toggleButton.checked = true; + } if ( enableButton ) { enableButton.innerText = 'Disable Now'; @@ -151,27 +154,29 @@ document.addEventListener('DOMContentLoaded', function () { }); } - toggleButton.addEventListener('click', function () { - if (darkModeStylesheet.disabled) { - toggleDarkModePref( true ); - darkModeStylesheet.disabled = false; - localStorage.setItem('darkMode', 'enabled'); - } else { - toggleDarkModePref( false ); - darkModeStylesheet.disabled = true; - 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'); + if ( toggleButton ) { + toggleButton.addEventListener('click', function () { + if (darkModeStylesheet.disabled) { + toggleDarkModePref( true ); + darkModeStylesheet.disabled = false; + localStorage.setItem('darkMode', 'enabled'); } else { - table.classList.add('table-light'); - table.classList.remove('table-dark'); + toggleDarkModePref( false ); + darkModeStylesheet.disabled = true; + 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'); + } + }); }); - }); + } function toggleDarkModePref( value ) { var fields = {}; diff --git a/app/js/wysiwyg.js b/app/js/wysiwyg.js deleted file mode 100644 index 2d29989..0000000 --- a/app/js/wysiwyg.js +++ /dev/null @@ -1,233 +0,0 @@ -/** - * app/js/wysiwyg.js - * - * This is css used in the debuging console. - * - * @version 3.0 - * @author Joey Kimsey - * @link https://TheTempusProject.com - * @license https://opensource.org/licenses/MIT [MIT LICENSE] - */ -// define vars -const editor = document.getElementsByClassName('wp-webdeasy-comment-editor')[0]; -const toolbar = editor.getElementsByClassName('toolbar')[0]; -const buttons = toolbar.querySelectorAll('.editor-btn:not(.has-submenu)'); -const contentArea = editor.getElementsByClassName('content-area')[0]; -const visuellView = contentArea.getElementsByClassName('visuell-view')[0]; -const htmlView = contentArea.getElementsByClassName('html-view')[0]; -const modal = document.getElementsByClassName('modal')[0]; - -// add active tag event -document.addEventListener('selectionchange', selectionChange); - -// add paste event -visuellView.addEventListener('paste', pasteEvent); - -// add paragraph tag on new line -contentArea.addEventListener('keypress', addParagraphTag); - -// add toolbar button actions -for(let i = 0; i < buttons.length; i++) { - let button = buttons[i]; - - button.addEventListener('click', function(e) { - let action = this.dataset.action; - - switch(action) { - case 'toggle-view': - execCodeAction(this, editor); - break; - case 'createLink': - execLinkAction(); - break; - default: - execDefaultAction(action); - } - - }); -} - -/** - * This function toggles between visual and html view - */ -function execCodeAction(button, editor) { - - if(button.classList.contains('active')) { // show visuell view - visuellView.innerHTML = htmlView.value; - htmlView.style.display = 'none'; - visuellView.style.display = 'block'; - - button.classList.remove('active'); - } else { // show html view - htmlView.innerText = visuellView.innerHTML; - visuellView.style.display = 'none'; - htmlView.style.display = 'block'; - - button.classList.add('active'); - } -} - -/** - * This function adds a link to the current selection - */ -function execLinkAction() { - modal.style.display = 'block'; - let selection = saveSelection(); - - let submit = modal.querySelectorAll('button.done')[0]; - let close = modal.querySelectorAll('.close')[0]; - - // done button active => add link - submit.addEventListener('click', function(e) { - e.preventDefault(); - let newTabCheckbox = modal.querySelectorAll('#new-tab')[0]; - let linkInput = modal.querySelectorAll('#linkValue')[0]; - let linkValue = linkInput.value; - let newTab = newTabCheckbox.checked; - - restoreSelection(selection); - - if(window.getSelection().toString()) { - let a = document.createElement('a'); - a.href = linkValue; - if(newTab) a.target = '_blank'; - window.getSelection().getRangeAt(0).surroundContents(a); - } - - modal.style.display = 'none'; - linkInput.value = ''; - - // deregister modal events - submit.removeEventListener('click', arguments.callee); - close.removeEventListener('click', arguments.callee); - }); - - // close modal on X click - close.addEventListener('click', function(e) { - e.preventDefault(); - let linkInput = modal.querySelectorAll('#linkValue')[0]; - - modal.style.display = 'none'; - linkInput.value = ''; - - // deregister modal events - submit.removeEventListener('click', arguments.callee); - close.removeEventListener('click', arguments.callee); - }); -} - -/** - * This function executes all 'normal' actions - */ -function execDefaultAction(action) { - document.execCommand(action, false); -} - -/** - * Saves the current selection - */ -function saveSelection() { - if(window.getSelection) { - sel = window.getSelection(); - if(sel.getRangeAt && sel.rangeCount) { - let ranges = []; - for(var i = 0, len = sel.rangeCount; i < len; ++i) { - ranges.push(sel.getRangeAt(i)); - } - return ranges; - } - } else if (document.selection && document.selection.createRange) { - return document.selection.createRange(); - } - return null; -} - -/** - * Loads a saved selection - */ -function restoreSelection(savedSel) { - if(savedSel) { - if(window.getSelection) { - sel = window.getSelection(); - sel.removeAllRanges(); - for(var i = 0, len = savedSel.length; i < len; ++i) { - sel.addRange(savedSel[i]); - } - } else if(document.selection && savedSel.select) { - savedSel.select(); - } - } -} - -/** - * Sets the current selected format buttons active/inactive - */ -function selectionChange(e) { - - for(let i = 0; i < buttons.length; i++) { - let button = buttons[i]; - - // don't remove active class on code toggle button - if(button.dataset.action === 'toggle-view') continue; - - button.classList.remove('active'); - } - - if(!childOf(window.getSelection().anchorNode.parentNode, editor)) return false; - - parentTagActive(window.getSelection().anchorNode.parentNode); -} - -/** - * Checks if the passed child has the passed parent - */ -function childOf(child, parent) { - return parent.contains(child); -} - -/** - * Sets the tag active that is responsible for the current element - */ -function parentTagActive(elem) { - if(!elem ||!elem.classList || elem.classList.contains('visuell-view')) return false; - - let toolbarButton; - - // active by tag names - let tagName = elem.tagName.toLowerCase(); - toolbarButton = document.querySelectorAll(`.toolbar .editor-btn[data-tag-name="${tagName}"]`)[0]; - if(toolbarButton) { - toolbarButton.classList.add('active'); - } - - // active by text-align - let textAlign = elem.style.textAlign; - toolbarButton = document.querySelectorAll(`.toolbar .editor-btn[data-style="textAlign:${textAlign}"]`)[0]; - if(toolbarButton) { - toolbarButton.classList.add('active'); - } - - return parentTagActive(elem.parentNode); -} - -/** - * Handles the paste event and removes all HTML tags - */ -function pasteEvent(e) { - e.preventDefault(); - - let text = (e.originalEvent || e).clipboardData.getData('text/plain'); - document.execCommand('insertHTML', false, text); -} - -/** - * This functions adds a paragraph tag when the enter key is pressed - */ -function addParagraphTag(evt) { - if (evt.keyCode == '13') { - - // don't add a p tag on list item - if(window.getSelection().anchorNode.parentNode.tagName === 'LI') return; - document.execCommand('formatBlock', false, 'p'); - } -} \ No newline at end of file diff --git a/app/plugins/blog/controllers/admin/blog.php b/app/plugins/blog/controllers/admin/blog.php index adfc451..b97e319 100644 --- a/app/plugins/blog/controllers/admin/blog.php +++ b/app/plugins/blog/controllers/admin/blog.php @@ -29,8 +29,6 @@ class Blog extends AdminController { parent::__construct(); self::$posts = new Posts; self::$title = 'Admin - Blog'; - $view = Navigation::activePageSelect( 'nav.admin', '/admin/blog' ); - Components::set( 'ADMINNAV', $view ); } public function index( $data = null ) { @@ -46,7 +44,7 @@ class Blog extends AdminController { return $this->index(); } - $result = self::$posts->newPost( Input::post( 'title' ), Input::post( 'blogPost' ), Input::post( 'submit' ) ); + $result = self::$posts->newPost( Input::post( 'title' ), Input::post( 'blogPost' ), Input::post( 'slug' ), Input::post( 'submit' ) ); if ( $result ) { Issues::add( 'success', 'Your post has been created.' ); return $this->index(); @@ -67,7 +65,7 @@ class Blog extends AdminController { Issues::add( 'error', [ 'There was an error with your form.' => Check::userErrors() ] ); return $this->index(); } - if ( self::$posts->updatePost( $data, Input::post( 'title' ), Input::post( 'blogPost' ), Input::post( 'submit' ) ) === true ) { + if ( self::$posts->updatePost( $data, Input::post( 'title' ), Input::post( 'blogPost' ), Input::post( 'slug' ), Input::post( 'submit' ) ) === true ) { Issues::add( 'success', 'Post Updated.' ); return $this->index(); } diff --git a/app/plugins/blog/controllers/blog.php b/app/plugins/blog/controllers/blog.php index e9803fd..80cc7c8 100644 --- a/app/plugins/blog/controllers/blog.php +++ b/app/plugins/blog/controllers/blog.php @@ -105,7 +105,10 @@ class Blog extends Controller { } $post = self::$posts->findById( $id ); if ( empty( $post ) ) { - return $this->index(); + $post = self::$posts->findBySlug( $id ); + if ( empty( $post ) ) { + return $this->index(); + } } Debug::log( 'Controller initiated: ' . __METHOD__ . '.' ); self::$title = 'Blog Post'; @@ -134,8 +137,6 @@ class Blog extends Controller { } } - $post = self::$posts->findById( $id ); - self::$title .= ' - ' . $post->title; self::$pageDescription = strip_tags( $post->contentSummaryNoLink ); Views::view( 'blog.post', $post ); diff --git a/app/plugins/blog/models/posts.php b/app/plugins/blog/models/posts.php index 7a4e158..7a4baac 100644 --- a/app/plugins/blog/models/posts.php +++ b/app/plugins/blog/models/posts.php @@ -32,6 +32,7 @@ class Posts extends DatabaseModel { [ 'edited', 'int', '10' ], [ 'draft', 'int', '1' ], [ 'title', 'varchar', '86' ], + [ 'slug', 'varchar', '64' ], [ 'content', 'text', '' ], ]; @@ -45,7 +46,7 @@ class Posts extends DatabaseModel { } } - public function newPost( $title, $post, $draft ) { + public function newPost( $title, $post, $slug, $draft ) { if ( !Check::dataTitle( $title ) ) { Debug::info( 'modelBlog: illegal title.' ); @@ -59,6 +60,7 @@ class Posts extends DatabaseModel { $fields = [ 'author' => App::$activeUser->ID, 'draft' => $draft, + 'slug' => $slug, 'created' => time(), 'edited' => time(), 'content' => Sanitize::rich( $post ), @@ -73,7 +75,7 @@ class Posts extends DatabaseModel { return true; } - public function updatePost( $id, $title, $content, $draft ) { + public function updatePost( $id, $title, $content, $slug, $draft ) { if ( empty( self::$log ) ) { self::$log = new Log; } @@ -94,6 +96,7 @@ class Posts extends DatabaseModel { } $fields = [ 'draft' => $draft, + 'slug' => $slug, 'edited' => time(), 'content' => Sanitize::rich( $content ), 'title' => $title, @@ -132,22 +135,29 @@ class Posts extends DatabaseModel { $draft = ''; $authorName = self::$user->getUsername( $instance->author ); + // Summarize + if ( ! empty( $instance->slug ) ) { + $identifier = $instance->slug; + } else { + $identifier = $instance->ID; + } + $cleanPost = Sanitize::contentShort( $instance->content ); + // By Word $wordsArray = explode( ' ', $cleanPost ); - $postLine = explode( "\n", $cleanPost ); - $spaceSummary = implode( ' ', array_splice( $wordsArray, 0, 100 ) ); - $lineSummary = implode( "\n", array_splice( $postLine, 0, 5 ) ); - if ( strlen( $spaceSummary ) < strlen( $lineSummary ) ) { - $contentSummaryNoLink = $spaceSummary; - $contentSummary = $spaceSummary; - if ( count( $wordsArray, 1 ) >= 100 ) { - $contentSummaryNoLink = $contentSummary; - $contentSummary .= '... Read More'; - } + $wordSummary = implode( ' ', array_splice( $wordsArray, 0, 100 ) ); + // By Line + $linesArray = explode( "\n", $cleanPost ); + $lineSummary = implode( "\n", array_splice( $linesArray, 0, 5 ) ); + + if ( strlen( $wordSummary ) < strlen( $lineSummary ) ) { + $contentSummaryNoLink = $wordSummary; + $contentSummary = $wordSummary . '... Read More'; } else { $contentSummaryNoLink = $lineSummary; - $contentSummary = $lineSummary . '... Read More'; + $contentSummary = $lineSummary . '... Read More'; } + $instance->contentSummaryNoLink = $contentSummaryNoLink; $instance->contentSummary = $contentSummary; @@ -158,12 +168,15 @@ class Posts extends DatabaseModel { $draft = ' Draft'; } $instance->isDraft = $draft; - $instance->authorName = $authorName; + $instance->authorName = \ucfirst( $authorName ); if ( self::$comments !== false ) { $instance->commentCount = self::$comments->count( 'blog', $instance->ID ); + } else { + $instance->commentCount = 0; } $instance->content = Filters::applyOne( 'mentions.0', $instance->content, true ); $instance->content = Filters::applyOne( 'hashtags.0', $instance->content, true ); + $out[] = $instance; if ( !empty( $end ) ) { $out = $out[0]; @@ -291,6 +304,22 @@ class Posts extends DatabaseModel { return $this->filter( $postData->results() ); } + public function findBySlug( $slug, $includeDraft = false ) { + $whereClause = []; + if ( $includeDraft !== true ) { + $whereClause = ['draft', '=', '0', 'AND']; + } + + $whereClause = array_merge( $whereClause, ['slug', '=', $slug] ); + + $postData = self::$db->get( $this->tableName, $whereClause ); + if ( !$postData->count() ) { + Debug::info( 'No Blog posts found.' ); + return false; + } + return $this->filter( $postData->first() ); + } + public function byMonth( $month, $year = 0, $includeDraft = false ) { if ( 0 === $year ) { $year = date( 'Y' ); diff --git a/app/plugins/blog/views/admin/create.html b/app/plugins/blog/views/admin/create.html index 7ae25f5..00d9d00 100644 --- a/app/plugins/blog/views/admin/create.html +++ b/app/plugins/blog/views/admin/create.html @@ -12,6 +12,14 @@ + +
+ +
+ +
+
+
diff --git a/app/plugins/blog/views/admin/edit.html b/app/plugins/blog/views/admin/edit.html index 986ff11..957a2e8 100644 --- a/app/plugins/blog/views/admin/edit.html +++ b/app/plugins/blog/views/admin/edit.html @@ -12,6 +12,14 @@
+ +
+ +
+ +
+
+
diff --git a/app/plugins/blog/views/admin/list.html b/app/plugins/blog/views/admin/list.html index 62df2fb..7e40fc8 100644 --- a/app/plugins/blog/views/admin/list.html +++ b/app/plugins/blog/views/admin/list.html @@ -21,7 +21,7 @@ {LOOP} - {title}{isDraft} + {title}{isDraft} {authorName} {commentCount} {DTC}{created}{/DTC} diff --git a/app/plugins/blog/views/list.html b/app/plugins/blog/views/list.html index 0a42697..5fd3a34 100644 --- a/app/plugins/blog/views/list.html +++ b/app/plugins/blog/views/list.html @@ -1,7 +1,7 @@ {LOOP}

{title}

- +
{contentSummary}
diff --git a/app/plugins/blog/views/post.html b/app/plugins/blog/views/post.html index 3484817..bcd8f84 100644 --- a/app/plugins/blog/views/post.html +++ b/app/plugins/blog/views/post.html @@ -3,7 +3,7 @@

{title}


- + {content} {ADMIN}
diff --git a/app/plugins/blog/views/sidebar2.html b/app/plugins/blog/views/sidebar2.html index d64ac19..cef0110 100644 --- a/app/plugins/blog/views/sidebar2.html +++ b/app/plugins/blog/views/sidebar2.html @@ -1,11 +1,15 @@ -
-

Archives

- +
+
+

Archives

+
+
+
    + {LOOP} +
  1. ({count}) {monthText} {year}
  2. + {/LOOP} + {ALT} +
  3. None To Show
  4. + {/ALT} +
+
\ No newline at end of file diff --git a/app/plugins/contact/controllers/admin/contact.php b/app/plugins/contact/controllers/admin/contact.php index 1a1aa4a..be6fd11 100644 --- a/app/plugins/contact/controllers/admin/contact.php +++ b/app/plugins/contact/controllers/admin/contact.php @@ -27,8 +27,6 @@ class Contact extends AdminController { parent::__construct(); self::$title = 'Admin - Contact'; self::$contact = new ContactModel; - $view = Navigation::activePageSelect( 'nav.admin', '/admin/contact' ); - Components::set( 'ADMINNAV', $view ); } public function view( $id = null ) { diff --git a/app/plugins/contact/views/admin/dashboard.html b/app/plugins/contact/views/admin/dashboard.html new file mode 100644 index 0000000..615217a --- /dev/null +++ b/app/plugins/contact/views/admin/dashboard.html @@ -0,0 +1,29 @@ + + + + + + + + + + + + {LOOP} + + + + + + + + {/LOOP} + {ALT} + + + + {/ALT} + +
{ID}{DTC}{time}{/DTC}{feedback}
+ No Contact forms to show. +
\ No newline at end of file diff --git a/app/plugins/redirects/plugin.php b/app/plugins/redirects/plugin.php deleted file mode 100644 index a84fd22..0000000 --- a/app/plugins/redirects/plugin.php +++ /dev/null @@ -1,40 +0,0 @@ - - * @link https://TheTempusProject.com - * @license https://opensource.org/licenses/MIT [MIT LICENSE] - */ -namespace TheTempusProject\Plugins; - -use ReflectionClass; -use TheTempusProject\Classes\Installer; -use TheTempusProject\Houdini\Classes\Navigation; -use TheTempusProject\Classes\Plugin; -use TheTempusProject\TheTempusProject as App; - -class Redirects extends Plugin { - public $pluginName = 'TP Redirects'; - public $pluginAuthor = 'JoeyK'; - public $pluginWebsite = 'https://TheTempusProject.com'; - public $modelVersion = '1.0'; - public $pluginVersion = '3.0'; - public $pluginDescription = 'A simple plugin which adds redirects.'; - public $permissionMatrix = [ - 'redirects' => [ - 'pretty' => 'Can modify redirects', - 'default' => false, - ], - ]; - public $admin_links = [ - [ - 'text' => ' Redirects', - 'url' => '{ROOT_URL}admin/routes', - ], - ]; -} diff --git a/app/templates/admin/admin.inc.php b/app/templates/admin/admin.inc.php index 779b9b4..1a0fa59 100644 --- a/app/templates/admin/admin.inc.php +++ b/app/templates/admin/admin.inc.php @@ -34,14 +34,16 @@ class AdminLoader extends DefaultLoader { } $links[$key]->url = '#' . $name . 'Dropdown'; $links[$key]->text = '' . $link->text . ''; - $links[$key]->duuuuuuuh = Views::simpleView( 'nav.adminSub', $out ); + $links[$key]->subnav = Views::simpleView( 'nav.adminSub', $out ); } else { $links[$key]->linkClasses = 'nav-link'; $links[$key]->linkAttributes = ''; - $links[$key]->duuuuuuuh = ''; + $links[$key]->subnav = ''; } } - Components::set( 'ADMIN_LINKS', Views::simpleView( 'nav.admin', $links ) ); + $menu = Views::simpleView( 'nav.admin', $links ); + $activeMenu = Navigation::activePageSelect( $menu, Input::get( 'url' ), false, true ); + Components::set( 'ADMIN_LINKS', $activeMenu ); Navigation::setCrumbComponent( 'ADMIN_BREADCRUMBS', Input::get( 'url' ) ); } } diff --git a/app/templates/default/default.inc.php b/app/templates/default/default.inc.php index e9b6245..6232f97 100644 --- a/app/templates/default/default.inc.php +++ b/app/templates/default/default.inc.php @@ -73,7 +73,9 @@ class DefaultLoader extends Loader { $this->addCss( '' ); } Components::set( 'topNavRight', Template::parse( App::$topNavRight . '{STATUS}' ) ); - Components::set( 'topNavLeft', Views::simpleView( 'nav.main', Navigation::getMenuLinks( App::MAIN_MENU_NAME ) ) ); + $menu = Views::simpleView( 'nav.main', Navigation::getMenuLinks( App::MAIN_MENU_NAME ) ); + $activeMenu = Navigation::activePageSelect( $menu, Input::get( 'url' ), false, true ); + Components::set( 'topNavLeft', $activeMenu ); Components::set( 'colorSelect', Views::simpleView( 'forms.colorSelect' ) ); Components::set( 'iconSelect', Views::simpleView( 'forms.iconSelect' ) ); Navigation::setCrumbComponent( 'BREADCRUMB', Input::get( 'url' ) ); diff --git a/app/views/admin/dashboard/dash.html b/app/views/admin/dashboard/dash.html index dccea54..7f0d4c0 100644 --- a/app/views/admin/dashboard/dash.html +++ b/app/views/admin/dashboard/dash.html @@ -8,9 +8,38 @@ {commentDash}
+
+
+ {contactDash} +
+
{blogDash}
+
+ +Results +
+
+ +
+ +
+ +
+
+ + + + + +
+ +
+
+
+
+ {searchResults}
\ No newline at end of file diff --git a/app/views/admin/groups/list.html b/app/views/admin/groups/list.html index 82c27bc..7be39db 100644 --- a/app/views/admin/groups/list.html +++ b/app/views/admin/groups/list.html @@ -18,8 +18,8 @@ {LOOP} - {name} - {userCount} + {name} + {userCount} diff --git a/app/views/admin/groups/list_members.html b/app/views/admin/groups/list_members.html index 23cabf7..8966b47 100644 --- a/app/views/admin/groups/list_members.html +++ b/app/views/admin/groups/list_members.html @@ -1,40 +1,43 @@ -

{groupName} user list

-{PAGINATION} -
- - - - - - - - - - - - - {LOOP} - - - - - - - - - {/LOOP} - {ALT} - - - - {/ALT} - -
IDUsernameJoined - -
{ID}{username}{DTC date}{registered}{/DTC} - -
- No results to show. -
- -
\ No newline at end of file +
+ {groupName} user list +
+ {ADMIN_BREADCRUMBS} +
+ + + + + + + + + + + + + {LOOP} + + + + + + + + + {/LOOP} + {ALT} + + + + {/ALT} + +
IDUsernameJoined + +
{ID}{username}{DTC date}{registered}{/DTC} + +
+ No results to show. +
+ +
+
\ No newline at end of file diff --git a/app/views/admin/modules/plugins/list.html b/app/views/admin/modules/plugins/list.html index 8c05b59..ea5b7ef 100644 --- a/app/views/admin/modules/plugins/list.html +++ b/app/views/admin/modules/plugins/list.html @@ -17,7 +17,7 @@ {LOOP} - {name} + {name} {enabled_txt} {installStatus} {version} diff --git a/app/views/admin/routes/list.html b/app/views/admin/routes/list.html index 115ce9b..7ac23df 100644 --- a/app/views/admin/routes/list.html +++ b/app/views/admin/routes/list.html @@ -22,7 +22,7 @@ {LOOP} {ID} - {nickname} + {nickname} {redirect_type} {original_url} {forwarded_url} diff --git a/app/views/admin/settings.html b/app/views/admin/settings.html index 59c8136..08fa990 100644 --- a/app/views/admin/settings.html +++ b/app/views/admin/settings.html @@ -1,4 +1,6 @@
+ Settings +
{ADMIN_BREADCRUMBS}
diff --git a/app/views/admin/tokens/list.html b/app/views/admin/tokens/list.html index dbffd99..d1262b9 100644 --- a/app/views/admin/tokens/list.html +++ b/app/views/admin/tokens/list.html @@ -14,7 +14,7 @@ {LOOP} - {name} + {name} {token_type} diff --git a/app/views/admin/users/list.html b/app/views/admin/users/list.html index f5bf83b..bcacc1c 100644 --- a/app/views/admin/users/list.html +++ b/app/views/admin/users/list.html @@ -20,7 +20,7 @@ {LOOP} {ID} - {username} + {username} {DTC date}{registered}{/DTC} diff --git a/app/views/alpha/certification.html b/app/views/alpha/certification.html deleted file mode 100644 index e69de29..0000000 diff --git a/app/views/alpha/crashcourse.html b/app/views/alpha/crashcourse.html deleted file mode 100644 index e69de29..0000000 diff --git a/app/views/alpha/index.html b/app/views/alpha/index.html deleted file mode 100644 index a56d78b..0000000 --- a/app/views/alpha/index.html +++ /dev/null @@ -1,30 +0,0 @@ -
-
-
-
-
-

Welcome to The Tempus-Project Friends and Family Alpha.

-
-

This project is now entering its third official version and nearly its tenth year of development. What a long journey it has been to get here.

-

With that being said, I won't waste your time with a journey down memory road. If you have been sent this page, clearly I trust you, or one of our mutual friends is an asshole. Both equally possible... The main purpose of inviting you was to ask for your help.

-

What I need

-

With any application, there are bugs. The best developers I have had the pleasure of working with make mundane every day mistakes just like everyone else. This obviously includes myself. With any project you spend years working on, you will develop blind spots, or places where even if something was broken, you would skip right past it and never notice.

-

I would like your help in identifying these such blind spots.

-

What you can do to help.

-

Currently there is a bug-report form at the bottom, usable by anyone with a registered account. I have also built an administrator system that allows me to track progress of these bugs and ensure they get fixed. In addition to tracking bugs, there is a public suggestions system and a publicly viewable to-do list.

-

I will need some users to help test very specific things like permissions for various groups. I will need some trusted users to act as administrators and test features. I will also just need some people to use and interact with the site to ensure they aren't encountering any bugs.

-

There are a ton of things you can do to help!

-
    -
  • Report any bugs!!! ( there is a bug-report link at the bottom of every page )
  • -
  • Register an account
  • -
  • Subscribe to the mailing list
  • -
  • Browse blog posts
  • -
  • Make suggestions for improvements or new features
  • -
  • Leave comments on the blog and other features.
  • -
  • Keep an eye out for email or messages requesting specific help.
  • -
-
-
-
-
-
diff --git a/app/views/debug.html b/app/views/debug.html deleted file mode 100644 index 0e3739c..0000000 --- a/app/views/debug.html +++ /dev/null @@ -1,16 +0,0 @@ - -
-
-

Debug Log:

- -
-
- {DEBUGGING_LOG} -
-
- \ No newline at end of file diff --git a/app/views/dump.html b/app/views/dump.html deleted file mode 100644 index ca16e83..0000000 --- a/app/views/dump.html +++ /dev/null @@ -1,9 +0,0 @@ - -
- -
-
{DUMP}
-
-
\ No newline at end of file diff --git a/app/views/footer/copy.html b/app/views/footer/copy.html index dea83d7..32a61a6 100644 --- a/app/views/footer/copy.html +++ b/app/views/footer/copy.html @@ -1 +1 @@ -© 2024 {SITENAME}, Powered by The Tempus Project. \ No newline at end of file +© 2025 {SITENAME}, Powered by The Tempus Project. \ No newline at end of file diff --git a/app/views/hashtags.html b/app/views/hashtags.html deleted file mode 100644 index 412bab0..0000000 --- a/app/views/hashtags.html +++ /dev/null @@ -1 +0,0 @@ -

Hey there, it looks like you found our hastags! Unfortunately I haven't finished building them out just yet. Check back soon!

\ No newline at end of file diff --git a/app/views/install/complete.html b/app/views/install/complete.html index aecce87..bce6d2f 100644 --- a/app/views/install/complete.html +++ b/app/views/install/complete.html @@ -20,11 +20,11 @@

diff --git a/app/views/install/configure.html b/app/views/install/configure.html index a5eac74..3b4c616 100644 --- a/app/views/install/configure.html +++ b/app/views/install/configure.html @@ -1,5 +1,5 @@ -{installer-nav} -
+
+ {installer-nav}
Configure diff --git a/app/views/install/models.html b/app/views/install/models.html index 9b7bd7a..85cba5d 100644 --- a/app/views/install/models.html +++ b/app/views/install/models.html @@ -1,5 +1,5 @@ -{installer-nav} -
+
+ {installer-nav}

All models are required for proper installation of The Tempus Project. In this step, we will add the database tables required for these models. In the next step, you'll be able to select which plugins you would like installed.

diff --git a/app/views/install/nav.html b/app/views/install/nav.html index 84a3eb2..a1e937a 100644 --- a/app/views/install/nav.html +++ b/app/views/install/nav.html @@ -1,12 +1,12 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/views/install/plugins.html b/app/views/install/plugins.html index 94ad294..3adcca6 100644 --- a/app/views/install/plugins.html +++ b/app/views/install/plugins.html @@ -1,5 +1,5 @@ -{installer-nav} -
+
+ {installer-nav}

diff --git a/app/views/install/resources.html b/app/views/install/resources.html index d271668..666f678 100644 --- a/app/views/install/resources.html +++ b/app/views/install/resources.html @@ -1,5 +1,5 @@ -{installer-nav} -

+
+ {installer-nav}

diff --git a/app/views/install/routing.html b/app/views/install/routing.html index 1511e4e..c3306e9 100644 --- a/app/views/install/routing.html +++ b/app/views/install/routing.html @@ -1,5 +1,5 @@ -{installer-nav} -

+
+ {installer-nav}

The Tempus Project uses rewrites in htaccess files (Apache), or location directives (Nginx), to automatically route all incoming traffic through the app. In this step, we will help set-up and then test that the required configurations have been made.

diff --git a/app/views/install/agreement.html b/app/views/install/terms.html similarity index 81% rename from app/views/install/agreement.html rename to app/views/install/terms.html index 5db62c6..69ab428 100644 --- a/app/views/install/agreement.html +++ b/app/views/install/terms.html @@ -1,7 +1,7 @@ -{installer-nav} -
+
+ {installer-nav}
-
+
{TERMS}
diff --git a/app/views/install/adminUser.html b/app/views/install/user.html similarity index 95% rename from app/views/install/adminUser.html rename to app/views/install/user.html index 736092a..69d8c74 100644 --- a/app/views/install/adminUser.html +++ b/app/views/install/user.html @@ -1,5 +1,5 @@ -{installer-nav} -
+
+ {installer-nav}
diff --git a/app/views/install/check.html b/app/views/install/verify.html similarity index 91% rename from app/views/install/check.html rename to app/views/install/verify.html index 6c763ab..6b7fcfe 100644 --- a/app/views/install/check.html +++ b/app/views/install/verify.html @@ -1,5 +1,5 @@ -{installer-nav} -
+
+ {installer-nav}

Requirements

diff --git a/app/views/install/welcome.html b/app/views/install/welcome.html new file mode 100644 index 0000000..b95adea --- /dev/null +++ b/app/views/install/welcome.html @@ -0,0 +1,17 @@ +
+
+
+
+ {installer-nav} +

Welcome to The Tempus Project Installer.

+

+ 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. +

+ + +
+ +
+
+
+
\ No newline at end of file diff --git a/app/views/nav/admin.html b/app/views/nav/admin.html index aaf01c4..66db4ee 100644 --- a/app/views/nav/admin.html +++ b/app/views/nav/admin.html @@ -4,7 +4,7 @@ {text} - {duuuuuuuh} + {subnav} {/LOOP} \ No newline at end of file diff --git a/app/views/nav/adminSub.html b/app/views/nav/adminSub.html index 513c731..61eb758 100644 --- a/app/views/nav/adminSub.html +++ b/app/views/nav/adminSub.html @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/app/views/nav/main.html b/app/views/nav/main.html index 11988cf..cb19bbb 100644 --- a/app/views/nav/main.html +++ b/app/views/nav/main.html @@ -1,5 +1,13 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/views/switches.html b/app/views/switches.html deleted file mode 100644 index 8d314d1..0000000 --- a/app/views/switches.html +++ /dev/null @@ -1,52 +0,0 @@ -
-
- -
Material Design Switch Demos
- - -
    -
  • - Bootstrap Switch Default -
    - - -
    -
  • -
  • - Bootstrap Switch Primary -
    - - -
    -
  • -
  • - Bootstrap Switch Success -
    - - -
    -
  • -
  • - Bootstrap Switch Info -
    - - -
    -
  • -
  • - Bootstrap Switch Warning -
    - - -
    -
  • -
  • - Bootstrap Switch Danger -
    - - -
    -
  • -
-
-
\ No newline at end of file diff --git a/app/views/test.html b/app/views/test.html deleted file mode 100644 index 884c524..0000000 --- a/app/views/test.html +++ /dev/null @@ -1 +0,0 @@ -lul, testing \ No newline at end of file diff --git a/app/views/user_cp/settings.html b/app/views/user_cp/settings.html index 50d92a9..5a6faa8 100644 --- a/app/views/user_cp/settings.html +++ b/app/views/user_cp/settings.html @@ -3,7 +3,7 @@
-
+
{PREFERENCES_FORM}
diff --git a/app/views/wysiwyg.html b/app/views/wysiwyg.html deleted file mode 100644 index a9cc13c..0000000 --- a/app/views/wysiwyg.html +++ /dev/null @@ -1,104 +0,0 @@ -
-
-
-
- - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - -
-
- - - -
-
-
-
- - - - - - -
-
- - - - - - -
-
- - - -
-
-
-
-
-

Welcome to my WYSIWYG Editor (What you see is what you get)!

-

It's only made of HTML5, CSS3 and pure JavaScript, no framework!

-
-

See for yourself! 😃

-

Tutorial available here! 😋

-
- -
-
- \ No newline at end of file diff --git a/bin/tempus_project.php b/bin/tempus_project.php index de81e7f..a0a66bd 100644 --- a/bin/tempus_project.php +++ b/bin/tempus_project.php @@ -100,6 +100,10 @@ class TheTempusProject extends Bedrock { 'text' => ' Tokens', 'url' => '{ROOT_URL}admin/tokens', ], + [ + 'text' => ' Images', + 'url' => '{ROOT_URL}admin/images', + ], [ 'text' => ' Modules', 'url' => [ @@ -143,6 +147,7 @@ class TheTempusProject extends Bedrock { [ 'text' => 'Home', 'url' => '{ROOT_URL}home/index', + 'filter' => 'notloggedin', ], [ 'text' => 'Libraries', @@ -299,6 +304,11 @@ class TheTempusProject extends Bedrock { "pretty" => "Enable CSRF Token for all forms.", "default" => true ], + "registrationEnabled" => [ + "type" => "radio", + "pretty" => "Allow new users to register an account.", + "default" => true + ], "loginLimit" => [ "type" => "text", "pretty" => "Maximum Login Attempts per hour", @@ -312,17 +322,15 @@ class TheTempusProject extends Bedrock { ], "uploads" => [ "images" => [ - "type"=> "radio", - "pretty"=> "Upload Images Enabled", - "default"=> true, - "protected"=> true, - "value"=> true, + "type" => "radio", + "pretty" => "Upload Images Enabled", + "default" => true, + "value" => true, ], "maxImageSize"=> [ "type" => "text", "pretty" => "Maximum size for image uploads", "default" => 500000, - "protected" => true, "value" => 500000, ] ], diff --git a/composer.json b/composer.json index feb7974..6315553 100644 --- a/composer.json +++ b/composer.json @@ -22,9 +22,9 @@ { "components/jquery": "1.9.*", "fortawesome/font-awesome": "4.7", - "thetempusproject/bedrock": "1.0.10", - "thetempusproject/canary": "1.0.5", - "thetempusproject/houdini": "1.0.8", + "thetempusproject/bedrock": "1.1.1", + "thetempusproject/canary": "1.0.6", + "thetempusproject/houdini": "2.0.2", "twbs/bootstrap": "5.2.3" }, "autoload": diff --git a/composer.lock b/composer.lock index 2d938d8..4f37afa 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "60848437b2d65e726d854a96b9afcf22", + "content-hash": "b54d2da34f833481cff28144a669b2aa", "packages": [ { "name": "components/jquery", @@ -26,14 +26,14 @@ "type": "component", "extra": { "component": { - "scripts": [ - "jquery.js" - ], "files": [ "jquery.min.js", "jquery-migrate.js", "jquery-migrate.min.js", "jquery.min.map" + ], + "scripts": [ + "jquery.js" ] } }, @@ -303,17 +303,17 @@ }, { "name": "thetempusproject/bedrock", - "version": "1.0.10", + "version": "1.1.1", "source": { "type": "git", "url": "https://git.thetempusproject.com/the-tempus-project/bedrock", - "reference": "42ade08306525488f2449a2f4e3e05569eee9822" + "reference": "bcd73d58f9d7df41b5ec0f12871ff15cfcc215ae" }, "require": { "php": ">=8.1.0", - "thetempusproject/canary": ">=1.0", - "thetempusproject/hermes": ">=1.0", - "thetempusproject/houdini": ">=1.0" + "thetempusproject/canary": "1.0.6", + "thetempusproject/hermes": "1.0.3", + "thetempusproject/houdini": "2.0.2" }, "type": "library", "autoload": { @@ -344,15 +344,15 @@ "framework", "mvc" ], - "time": "2024-08-21T10:12:54+00:00" + "time": "2025-01-27T05:07:05+00:00" }, { "name": "thetempusproject/canary", - "version": "1.0.5", + "version": "1.0.6", "source": { "type": "git", "url": "https://git.thetempusproject.com/the-tempus-project/canary", - "reference": "35415fbf3c5888ccdb8a8695989176a120026c7f" + "reference": "44b2ad688cff933964ec2ff50b408d94c7f51e40" }, "require": { "php": ">=8.1.0" @@ -387,15 +387,15 @@ "thetempusproject", "tools" ], - "time": "2024-08-20T10:26:09+00:00" + "time": "2025-01-22T01:39:34+00:00" }, { "name": "thetempusproject/hermes", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://git.thetempusproject.com/the-tempus-project/hermes", - "reference": "31c51c1a5bad2871df800c89f27ace0a49848583" + "reference": "4b4e06a98f0f01695bda18de240bb3294d096ef4" }, "require": { "php": ">=8.1.0" @@ -430,20 +430,20 @@ "thetempusproject", "tools" ], - "time": "2024-08-20T10:26:47+00:00" + "time": "2025-01-22T01:43:15+00:00" }, { "name": "thetempusproject/houdini", - "version": "1.0.8", + "version": "2.0.2", "source": { "type": "git", "url": "https://git.thetempusproject.com/the-tempus-project/houdini", - "reference": "d9e61d3f8f5d10f3fa7ba31907a4b3c1edc76614" + "reference": "fb027a4ebc327e709ad3da29a4cf112894c2b7e6" }, "require": { "php": ">=8.1.0", - "thetempusproject/canary": ">=1.0", - "thetempusproject/hermes": ">=1.0" + "thetempusproject/canary": "1.0.6", + "thetempusproject/hermes": "1.0.3" }, "type": "library", "autoload": { @@ -474,7 +474,7 @@ "thetempusproject", "tools" ], - "time": "2024-08-20T10:30:48+00:00" + "time": "2025-01-27T05:02:14+00:00" }, { "name": "twbs/bootstrap", @@ -535,5 +535,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" }