Various changes
mobile-friendly ui updates admin user-edit bugfix file cleanup added searchFields add blog search remove unused code add maintenance mode config
This commit is contained in:
@ -268,13 +268,13 @@ class Preferences {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$html .= '<div class="mb-3 row">';
|
$html .= '<div class="mb-3 row">';
|
||||||
$html .= '<label for="' . $fieldname . '" class="col-lg-6 col-form-label text-end">' . $fieldTitle . '</label>';
|
$html .= '<label for="' . $fieldname . '" class="col-lg-6 col-form-label text-start text-lg-end">' . $fieldTitle . '</label>';
|
||||||
$html .= '<div class="col-lg-6">';
|
$html .= '<div class="col-lg-6">';
|
||||||
$html .= $fieldHtml;
|
$html .= $fieldHtml;
|
||||||
$html .= '</div>';
|
$html .= '</div>';
|
||||||
if ( 'file' === $type ) {
|
if ( 'file' === $type ) {
|
||||||
$html .= '<div class="mb-3 row">';
|
$html .= '<div class="mb-3 row">';
|
||||||
$html .= '<h4 class="col-lg-6 col-form-label text-end">Current Image</h4>';
|
$html .= '<h4 class="col-lg-6 col-form-label text-start text-lg-end">Current Image</h4>';
|
||||||
$html .= '<div class="col-lg-6">';
|
$html .= '<div class="col-lg-6">';
|
||||||
$html .= '<img alt="User Avatar" src="{ROOT_URL}' . $defaultValue . '" class="img-circle img-fluid p-2 avatar-125">';
|
$html .= '<img alt="User Avatar" src="{ROOT_URL}' . $defaultValue . '" class="img-circle img-fluid p-2 avatar-125">';
|
||||||
$html .= '</div>';
|
$html .= '</div>';
|
||||||
|
@ -22,6 +22,7 @@ use TheTempusProject\Plugins\Comments as CommentPlugin;
|
|||||||
use TheTempusProject\Plugins\Blog as BlogPlugin;
|
use TheTempusProject\Plugins\Blog as BlogPlugin;
|
||||||
use TheTempusProject\Plugins\Contact as ContactPlugin;
|
use TheTempusProject\Plugins\Contact as ContactPlugin;
|
||||||
use TheTempusProject\Canary\Bin\Canary as Debug;
|
use TheTempusProject\Canary\Bin\Canary as Debug;
|
||||||
|
use TheTempusProject\Bedrock\Functions\Input;
|
||||||
|
|
||||||
class Home extends AdminController {
|
class Home extends AdminController {
|
||||||
public static $user;
|
public static $user;
|
||||||
|
@ -27,6 +27,7 @@ use TheTempusProject\Models\User;
|
|||||||
use TheTempusProject\Models\Group;
|
use TheTempusProject\Models\Group;
|
||||||
use TheTempusProject\TheTempusProject as App;
|
use TheTempusProject\TheTempusProject as App;
|
||||||
use TheTempusProject\Houdini\Classes\Template;
|
use TheTempusProject\Houdini\Classes\Template;
|
||||||
|
use TheTempusProject\Bedrock\Functions\Upload;
|
||||||
|
|
||||||
class Users extends AdminController {
|
class Users extends AdminController {
|
||||||
public static $user;
|
public static $user;
|
||||||
@ -104,7 +105,7 @@ class Users extends AdminController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( Input::exists( 'submit' ) ) {
|
if ( Input::exists( 'submit' ) ) {
|
||||||
if ( !FormChecker::check( 'editUser' ) ) {
|
if ( ! FormChecker::check( 'editUser' ) ) {
|
||||||
Issues::add( 'error', [ 'There was an error with your request.' => Check::userErrors() ] );
|
Issues::add( 'error', [ 'There was an error with your request.' => Check::userErrors() ] );
|
||||||
} else {
|
} else {
|
||||||
$fields = [
|
$fields = [
|
||||||
@ -112,6 +113,25 @@ class Users extends AdminController {
|
|||||||
'email' => Input::post( 'email' ),
|
'email' => Input::post( 'email' ),
|
||||||
'userGroup' => Input::post( 'groupSelect' ),
|
'userGroup' => Input::post( 'groupSelect' ),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if ( Input::exists( 'avatar' ) ) {
|
||||||
|
$folder = UPLOAD_DIRECTORY . $userData->username . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR;
|
||||||
|
$upload = Upload::image( 'avatar', $folder );
|
||||||
|
if ( $upload ) {
|
||||||
|
$route = str_replace( APP_ROOT_DIRECTORY, '', $folder );
|
||||||
|
$prefs = [];
|
||||||
|
$prefs['avatar'] = $route . Upload::last();
|
||||||
|
|
||||||
|
self::$user->updatePrefs( $prefs, $userData->ID );
|
||||||
|
} else {
|
||||||
|
Issues::add( 'error', [ 'There was an error with your avatar.' => Check::userErrors() ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Input::exists( 'password' ) ) {
|
||||||
|
$fields['password'] = Hash::make( Input::post( 'password' ) );
|
||||||
|
}
|
||||||
|
|
||||||
if ( Input::exists( 'confirmed' ) ) {
|
if ( Input::exists( 'confirmed' ) ) {
|
||||||
$fields['confirmed'] = 1;
|
$fields['confirmed'] = 1;
|
||||||
} else {
|
} else {
|
||||||
@ -119,6 +139,7 @@ class Users extends AdminController {
|
|||||||
$fields['confirmationCode'] = Code::genConfirmation();
|
$fields['confirmationCode'] = Code::genConfirmation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self::$user->update( $userData->ID, $fields ) ) {
|
if ( self::$user->update( $userData->ID, $fields ) ) {
|
||||||
Issues::add( 'success', 'User Updated.' );
|
Issues::add( 'success', 'User Updated.' );
|
||||||
return $this->index();
|
return $this->index();
|
||||||
|
@ -38,15 +38,15 @@ class Home extends Controller {
|
|||||||
return Issues::add( 'notice', 'You are already logged in. Please <a href="' . Routes::getAddress() . 'home/logout">click here</a> to log out.' );
|
return Issues::add( 'notice', 'You are already logged in. Please <a href="' . Routes::getAddress() . 'home/logout">click here</a> to log out.' );
|
||||||
}
|
}
|
||||||
if ( !Input::exists() ) {
|
if ( !Input::exists() ) {
|
||||||
return Views::view( 'login' );
|
return Views::view( 'auth.login' );
|
||||||
}
|
}
|
||||||
if ( !Forms::check( 'login' ) ) {
|
if ( !Forms::check( 'login' ) ) {
|
||||||
Issues::add( 'error', [ 'There was an error with your login.' => Check::userErrors() ] );
|
Issues::add( 'error', [ 'There was an error with your login.' => Check::userErrors() ] );
|
||||||
return Views::view( 'login' );
|
return Views::view( 'auth.login' );
|
||||||
}
|
}
|
||||||
if ( !self::$user->logIn( Input::post( 'username' ), Input::post( 'password' ), Input::post( 'remember' ) ) ) {
|
if ( !self::$user->logIn( Input::post( 'username' ), Input::post( 'password' ), Input::post( 'remember' ) ) ) {
|
||||||
Issues::add( 'error', 'Username or password was incorrect.' );
|
Issues::add( 'error', 'Username or password was incorrect.' );
|
||||||
return Views::view( 'login' );
|
return Views::view( 'auth.login' );
|
||||||
}
|
}
|
||||||
Session::flash( 'success', 'You have been logged in.' );
|
Session::flash( 'success', 'You have been logged in.' );
|
||||||
if ( Input::exists( 'rurl' ) ) {
|
if ( Input::exists( 'rurl' ) ) {
|
||||||
@ -79,13 +79,13 @@ class Home extends Controller {
|
|||||||
}
|
}
|
||||||
self::$title = $user->username . '\'s Profile - {SITENAME}';
|
self::$title = $user->username . '\'s Profile - {SITENAME}';
|
||||||
self::$pageDescription = 'User Profile for ' . $user->username . ' - {SITENAME}';
|
self::$pageDescription = 'User Profile for ' . $user->username . ' - {SITENAME}';
|
||||||
Views::view( 'profile', $user );
|
Views::view( 'profilePage', $user );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function terms() {
|
public function terms() {
|
||||||
self::$title = 'Terms and Conditions - {SITENAME}';
|
self::$title = 'Terms and Conditions - {SITENAME}';
|
||||||
self::$pageDescription = '{SITENAME} Terms and Conditions of use. Please use {SITENAME} safely.';
|
self::$pageDescription = '{SITENAME} Terms and Conditions of use. Please use {SITENAME} safely.';
|
||||||
Components::set( 'TERMS', Views::simpleView( 'terms' ) );
|
Components::set( 'TERMS', Views::simpleView( 'auth.terms' ) );
|
||||||
Views::view( 'termsPage' );
|
Views::view( 'termsPage' );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,8 +98,7 @@ class Home extends Controller {
|
|||||||
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.';
|
||||||
Components::set( 'PRIVACY', Views::simpleView( 'privacy' ) );
|
Views::view( 'privacy' );
|
||||||
Views::raw( '<div class="col-lg-8 mx-auto">{PRIVACY}</div>' );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function faq() {
|
public function faq() {
|
||||||
|
@ -31,14 +31,14 @@ class Register extends Controller {
|
|||||||
Template::noIndex();
|
Template::noIndex();
|
||||||
self::$title = 'Confirm Email';
|
self::$title = 'Confirm Email';
|
||||||
if ( !isset( $code ) && !Input::exists( 'confirmationCode' ) ) {
|
if ( !isset( $code ) && !Input::exists( 'confirmationCode' ) ) {
|
||||||
return Views::view( 'confirmation' );
|
return Views::view( 'auth.confirmation' );
|
||||||
}
|
}
|
||||||
if ( Forms::check( 'emailConfirmation' ) ) {
|
if ( Forms::check( 'emailConfirmation' ) ) {
|
||||||
$code = Input::post( 'confirmationCode' );
|
$code = Input::post( 'confirmationCode' );
|
||||||
}
|
}
|
||||||
if ( !self::$user->confirm( $code ) ) {
|
if ( !self::$user->confirm( $code ) ) {
|
||||||
Issues::add( 'error', 'There was an error confirming your account, please try again.' );
|
Issues::add( 'error', 'There was an error confirming your account, please try again.' );
|
||||||
return Views::view( 'confirmation' );
|
return Views::view( 'auth.confirmation' );
|
||||||
}
|
}
|
||||||
Session::flash( 'success', 'You have successfully confirmed your email address.' );
|
Session::flash( 'success', 'You have successfully confirmed your email address.' );
|
||||||
Redirect::to( 'home/index' );
|
Redirect::to( 'home/index' );
|
||||||
@ -52,16 +52,16 @@ class Register extends Controller {
|
|||||||
return Issues::add( 'notice', 'The site administrator has disable the ability to register a new account.' );
|
return Issues::add( 'notice', 'The site administrator has disable the ability to register a new account.' );
|
||||||
}
|
}
|
||||||
|
|
||||||
Components::set( 'TERMS', Views::simpleView( 'terms' ) );
|
Components::set( 'TERMS', Views::simpleView( 'auth.terms' ) );
|
||||||
if ( App::$isLoggedIn ) {
|
if ( App::$isLoggedIn ) {
|
||||||
return Issues::add( 'notice', 'You are currently logged in.' );
|
return Issues::add( 'notice', 'You are currently logged in.' );
|
||||||
}
|
}
|
||||||
if ( !Input::exists() ) {
|
if ( !Input::exists() ) {
|
||||||
return Views::view( 'register' );
|
return Views::view( 'auth.register' );
|
||||||
}
|
}
|
||||||
if ( !Forms::check( 'register' ) ) {
|
if ( !Forms::check( 'register' ) ) {
|
||||||
Issues::add( 'error', [ 'There was an error with your registration.' => Check::userErrors() ] );
|
Issues::add( 'error', [ 'There was an error with your registration.' => Check::userErrors() ] );
|
||||||
return Views::view( 'register' );
|
return Views::view( 'auth.register' );
|
||||||
}
|
}
|
||||||
self::$user->create( [
|
self::$user->create( [
|
||||||
'username' => Input::post( 'username' ),
|
'username' => Input::post( 'username' ),
|
||||||
@ -80,7 +80,7 @@ class Register extends Controller {
|
|||||||
self::$title = 'Recover Account - {SITENAME}';
|
self::$title = 'Recover Account - {SITENAME}';
|
||||||
Template::noIndex();
|
Template::noIndex();
|
||||||
if ( !Input::exists() ) {
|
if ( !Input::exists() ) {
|
||||||
return Views::view( 'forgot' );
|
return Views::view( 'auth.forgot' );
|
||||||
}
|
}
|
||||||
if ( Check::email( Input::post( 'entry' ) ) && self::$user->findByEmail( Input::post( 'entry' ) ) ) {
|
if ( Check::email( Input::post( 'entry' ) ) && self::$user->findByEmail( Input::post( 'entry' ) ) ) {
|
||||||
$userData = self::$user->data();
|
$userData = self::$user->data();
|
||||||
@ -96,7 +96,7 @@ class Register extends Controller {
|
|||||||
Redirect::to( 'home/login' );
|
Redirect::to( 'home/login' );
|
||||||
}
|
}
|
||||||
Issues::add( 'error', 'User not found.' );
|
Issues::add( 'error', 'User not found.' );
|
||||||
Views::view( 'forgot' );
|
Views::view( 'auth.forgot' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resend() {
|
public function resend() {
|
||||||
@ -109,7 +109,7 @@ class Register extends Controller {
|
|||||||
return Issues::add( 'notice', 'Your account has already been confirmed.' );
|
return Issues::add( 'notice', 'Your account has already been confirmed.' );
|
||||||
}
|
}
|
||||||
if ( !Forms::check( 'confirmationResend' ) ) {
|
if ( !Forms::check( 'confirmationResend' ) ) {
|
||||||
return Views::view( 'confirmation_resend' );
|
return Views::view( 'auth.confirmation_resend' );
|
||||||
}
|
}
|
||||||
Email::send( App::$activeUser->email, 'confirmation', App::$activeUser->confirmationCode, [ 'template' => true ] );
|
Email::send( App::$activeUser->email, 'confirmation', App::$activeUser->confirmationCode, [ 'template' => true ] );
|
||||||
Session::flash( 'success', 'Your confirmation email has been sent to the email for your account.' );
|
Session::flash( 'success', 'Your confirmation email has been sent to the email for your account.' );
|
||||||
@ -121,7 +121,7 @@ class Register extends Controller {
|
|||||||
Template::noIndex();
|
Template::noIndex();
|
||||||
if ( !isset( $code ) && !Input::exists( 'resetCode' ) ) {
|
if ( !isset( $code ) && !Input::exists( 'resetCode' ) ) {
|
||||||
Issues::add( 'info', 'Please provide a reset code.' );
|
Issues::add( 'info', 'Please provide a reset code.' );
|
||||||
return Views::view( 'password_reset_code' );
|
return Views::view( 'auth.password_reset_code' );
|
||||||
}
|
}
|
||||||
if ( Input::exists( 'resetCode' ) ) {
|
if ( Input::exists( 'resetCode' ) ) {
|
||||||
if ( Forms::check( 'passwordResetCode' ) ) {
|
if ( Forms::check( 'passwordResetCode' ) ) {
|
||||||
@ -130,15 +130,15 @@ class Register extends Controller {
|
|||||||
}
|
}
|
||||||
if ( ! self::$user->checkCode( $code ) ) {
|
if ( ! self::$user->checkCode( $code ) ) {
|
||||||
Issues::add( 'error', 'There was an error with your reset code. Please try again.' );
|
Issues::add( 'error', 'There was an error with your reset code. Please try again.' );
|
||||||
return Views::view( 'password_reset_code' );
|
return Views::view( 'auth.password_reset_code' );
|
||||||
}
|
}
|
||||||
Components::set( 'resetCode', $code );
|
Components::set( 'resetCode', $code );
|
||||||
if ( ! Input::exists('password') ) {
|
if ( ! Input::exists('password') ) {
|
||||||
return Views::view( 'password_reset' );
|
return Views::view( 'auth.password_reset' );
|
||||||
}
|
}
|
||||||
if ( ! Forms::check( 'passwordReset' ) ) {
|
if ( ! Forms::check( 'passwordReset' ) ) {
|
||||||
Issues::add( 'error', [ 'There was an error with your request.' => Check::userErrors() ] );
|
Issues::add( 'error', [ 'There was an error with your request.' => Check::userErrors() ] );
|
||||||
return Views::view( 'password_reset' );
|
return Views::view( 'auth.password_reset' );
|
||||||
}
|
}
|
||||||
self::$user->changePassword( $code, Input::post( 'password' ) );
|
self::$user->changePassword( $code, Input::post( 'password' ) );
|
||||||
Email::send( self::$user->data()->email, 'passwordChange', null, [ 'template' => true ] );
|
Email::send( self::$user->data()->email, 'passwordChange', null, [ 'template' => true ] );
|
||||||
|
@ -70,7 +70,7 @@ class Usercp extends Controller {
|
|||||||
self::$title = 'User Control Panel';
|
self::$title = 'User Control Panel';
|
||||||
$menu = Views::simpleView( 'nav.usercp', App::$userCPlinks );
|
$menu = Views::simpleView( 'nav.usercp', App::$userCPlinks );
|
||||||
Navigation::activePageSelect( $menu, null, true, true );
|
Navigation::activePageSelect( $menu, null, true, true );
|
||||||
Views::view( 'profile', App::$activeUser );
|
Views::view( 'user_cp.profile', App::$activeUser );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function password() {
|
public function password() {
|
||||||
@ -104,6 +104,10 @@ class Usercp extends Controller {
|
|||||||
$userPrefs = App::$activePrefs;
|
$userPrefs = App::$activePrefs;
|
||||||
if ( Input::exists( 'submit' ) ) {
|
if ( Input::exists( 'submit' ) ) {
|
||||||
$fields = $prefs->convertFormToArray( true, false );
|
$fields = $prefs->convertFormToArray( true, false );
|
||||||
|
// @TODO now i may need to rework the form checker to work with this....
|
||||||
|
// if (!Forms::check('userPrefs')) {
|
||||||
|
// Issues::add( 'error', [ 'There was an error with your request.' => Check::userErrors() ] );
|
||||||
|
// }
|
||||||
self::$user->updatePrefs( $fields, App::$activeUser->ID );
|
self::$user->updatePrefs( $fields, App::$activeUser->ID );
|
||||||
Issues::add( 'success', 'Your preferences have been updated.' );
|
Issues::add( 'success', 'Your preferences have been updated.' );
|
||||||
// if the image upload fails, need to fall back on original
|
// if the image upload fails, need to fall back on original
|
||||||
|
@ -9,36 +9,42 @@
|
|||||||
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.context-main {
|
.context-main-border {
|
||||||
color: #fff;
|
border-color: #f5f5f5!important;
|
||||||
}
|
|
||||||
.context-second {
|
|
||||||
color: #1e1e1e;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.context-main-bg {
|
.context-main-bg {
|
||||||
background-color: #2c2c2c;
|
background-color: #2c2c2c;
|
||||||
}
|
}
|
||||||
.context-second-bg {
|
.context-second-bg {
|
||||||
background-color: #1e1e1e;
|
background-color: #383838;
|
||||||
}
|
}
|
||||||
.context-third-bg {
|
.context-third-bg {
|
||||||
background-color: #3a3a3a;
|
background-color: #3a3a3a;
|
||||||
}
|
}
|
||||||
|
.context-other-bg {
|
||||||
|
background-color: #1e1e1e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.context-main {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.bg-default {
|
.bg-default {
|
||||||
background-color: #2c2c2c;
|
background-color: #2c2c2c;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr {
|
hr {
|
||||||
color: #f5f5f5;
|
color: #f5f5f5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.bg-none,.bg-warning {
|
.bg-none,.bg-warning {
|
||||||
color: #000 !important;
|
color: #000 !important;
|
||||||
}
|
}
|
||||||
.context-other {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
.accordion-button:not(.collapsed) {
|
.accordion-button:not(.collapsed) {
|
||||||
color: #f5f5f5;
|
color: #f5f5f5;
|
||||||
background-color: var(--bs-accordion-dark-active-bg);
|
background-color: var(--bs-accordion-dark-active-bg);
|
||||||
@ -68,12 +74,6 @@ body {
|
|||||||
.install-terms strong {
|
.install-terms strong {
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
.context-main {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
.context-other {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Terms Page
|
* Terms Page
|
||||||
|
@ -8,10 +8,29 @@
|
|||||||
* @link https://TheTempusProject.com
|
* @link https://TheTempusProject.com
|
||||||
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
||||||
*/
|
*/
|
||||||
.context-other-bg {
|
|
||||||
background-color: #eaeaea;
|
.context-main-border {
|
||||||
|
border-color: #1e1e1e!important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.context-main-bg {
|
||||||
|
background-color: #f7f7f7;
|
||||||
|
/* background-color: #b1b; */
|
||||||
|
}
|
||||||
|
.context-second-bg {
|
||||||
|
background-color: #eaeaea;
|
||||||
|
/* background-color: #b1b; */
|
||||||
|
}
|
||||||
|
.context-third-bg {
|
||||||
|
background-color: #ccc;
|
||||||
|
/* background-color: #b1b; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.context-main {
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.nav-link.active {
|
.nav-link.active {
|
||||||
font-weight: bold; /* Make the text bold */
|
font-weight: bold; /* Make the text bold */
|
||||||
}
|
}
|
||||||
@ -20,10 +39,6 @@ hr {
|
|||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.context-main-bg {
|
|
||||||
background-color: #f7f7f7;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Base styles for the switch container */
|
/* Base styles for the switch container */
|
||||||
.material-switch {
|
.material-switch {
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -76,12 +91,6 @@ hr {
|
|||||||
transform: translateX(25px); /* Adjust based on switch width */
|
transform: translateX(25px); /* Adjust based on switch width */
|
||||||
}
|
}
|
||||||
|
|
||||||
.context-main {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
.context-other {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
html {
|
html {
|
||||||
font-family: 'Open Sans', sans-serif;
|
font-family: 'Open Sans', sans-serif;
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -310,3 +319,4 @@ body {
|
|||||||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
|
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
|
||||||
background: linear-gradient(to right, #2c2c2c, #1e1e1e, #1e1e1e);
|
background: linear-gradient(to right, #2c2c2c, #1e1e1e, #1e1e1e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,9 @@ class Group extends DatabaseModel {
|
|||||||
[ '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',
|
||||||
|
@ -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.
|
||||||
|
@ -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',
|
||||||
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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',
|
||||||
|
@ -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)',
|
||||||
@ -428,7 +431,7 @@ class User extends DatabaseModel {
|
|||||||
if ( ! empty( $filter ) ) {
|
if ( ! empty( $filter ) ) {
|
||||||
switch ( $filter ) {
|
switch ( $filter ) {
|
||||||
case 'newsletter':
|
case 'newsletter':
|
||||||
$data = self::$db->search( $this->tableName, 'prefs', 'newsletter":"true' );
|
$data = self::$db->searchColumn( $this->tableName, 'prefs', 'newsletter":"true' );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$data = self::$db->get( $this->tableName, '*' );
|
$data = self::$db->get( $this->tableName, '*' );
|
||||||
@ -546,6 +549,7 @@ class User extends DatabaseModel {
|
|||||||
$instance->prefs = json_decode( $instance->prefs, true );
|
$instance->prefs = json_decode( $instance->prefs, true );
|
||||||
$instance->gender = $instance->prefs['gender'];
|
$instance->gender = $instance->prefs['gender'];
|
||||||
$instance->avatar = $instance->prefs['avatar'];
|
$instance->avatar = $instance->prefs['avatar'];
|
||||||
|
$instance->usernamePretty = \ucfirst( $instance->username );
|
||||||
$out[] = $instance;
|
$out[] = $instance;
|
||||||
if ( !empty( $end ) ) {
|
if ( !empty( $end ) ) {
|
||||||
$out = $out[0];
|
$out = $out[0];
|
||||||
@ -659,7 +663,7 @@ class User extends DatabaseModel {
|
|||||||
}
|
}
|
||||||
if ( !self::$db->update( $this->tableName, $id, $fields ) ) {
|
if ( !self::$db->update( $this->tableName, $id, $fields ) ) {
|
||||||
new CustomException( 'userUpdate' );
|
new CustomException( 'userUpdate' );
|
||||||
Debug::error( "User: $id not updated: $fields" );
|
Debug::error( "User: $id not updated: " . var_export( $fields, true ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -171,4 +171,16 @@ class Blog extends Controller {
|
|||||||
self::$pageDescription = '{SITENAME} blog posts easily and conveniently sorted by years.';
|
self::$pageDescription = '{SITENAME} blog posts easily and conveniently sorted by years.';
|
||||||
Views::view( 'blog.list', self::$posts->byYear( $year ) );
|
Views::view( 'blog.list', self::$posts->byYear( $year ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function search() {
|
||||||
|
$results = [];
|
||||||
|
if ( Input::exists( 'submit' ) ) {
|
||||||
|
$dbResults = self::$posts->search( Input::post('searchTerm') );
|
||||||
|
if ( ! empty( $dbResults ) ) {
|
||||||
|
$results = $dbResults;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Components::set( 'searchResults', Views::simpleView( 'blog.list', $results ) );
|
||||||
|
Views::view( 'blog.searchResults' );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,11 @@ use TheTempusProject\Models\Comments;
|
|||||||
|
|
||||||
class Posts extends DatabaseModel {
|
class Posts extends DatabaseModel {
|
||||||
public $tableName = 'posts';
|
public $tableName = 'posts';
|
||||||
|
public $searchFields = [
|
||||||
|
'title',
|
||||||
|
'slug',
|
||||||
|
'content',
|
||||||
|
];
|
||||||
public static $comments = false;
|
public static $comments = false;
|
||||||
|
|
||||||
public $databaseMatrix = [
|
public $databaseMatrix = [
|
||||||
|
@ -37,6 +37,7 @@ class Blog extends Plugin {
|
|||||||
'posts' => [
|
'posts' => [
|
||||||
[
|
[
|
||||||
'title' => 'Welcome',
|
'title' => 'Welcome',
|
||||||
|
'slug' => 'welcome',
|
||||||
'content' => '<p>This is just a simple message to say thank you for installing The Tempus Project. If you have any questions you can find everything through our website <a href="https://TheTempusProject.com">here</a>.</p>',
|
'content' => '<p>This is just a simple message to say thank you for installing The Tempus Project. If you have any questions you can find everything through our website <a href="https://TheTempusProject.com">here</a>.</p>',
|
||||||
'author' => 1,
|
'author' => 1,
|
||||||
'created' => '{time}',
|
'created' => '{time}',
|
||||||
|
@ -26,9 +26,10 @@ class BlogLoader extends DefaultLoader {
|
|||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
$posts = new Posts;
|
$posts = new Posts;
|
||||||
Components::set('SIDEBAR', Views::simpleView('blog.sidebar', $posts->recent(5)));
|
Components::set('SIDEBAR', Views::simpleView('blog.widgets.recent', $posts->recent(5)));
|
||||||
Components::set('SIDEBAR2', Views::simpleView('blog.sidebar2', $posts->archive()));
|
Components::set('SIDEBAR2', Views::simpleView('blog.widgets.archive', $posts->archive()));
|
||||||
Components::set('SIDEBARABOUT', Views::simpleView('blog.about'));
|
Components::set('SIDEBARABOUT', Views::simpleView('blog.widgets.about'));
|
||||||
|
Components::set('SIDEBARSEARCH', Views::simpleView('blog.widgets.search'));
|
||||||
Components::set('BLOGFEATURES', '');
|
Components::set('BLOGFEATURES', '');
|
||||||
Navigation::setCrumbComponent( 'BLOG_BREADCRUMBS', Input::get( 'url' ) );
|
Navigation::setCrumbComponent( 'BLOG_BREADCRUMBS', Input::get( 'url' ) );
|
||||||
Components::set( 'BLOG_TEMPLATE_URL', Template::parse( '{ROOT_URL}app/plugins/comments/' ) );
|
Components::set( 'BLOG_TEMPLATE_URL', Template::parse( '{ROOT_URL}app/plugins/comments/' ) );
|
||||||
|
@ -39,26 +39,44 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Navigation -->
|
<!-- Navigation -->
|
||||||
<header class="p-3 text-bg-dark">
|
<header class="p-3 text-bg-dark">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
|
<div class="d-flex align-items-center position-relative">
|
||||||
<img src="{ROOT_URL}{LOGO}" class="bi me-2" width="40" height="32" role="img" aria-label="{SITENAME} Logo">
|
<!-- Navbar Toggler (Left) -->
|
||||||
<a href="/" class="d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none">
|
|
||||||
{SITENAME}
|
|
||||||
</a>
|
|
||||||
{topNavLeft}
|
|
||||||
<div class="text-end d-flex align-items-center">
|
|
||||||
{topNavRight}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Centered Logo (Now inside normal document flow) -->
|
||||||
|
<a href="/" class="d-flex align-items-center text-white text-decoration-none d-md-none mx-auto">
|
||||||
|
<img src="{ROOT_URL}{LOGO}" width="40" height="32" alt="{SITENAME} Logo" class="bi">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<!-- Logo (Normal Position for Large Screens) -->
|
||||||
|
<a href="/" class="d-flex align-items-center text-white text-decoration-none d-none d-md-flex">
|
||||||
|
<img src="{ROOT_URL}{LOGO}" width="40" height="32" alt="{SITENAME} Logo" class="bi">
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<div class="navbar-expand-md flex-grow-1">
|
||||||
|
<div class="collapse navbar-collapse d-md-flex" id="mainMenu">
|
||||||
|
<!-- Centered Navigation -->
|
||||||
|
<div class="d-none d-md-block d-flex justify-content-center w-100 position-absolute start-50 translate-middle-x">
|
||||||
|
{topNavLeft}
|
||||||
|
</div>
|
||||||
|
<div class="d-flex justify-content-center flex-grow-1 d-md-none">
|
||||||
|
{topNavLeft}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Right-Side Content (Push to End) -->
|
||||||
|
<div class="d-flex flex-row justify-content-center align-items-center mt-3 mt-md-0 ms-md-auto">
|
||||||
|
{topNavRight}
|
||||||
|
</div>
|
||||||
|
</div> <!-- End Collapse -->
|
||||||
|
</div> <!-- End Navbar Expand -->
|
||||||
|
|
||||||
|
<button class="me-3 d-md-none btn btn-md btn-outline-light" type="button" data-bs-toggle="collapse" data-bs-target="#mainMenu" aria-controls="mainMenu" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<i class="fa fa-bars"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</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}
|
||||||
@ -79,24 +97,27 @@
|
|||||||
|
|
||||||
<div class="pt-4">
|
<div class="pt-4">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h3 class="pb-4 mb-4 fst-italic border-bottom">
|
<h3 class="pb-4 mb-4 fst-italic border-bottom context-main-border">
|
||||||
{SITENAME} Blog
|
{SITENAME} Blog
|
||||||
</h3>
|
</h3>
|
||||||
<div class="row g-5">
|
<div class="d-md-flex g-5">
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<div class="col-md-8">
|
<div class="col-12 col-md-8">
|
||||||
{CONTENT}
|
{CONTENT}
|
||||||
</div>
|
</div>
|
||||||
<!-- Sidebar Content -->
|
<!-- Sidebar Content -->
|
||||||
<div class="col-md-4">
|
<div class="col-12 col-md-4">
|
||||||
<div class="position-sticky" style="top: 2rem;">
|
<div class="position-sticky" style="top: 2rem;">
|
||||||
<div class="p-4">
|
<div class="ps-md-2 ps-lg-5">
|
||||||
{SIDEBARABOUT}
|
{SIDEBARABOUT}
|
||||||
</div>
|
</div>
|
||||||
<div class="p-4">
|
<div class="ps-md-2 ps-lg-5">
|
||||||
|
{SIDEBARSEARCH}
|
||||||
|
</div>
|
||||||
|
<div class="ps-md-2 ps-lg-5">
|
||||||
{SIDEBAR}
|
{SIDEBAR}
|
||||||
</div>
|
</div>
|
||||||
<div class="p-4">
|
<div class="ps-md-2 ps-lg-5">
|
||||||
{SIDEBAR2}
|
{SIDEBAR2}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
<div class="p-4 mb-3 rounded context-main-bg">
|
|
||||||
<h4 class="fst-italic">About</h4>
|
|
||||||
<p class="mb-0">
|
|
||||||
The blog is mostly here to serve ass a simple way to link to long-form content on the site. There won't be any breaking news or tell-all stories here. Just good ole fashioned boring crap no one wants to read.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
@ -2,7 +2,7 @@
|
|||||||
<legend class="text-center">Add Blog Post</legend>
|
<legend class="text-center">Add Blog Post</legend>
|
||||||
<hr>
|
<hr>
|
||||||
{ADMIN_BREADCRUMBS}
|
{ADMIN_BREADCRUMBS}
|
||||||
<form action="" method="post">
|
<form method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<!-- Title -->
|
<!-- Title -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<legend class="text-center">Edit Blog Post</legend>
|
<legend class="text-center">Edit Blog Post</legend>
|
||||||
<hr>
|
<hr>
|
||||||
{ADMIN_BREADCRUMBS}
|
{ADMIN_BREADCRUMBS}
|
||||||
<form action="" method="post">
|
<form method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<!-- Title -->
|
<!-- Title -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
</div><!-- /.blog-post -->
|
</div><!-- /.blog-post -->
|
||||||
</div><!-- /.blog-main -->
|
</div><!-- /.blog-main -->
|
||||||
</div><!-- /.row -->
|
</div><!-- /.row -->
|
||||||
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
<legend>New Blog Post</legend>
|
<legend>New Blog Post</legend>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="title" class="col-lg-3 control-label">Title</label>
|
<label for="title" class="col-lg-3 control-label">Title</label>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{LOOP}
|
{LOOP}
|
||||||
<article class="blog-post">
|
<article class="blog-post context-main-bg p-2">
|
||||||
<h2 class="blog-post-title mb-1">{title}</h2>
|
<h2 class="blog-post-title mb-1">{title}</h2>
|
||||||
<p class="blog-post-meta">{DTC date}{created}{/DTC} by <a href="{ROOT_URL}home/profile/{authorName}" class="text-decoration-none">{authorName}</a></p>
|
<p class="blog-post-meta">{DTC date}{created}{/DTC} by <a href="{ROOT_URL}home/profile/{authorName}" class="text-decoration-none">{authorName}</a></p>
|
||||||
<div class="well">
|
<div class="well">
|
||||||
@ -9,7 +9,7 @@
|
|||||||
<hr>
|
<hr>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
{ALT}
|
{ALT}
|
||||||
<article class="blog-post">
|
<div class="text-center">
|
||||||
<p class="blog-post-meta">No Posts Found.</p>
|
<p class="h5">No Posts Found</p>
|
||||||
</article>
|
</div>
|
||||||
{/ALT}
|
{/ALT}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12 col-sm-12 blog-main">
|
<div class="col-lg-12 col-sm-12 blog-main context-main-bg p-1 p-md-2 mb-2 rounded">
|
||||||
<div class="blog-post">
|
<div class="blog-post mb-5 pb-5">
|
||||||
<h2 class="blog-post-title">{title}</h2>
|
<h2 class="blog-post-title">{title}</h2>
|
||||||
<hr>
|
<hr>
|
||||||
<p class="blog-post-meta">{DTC date}{created}{/DTC} by <a href="{ROOT_URL}home/profile/{authorName}" class="text-decoration-none">{authorName}</a></p>
|
<p class="blog-post-meta">{DTC date}{created}{/DTC} by <a href="{ROOT_URL}home/profile/{authorName}" class="text-decoration-none">{authorName}</a></p>
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
<div class="card">
|
|
||||||
<div class="card-header bg-info">
|
|
||||||
<h3 class="card-title">Recent Posts</h3>
|
|
||||||
</div>
|
|
||||||
<ul class="list-group">
|
|
||||||
{LOOP}
|
|
||||||
<li class="list-group-item">
|
|
||||||
<a href="{ROOT_URL}blog/post/{ID}">{title}</a>
|
|
||||||
</li>
|
|
||||||
{/LOOP}
|
|
||||||
{ALT}
|
|
||||||
<li class="list-group-item">No Posts to show</li>
|
|
||||||
{/ALT}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
3
app/plugins/blog/views/searchResults.html
Normal file
3
app/plugins/blog/views/searchResults.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<legend class="text-center my-2">Search Results</legend>
|
||||||
|
<hr>
|
||||||
|
{searchResults}
|
@ -1,18 +0,0 @@
|
|||||||
<div class="card context-main-bg">
|
|
||||||
<div class="card-header">
|
|
||||||
<h3 class="card-title">Recent Posts</h3>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<ol class="list-unstyled">
|
|
||||||
{LOOP}
|
|
||||||
<li><a href="{ROOT_URL}blog/post/{ID}" class="text-decoration-none">{title}</a></li>
|
|
||||||
{/LOOP}
|
|
||||||
{ALT}
|
|
||||||
<li>No Posts to show</li>
|
|
||||||
{/ALT}
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
<div class="card-footer">
|
|
||||||
<a href="{ROOT_URL}blog" class="text-decoration-none">View All</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -1,15 +0,0 @@
|
|||||||
<div class="card context-main-bg">
|
|
||||||
<div class="card-header">
|
|
||||||
<h3 class="card-title">Archives</h3>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<ol class="list-unstyled">
|
|
||||||
{LOOP}
|
|
||||||
<li>({count}) <a href="{ROOT_URL}blog/month/{month}/{year}" class="text-decoration-none">{monthText} {year}</a></li>
|
|
||||||
{/LOOP}
|
|
||||||
{ALT}
|
|
||||||
<li>None To Show</li>
|
|
||||||
{/ALT}
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
11
app/plugins/blog/views/widgets/about.html
Normal file
11
app/plugins/blog/views/widgets/about.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<div class="pb-2 pb-lg-3">
|
||||||
|
<div class="card rounded context-main-bg">
|
||||||
|
<div class="card-body">
|
||||||
|
<h4 class="fst-italic">About</h4>
|
||||||
|
<p class="mb-0">
|
||||||
|
The blog is mostly here to serve ass a simple way to link to long-form content on the site.
|
||||||
|
There won't be any breaking news or tell-all stories here. Just good ole fashioned boring crap no one wants to read.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
17
app/plugins/blog/views/widgets/archive.html
Normal file
17
app/plugins/blog/views/widgets/archive.html
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<div class="pb-2 pb-lg-3">
|
||||||
|
<div class="card rounded context-main-bg">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title">Archives</h3>
|
||||||
|
</div>
|
||||||
|
<div class="card-body context-second-bg">
|
||||||
|
<ol class="list-unstyled">
|
||||||
|
{LOOP}
|
||||||
|
<li>({count}) <a href="{ROOT_URL}blog/month/{month}/{year}" class="text-decoration-none">{monthText} {year}</a></li>
|
||||||
|
{/LOOP}
|
||||||
|
{ALT}
|
||||||
|
<li>None To Show</li>
|
||||||
|
{/ALT}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
20
app/plugins/blog/views/widgets/recent.html
Normal file
20
app/plugins/blog/views/widgets/recent.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<div class="pb-2 pb-lg-3">
|
||||||
|
<div class="card rounded context-main-bg">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title">Recent Posts</h3>
|
||||||
|
</div>
|
||||||
|
<div class="card-body context-second-bg">
|
||||||
|
<ol class="list-unstyled">
|
||||||
|
{LOOP}
|
||||||
|
<li><a href="{ROOT_URL}blog/post/{ID}" class="text-decoration-none">{title}</a></li>
|
||||||
|
{/LOOP}
|
||||||
|
{ALT}
|
||||||
|
<li>No Posts to show</li>
|
||||||
|
{/ALT}
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
<a href="{ROOT_URL}blog" class="text-decoration-none">View All</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
18
app/plugins/blog/views/widgets/search.html
Normal file
18
app/plugins/blog/views/widgets/search.html
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<div class="pb-2 pb-lg-3">
|
||||||
|
<div class="card rounded context-main-bg">
|
||||||
|
<div class="card-body">
|
||||||
|
<form method="post" action="/blog/search">
|
||||||
|
<fieldset>
|
||||||
|
<!-- Hidden Token -->
|
||||||
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
|
|
||||||
|
<!-- Search -->
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control" aria-label="Search Terms" name="searchTerm" id="searchTerm">
|
||||||
|
<button type="submit" class="btn btn-secondary bg-primary" name="submit" value="submit">Search</button>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -51,7 +51,7 @@ class Bugreport extends Plugin {
|
|||||||
];
|
];
|
||||||
public $contact_footer_links = [
|
public $contact_footer_links = [
|
||||||
[
|
[
|
||||||
'text' => 'Bug Report',
|
'text' => 'Report a Bug',
|
||||||
'url' => '{ROOT_URL}bugreport',
|
'url' => '{ROOT_URL}bugreport',
|
||||||
'filter' => 'loggedin',
|
'filter' => 'loggedin',
|
||||||
],
|
],
|
||||||
|
@ -1,15 +1,20 @@
|
|||||||
<div class="col-8 mx-auto p-4 rounded shadow-sm mb-5 context-main-bg mt-4 container">
|
<div class="m-2 m-lg-4">
|
||||||
<h2 class="text-center mb-4">Bug Report</h2>
|
<div class="col-12 mx-5 col-sm-10 col-lg-8 mx-auto p-4 rounded shadow-sm context-main-bg">
|
||||||
|
<h2 class="text-center mb-4">Report a Bug</h2>
|
||||||
<hr>
|
<hr>
|
||||||
<p>Thank you for visiting our bug reporting page. We value our users' input highly and in an effort to better serve your needs, please fill out the form below to help us address this issue.</p>
|
<p class="text-center text-sm-start">
|
||||||
<p>We read each and every bug report submitted, and by submitting this form you allow us to send you a follow-up email.</p>
|
Thank you for visiting our bug reporting page. We value our users' input highly and in an effort to better serve your needs, please fill out the form below to help us address this issue.
|
||||||
<form action="" method="post">
|
</p>
|
||||||
|
<p class="text-center text-sm-start">
|
||||||
|
We read each and every bug report submitted, and by submitting this form you allow us to send you a follow-up email.
|
||||||
|
</p>
|
||||||
|
<form method="post">
|
||||||
<!-- Page URL -->
|
<!-- Page URL -->
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="url" class="form-label">Page you were trying to reach:</label>
|
<label for="url" class="form-label">Page you were trying to reach:</label>
|
||||||
<input type="url" name="url" id="url" class="form-control" aria-describedby="urlHelp" required>
|
<input type="url" name="url" id="url" class="form-control" aria-describedby="urlHelp" required>
|
||||||
<small id="urlHelp" class="form-text text-muted">
|
<small id="urlHelp" class="form-text text-muted">
|
||||||
What is the URL of the page you actually received the error on? (The URL is the website address. Example: {ROOT_URL}home)
|
This is the URL of the page you actually received the error.
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -18,7 +23,7 @@
|
|||||||
<label for="ourl" class="form-label">Page you were on:</label>
|
<label for="ourl" class="form-label">Page you were on:</label>
|
||||||
<input type="url" name="ourl" id="ourl" class="form-control" aria-describedby="ourlHelp">
|
<input type="url" name="ourl" id="ourl" class="form-control" aria-describedby="ourlHelp">
|
||||||
<small id="ourlHelp" class="form-text text-muted">
|
<small id="ourlHelp" class="form-text text-muted">
|
||||||
What is the URL of the page you were on before you received the error? (The URL is the website address. Example: {ROOT_URL}home/newhome)
|
This is the URL of the page you were on before you received the error.
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -37,8 +42,11 @@
|
|||||||
|
|
||||||
<!-- Description -->
|
<!-- Description -->
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="entry" class="form-label">Describe the problem/error as best as you can: (max: 2000 characters)</label>
|
<label for="entry" class="form-label">Describe the error you received: </label>
|
||||||
<textarea class="form-control" name="entry" id="entry" rows="6" maxlength="2000" required></textarea>
|
<textarea class="form-control" name="entry" id="entry" rows="6" maxlength="2000" aria-describedby="descHelp" required></textarea>
|
||||||
|
<small id="descHelp" class="form-text text-muted">
|
||||||
|
(max: 2000 characters)
|
||||||
|
</small>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Hidden Token -->
|
<!-- Hidden Token -->
|
||||||
@ -50,3 +58,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
@ -3,7 +3,7 @@
|
|||||||
<legend class="text-center">Edit Comment</legend>
|
<legend class="text-center">Edit Comment</legend>
|
||||||
<hr>
|
<hr>
|
||||||
{ADMIN_BREADCRUMBS}
|
{ADMIN_BREADCRUMBS}
|
||||||
<form action="" method="post" class="container py-4">
|
<form method="post" class="container py-4">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="comment" class="col-lg-5 col-form-label text-end">Comment:</label>
|
<label for="comment" class="col-lg-5 col-form-label text-end">Comment:</label>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<form action="" method="post" class="text-center mx-auto mt-4" style="max-width: 600px;">
|
<form method="post" class="text-center mx-auto mt-4" style="max-width: 600px;">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<textarea
|
<textarea
|
||||||
class="form-control"
|
class="form-control"
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header d-flex align-items-center justify-content-between context-second-bg context-main">
|
<div class="card-header d-flex align-items-center justify-content-between context-main-bg context-main">
|
||||||
<h3 class="card-title mb-0">
|
<h3 class="card-title mb-0">
|
||||||
<i class="fa fa-fw fa-comment"></i> Comments
|
<i class="fa fa-fw fa-comment"></i> Comments
|
||||||
</h3>
|
</h3>
|
||||||
<span class="badge bg-primary">{count}</span>
|
<span class="badge bg-primary">{count}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body context-main-bg context-main">
|
<div class="card-body context-second-bg">
|
||||||
<ul class="list-group list-group-flush">
|
<ul class="list-group list-group-flush">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<li class="list-group-item context-second-bg context-main mb-2">
|
<li class="list-group-item context-main-bg context-main mb-2">
|
||||||
<div class="d-flex align-items-start">
|
<div class="d-flex align-items-start">
|
||||||
<div class="me-3">
|
<div class="me-3">
|
||||||
<img src="{ROOT_URL}{avatar}" class="rounded-circle" alt="User Avatar" style="width: 50px; height: 50px;">
|
<img src="{ROOT_URL}{avatar}" class="rounded-circle" alt="User Avatar" style="width: 50px; height: 50px;">
|
||||||
@ -28,7 +28,7 @@
|
|||||||
</li>
|
</li>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
{ALT}
|
{ALT}
|
||||||
<li class="list-group-item context-second-bg context-main mb-2">
|
<li class="list-group-item context-main-bg mb-2">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<p class="mb-0">Be the first to comment.</p>
|
<p class="mb-0">Be the first to comment.</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,45 +1,47 @@
|
|||||||
<div class="context-main-bg container py-4 my-4">
|
<div class="m-2 m-lg-4">
|
||||||
<h2 class="text-center mb-4">Contact Us</h2>
|
<div class="context-main-bg container py-2 my-2 py-lg-4 my-lg-4">
|
||||||
<div class="col-lg-6 offset-md-3">
|
<h2 class="text-center mb-4">Contact Us</h2>
|
||||||
<p>
|
<div class="col-12 col-lg-6 offset-lg-3">
|
||||||
Here at <strong>{SITENAME}</strong>, we highly value your feedback. We constantly strive to provide our users with the highest level of quality in everything we do.
|
<p class="text-center text-lg-start">
|
||||||
</p>
|
Here at <strong>{SITENAME}</strong>, we highly value your feedback. We constantly strive to provide our users with the highest level of quality in everything we do.
|
||||||
<p>
|
</p>
|
||||||
If you would like to provide any suggestions or comments on our service, we ask that you please fill out the quick form below and let us know what's on your mind.
|
<p class="text-center text-lg-start">
|
||||||
</p>
|
If you would like to provide any suggestions or comments on our service, we ask that you please fill out the quick form below and let us know what's on your mind.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<form method="post">
|
||||||
|
<!-- Name -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="name" class="col-lg-3 col-form-label text-lg-end">Name:</label>
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<input type="text" class="form-control" name="name" id="name" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Email (Optional) -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="contactEmail" class="col-lg-3 col-form-label text-lg-end">E-mail: (optional)</label>
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<input type="email" class="form-control" name="contactEmail" id="contactEmail">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Feedback -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="entry" class="col-lg-3 col-form-label text-lg-end">Feedback:</label>
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<textarea class="form-control" name="entry" id="entry" rows="6" maxlength="2000" required></textarea>
|
||||||
|
<small class="form-text text-muted">Max: 2000 characters</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Hidden Token -->
|
||||||
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
|
|
||||||
|
<!-- Submit Button -->
|
||||||
|
<div class="text-center">
|
||||||
|
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Submit</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<form action="" method="post">
|
|
||||||
<!-- Name -->
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="name" class="col-lg-3 col-form-label text-end">Name:</label>
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<input type="text" class="form-control" name="name" id="name" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Email (Optional) -->
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="contactEmail" class="col-lg-3 col-form-label text-end">E-mail: (optional)</label>
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<input type="email" class="form-control" name="contactEmail" id="contactEmail">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Feedback -->
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="entry" class="col-lg-3 col-form-label text-end">Feedback:</label>
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<textarea class="form-control" name="entry" id="entry" rows="6" maxlength="2000" required></textarea>
|
|
||||||
<small class="form-text text-muted">Max: 2000 characters</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Hidden Token -->
|
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
|
||||||
|
|
||||||
<!-- Submit Button -->
|
|
||||||
<div class="text-center">
|
|
||||||
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Submit</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
@ -259,7 +259,9 @@ class Message extends DatabaseModel {
|
|||||||
}
|
}
|
||||||
$messageOut['fromAvatar'] = self::$user->getAvatar( $message->userFrom );
|
$messageOut['fromAvatar'] = self::$user->getAvatar( $message->userFrom );
|
||||||
$messageOut['userTo'] = self::$user->getUsername( $message->userTo );
|
$messageOut['userTo'] = self::$user->getUsername( $message->userTo );
|
||||||
|
$messageOut['userToPretty'] = \ucfirst( $messageOut['userTo'] );
|
||||||
$messageOut['userFrom'] = self::$user->getUsername( $message->userFrom );
|
$messageOut['userFrom'] = self::$user->getUsername( $message->userFrom );
|
||||||
|
$messageOut['userFromPretty'] = \ucfirst( $messageOut['userFrom'] );
|
||||||
$out[] = (object) $messageOut;
|
$out[] = (object) $messageOut;
|
||||||
if ( !empty( $end ) ) {
|
if ( !empty( $end ) ) {
|
||||||
$out = $out[0];
|
$out = $out[0];
|
||||||
|
@ -1,57 +1,73 @@
|
|||||||
<div class="container py-4">
|
<div class="m-2 m-lg-4">
|
||||||
<div class="row justify-content-center">
|
<div class="col-12 mx-5 col-sm-10 col-lg-8 mx-auto p-4 rounded shadow-sm context-main-bg">
|
||||||
<div class="col-md-4">
|
<nav aria-label="breadcrumb">
|
||||||
<form action="" method="post" class="needs-validation">
|
<ol class="breadcrumb">
|
||||||
<legend class="mb-4">New Message</legend>
|
<li class="breadcrumb-item">
|
||||||
<fieldset>
|
<a href="{ROOT_URL}messages" class="text-decoration-none">
|
||||||
<!-- To User Field -->
|
Messages
|
||||||
<div class="mb-3 row">
|
</a>
|
||||||
<label for="toUser" class="col-sm-6 col-form-label">To:</label>
|
</li>
|
||||||
<div class="col-sm-6">
|
<li class="breadcrumb-item active" aria-current="page">
|
||||||
<input
|
Create
|
||||||
type="text"
|
</li>
|
||||||
class="form-control"
|
</ol>
|
||||||
name="toUser"
|
</nav>
|
||||||
id="toUser"
|
<div class="row justify-content-center">
|
||||||
value="{prepopuser}"
|
<div class="col-md-6 col-lg-6">
|
||||||
required>
|
<form method="post" class="needs-validation">
|
||||||
|
<legend class="mb-3">New Message</legend>
|
||||||
|
<fieldset>
|
||||||
|
<!-- To User Field -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="toUser" class="col-sm-6 col-form-label">To:</label>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
class="form-control"
|
||||||
|
name="toUser"
|
||||||
|
id="toUser"
|
||||||
|
value="{prepopuser}"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Subject Field -->
|
<!-- Subject Field -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="subject" class="col-sm-6 col-form-label">Subject:</label>
|
<label for="subject" class="col-sm-6 col-form-label">Subject:</label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
name="subject"
|
name="subject"
|
||||||
id="subject"
|
id="subject"
|
||||||
required>
|
required>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Message Field -->
|
<!-- Message Field -->
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="message" class="form-label">Message:</label>
|
<label for="message" class="form-label">Message:</label>
|
||||||
<textarea
|
<textarea
|
||||||
class="form-control"
|
class="form-control"
|
||||||
name="message"
|
name="message"
|
||||||
id="message"
|
id="message"
|
||||||
rows="6"
|
rows="6"
|
||||||
maxlength="2000"
|
maxlength="2000"
|
||||||
required></textarea>
|
required></textarea>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
|
<div class="text-center text-md-start">
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
name="submit"
|
||||||
|
value="submit"
|
||||||
|
class="btn btn-primary btn-lg">
|
||||||
|
Send
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</form>
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
</div>
|
||||||
<button
|
|
||||||
type="submit"
|
|
||||||
name="submit"
|
|
||||||
value="submit"
|
|
||||||
class="btn btn-primary btn-lg">
|
|
||||||
Send
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,14 +1,14 @@
|
|||||||
<h2>Inbox</h2>
|
<h2>Inbox</h2>
|
||||||
<form action="{ROOT_URL}messages/delete" method="post">
|
<form action="{ROOT_URL}messages/delete" method="post">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped text-center">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 20%">From</th>
|
<th style="width: 15%">From</th>
|
||||||
<th style="width: 25%">Subject</th>
|
<th style="width: 40%">Subject</th>
|
||||||
<th style="width: 15%">Last Reply</th>
|
<th style="width: 20%">Last Reply</th>
|
||||||
<th style="width: 20%"></th>
|
|
||||||
<th style="width: 10%"></th>
|
<th style="width: 10%"></th>
|
||||||
<th style="width: 10%">
|
<th style="width: 10%"></th>
|
||||||
|
<th style="width: 5%">
|
||||||
<INPUT type="checkbox" onchange="checkAll(this)" name="check.t" value="T_[]"/>
|
<INPUT type="checkbox" onchange="checkAll(this)" name="check.t" value="T_[]"/>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -16,11 +16,11 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<tr {unreadBadge}>
|
<tr {unreadBadge}>
|
||||||
<td><a href="{ROOT_URL}home/profile/{userFrom}">{userFrom}</a></td>
|
<td><a href="{ROOT_URL}home/profile/{userFrom}" class="text-decoration-none">{userFromPretty}</a></td>
|
||||||
<td><a href="{ROOT_URL}messages/view/{ID}">{subject}</a></td>
|
<td><a href="{ROOT_URL}messages/view/{ID}" class="text-decoration-none">{subject}</a></td>
|
||||||
<td>{DTC}{lastReply}{/DTC}</td>
|
<td>{DTC date}{lastReply}{/DTC}</td>
|
||||||
<td><a href="{ROOT_URL}messages/read/{ID}">Mark as read</a></td>
|
<td><a href="{ROOT_URL}messages/read/{ID}" class="btn btn-sm btn-info"><i class="fa-solid fa-envelope-open"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}messages/delete/{ID}">Delete</a></td>
|
<td><a href="{ROOT_URL}messages/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" value="{ID}" name="T_[]">
|
<input type="checkbox" value="{ID}" name="T_[]">
|
||||||
</td>
|
</td>
|
||||||
@ -35,5 +35,6 @@
|
|||||||
{/ALT}
|
{/ALT}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button> <a href="{ROOT_URL}messages/create" class="btn btn-sm btn-primary">New message</a>
|
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
|
||||||
|
<a href="{ROOT_URL}messages/create" class="btn btn-sm btn-primary">New message</a>
|
||||||
</form>
|
</form>
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
<div class="context-main context-main-bg col-10 offset-1 my-3 p-3">
|
<div class="m-2 m-lg-4">
|
||||||
<div class="my-3 p-3">
|
<div class="col-12 col-sm-10 col-lg-8 mx-auto p-md-2 p-lg-4 rounded shadow-sm context-main-bg context-main">
|
||||||
{message_inbox}
|
<div class="my-3 p-3">
|
||||||
</div>
|
{message_inbox}
|
||||||
<div class="my-3 p-3">
|
</div>
|
||||||
{message_outbox}
|
<div class="my-3 p-3">
|
||||||
|
{message_outbox}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,43 +0,0 @@
|
|||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
|
||||||
<div class="card panel-primary">
|
|
||||||
{LOOP}
|
|
||||||
{SINGLE}
|
|
||||||
<div class="card-header">
|
|
||||||
<h3 class="card-title">{subject}</h3>
|
|
||||||
</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 class=" col-md-9 col-lg-9 ">
|
|
||||||
<table class="table table-user-information">
|
|
||||||
<tbody>
|
|
||||||
<td>{message}</td>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-footer">
|
|
||||||
{ADMIN}
|
|
||||||
{ID}
|
|
||||||
<span class="float-right">
|
|
||||||
{DTC}{sent}{/DTC}
|
|
||||||
</span>
|
|
||||||
{/ADMIN}
|
|
||||||
</div>
|
|
||||||
{/LOOP}
|
|
||||||
</div>
|
|
||||||
<form action="{ROOT_URL}messages/reply" method="post">
|
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
|
||||||
<input type="hidden" name="messageID" value="{PID}">
|
|
||||||
<button name="submit" value="reply" type="submit" class="btn btn-sm btn-primary">Reply</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -1,37 +1,53 @@
|
|||||||
<div class="context-main context-main-bg col-8 offset-2 my-3 p-3">
|
<div class="m-2 m-lg-4">
|
||||||
<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-12 mx-5 col-sm-10 col-lg-8 mx-auto p-4 rounded shadow-sm context-main-bg context-main">
|
||||||
<div class="card panel-primary">
|
<nav aria-label="breadcrumb">
|
||||||
{LOOP}
|
<ol class="breadcrumb">
|
||||||
{SINGLE}
|
<li class="breadcrumb-item">
|
||||||
<div class="card-header context-main-bg">
|
<a href="{ROOT_URL}messages" class="text-decoration-none">
|
||||||
<h5 class="card-title context-main">{subject}</h5>
|
Messages
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="breadcrumb-item active" aria-current="page">
|
||||||
|
View
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
<div class="card panel-primary col-lg-8 mx-auto text-center">
|
||||||
|
{LOOP}
|
||||||
|
{SINGLE}
|
||||||
|
<div class="card-header context-second-bg">
|
||||||
|
<p class="card-title context-main text-center h3">{subject}</p>
|
||||||
|
</div>
|
||||||
|
{/SINGLE}
|
||||||
|
<div class="card-body context-other-bg">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4 col-lg-3 text-center">
|
||||||
|
<a href="{ROOT_URL}home/profile/{userFrom}" class="text-decoration-none">{userFromPretty}</a><br>
|
||||||
|
<img alt="User Pic" src="{ROOT_URL}{fromAvatar}" class="img-circle img-fluid mt-2">
|
||||||
</div>
|
</div>
|
||||||
{/SINGLE}
|
<div class="col-8 col-lg-9 text-start">
|
||||||
<div class="card-body context-second-bg">
|
{message}
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-3 col-lg-3 text-center">
|
|
||||||
<a href="{ROOT_URL}home/profile/{userFrom}">{userFrom}</a><br>
|
|
||||||
<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 class="card-footer context-main-bg">
|
</div>
|
||||||
{ADMIN}
|
<div class="card-footer context-second-bg">
|
||||||
{ID}
|
{ADMIN}
|
||||||
<span class="float-right">
|
<div class="d-flex justify-content-between">
|
||||||
|
<div class="">
|
||||||
|
{ID}
|
||||||
|
</div>
|
||||||
|
<div class="">
|
||||||
{DTC}{sent}{/DTC}
|
{DTC}{sent}{/DTC}
|
||||||
</span>
|
</div>
|
||||||
{/ADMIN}
|
</div>
|
||||||
</div>
|
{/ADMIN}
|
||||||
{/LOOP}
|
</div>
|
||||||
</div>
|
{/LOOP}
|
||||||
<form action="{ROOT_URL}messages/reply" method="post">
|
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
|
||||||
<input type="hidden" name="messageID" value="{PID}">
|
|
||||||
<button name="submit" value="reply" type="submit" class="btn btn-md btn-primary my-4">Reply</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
|
<form action="{ROOT_URL}messages/reply" method="post">
|
||||||
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
|
<input type="hidden" name="messageID" value="{PID}">
|
||||||
|
<button name="submit" value="reply" type="submit" class="btn btn-md btn-primary my-4">Reply</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,4 +1,4 @@
|
|||||||
<div class="dropdown nav-item mx-2">
|
<div class="dropdown nav-item mx-2 my-2 my-lg-0">
|
||||||
<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"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<h2>Outbox</h2>
|
<h2>Outbox</h2>
|
||||||
<form action="{ROOT_URL}messages/delete" method="post">
|
<form action="{ROOT_URL}messages/delete" method="post">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped text-center">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 20%">To</th>
|
<th style="width: 20%">To</th>
|
||||||
@ -15,10 +15,10 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="{ROOT_URL}home/profile/{userTo}">{userTo}</a></td>
|
<td><a href="{ROOT_URL}home/profile/{userTo}" class="text-decoration-none">{userToPretty}</a></td>
|
||||||
<td><a href="{ROOT_URL}messages/view/{ID}">{subject}</a></td>
|
<td><a href="{ROOT_URL}messages/view/{ID}" class="text-decoration-none">{subject}</a></td>
|
||||||
<td>{DTC date}{sent}{/DTC}</td>
|
<td>{DTC date}{sent}{/DTC}</td>
|
||||||
<td><a href="{ROOT_URL}messages/delete/{ID}">Delete</a></td>
|
<td><a href="{ROOT_URL}messages/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" value="{ID}" name="F_[]">
|
<input type="checkbox" value="{ID}" name="F_[]">
|
||||||
</td>
|
</td>
|
||||||
@ -33,5 +33,5 @@
|
|||||||
{/ALT}
|
{/ALT}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button>
|
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
|
||||||
</form>
|
</form>
|
@ -1,5 +1,5 @@
|
|||||||
<div class="context-main context-main-bg col-8 offset-2 my-3 p-3">
|
<div class="context-main context-main-bg col-8 offset-2 my-3 p-3">
|
||||||
<form action="" method="post" class="form-horizontal">
|
<form method="post">
|
||||||
<legend class="text-center">Reply</legend>
|
<legend class="text-center">Reply</legend>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
<legend class="text-center">Send Notification</legend>
|
<legend class="text-center">Send Notification</legend>
|
||||||
<hr>
|
<hr>
|
||||||
{ADMIN_BREADCRUMBS}
|
{ADMIN_BREADCRUMBS}
|
||||||
|
<form method="post" enctype="multipart/form-data">
|
||||||
<form action="" method="post" enctype="multipart/form-data">
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<!-- Group -->
|
<!-- Group -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
<div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4">
|
|
||||||
|
<div class="m-2 m-lg-4">
|
||||||
|
<div class="col-12 mx-5 col-sm-10 col-lg-8 mx-auto p-4 rounded shadow-sm context-main-bg">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<legend class="text-center">Notifications</legend>
|
<legend class="text-center">Notifications</legend>
|
||||||
@ -26,7 +28,7 @@
|
|||||||
{/LOOP}
|
{/LOOP}
|
||||||
{ALT}
|
{ALT}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="7" class=" context-main">
|
<td colspan="3" class="text-center context-main">
|
||||||
No Notifications
|
No Notifications
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -36,3 +38,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
@ -1,5 +1,5 @@
|
|||||||
<!-- Notifications Dropdown -->
|
<!-- Notifications Dropdown -->
|
||||||
<div class="dropdown nav-item mx-2">
|
<div class="dropdown nav-item mx-2 my-2 my-lg-0">
|
||||||
<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"
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<legend class="text-center">Add Subscriber</legend>
|
<legend class="text-center">Add Subscriber</legend>
|
||||||
<hr>
|
<hr>
|
||||||
{ADMIN_BREADCRUMBS}
|
{ADMIN_BREADCRUMBS}
|
||||||
<form action="" method="post">
|
<form method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<!-- Subject -->
|
<!-- Subject -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="col-md-5 offset-md-1 mb-3 text-center">
|
<div class="col-12 col-sm-6 col-md-3 offset-0 offset-lg-2 mb-3 text-center">
|
||||||
<h5 class="">Subscribe</h5>
|
<h5 class="">Subscribe</h5>
|
||||||
<div class="d-flex flex-column flex-sm-row gap-2 justify-content-center mx-auto">
|
<div class="d-flex flex-column w-75 w-sm-100 gap-2 justify-content-center mx-auto">
|
||||||
<form action="{ROOT_URL}subscribe/home" method="post" class="form-horizontal">
|
<form action="{ROOT_URL}subscribe/home" method="post">
|
||||||
<label for="email" class="visually-hidden">Email address</label>
|
<label for="email" class="visually-hidden">Email address</label>
|
||||||
<input name="email" id="email" type="email" class="form-control my-2" placeholder="Email address" autocomplete="email">
|
<input name="email" id="email" type="email" class="form-control my-2" placeholder="Email address" autocomplete="email">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<form action="{ROOT_URL}subscribe/home" method="post" class="form-horizontal">
|
<form action="{ROOT_URL}subscribe/home" method="post">
|
||||||
<input type="email" placeholder="Email" id="email" name="email" autocomplete="email">
|
<input type="email" placeholder="Email" id="email" name="email" autocomplete="email">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Submit</button><br>
|
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Submit</button><br>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<form action="{ROOT_URL}home/unsubscribe" method="post" class="form-horizontal">
|
<form action="{ROOT_URL}home/unsubscribe" method="post">
|
||||||
<input type="email" placeholder="Email" id="email" name="email">
|
<input type="email" placeholder="Email" id="email" name="email">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Submit</button><br>
|
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Submit</button><br>
|
||||||
|
@ -44,6 +44,11 @@ class AdminLoader extends DefaultLoader {
|
|||||||
$menu = Views::simpleView( 'nav.admin', $links );
|
$menu = Views::simpleView( 'nav.admin', $links );
|
||||||
$activeMenu = Navigation::activePageSelect( $menu, Input::get( 'url' ), false, true );
|
$activeMenu = Navigation::activePageSelect( $menu, Input::get( 'url' ), false, true );
|
||||||
Components::set( 'ADMIN_LINKS', $activeMenu );
|
Components::set( 'ADMIN_LINKS', $activeMenu );
|
||||||
|
|
||||||
|
$menu = Views::simpleView( 'nav.adminTop', Navigation::getMenuLinks( App::MAIN_MENU_NAME ) );
|
||||||
|
$activeMenu = Navigation::activePageSelect( $menu, Input::get( 'url' ), false, true );
|
||||||
|
Components::set( 'topNavLeft', $activeMenu );
|
||||||
|
|
||||||
Navigation::setCrumbComponent( 'ADMIN_BREADCRUMBS', Input::get( 'url' ) );
|
Navigation::setCrumbComponent( 'ADMIN_BREADCRUMBS', Input::get( 'url' ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
<!-- Center Element -->
|
<!-- Center Element -->
|
||||||
<div class="flex-grow-1 d-flex flex-column">
|
<div class="flex-grow-1 d-flex flex-column">
|
||||||
<!-- Top Navigation Bar -->
|
<!-- Top Navigation Bar -->
|
||||||
<div class="p-3 text-bg-dark">
|
<div class="p-2 text-bg-dark">
|
||||||
<div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
|
<div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
|
||||||
{topNavLeft}
|
{topNavLeft}
|
||||||
</div>
|
</div>
|
||||||
|
@ -73,9 +73,11 @@ class DefaultLoader extends Loader {
|
|||||||
$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>' );
|
||||||
}
|
}
|
||||||
Components::set( 'topNavRight', Template::parse( App::$topNavRight . '{STATUS}' ) );
|
Components::set( 'topNavRight', Template::parse( App::$topNavRight . '{STATUS}' ) );
|
||||||
|
|
||||||
$menu = 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 );
|
$activeMenu = Navigation::activePageSelect( $menu, Input::get( 'url' ), false, true );
|
||||||
Components::set( 'topNavLeft', $activeMenu );
|
Components::set( 'topNavLeft', $activeMenu );
|
||||||
|
|
||||||
Components::set( 'colorSelect', Views::simpleView( 'forms.colorSelect' ) );
|
Components::set( 'colorSelect', Views::simpleView( 'forms.colorSelect' ) );
|
||||||
Components::set( 'iconSelect', Views::simpleView( 'forms.iconSelect' ) );
|
Components::set( 'iconSelect', Views::simpleView( 'forms.iconSelect' ) );
|
||||||
Navigation::setCrumbComponent( 'BREADCRUMB', Input::get( 'url' ) );
|
Navigation::setCrumbComponent( 'BREADCRUMB', Input::get( 'url' ) );
|
||||||
|
@ -39,20 +39,45 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Navigation -->
|
<!-- Navigation -->
|
||||||
<header class="p-3 text-bg-dark">
|
<header class="p-3 text-bg-dark">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
|
<div class="d-flex align-items-center position-relative">
|
||||||
<img src="{ROOT_URL}{LOGO}" class="bi me-2" width="40" height="32" alt="{SITENAME} Logo" aria-label="{SITENAME} Logo">
|
<!-- Navbar Toggler (Left) -->
|
||||||
<a href="/" class="d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none">
|
|
||||||
{SITENAME}
|
<!-- Centered Logo (Now inside normal document flow) -->
|
||||||
</a>
|
<a href="/" class="align-items-center text-white text-decoration-none d-flex d-md-none">
|
||||||
{topNavLeft}
|
<img src="{ROOT_URL}{LOGO}" width="40" height="32" alt="{SITENAME} Logo" class="bi">
|
||||||
<div class="text-end d-flex align-items-center">
|
</a>
|
||||||
{topNavRight}
|
|
||||||
</div>
|
<!-- Logo (Normal Position for Large Screens) -->
|
||||||
</div>
|
<a href="/" class="align-items-center text-white text-decoration-none d-none d-md-flex">
|
||||||
</div>
|
<img src="{ROOT_URL}{LOGO}" width="40" height="32" alt="{SITENAME} Logo" class="bi">
|
||||||
</header>
|
</a>
|
||||||
|
|
||||||
|
<div class="navbar-expand-md flex-grow-1">
|
||||||
|
<div class="collapse navbar-collapse d-md-flex" id="mainMenu">
|
||||||
|
<!-- Centered Navigation -->
|
||||||
|
<div class="d-none d-md-block d-flex justify-content-center position-absolute start-50 translate-middle-x">
|
||||||
|
{topNavLeft}
|
||||||
|
</div>
|
||||||
|
<div class="d-flex justify-content-center flex-grow-1 d-md-none">
|
||||||
|
{topNavLeft}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Right-Side Content (Push to End) -->
|
||||||
|
<div class="d-flex flex-row justify-content-center align-items-center mt-3 mt-md-0 ms-md-auto">
|
||||||
|
{topNavRight}
|
||||||
|
</div>
|
||||||
|
</div> <!-- End Collapse -->
|
||||||
|
</div> <!-- End Navbar Expand -->
|
||||||
|
|
||||||
|
<button class="me-3 d-md-none btn btn-md btn-outline-light" type="button" data-bs-toggle="collapse" data-bs-target="#mainMenu" aria-controls="mainMenu" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<i class="fa fa-bars"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</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 -->
|
||||||
|
@ -1,16 +1,27 @@
|
|||||||
<div class="col-8 mx-auto p-4 rounded shadow-sm context-main-bg my-4">
|
<div class="m-2 m-lg-4">
|
||||||
<h2 class="text-center mb-4">About {SITENAME}</h2>
|
<div class="col-12 mx-5 col-sm-10 col-lg-8 mx-auto p-4 rounded shadow-sm context-main-bg">
|
||||||
<p class="lead">
|
<h2 class="text-center mb-4">About {SITENAME}</h2>
|
||||||
{SITENAME} was built out of a need to create and manage my own web applications.
|
<p class="lead text-center text-lg-start">
|
||||||
</p>
|
{SITENAME} was built out of a need to create and manage web applications.
|
||||||
<p class="text-muted">
|
At the time, I had used wordpress but I didn't want or even need any of the blog functionality.
|
||||||
Right now, this entire system was built and managed by myself. As stated, I have used my own version of this for years, but translating it to a publicly available product is not a 1-to-1 job. There may be bugs or issues encountered while you use the product. I can't guarantee a fix for every need in every case immediately, but I do actively keep track of bugs and work hard to ensure everyone has a great experience using the app.
|
No matter what plugins you add, no matter how you customize layout, wordpress is still a blog at its core.
|
||||||
</p>
|
There is nothing inherently wrong with a blog, but when you start from a blog, everything is a post, or a plugin.
|
||||||
<p>
|
Under the hood, wordpress is going to run how wordpress wants, as a web interface for accessing text records.
|
||||||
If you encounter any bugs, feel free to report them <a href="/bugreport" class="text-decoration-none">here</a>. Likewise, there are forms for feedback, reviews, suggestions, and a general contact form. Thanks for taking the time to check out the product!
|
</p>
|
||||||
</p>
|
<p class="text-center text-lg-start">
|
||||||
<div class="text-center mt-4 pb-4">
|
The Tempus Project was always intended to be a web application, not a blog.
|
||||||
{loggedin}<a href="/bugreport" class="btn btn-primary btn-lg px-5">Report a Bug</a>{/loggedin}
|
</p>
|
||||||
<a href="/contact" class="btn btn-outline-secondary btn-lg px-5 ms-3">Contact Us</a>
|
<p class="text-muted text-center text-lg-start">
|
||||||
|
Right now, this entire system was built and managed by myself. As stated, I have used my own version of this for years, but translating it to a publicly available product is not a 1-to-1 job. There may be bugs or issues encountered while you use the product. I can't guarantee a fix for every need in every case immediately, but I do actively keep track of bugs and work hard to ensure everyone has a great experience using the app.
|
||||||
|
</p>
|
||||||
|
<p class="text-center text-lg-start">
|
||||||
|
If you encounter any bugs, feel free to report them <a href="/bugreport" class="text-decoration-none">here</a>. Likewise, there are forms for feedback, reviews, suggestions, and a general contact form. Thanks for taking the time to check out the product!
|
||||||
|
</p>
|
||||||
|
<div class="text-center mt-4 pb-4">
|
||||||
|
{loggedin}
|
||||||
|
<a href="/bugreport" class="btn btn-primary px-3 btn-lg m-2">Report a Bug</a>
|
||||||
|
{/loggedin}
|
||||||
|
<a href="/contact" class="btn btn-outline-primary px-3 m-2 btn-lg">Contact Us</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -7,7 +7,7 @@
|
|||||||
Please be very careful with this feature. This form allows you to send an email (formatted within the default site email template) to registered emails from various sources including newsletter subscribers, call to action subscribers, and all registered user accounts.
|
Please be very careful with this feature. This form allows you to send an email (formatted within the default site email template) to registered emails from various sources including newsletter subscribers, call to action subscribers, and all registered user accounts.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<form action="" method="post">
|
<form method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<!-- Subject -->
|
<!-- Subject -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<legend class="text-center">Settings</legend>
|
<legend class="text-center">Settings</legend>
|
||||||
<hr>
|
<hr>
|
||||||
{ADMIN_BREADCRUMBS}
|
{ADMIN_BREADCRUMBS}
|
||||||
<form action="" method="post" class="form-horizontal" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
{configForm}
|
{configForm}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<legend class="text-center">Create Token</legend>
|
<legend class="text-center">Create Token</legend>
|
||||||
<hr>
|
<hr>
|
||||||
{ADMIN_BREADCRUMBS}
|
{ADMIN_BREADCRUMBS}
|
||||||
<form action="" method="post" class="container py-4">
|
<form method="post" class="container py-4">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="name" class="col-lg-5 col-form-label text-end">Name</label>
|
<label for="name" class="col-lg-5 col-form-label text-end">Name</label>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<legend class="text-center">Edit Token</legend>
|
<legend class="text-center">Edit Token</legend>
|
||||||
<hr>
|
<hr>
|
||||||
{ADMIN_BREADCRUMBS}
|
{ADMIN_BREADCRUMBS}
|
||||||
<form action="" method="post" class="container py-4">
|
<form method="post" class="container py-4">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="name" class="col-lg-5 col-form-label text-end">Name</label>
|
<label for="name" class="col-lg-5 col-form-label text-end">Name</label>
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="password" class="col-lg-6 col-form-label text-end">Password:</label>
|
<label for="password" class="col-lg-6 col-form-label text-end">Password:</label>
|
||||||
<div class="col-lg-2">
|
<div class="col-lg-2">
|
||||||
<input type="password" class="form-control" name="password" id="password" value="" required>
|
<input type="password" class="form-control" name="password" id="password" value="">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -42,7 +42,7 @@
|
|||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="password2" class="col-lg-6 col-form-label text-end">Re-Enter Password:</label>
|
<label for="password2" class="col-lg-6 col-form-label text-end">Re-Enter Password:</label>
|
||||||
<div class="col-lg-2">
|
<div class="col-lg-2">
|
||||||
<input type="password" class="form-control" name="password2" id="password2" value="" required>
|
<input type="password" class="form-control" name="password2" id="password2" value="">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
{LOOP}
|
{LOOP}
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center">{ID}</td>
|
<td align="center">{ID}</td>
|
||||||
<td><a href='{ROOT_URL}admin/users/view/{ID}' class="text-decoration-none">{username}</a></td>
|
<td><a href='{ROOT_URL}admin/users/view/{ID}' class="text-decoration-none">{usernamePretty}</a></td>
|
||||||
<td>{DTC date}{registered}{/DTC}</td>
|
<td>{DTC date}{registered}{/DTC}</td>
|
||||||
<td><a href="{ROOT_URL}admin/users/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
|
<td><a href="{ROOT_URL}admin/users/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}admin/users/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<td><a href="{ROOT_URL}admin/users/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<div class="card shadow">
|
<div class="card shadow">
|
||||||
<!-- Card Header -->
|
<!-- Card Header -->
|
||||||
<div class="card-header text-center bg-dark text-white">
|
<div class="card-header text-center bg-dark text-white">
|
||||||
<h3 class="card-title mb-0">{username}</h3>
|
<h3 class="card-title mb-0">{usernamePretty}</h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Card Body -->
|
<!-- Card Body -->
|
||||||
@ -27,7 +27,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Group:</th>
|
<th scope="row">Group:</th>
|
||||||
<td><a href="{ROOT_URL}admin/groups/view/{userGroup}">{groupName}</a></td>
|
<td><a href="{ROOT_URL}admin/groups/view/{userGroup}" class="text-decoration-none">{groupName}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{/ADMIN}
|
{/ADMIN}
|
||||||
<tr>
|
<tr>
|
||||||
@ -45,7 +45,7 @@
|
|||||||
{ADMIN}
|
{ADMIN}
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Email:</th>
|
<th scope="row">Email:</th>
|
||||||
<td><a href="mailto:{email}">{email}</a></td>
|
<td><a href="mailto:{email}" class="text-decoration-none">{email}</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">User ID:</th>
|
<th scope="row">User ID:</th>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<h1 class="mb-4">Email Confirmation</h1>
|
<h1 class="mb-4">Email Confirmation</h1>
|
||||||
<hr>
|
<hr>
|
||||||
<p>Please enter the confirmation code you received in your email.</p>
|
<p>Please enter the confirmation code you received in your email.</p>
|
||||||
<form action="" method="post" class="">
|
<form method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div data-mdb-input-init class="form-outline mb-4 col-2 offset-5">
|
<div data-mdb-input-init class="form-outline mb-4 col-2 offset-5">
|
||||||
<input class="form-control" type="text" name="confirmationCode" id="confirmationCode" placeholder="Confirmation Code">
|
<input class="form-control" type="text" name="confirmationCode" id="confirmationCode" placeholder="Confirmation Code">
|
||||||
@ -12,4 +12,4 @@
|
|||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Submit</button><br>
|
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Submit</button><br>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
@ -2,7 +2,7 @@
|
|||||||
<h1 class="mb-4">Re-Send Confirmation</h1>
|
<h1 class="mb-4">Re-Send Confirmation</h1>
|
||||||
<hr>
|
<hr>
|
||||||
<p>Please click the resend button to resend your email confirmation. Don't forget to check the spam folder!</p>
|
<p>Please click the resend button to resend your email confirmation. Don't forget to check the spam folder!</p>
|
||||||
<form action="" method="post" class="">
|
<form method="post">
|
||||||
<input type="hidden" name="resendConfirmation" value="true">
|
<input type="hidden" name="resendConfirmation" value="true">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Resend Confirmation</button><br>
|
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary center-block">Resend Confirmation</button><br>
|
@ -1,5 +1,5 @@
|
|||||||
<div class="col-8 mx-auto p-4 rounded shadow-sm mb-5 context-main-bg mt-4 text-center">
|
<div class="col-8 mx-auto p-4 rounded shadow-sm mb-5 context-main-bg mt-4 text-center">
|
||||||
<form action="" method="post">
|
<form method="post">
|
||||||
<legend class=" my-2">Lost and Found</legend>
|
<legend class=" my-2">Lost and Found</legend>
|
||||||
<p class="col-8 offset-2">You can begin the process of recovering your account here. Provide your username, or email address and instructions for ressetting your password will be mailed to you shortly.</p>
|
<p class="col-8 offset-2">You can begin the process of recovering your account here. Provide your username, or email address and instructions for ressetting your password will be mailed to you shortly.</p>
|
||||||
<fieldset>
|
<fieldset>
|
@ -2,7 +2,7 @@
|
|||||||
<h1 class="mb-4">Change Password</h1>
|
<h1 class="mb-4">Change Password</h1>
|
||||||
<hr>
|
<hr>
|
||||||
<p>Please enter the confirmation code you received in your email.</p>
|
<p>Please enter the confirmation code you received in your email.</p>
|
||||||
<form action="" method="post" class="">
|
<form method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div data-mdb-input-init class="form-outline mb-4 col-2 offset-5">
|
<div data-mdb-input-init class="form-outline mb-4 col-2 offset-5">
|
||||||
<input class="form-control" type="password" name="password" id="password" placeholder="New Password">
|
<input class="form-control" type="password" name="password" id="password" placeholder="New Password">
|
@ -2,7 +2,7 @@
|
|||||||
<h1 class="mb-4">Change Password</h1>
|
<h1 class="mb-4">Change Password</h1>
|
||||||
<hr>
|
<hr>
|
||||||
<p>Please enter the code you received in your email. If you did not receive the code, please check your spam filter or <a href="{ROOT_URL}">click here</a> to request a new reset code.</p>
|
<p>Please enter the code you received in your email. If you did not receive the code, please check your spam filter or <a href="{ROOT_URL}">click here</a> to request a new reset code.</p>
|
||||||
<form action="" method="post" class="">
|
<form method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div data-mdb-input-init class="form-outline mb-4 col-2 offset-5">
|
<div data-mdb-input-init class="form-outline mb-4 col-2 offset-5">
|
||||||
<input class="form-control" type="text" name="resetCode" id="resetCode" placeholder="Password Reset Code">
|
<input class="form-control" type="text" name="resetCode" id="resetCode" placeholder="Password Reset Code">
|
76
app/views/auth/register.html
Normal file
76
app/views/auth/register.html
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="container py-4 context-main-bg my-2 my-lg-4 mx-2 mx-sm-auto">
|
||||||
|
<h2 class="text-center mb-4">Create an Account</h2>
|
||||||
|
<form method="post">
|
||||||
|
<fieldset>
|
||||||
|
<!-- Username -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="username" class="col-lg-6 col-form-label text-lg-end">Username:</label>
|
||||||
|
<div class="col-lg-2">
|
||||||
|
<input type="text" class="form-control" name="username" id="username" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Email -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="email" class="col-lg-6 col-form-label text-lg-end">Email:</label>
|
||||||
|
<div class="col-lg-2">
|
||||||
|
<input type="email" class="form-control" name="email" id="email" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Re-enter Email -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="email2" class="col-lg-6 col-form-label text-lg-end">Re-Enter Email:</label>
|
||||||
|
<div class="col-lg-2">
|
||||||
|
<input type="email" class="form-control" name="email2" id="email2" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Password -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="password" class="col-lg-6 col-form-label text-lg-end">Password:</label>
|
||||||
|
<div class="col-lg-2">
|
||||||
|
<input type="password" class="form-control" name="password" id="password" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Re-enter Password -->
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label for="password2" class="col-lg-6 col-form-label text-lg-end">Re-Enter Password:</label>
|
||||||
|
<div class="col-lg-2">
|
||||||
|
<input type="password" class="form-control" name="password2" id="password2" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Terms of Service -->
|
||||||
|
<div class="mb-3 text-center">
|
||||||
|
<div class="">
|
||||||
|
<input type="checkbox" class="form-check-input" name="terms" id="terms" value="1" required>
|
||||||
|
<label for="terms" class="form-check-label">
|
||||||
|
I have read and agree to the <a href="/home/terms" class="text-primary text-decoration-none">Terms of Service</a>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="terms mt-2 mx-auto">
|
||||||
|
{TERMS}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Hidden Token -->
|
||||||
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
|
|
||||||
|
<!-- Submit Button -->
|
||||||
|
<div class="text-center">
|
||||||
|
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Sign up</button>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
@ -1,5 +0,0 @@
|
|||||||
<div class="copy">
|
|
||||||
<div class="col-lg-12 col-md-12 col-sm-12 text-center">
|
|
||||||
<p class="text-muted">Powered by <a href="https://thetempusproject.com">The Tempus Project</a>.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -1,4 +1,4 @@
|
|||||||
<div class="col-6 col-md-2 mb-3 text-center">
|
<div class="col-12 col-sm-6 col-md-3 col-lg-2 mb-3 text-center">
|
||||||
<h5>More Info</h5>
|
<h5>More Info</h5>
|
||||||
<ul class="nav flex-column">
|
<ul class="nav flex-column">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
|
@ -1,11 +1,23 @@
|
|||||||
<div class="container border-top border-white mt-auto">
|
<div class="container mt-auto">
|
||||||
<footer class="pt-4">
|
<footer class="pt-4">
|
||||||
<div class="row">
|
<!-- Footer Toggle Button (Visible on Small Screens) -->
|
||||||
{FOOTER_LEFT}
|
<div class="text-center border-top context-main-border">
|
||||||
{FOOTER_CENTER}
|
<button class="d-md-none my-3 btn btn-lg context-main context-main-border" type="button" data-bs-toggle="collapse" data-bs-target="#footerMenu" aria-controls="footerMenu" aria-expanded="false" aria-label="Toggle footer navigation">
|
||||||
{FOOTER_RIGHT}
|
<i class="fa fa-bars"></i>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-column flex-sm-row justify-content-between py-3 mt-2 border-top border-white">
|
|
||||||
|
<!-- Collapsible Footer Content -->
|
||||||
|
<div class="collapse d-md-block my-4" id="footerMenu">
|
||||||
|
<div class="row">
|
||||||
|
{FOOTER_LEFT}
|
||||||
|
{FOOTER_CENTER}
|
||||||
|
{FOOTER_RIGHT}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Copy & Social (Always Visible) -->
|
||||||
|
<div class="d-flex flex-column flex-md-row justify-content-md-between py-3 border-top context-main-border">
|
||||||
{COPY}
|
{COPY}
|
||||||
{SOCIAL}
|
{SOCIAL}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1 +1,3 @@
|
|||||||
<span>© 2025 {SITENAME}, Powered by <a href="https://thetempusproject.com" class="text-decoration-none">The Tempus Project</a>.</span>
|
<div class="d-flex justify-content-center justify-content-md-start text-center text-md-start">
|
||||||
|
<span>© 2025 {SITENAME}, Powered by <a href="https://thetempusproject.com" class="text-decoration-none">The Tempus Project</a></span>
|
||||||
|
</div>
|
@ -1,4 +1,4 @@
|
|||||||
<div class="col-6 col-md-2 mb-3 text-center">
|
<div class="col-12 col-sm-6 col-md-3 col-lg-2 mb-3 text-center">
|
||||||
<h5>Contact Us</h5>
|
<h5>Contact Us</h5>
|
||||||
<ul class="nav flex-column">
|
<ul class="nav flex-column">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<div class="col-6 col-md-2 mb-3 text-center">
|
<div class="col-12 col-sm-6 col-md-3 col-lg-2 mb-3 text-center">
|
||||||
<h5>Dark Mode</h5>
|
<h5>Dark Mode</h5>
|
||||||
<div class="material-switch px-4 mt-2">
|
<div class="material-switch px-4 mt-2">
|
||||||
<input name="dark-mode-toggle" type="checkbox" id="dark-mode-toggle" class="form-check-input">
|
<input name="dark-mode-toggle" type="checkbox" id="dark-mode-toggle" class="form-check-input">
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
<div class="d-flex justify-content-center justify-content-md-end mt-3 mt-md-0">
|
||||||
<ul class="list-unstyled d-flex mb-0">
|
<ul class="list-unstyled d-flex mb-0">
|
||||||
<li class="ms-3">
|
<li class="ms-3">
|
||||||
<a class="context-main" href="{ROOT_URL}fb">
|
<a class="context-main" href="{ROOT_URL}fb">
|
||||||
@ -24,4 +25,5 @@
|
|||||||
<span class="fa-brands fa-fw fa-github"></span>
|
<span class="fa-brands fa-fw fa-github"></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
@ -3,7 +3,7 @@
|
|||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<legend class="my-3 text-center">Configure</legend>
|
<legend class="my-3 text-center">Configure</legend>
|
||||||
<form action="" method="post" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="mb-3 col-md-4 offset-md-4">
|
<div class="mb-3 col-md-4 offset-md-4">
|
||||||
<label for="siteName" class="form-label">Site Name:</label>
|
<label for="siteName" class="form-label">Site Name:</label>
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
{installer-nav}
|
|
||||||
<form action="" method="post" class="form-horizontal">
|
|
||||||
<legend>Install</legend>
|
|
||||||
<fieldset>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="siteName" class="col-lg-6 control-label">Site Name:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input class="form-control" type="text" name="siteName" id="siteName" value="{name}">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="dbHost" class="col-lg-6 control-label">Database Host:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input class="form-control" type="text" name="dbHost" id="dbHost" value="{dbHost}">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="dbName" class="col-lg-6 control-label">Database Name:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input class="form-control" type="text" name="dbName" id="dbName" value="{dbName}">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="dbUsername" class="col-lg-6 control-label">Database Username:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input class="form-control" type="text" name="dbUsername" id="dbUsername" value="{dbUsername}">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="dbPassword" class="col-lg-6 control-label">Database Password:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input class="form-control" type="password" name="dbPassword" id="dbPassword">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
|
||||||
<button class="btn btn-lg btn-primary center-block" type="submit" name="submit" value="submit">Install</button><br>
|
|
||||||
</form>
|
|
@ -3,7 +3,7 @@
|
|||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<p class="my-4">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.</p>
|
<p class="my-4">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.</p>
|
||||||
<form action="" method="post" class="form-horizontal">
|
<form method="post">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<p class="my-4">
|
<p class="my-4">
|
||||||
The Tempus Project was built to utilize all of the plugins provided with the installer. You can choose not to enable any one of them, but it may negatively impact the operation of your site.
|
The Tempus Project was built to utilize all of the plugins provided with the installer. You can choose not to enable any one of them, but it may negatively impact the operation of your site.
|
||||||
</p>
|
</p>
|
||||||
<form action="" method="post" class="form-horizontal">
|
<form method="post">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<p class="my-4">
|
<p class="my-4">
|
||||||
Some models such as groups will need additional database resources and configurations to function properly. In this step, we will install those features.
|
Some models such as groups will need additional database resources and configurations to function properly. In this step, we will install those features.
|
||||||
</p>
|
</p>
|
||||||
<form action="" method="post" class="">
|
<form method="post">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
<div class="text-center my-3">
|
<div class="text-center my-3">
|
||||||
<button class="btn btn-lg btn-primary center-block" type="submit" name="submit" value="submit">Install Resources</button>
|
<button class="btn btn-lg btn-primary center-block" type="submit" name="submit" value="submit">Install Resources</button>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<p>In this step, we will attempt to generate the appropriate files for Apache servers.</p>
|
<p>In this step, we will attempt to generate the appropriate files for Apache servers.</p>
|
||||||
<h3>Nginx Users</h3>
|
<h3>Nginx Users</h3>
|
||||||
<p>If you are using Nginx, you will need to update your server's configuration manually. Please see the documentation, for convenience, an example configuration has been provided with TheTempusProject and can be found in the app/resources directory.</p>
|
<p>If you are using Nginx, you will need to update your server's configuration manually. Please see the documentation, for convenience, an example configuration has been provided with TheTempusProject and can be found in the app/resources directory.</p>
|
||||||
<form action="" method="post" class="form-horizontal">
|
<form method="post">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<button class="btn btn-lg btn-primary center-block" type="submit" name="submit" value="submit">Generate</button><br>
|
<button class="btn btn-lg btn-primary center-block" type="submit" name="submit" value="submit">Generate</button><br>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{installer-nav}
|
{installer-nav}
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-10 pt-4">
|
<div class="col-md-10 pt-4">
|
||||||
<form action="" method="post" class="form-horizontal">
|
<form method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="mb-3 col-md-4 offset-md-4">
|
<div class="mb-3 col-md-4 offset-md-4">
|
||||||
<label for="newUsername" class="form-label">Username:</label>
|
<label for="newUsername" class="form-label">Username:</label>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<li>mysql_pdo must be enabled</li>
|
<li>mysql_pdo must be enabled</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<form action="" method="post" class="form-horizontal">
|
<form 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">Check</button><br>
|
<button class="btn btn-lg btn-primary center-block" type="submit" name="submit" value="submit">Check</button><br>
|
||||||
</form>
|
</form>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<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.
|
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>
|
||||||
<form action="" method="post">
|
<form 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" id="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>
|
||||||
|
13
app/views/nav/adminTop.html
Normal file
13
app/views/nav/adminTop.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<nav class="navbar navbar-expand col-12 col-lg-auto justify-content-center mx-auto">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
{LOOP}
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="{url}" class="nav-link px-2 text-white">
|
||||||
|
{text}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{/LOOP}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
@ -1,9 +1,9 @@
|
|||||||
<nav class="navbar navbar-expand col-12 col-lg-auto mb-2 justify-content-center mb-md-0 mx-auto">
|
<nav class="navbar navbar-md-expand justify-content-center">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<ul class="navbar-nav">
|
<ul class="navbar-nav mx-auto">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="{url}" class="nav-link px-2 text-white">
|
<a href="{url}" class="nav-link text-white">
|
||||||
{text}
|
{text}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -1,15 +1,10 @@
|
|||||||
<!-- User Dropdown -->
|
<!-- User Dropdown -->
|
||||||
<div class="dropdown nav-item mx-2">
|
<div class="dropdown nav-item mx-2 my-2 my-lg-0">
|
||||||
<a
|
<a href="#" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle" id="userDropdown" data-bs-toggle="dropdown">
|
||||||
href="#"
|
<img src="{ROOT_URL}{AVATAR}" alt="User profile image" width="32" height="32" class="rounded-circle me-2">
|
||||||
class="d-flex align-items-center text-white text-decoration-none dropdown-toggle"
|
<strong>{USERNAME}</strong>
|
||||||
id="userDropdown"
|
|
||||||
data-bs-toggle="dropdown"
|
|
||||||
aria-haspopup="true"
|
|
||||||
aria-expanded="false">
|
|
||||||
<img src="{ROOT_URL}{AVATAR}" alt="" width="32" height="32" class="rounded-circle me-2"> <strong class="ms-2">{USERNAME}</strong>
|
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end text-small shadow" aria-labelledby="userDropdown">
|
<ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end text-small shadow">
|
||||||
<li><a href="{ROOT_URL}usercp" class="dropdown-item"><i class="fa fa-fw fa-user"></i> Profile</a></li>
|
<li><a href="{ROOT_URL}usercp" class="dropdown-item"><i class="fa fa-fw fa-user"></i> Profile</a></li>
|
||||||
{topNavRightDropdown}
|
{topNavRightDropdown}
|
||||||
<li><a href="{ROOT_URL}usercp/settings" class="dropdown-item"><i class="fa fa-fw fa-gear"></i> Settings</a></li>
|
<li><a href="{ROOT_URL}usercp/settings" class="dropdown-item"><i class="fa fa-fw fa-gear"></i> Settings</a></li>
|
||||||
|
@ -3,12 +3,10 @@
|
|||||||
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="userDropdown"
|
id="userDropdown"
|
||||||
data-bs-toggle="dropdown"
|
data-bs-toggle="dropdown">
|
||||||
aria-haspopup="true"
|
|
||||||
aria-expanded="false">
|
|
||||||
<i class="fa fa-user"></i>
|
<i class="fa fa-user"></i>
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-menu dropdown-menu-dark dropdown-menu-end text-small shadow" aria-labelledby="userDropdown" style="min-width: 300px;">
|
<div class="dropdown-menu dropdown-menu-dark dropdown-menu-end text-small shadow" style="min-width: 300px;">
|
||||||
<form method="post" action="{ROOT_URL}home/login" id="signin" class="px-4 py-3">
|
<form method="post" action="{ROOT_URL}home/login" id="signin" class="px-4 py-3">
|
||||||
<input type="hidden" name="rurl" id="rurl" value="{CURRENT_URL}">
|
<input type="hidden" name="rurl" id="rurl" value="{CURRENT_URL}">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<ul class="nav nav-tabs justify-content-center my-3" role="tablist">
|
<ul class="nav nav-tabs justify-content-center mt-4" role="tablist">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<li class="nav-item context-main-bg mx-1"><a href="{url}" class="nav-link context-main">{name}</a></li>
|
<li class="nav-item context-main-bg mx-md-1"><a href="{url}" class="nav-link context-main">{name}</a></li>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
</ul>
|
</ul>
|
@ -1,205 +1,319 @@
|
|||||||
<div class="context-main-bg p-4 my-5">
|
<div class="m-2 m-lg-4">
|
||||||
<h1>Privacy Policy</h1>
|
<div class="col-12 col-lg-8 col-md-10 mx-auto p-2 p-lg-4 rounded shadow-sm context-main-bg">
|
||||||
<hr>
|
<h2 class="text-center mb-4">Privacy Policy</h2>
|
||||||
<p>Last updated: December 09, 2024</p>
|
<hr>
|
||||||
<p>This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.</p>
|
<p>Last updated: December 09, 2024</p>
|
||||||
<p>We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the <a href="https://www.termsfeed.com/privacy-policy-generator/" target="_blank" class="text-decoration-none">Privacy Policy Generator</a>.</p>
|
<p>This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your
|
||||||
<h2>Interpretation and Definitions</h2>
|
information when You use the Service and tells You about Your privacy rights and how the law protects You.</p>
|
||||||
<h3>Interpretation</h3>
|
<p>We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection
|
||||||
<p>The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.</p>
|
and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the
|
||||||
<h3>Definitions</h3>
|
help of the <a href="https://www.termsfeed.com/privacy-policy-generator/" target="_blank"
|
||||||
<p>For the purposes of this Privacy Policy:</p>
|
class="text-decoration-none">Privacy Policy Generator</a>.</p>
|
||||||
<ul>
|
<h2>Interpretation and Definitions</h2>
|
||||||
<li>
|
<h3>Interpretation</h3>
|
||||||
<p><strong>Account</strong> means a unique account created for You to access our Service or parts of our Service.</p>
|
<p>The words of which the initial letter is capitalized have meanings defined under the following conditions. The
|
||||||
</li>
|
following definitions shall have the same meaning regardless of whether they appear in singular or in plural.
|
||||||
<li>
|
</p>
|
||||||
<p><strong>Affiliate</strong> means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.</p>
|
<h3>Definitions</h3>
|
||||||
</li>
|
<p>For the purposes of this Privacy Policy:</p>
|
||||||
<li>
|
<ul>
|
||||||
<p><strong>Application</strong> refers to {SITENAME}, the software program provided by the Company.</p>
|
<li>
|
||||||
</li>
|
<p><strong>Account</strong> means a unique account created for You to access our Service or parts of our
|
||||||
<li>
|
Service.</p>
|
||||||
<p><strong>Company</strong> (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to {SITENAME}.</p>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p><strong>Affiliate</strong> means an entity that controls, is controlled by or is under common control
|
||||||
<p><strong>Cookies</strong> are small files that are placed on Your computer, mobile device or any other device by a website, containing the details of Your browsing history on that website among its many uses.</p>
|
with a party, where "control" means ownership of 50% or more of the shares, equity interest or
|
||||||
</li>
|
other securities entitled to vote for election of directors or other managing authority.</p>
|
||||||
<li>
|
</li>
|
||||||
<p><strong>Country</strong> refers to: Georgia, United States</p>
|
<li>
|
||||||
</li>
|
<p><strong>Application</strong> refers to {SITENAME}, the software program provided by the Company.</p>
|
||||||
<li>
|
</li>
|
||||||
<p><strong>Device</strong> means any device that can access the Service such as a computer, a cellphone or a digital tablet.</p>
|
<li>
|
||||||
</li>
|
<p><strong>Company</strong> (referred to as either "the Company", "We", "Us"
|
||||||
<li>
|
or "Our" in this Agreement) refers to {SITENAME}.</p>
|
||||||
<p><strong>Personal Data</strong> is any information that relates to an identified or identifiable individual.</p>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p><strong>Cookies</strong> are small files that are placed on Your computer, mobile device or any other
|
||||||
<p><strong>Service</strong> refers to the Application or the Website or both.</p>
|
device by a website, containing the details of Your browsing history on that website among its many
|
||||||
</li>
|
uses.</p>
|
||||||
<li>
|
</li>
|
||||||
<p><strong>Service Provider</strong> means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used.</p>
|
<li>
|
||||||
</li>
|
<p><strong>Country</strong> refers to: Georgia, United States</p>
|
||||||
<li>
|
</li>
|
||||||
<p><strong>Third-party Social Media Service</strong> refers to any website or any social network website through which a User can log in or create an account to use the Service.</p>
|
<li>
|
||||||
</li>
|
<p><strong>Device</strong> means any device that can access the Service such as a computer, a cellphone or a
|
||||||
<li>
|
digital tablet.</p>
|
||||||
<p><strong>Usage Data</strong> refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).</p>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
<li>
|
<p><strong>Personal Data</strong> is any information that relates to an identified or identifiable
|
||||||
<p><strong>Website</strong> refers to {SITENAME}, accessible from <a href="{SITE_URL}" rel="external nofollow noopener" class="text-decoration-none" target="_blank">{SITE_URL}</a></p>
|
individual.</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p><strong>You</strong> means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.</p>
|
<p><strong>Service</strong> refers to the Application or the Website or both.</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
<li>
|
||||||
<h2>Collecting and Using Your Personal Data</h2>
|
<p><strong>Service Provider</strong> means any natural or legal person who processes the data on behalf of
|
||||||
<h3>Types of Data Collected</h3>
|
the Company. It refers to third-party companies or individuals employed by the Company to facilitate the
|
||||||
<h4>Personal Data</h4>
|
Service, to provide the Service on behalf of the Company, to perform services related to the Service or
|
||||||
<p>While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:</p>
|
to assist the Company in analyzing how the Service is used.</p>
|
||||||
<ul>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>Email address</p>
|
<p><strong>Third-party Social Media Service</strong> refers to any website or any social network website
|
||||||
</li>
|
through which a User can log in or create an account to use the Service.</p>
|
||||||
<li>
|
</li>
|
||||||
<p>First name and last name</p>
|
<li>
|
||||||
</li>
|
<p><strong>Usage Data</strong> refers to data collected automatically, either generated by the use of the
|
||||||
<li>
|
Service or from the Service infrastructure itself (for example, the duration of a page visit).</p>
|
||||||
<p>Usage Data</p>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
</ul>
|
<p><strong>Website</strong> refers to {SITENAME}, accessible from <a href="{SITE_URL}"
|
||||||
<h4>Usage Data</h4>
|
rel="external nofollow noopener" class="text-decoration-none" target="_blank">{SITE_URL}</a></p>
|
||||||
<p>Usage Data is collected automatically when using the Service.</p>
|
</li>
|
||||||
<p>Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those pages, unique device identifiers and other diagnostic data.</p>
|
<li>
|
||||||
<p>When You access the Service by or through a mobile device, We may collect certain information automatically, including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device identifiers and other diagnostic data.</p>
|
<p><strong>You</strong> means the individual accessing or using the Service, or the company, or other legal
|
||||||
<p>We may also collect information that Your browser sends whenever You visit our Service or when You access the Service by or through a mobile device.</p>
|
entity on behalf of which such individual is accessing or using the Service, as applicable.</p>
|
||||||
<h4>Information from Third-Party Social Media Services</h4>
|
</li>
|
||||||
<p>The Company allows You to create an account and log in to use the Service through the following Third-party Social Media Services:</p>
|
</ul>
|
||||||
<ul>
|
<h2>Collecting and Using Your Personal Data</h2>
|
||||||
<li>Google</li>
|
<h3>Types of Data Collected</h3>
|
||||||
<li>Facebook</li>
|
<h4>Personal Data</h4>
|
||||||
<li>Instagram</li>
|
<p>While using Our Service, We may ask You to provide Us with certain personally identifiable information that can
|
||||||
<li>Twitter</li>
|
be used to contact or identify You. Personally identifiable information may include, but is not limited to:</p>
|
||||||
<li>LinkedIn</li>
|
<ul>
|
||||||
</ul>
|
<li>
|
||||||
<p>If You decide to register through or otherwise grant us access to a Third-Party Social Media Service, We may collect Personal data that is already associated with Your Third-Party Social Media Service's account, such as Your name, Your email address, Your activities or Your contact list associated with that account.</p>
|
<p>Email address</p>
|
||||||
<p>You may also have the option of sharing additional information with the Company through Your Third-Party Social Media Service's account. If You choose to provide such information and Personal Data, during registration or otherwise, You are giving the Company permission to use, share, and store it in a manner consistent with this Privacy Policy.</p>
|
</li>
|
||||||
<h4>Tracking Technologies and Cookies</h4>
|
<li>
|
||||||
<p>We use Cookies and similar tracking technologies to track the activity on Our Service and store certain information. Tracking technologies used are beacons, tags, and scripts to collect and track information and to improve and analyze Our Service. The technologies We use may include:</p>
|
<p>First name and last name</p>
|
||||||
<ul>
|
</li>
|
||||||
<li><strong>Cookies or Browser Cookies.</strong> A cookie is a small file placed on Your Device. You can instruct Your browser to refuse all Cookies or to indicate when a Cookie is being sent. However, if You do not accept Cookies, You may not be able to use some parts of our Service. Unless you have adjusted Your browser setting so that it will refuse Cookies, our Service may use Cookies.</li>
|
<li>
|
||||||
<li><strong>Web Beacons.</strong> Certain sections of our Service and our emails may contain small electronic files known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit the Company, for example, to count users who have visited those pages or opened an email and for other related website statistics (for example, recording the popularity of a certain section and verifying system and server integrity).</li>
|
<p>Usage Data</p>
|
||||||
</ul>
|
</li>
|
||||||
<p>Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web browser. You can learn more about cookies on <a class="text-decoration-none" href="https://www.termsfeed.com/blog/cookies/#What_Are_Cookies" target="_blank">TermsFeed website</a> article.</p>
|
</ul>
|
||||||
<p>We use both Session and Persistent Cookies for the purposes set out below:</p>
|
<h4>Usage Data</h4>
|
||||||
<ul>
|
<p>Usage Data is collected automatically when using the Service.</p>
|
||||||
<li>
|
<p>Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser
|
||||||
<p><strong>Necessary / Essential Cookies</strong></p>
|
type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent
|
||||||
<p>Type: Session Cookies</p>
|
on those pages, unique device identifiers and other diagnostic data.</p>
|
||||||
<p>Administered by: Us</p>
|
<p>When You access the Service by or through a mobile device, We may collect certain information automatically,
|
||||||
<p>Purpose: These Cookies are essential to provide You with services available through the Website and to enable You to use some of its features. They help to authenticate users and prevent fraudulent use of user accounts. Without these Cookies, the services that You have asked for cannot be provided, and We only use these Cookies to provide You with those services.</p>
|
including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address
|
||||||
</li>
|
of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device
|
||||||
<li>
|
identifiers and other diagnostic data.</p>
|
||||||
<p><strong>Cookies Policy / Notice Acceptance Cookies</strong></p>
|
<p>We may also collect information that Your browser sends whenever You visit our Service or when You access the
|
||||||
<p>Type: Persistent Cookies</p>
|
Service by or through a mobile device.</p>
|
||||||
<p>Administered by: Us</p>
|
<h4>Information from Third-Party Social Media Services</h4>
|
||||||
<p>Purpose: These Cookies identify if users have accepted the use of cookies on the Website.</p>
|
<p>The Company allows You to create an account and log in to use the Service through the following Third-party
|
||||||
</li>
|
Social Media Services:</p>
|
||||||
<li>
|
<ul>
|
||||||
<p><strong>Functionality Cookies</strong></p>
|
<li>Google</li>
|
||||||
<p>Type: Persistent Cookies</p>
|
<li>Facebook</li>
|
||||||
<p>Administered by: Us</p>
|
<li>Instagram</li>
|
||||||
<p>Purpose: These Cookies allow us to remember choices You make when You use the Website, such as remembering your login details or language preference. The purpose of these Cookies is to provide You with a more personal experience and to avoid You having to re-enter your preferences every time You use the Website.</p>
|
<li>Twitter</li>
|
||||||
</li>
|
<li>LinkedIn</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>For more information about the cookies we use and your choices regarding cookies, please visit our Cookies Policy or the Cookies section of our Privacy Policy.</p>
|
<p>If You decide to register through or otherwise grant us access to a Third-Party Social Media Service, We may
|
||||||
<h3>Use of Your Personal Data</h3>
|
collect Personal data that is already associated with Your Third-Party Social Media Service's account, such as
|
||||||
<p>The Company may use Personal Data for the following purposes:</p>
|
Your name, Your email address, Your activities or Your contact list associated with that account.</p>
|
||||||
<ul>
|
<p>You may also have the option of sharing additional information with the Company through Your Third-Party Social
|
||||||
<li>
|
Media Service's account. If You choose to provide such information and Personal Data, during registration or
|
||||||
<p><strong>To provide and maintain our Service</strong>, including to monitor the usage of our Service.</p>
|
otherwise, You are giving the Company permission to use, share, and store it in a manner consistent with this
|
||||||
</li>
|
Privacy Policy.</p>
|
||||||
<li>
|
<h4>Tracking Technologies and Cookies</h4>
|
||||||
<p><strong>To manage Your Account:</strong> to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user.</p>
|
<p>We use Cookies and similar tracking technologies to track the activity on Our Service and store certain
|
||||||
</li>
|
information. Tracking technologies used are beacons, tags, and scripts to collect and track information and to
|
||||||
<li>
|
improve and analyze Our Service. The technologies We use may include:</p>
|
||||||
<p><strong>For the performance of a contract:</strong> the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service.</p>
|
<ul>
|
||||||
</li>
|
<li><strong>Cookies or Browser Cookies.</strong> A cookie is a small file placed on Your Device. You can
|
||||||
<li>
|
instruct Your browser to refuse all Cookies or to indicate when a Cookie is being sent. However, if You do
|
||||||
<p><strong>To contact You:</strong> To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation.</p>
|
not accept Cookies, You may not be able to use some parts of our Service. Unless you have adjusted Your
|
||||||
</li>
|
browser setting so that it will refuse Cookies, our Service may use Cookies.</li>
|
||||||
<li>
|
<li><strong>Web Beacons.</strong> Certain sections of our Service and our emails may contain small electronic
|
||||||
<p><strong>To provide You</strong> with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information.</p>
|
files known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit
|
||||||
</li>
|
the Company, for example, to count users who have visited those pages or opened an email and for other
|
||||||
<li>
|
related website statistics (for example, recording the popularity of a certain section and verifying system
|
||||||
<p><strong>To manage Your requests:</strong> To attend and manage Your requests to Us.</p>
|
and server integrity).</li>
|
||||||
</li>
|
</ul>
|
||||||
<li>
|
<p>Cookies can be "Persistent" or "Session" Cookies. Persistent Cookies remain on Your personal
|
||||||
<p><strong>For business transfers:</strong> We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred.</p>
|
computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web
|
||||||
</li>
|
browser. You can learn more about cookies on <a class="text-decoration-none"
|
||||||
<li>
|
href="https://www.termsfeed.com/blog/cookies/#What_Are_Cookies" target="_blank">TermsFeed website</a>
|
||||||
<p><strong>For other purposes</strong>: We may use Your information for other purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our Service, products, services, marketing and your experience.</p>
|
article.</p>
|
||||||
</li>
|
<p>We use both Session and Persistent Cookies for the purposes set out below:</p>
|
||||||
</ul>
|
<ul>
|
||||||
<p>We may share Your personal information in the following situations:</p>
|
<li>
|
||||||
<ul>
|
<p><strong>Necessary / Essential Cookies</strong></p>
|
||||||
<li><strong>With Service Providers:</strong> We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You.</li>
|
<p>Type: Session Cookies</p>
|
||||||
<li><strong>For business transfers:</strong> We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company.</li>
|
<p>Administered by: Us</p>
|
||||||
<li><strong>With Affiliates:</strong> We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us.</li>
|
<p>Purpose: These Cookies are essential to provide You with services available through the Website and to
|
||||||
<li><strong>With business partners:</strong> We may share Your information with Our business partners to offer You certain products, services or promotions.</li>
|
enable You to use some of its features. They help to authenticate users and prevent fraudulent use of
|
||||||
<li><strong>With other users:</strong> when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside. If You interact with other users or register through a Third-Party Social Media Service, Your contacts on the Third-Party Social Media Service may see Your name, profile, pictures and description of Your activity. Similarly, other users will be able to view descriptions of Your activity, communicate with You and view Your profile.</li>
|
user accounts. Without these Cookies, the services that You have asked for cannot be provided, and We
|
||||||
<li><strong>With Your consent</strong>: We may disclose Your personal information for any other purpose with Your consent.</li>
|
only use these Cookies to provide You with those services.</p>
|
||||||
</ul>
|
</li>
|
||||||
<h3>Retention of Your Personal Data</h3>
|
<li>
|
||||||
<p>The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.</p>
|
<p><strong>Cookies Policy / Notice Acceptance Cookies</strong></p>
|
||||||
<p>The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods.</p>
|
<p>Type: Persistent Cookies</p>
|
||||||
<h3>Transfer of Your Personal Data</h3>
|
<p>Administered by: Us</p>
|
||||||
<p>Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to — and maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.</p>
|
<p>Purpose: These Cookies identify if users have accepted the use of cookies on the Website.</p>
|
||||||
<p>Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.</p>
|
</li>
|
||||||
<p>The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information.</p>
|
<li>
|
||||||
<h3>Delete Your Personal Data</h3>
|
<p><strong>Functionality Cookies</strong></p>
|
||||||
<p>You have the right to delete or request that We assist in deleting the Personal Data that We have collected about You.</p>
|
<p>Type: Persistent Cookies</p>
|
||||||
<p>Our Service may give You the ability to delete certain information about You from within the Service.</p>
|
<p>Administered by: Us</p>
|
||||||
<p>You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and visiting the account settings section that allows you to manage Your personal information. You may also contact Us to request access to, correct, or delete any personal information that You have provided to Us.</p>
|
<p>Purpose: These Cookies allow us to remember choices You make when You use the Website, such as
|
||||||
<p>Please note, however, that We may need to retain certain information when we have a legal obligation or lawful basis to do so.</p>
|
remembering your login details or language preference. The purpose of these Cookies is to provide You
|
||||||
<h3>Disclosure of Your Personal Data</h3>
|
with a more personal experience and to avoid You having to re-enter your preferences every time You use
|
||||||
<h4>Business Transactions</h4>
|
the Website.</p>
|
||||||
<p>If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.</p>
|
</li>
|
||||||
<h4>Law enforcement</h4>
|
</ul>
|
||||||
<p>Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).</p>
|
<p>For more information about the cookies we use and your choices regarding cookies, please visit our Cookies Policy
|
||||||
<h4>Other legal requirements</h4>
|
or the Cookies section of our Privacy Policy.</p>
|
||||||
<p>The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:</p>
|
<h3>Use of Your Personal Data</h3>
|
||||||
<ul>
|
<p>The Company may use Personal Data for the following purposes:</p>
|
||||||
<li>Comply with a legal obligation</li>
|
<ul>
|
||||||
<li>Protect and defend the rights or property of the Company</li>
|
<li>
|
||||||
<li>Prevent or investigate possible wrongdoing in connection with the Service</li>
|
<p><strong>To provide and maintain our Service</strong>, including to monitor the usage of our Service.</p>
|
||||||
<li>Protect the personal safety of Users of the Service or the public</li>
|
</li>
|
||||||
<li>Protect against legal liability</li>
|
<li>
|
||||||
</ul>
|
<p><strong>To manage Your Account:</strong> to manage Your registration as a user of the Service. The
|
||||||
<h3>Security of Your Personal Data</h3>
|
Personal Data You provide can give You access to different functionalities of the Service that are
|
||||||
<p>The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.</p>
|
available to You as a registered user.</p>
|
||||||
<h2>Children's Privacy</h2>
|
</li>
|
||||||
<p>Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers.</p>
|
<li>
|
||||||
<p>If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information.</p>
|
<p><strong>For the performance of a contract:</strong> the development, compliance and undertaking of the
|
||||||
<h2>Links to Other Websites</h2>
|
purchase contract for the products, items or services You have purchased or of any other contract with
|
||||||
<p>Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit.</p>
|
Us through the Service.</p>
|
||||||
<p>We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.</p>
|
</li>
|
||||||
<h2>Changes to this Privacy Policy</h2>
|
<li>
|
||||||
<p>We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.</p>
|
<p><strong>To contact You:</strong> To contact You by email, telephone calls, SMS, or other equivalent forms
|
||||||
<p>We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the "Last updated" date at the top of this Privacy Policy.</p>
|
of electronic communication, such as a mobile application's push notifications regarding updates or
|
||||||
<p>You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.</p>
|
informative communications related to the functionalities, products or contracted services, including
|
||||||
<h2>Contact Us</h2>
|
the security updates, when necessary or reasonable for their implementation.</p>
|
||||||
<p>If you have any questions about this Privacy Policy, You can contact us:</p>
|
</li>
|
||||||
<ul>
|
<li>
|
||||||
<li>
|
<p><strong>To provide You</strong> with news, special offers and general information about other goods,
|
||||||
<p>By email: {DEBUG_EMAIL}</p>
|
services and events which we offer that are similar to those that you have already purchased or enquired
|
||||||
</li>
|
about unless You have opted not to receive such information.</p>
|
||||||
<li>
|
</li>
|
||||||
<p>By visiting this page on our website: <a href="{SITE_URL}/contact" rel="external nofollow noopener" class="text-decoration-none" target="_blank">{SITE_URL}/contact</a></p>
|
<li>
|
||||||
</li>
|
<p><strong>To manage Your requests:</strong> To attend and manage Your requests to Us.</p>
|
||||||
</ul>
|
</li>
|
||||||
<div class="text-center py-3">
|
<li>
|
||||||
<a href="#top" class="btn btn-outline-primary">Back to Top</a>
|
<p><strong>For business transfers:</strong> We may use Your information to evaluate or conduct a merger,
|
||||||
|
divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our
|
||||||
|
assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in
|
||||||
|
which Personal Data held by Us about our Service users is among the assets transferred.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p><strong>For other purposes</strong>: We may use Your information for other purposes, such as data
|
||||||
|
analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to
|
||||||
|
evaluate and improve our Service, products, services, marketing and your experience.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>We may share Your personal information in the following situations:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>With Service Providers:</strong> We may share Your personal information with Service Providers to
|
||||||
|
monitor and analyze the use of our Service, to contact You.</li>
|
||||||
|
<li><strong>For business transfers:</strong> We may share or transfer Your personal information in connection
|
||||||
|
with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a
|
||||||
|
portion of Our business to another company.</li>
|
||||||
|
<li><strong>With Affiliates:</strong> We may share Your information with Our affiliates, in which case we will
|
||||||
|
require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other
|
||||||
|
subsidiaries, joint venture partners or other companies that We control or that are under common control
|
||||||
|
with Us.</li>
|
||||||
|
<li><strong>With business partners:</strong> We may share Your information with Our business partners to offer
|
||||||
|
You certain products, services or promotions.</li>
|
||||||
|
<li><strong>With other users:</strong> when You share personal information or otherwise interact in the public
|
||||||
|
areas with other users, such information may be viewed by all users and may be publicly distributed outside.
|
||||||
|
If You interact with other users or register through a Third-Party Social Media Service, Your contacts on
|
||||||
|
the Third-Party Social Media Service may see Your name, profile, pictures and description of Your activity.
|
||||||
|
Similarly, other users will be able to view descriptions of Your activity, communicate with You and view
|
||||||
|
Your profile.</li>
|
||||||
|
<li><strong>With Your consent</strong>: We may disclose Your personal information for any other purpose with
|
||||||
|
Your consent.</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Retention of Your Personal Data</h3>
|
||||||
|
<p>The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this
|
||||||
|
Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal
|
||||||
|
obligations (for example, if we are required to retain your data to comply with applicable laws), resolve
|
||||||
|
disputes, and enforce our legal agreements and policies.</p>
|
||||||
|
<p>The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a
|
||||||
|
shorter period of time, except when this data is used to strengthen the security or to improve the functionality
|
||||||
|
of Our Service, or We are legally obligated to retain this data for longer time periods.</p>
|
||||||
|
<h3>Transfer of Your Personal Data</h3>
|
||||||
|
<p>Your information, including Personal Data, is processed at the Company's operating offices and in any other
|
||||||
|
places where the parties involved in the processing are located. It means that this information may be
|
||||||
|
transferred to — and maintained on — computers located outside of Your state, province, country or other
|
||||||
|
governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.</p>
|
||||||
|
<p>Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to
|
||||||
|
that transfer.</p>
|
||||||
|
<p>The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in
|
||||||
|
accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or
|
||||||
|
a country unless there are adequate controls in place including the security of Your data and other personal
|
||||||
|
information.</p>
|
||||||
|
<h3>Delete Your Personal Data</h3>
|
||||||
|
<p>You have the right to delete or request that We assist in deleting the Personal Data that We have collected about
|
||||||
|
You.</p>
|
||||||
|
<p>Our Service may give You the ability to delete certain information about You from within the Service.</p>
|
||||||
|
<p>You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and
|
||||||
|
visiting the account settings section that allows you to manage Your personal information. You may also contact
|
||||||
|
Us to request access to, correct, or delete any personal information that You have provided to Us.</p>
|
||||||
|
<p>Please note, however, that We may need to retain certain information when we have a legal obligation or lawful
|
||||||
|
basis to do so.</p>
|
||||||
|
<h3>Disclosure of Your Personal Data</h3>
|
||||||
|
<h4>Business Transactions</h4>
|
||||||
|
<p>If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will
|
||||||
|
provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.</p>
|
||||||
|
<h4>Law enforcement</h4>
|
||||||
|
<p>Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by
|
||||||
|
law or in response to valid requests by public authorities (e.g. a court or a government agency).</p>
|
||||||
|
<h4>Other legal requirements</h4>
|
||||||
|
<p>The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Comply with a legal obligation</li>
|
||||||
|
<li>Protect and defend the rights or property of the Company</li>
|
||||||
|
<li>Prevent or investigate possible wrongdoing in connection with the Service</li>
|
||||||
|
<li>Protect the personal safety of Users of the Service or the public</li>
|
||||||
|
<li>Protect against legal liability</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Security of Your Personal Data</h3>
|
||||||
|
<p>The security of Your Personal Data is important to Us, but remember that no method of transmission over the
|
||||||
|
Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means
|
||||||
|
to protect Your Personal Data, We cannot guarantee its absolute security.</p>
|
||||||
|
<h2>Children's Privacy</h2>
|
||||||
|
<p>Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable
|
||||||
|
information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child
|
||||||
|
has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data
|
||||||
|
from anyone under the age of 13 without verification of parental consent, We take steps to remove that
|
||||||
|
information from Our servers.</p>
|
||||||
|
<p>If We need to rely on consent as a legal basis for processing Your information and Your country requires consent
|
||||||
|
from a parent, We may require Your parent's consent before We collect and use that information.</p>
|
||||||
|
<h2>Links to Other Websites</h2>
|
||||||
|
<p>Our Service may contain links to other websites that are not operated by Us. If You click on a third party link,
|
||||||
|
You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every
|
||||||
|
site You visit.</p>
|
||||||
|
<p>We have no control over and assume no responsibility for the content, privacy policies or practices of any third
|
||||||
|
party sites or services.</p>
|
||||||
|
<h2>Changes to this Privacy Policy</h2>
|
||||||
|
<p>We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy
|
||||||
|
Policy on this page.</p>
|
||||||
|
<p>We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective
|
||||||
|
and update the "Last updated" date at the top of this Privacy Policy.</p>
|
||||||
|
<p>You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are
|
||||||
|
effective when they are posted on this page.</p>
|
||||||
|
<h2>Contact Us</h2>
|
||||||
|
<p>If you have any questions about this Privacy Policy, You can contact us:</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p>By email: {DEBUG_EMAIL}</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>By visiting this page on our website: <a href="{SITE_URL}/contact" rel="external nofollow noopener"
|
||||||
|
class="text-decoration-none" target="_blank">{SITE_URL}/contact</a></p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="text-center py-3">
|
||||||
|
<a href="#top" class="btn btn-outline-primary">Back to Top</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
77
app/views/profilePage.html
Normal file
77
app/views/profilePage.html
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<div class="m-2 m-lg-4">
|
||||||
|
<div class="context-main-bg container py-2 my-2 py-lg-4 my-lg-4">
|
||||||
|
<h3 class="mb-4 text-center">Profile</h3>
|
||||||
|
<hr>
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="card shadow">
|
||||||
|
<!-- Card Header -->
|
||||||
|
<div class="card-header text-center bg-dark text-white">
|
||||||
|
<h3 class="card-title mb-0">{usernamePretty}</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Card Body -->
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<!-- User Image -->
|
||||||
|
<div class="col-md-4 text-center">
|
||||||
|
<img src="{ROOT_URL}{avatar}" alt="User Pic" class="rounded-circle img-fluid" style="max-width: 150px;">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- User Details -->
|
||||||
|
<div class="col-md-8">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tbody>
|
||||||
|
{ADMIN}
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Confirmed:</th>
|
||||||
|
<td>{confirmedText}</td>
|
||||||
|
</tr>
|
||||||
|
{/ADMIN}
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Registered:</th>
|
||||||
|
<td>{DTC}{registered}{/DTC}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Last Seen:</th>
|
||||||
|
<td>{DTC}{lastLogin}{/DTC}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Gender:</th>
|
||||||
|
<td>{gender}</td>
|
||||||
|
</tr>
|
||||||
|
{ADMIN}
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Email:</th>
|
||||||
|
<td><a href="mailto:{email}" class="text-decoration-none">{email}</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">User ID:</th>
|
||||||
|
<td>{ID}</td>
|
||||||
|
</tr>
|
||||||
|
{/ADMIN}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Admin Controls -->
|
||||||
|
<div class="card-footer text-center">
|
||||||
|
{ADMIN}
|
||||||
|
<a href="{ROOT_URL}messages/create?prepopuser={USERNAME}" class="btn btn-primary btn-sm me-2" data-bs-toggle="tooltip" title="Broadcast Message">
|
||||||
|
<i class="fa fa-envelope"></i>
|
||||||
|
</a>
|
||||||
|
<a href="{ROOT_URL}admin/users/edit/{ID}" class="btn btn-warning btn-sm me-2" data-bs-toggle="tooltip" title="Edit User">
|
||||||
|
<i class="fa fa-pencil"></i>
|
||||||
|
</a>
|
||||||
|
<a href="{ROOT_URL}admin/users/delete/{ID}" class="btn btn-danger btn-sm" data-bs-toggle="tooltip" title="Delete User">
|
||||||
|
<i class="fa fa-trash"></i>
|
||||||
|
</a>
|
||||||
|
{/ADMIN}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -1,65 +0,0 @@
|
|||||||
<form action="" method="post" class="container py-4">
|
|
||||||
<h2 class="text-center mb-4">Create an Account</h2>
|
|
||||||
<fieldset>
|
|
||||||
<!-- Username -->
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="username" class="col-lg-6 col-form-label text-end">Username:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input type="text" class="form-control" name="username" id="username" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Email -->
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="email" class="col-lg-6 col-form-label text-end">Email:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input type="email" class="form-control" name="email" id="email" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Re-enter Email -->
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="email2" class="col-lg-6 col-form-label text-end">Re-Enter Email:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input type="email" class="form-control" name="email2" id="email2" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Password -->
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="password" class="col-lg-6 col-form-label text-end">Password:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input type="password" class="form-control" name="password" id="password" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Re-enter Password -->
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="password2" class="col-lg-6 col-form-label text-end">Re-Enter Password:</label>
|
|
||||||
<div class="col-lg-2">
|
|
||||||
<input type="password" class="form-control" name="password2" id="password2" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Terms of Service -->
|
|
||||||
<div class="mb-3 text-center">
|
|
||||||
<div class="">
|
|
||||||
<input type="checkbox" class="form-check-input" name="terms" id="terms" value="1" required>
|
|
||||||
<label for="terms" class="form-check-label">
|
|
||||||
I have read and agree to the <a href="/home/terms" class="text-primary text-decoration-none">Terms of Service</a>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="terms mt-2 mx-auto">
|
|
||||||
{TERMS}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Hidden Token -->
|
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
|
||||||
|
|
||||||
<!-- Submit Button -->
|
|
||||||
<div class="text-center">
|
|
||||||
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Sign up</button>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user