Bootstrap 5 updates continued
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -63,3 +63,4 @@ mail.log
|
|||||||
vendor/canary/logs/*
|
vendor/canary/logs/*
|
||||||
.env
|
.env
|
||||||
components/*
|
components/*
|
||||||
|
mailhog.log
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* app/controllers/admin/contact.php
|
* app/controllers/admin/send_mail.php
|
||||||
*
|
*
|
||||||
* This is the admin contact controller. The only real use is to send out emails to the various lists.
|
* This is the admin email controller. The only real use is to send out emails to the various lists.
|
||||||
*
|
*
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
* @author Joey Kimsey <Joey@thetempusproject.com>
|
* @author Joey Kimsey <Joey@thetempusproject.com>
|
||||||
@ -19,13 +19,13 @@ use TheTempusProject\Houdini\Classes\Views;
|
|||||||
use TheTempusProject\Models\User;
|
use TheTempusProject\Models\User;
|
||||||
use TheTempusProject\Models\Subscribe;
|
use TheTempusProject\Models\Subscribe;
|
||||||
|
|
||||||
class Contact extends AdminController {
|
class SendMail extends AdminController {
|
||||||
public static $user;
|
public static $user;
|
||||||
public static $subscribe;
|
public static $subscribe;
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
self::$title = 'Admin - Contact';
|
self::$title = 'Admin - Send Mail';
|
||||||
self::$user = new User;
|
self::$user = new User;
|
||||||
self::$subscribe = new Subscribe;
|
self::$subscribe = new Subscribe;
|
||||||
}
|
}
|
@ -86,7 +86,7 @@ class Home extends Controller {
|
|||||||
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( 'terms' ) );
|
||||||
Views::raw( '<div class="terms-page">{TERMS}</div>' );
|
Views::view( 'termsPage' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function hashtag( $id = null ) {
|
public function hashtag( $id = null ) {
|
||||||
|
@ -15,6 +15,9 @@
|
|||||||
.context-main-bg {
|
.context-main-bg {
|
||||||
background-color: #2c2c2c;
|
background-color: #2c2c2c;
|
||||||
}
|
}
|
||||||
|
.bg-default {
|
||||||
|
background-color: #2c2c2c;
|
||||||
|
}
|
||||||
.context-other {
|
.context-other {
|
||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
@ -9,12 +9,15 @@
|
|||||||
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.context-other-bg {
|
||||||
|
background-color: #eaeaea;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.context-main-bg {
|
.context-main-bg {
|
||||||
background-color: #f7f7f7;
|
background-color: #f7f7f7;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Base styles for the switch container */
|
/* Base styles for the switch container */
|
||||||
.material-switch {
|
.material-switch {
|
||||||
position: relative;
|
position: relative;
|
||||||
@ -296,3 +299,14 @@ body {
|
|||||||
width: 3rem;
|
width: 3rem;
|
||||||
height: 3rem;
|
height: 3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.gradient-custom-2 {
|
||||||
|
/* fallback for old browsers */
|
||||||
|
background: #fccb90;
|
||||||
|
|
||||||
|
/* Chrome 10-25, Safari 5.1-6 */
|
||||||
|
background: -webkit-linear-gradient(to right, #2c2c2c, #1e1e1e, #1e1e1e);
|
||||||
|
|
||||||
|
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
|
||||||
|
background: linear-gradient(to right, #2c2c2c, #1e1e1e, #1e1e1e);
|
||||||
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<td>{title}</td>
|
<td>{title}</td>
|
||||||
<td>{contentSummary}</td>
|
<td>{contentSummary}</td>
|
||||||
<td><a href="{ROOT_URL}admin/blog/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
|
<td><a href="{ROOT_URL}admin/blog/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
|
<td><a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
|
||||||
<td width="30px"><a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<td width="30px"><a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
<td>{commentCount}</td>
|
<td>{commentCount}</td>
|
||||||
<td>{DTC}{created}{/DTC}</td>
|
<td>{DTC}{created}{/DTC}</td>
|
||||||
<td>{DTC}{edited}{/DTC}</td>
|
<td>{DTC}{edited}{/DTC}</td>
|
||||||
<td><a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
|
<td><a href="{ROOT_URL}admin/blog/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<td><a href="{ROOT_URL}admin/blog/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" value="{ID}" name="B_[]">
|
<input type="checkbox" value="{ID}" name="B_[]">
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<div class="card panel-info">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header bg-info">
|
||||||
<h3 class="card-title">Recent Posts</h3>
|
<h3 class="card-title">Recent Posts</h3>
|
||||||
</div>
|
</div>
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad bg-dark" >
|
||||||
<div class="card panel-primary">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title">Bug Report</h3>
|
<h3 class="card-title">Bug Report</h3>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<div class="container py-4">
|
|
||||||
|
<div class="col-8 mx-auto p-4 rounded shadow-sm mb-5 context-main-bg mt-4 container">
|
||||||
<h2 class="text-center mb-4">Bug Report</h2>
|
<h2 class="text-center mb-4">Bug Report</h2>
|
||||||
<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>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>We read each and every bug report submitted, and by submitting this form you allow us to send you a follow-up email.</p>
|
<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>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{authorName}</td>
|
<td>{authorName}</td>
|
||||||
<td>{content}</td>
|
<td>{content}</td>
|
||||||
<td><a href="{ROOT_URL}admin/comments/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
|
<td><a href="{ROOT_URL}admin/comments/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}admin/comments/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<td><a href="{ROOT_URL}admin/comments/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
<td><a href="{ROOT_URL}admin/blog/view/{contentID}">{contentTitle}</a></td>
|
<td><a href="{ROOT_URL}admin/blog/view/{contentID}">{contentTitle}</a></td>
|
||||||
<td>{content}</td>
|
<td>{content}</td>
|
||||||
<td>{DTC}{created}{/DTC}</td>
|
<td>{DTC}{created}{/DTC}</td>
|
||||||
<td><a href="{ROOT_URL}admin/comments/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
|
<td><a href="{ROOT_URL}admin/comments/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}admin/comments/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<td><a href="{ROOT_URL}admin/comments/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" value="{ID}" name="C_[]">
|
<input type="checkbox" value="{ID}" name="C_[]">
|
||||||
|
@ -1,22 +1,23 @@
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header bg-secondary">
|
<div class="card-header bg-secondary text-white d-flex align-items-center justify-content-between">
|
||||||
|
<h3 class="card-title mb-0">
|
||||||
<h class="card-title"><span class="fa fa-fw fa-comment"></span> Comments</h3>
|
<i class="fa fa-fw fa-comment"></i> Comments
|
||||||
<span class="label label-primary">{count}</span>
|
</h3>
|
||||||
|
<span class="badge bg-primary">{count}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body context-main-bg">
|
<div class="card-body bg-light">
|
||||||
<ul class="list-group">
|
<ul class="list-group list-group-flush">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<div class="row">
|
<div class="d-flex align-items-start">
|
||||||
<div class="col-sm-2 col-md-12">
|
<div class="me-3">
|
||||||
<img src="{ROOT_URL}{avatar}" class="img-circle img-responsive" alt="" />
|
<img src="{ROOT_URL}{avatar}" class="rounded-circle" alt="User Avatar" style="width: 50px; height: 50px;">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-10 col-md-12">
|
|
||||||
<div>
|
<div>
|
||||||
<div class="mic-info">
|
<div class="mb-1">
|
||||||
By: <a href="{ROOT_URL}home/profile/{author}">{authorName}</a> on {DTC date}{created}{/DTC}
|
<small class="text-muted">
|
||||||
</div>
|
By: <a href="{ROOT_URL}home/profile/{author}" class="text-decoration-none">{authorName}</a> on {DTC date}{created}{/DTC}
|
||||||
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="comment-text">
|
<div class="comment-text">
|
||||||
{content}
|
{content}
|
||||||
@ -28,12 +29,8 @@
|
|||||||
{/LOOP}
|
{/LOOP}
|
||||||
{ALT}
|
{ALT}
|
||||||
<li class="list-group-item">
|
<li class="list-group-item">
|
||||||
<div class="row">
|
<div class="text-center">
|
||||||
<div class="col-sm-10 col-md-12">
|
<p class="mb-0">Be the first to comment.</p>
|
||||||
<div class="comment-text">
|
|
||||||
<p class="text-center">Be the first to comment.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{/ALT}
|
{/ALT}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* app/plugins/feedback/controllers/admin/feedback.php
|
* app/plugins/contact/controllers/admin/contact.php
|
||||||
*
|
*
|
||||||
* This is the feedback admin controller.
|
* This is the contact admin controller.
|
||||||
*
|
*
|
||||||
* @package TP Feedback
|
* @package TP Contact
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
* @author Joey Kimsey <Joey@thetempusproject.com>
|
* @author Joey Kimsey <Joey@thetempusproject.com>
|
||||||
* @link https://TheTempusProject.com
|
* @link https://TheTempusProject.com
|
||||||
@ -18,29 +18,29 @@ use TheTempusProject\Houdini\Classes\Views;
|
|||||||
use TheTempusProject\Houdini\Classes\Navigation;
|
use TheTempusProject\Houdini\Classes\Navigation;
|
||||||
use TheTempusProject\Houdini\Classes\Components;
|
use TheTempusProject\Houdini\Classes\Components;
|
||||||
use TheTempusProject\Classes\AdminController;
|
use TheTempusProject\Classes\AdminController;
|
||||||
use TheTempusProject\Models\Feedback as FeedbackModel;
|
use TheTempusProject\Models\Contact as ContactModel;
|
||||||
|
|
||||||
class Feedback extends AdminController {
|
class Contact extends AdminController {
|
||||||
protected static $feedback;
|
protected static $contact;
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
self::$title = 'Admin - Feedback';
|
self::$title = 'Admin - Contact';
|
||||||
self::$feedback = new FeedbackModel;
|
self::$contact = new ContactModel;
|
||||||
$view = Navigation::activePageSelect( 'nav.admin', '/admin/feedback' );
|
$view = Navigation::activePageSelect( 'nav.admin', '/admin/contact' );
|
||||||
Components::set( 'ADMINNAV', $view );
|
Components::set( 'ADMINNAV', $view );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function view( $id = null ) {
|
public function view( $id = null ) {
|
||||||
Views::view( 'feedback.admin.view', self::$feedback->findById( $id ) );
|
Views::view( 'contact.admin.view', self::$contact->findById( $id ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete( $data = null ) {
|
public function delete( $data = null ) {
|
||||||
if ( Input::exists( 'submit' ) ) {
|
if ( Input::exists( 'submit' ) ) {
|
||||||
$data = Input::post( 'F_' );
|
$data = Input::post( 'F_' );
|
||||||
}
|
}
|
||||||
if ( self::$feedback->delete( (array) $data ) ) {
|
if ( self::$contact->delete( (array) $data ) ) {
|
||||||
Issues::add( 'success', 'feedback deleted' );
|
Issues::add( 'success', 'contact deleted' );
|
||||||
} else {
|
} else {
|
||||||
Issues::add( 'error', 'There was an error with your request.' );
|
Issues::add( 'error', 'There was an error with your request.' );
|
||||||
}
|
}
|
||||||
@ -48,11 +48,11 @@ class Feedback extends AdminController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function clear( $data = null ) {
|
public function clear( $data = null ) {
|
||||||
self::$feedback->clear();
|
self::$contact->clear();
|
||||||
$this->index();
|
$this->index();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index( $data = null ) {
|
public function index( $data = null ) {
|
||||||
Views::view( 'feedback.admin.list', self::$feedback->listPaginated() );
|
Views::view( 'contact.admin.list', self::$contact->listPaginated() );
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* app/plugins/feedback/controllers/feedback.php
|
* app/plugins/contact/controllers/contact.php
|
||||||
*
|
*
|
||||||
* This is the home controller for the feedback plugin.
|
* This is the home controller for the contact plugin.
|
||||||
*
|
*
|
||||||
* @package TP Feedback
|
* @package TP Contact
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
* @author Joey Kimsey <Joey@thetempusproject.com>
|
* @author Joey Kimsey <Joey@thetempusproject.com>
|
||||||
* @link https://TheTempusProject.com
|
* @link https://TheTempusProject.com
|
||||||
@ -20,25 +20,25 @@ use TheTempusProject\Bedrock\Functions\Check;
|
|||||||
use TheTempusProject\Bedrock\Functions\Input;
|
use TheTempusProject\Bedrock\Functions\Input;
|
||||||
use TheTempusProject\Bedrock\Functions\Session;
|
use TheTempusProject\Bedrock\Functions\Session;
|
||||||
use TheTempusProject\Hermes\Functions\Redirect;
|
use TheTempusProject\Hermes\Functions\Redirect;
|
||||||
use TheTempusProject\Models\Feedback as FeedbackModel;
|
use TheTempusProject\Models\Contact as ContactModel;
|
||||||
|
|
||||||
class Feedback extends Controller {
|
class Contact extends Controller {
|
||||||
protected static $feedback;
|
protected static $contact;
|
||||||
|
|
||||||
public function index() {
|
public function index() {
|
||||||
self::$feedback = new FeedbackModel;
|
self::$contact = new ContactModel;
|
||||||
self::$title = 'Feedback - {SITENAME}';
|
self::$title = 'Contact - {SITENAME}';
|
||||||
self::$pageDescription = 'At {SITENAME}, we value our users\' input. You can provide any feedback or suggestions using this form.';
|
self::$pageDescription = 'At {SITENAME}, we value our users\' input. You can provide any contact or suggestions using this form.';
|
||||||
if ( !Input::exists() ) {
|
if ( !Input::exists() ) {
|
||||||
return Views::view( 'feedback.create' );
|
return Views::view( 'contact.create' );
|
||||||
}
|
}
|
||||||
if ( !Forms::check( 'feedback' ) ) {
|
if ( !Forms::check( 'contact' ) ) {
|
||||||
Issues::add( 'error', [ 'There was an error with your form, please check your submission and try again.' => Check::userErrors() ] );
|
Issues::add( 'error', [ 'There was an error with your form, please check your submission and try again.' => Check::userErrors() ] );
|
||||||
return Views::view( 'feedback.create' );
|
return Views::view( 'contact.create' );
|
||||||
}
|
}
|
||||||
$result = self::$feedback->create( Input::post( 'name' ), Input::post( 'feedbackEmail' ), Input::post( 'entry' ) );
|
$result = self::$contact->create( Input::post( 'name' ), Input::post( 'contactEmail' ), Input::post( 'entry' ) );
|
||||||
if ( $result ) {
|
if ( $result ) {
|
||||||
Session::flash( 'success', 'Thank you! Your feedback has been received.' );
|
Session::flash( 'success', 'Thank you! Your contact has been received.' );
|
||||||
Redirect::to( 'home/index' );
|
Redirect::to( 'home/index' );
|
||||||
} else {
|
} else {
|
||||||
Issues::add( 'error', [ 'There was an error with your form, please check your submission and try again.' => Check::userErrors() ] );
|
Issues::add( 'error', [ 'There was an error with your form, please check your submission and try again.' => Check::userErrors() ] );
|
@ -1,35 +1,35 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* app/plugins/feedback/forms.php
|
* app/plugins/contact/forms.php
|
||||||
*
|
*
|
||||||
* This houses all of the form checking functions for this plugin.
|
* This houses all of the form checking functions for this plugin.
|
||||||
*
|
*
|
||||||
* @package TP Feedback
|
* @package TP Contact
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
* @author Joey Kimsey <Joey@thetempusproject.com>
|
* @author Joey Kimsey <Joey@thetempusproject.com>
|
||||||
* @link https://TheTempusProject.com
|
* @link https://TheTempusProject.com
|
||||||
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
|
||||||
*/
|
*/
|
||||||
namespace TheTempusProject\Plugins\Feedback;
|
namespace TheTempusProject\Plugins\Contact;
|
||||||
|
|
||||||
use TheTempusProject\Bedrock\Functions\Input;
|
use TheTempusProject\Bedrock\Functions\Input;
|
||||||
use TheTempusProject\Bedrock\Functions\Check;
|
use TheTempusProject\Bedrock\Functions\Check;
|
||||||
use TheTempusProject\Classes\Forms;
|
use TheTempusProject\Classes\Forms;
|
||||||
|
|
||||||
class FeedbackForms extends Forms {
|
class ContactForms extends Forms {
|
||||||
/**
|
/**
|
||||||
* Adds these functions to the form list.
|
* Adds these functions to the form list.
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
self::addHandler( 'feedback', __CLASS__, 'feedback' );
|
self::addHandler( 'contact', __CLASS__, 'contact' );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates the feedback form.
|
* Validates the contact form.
|
||||||
*
|
*
|
||||||
* @return {bool}
|
* @return {bool}
|
||||||
*/
|
*/
|
||||||
public static function feedback() {
|
public static function contact() {
|
||||||
if ( !Input::exists( 'name' ) ) {
|
if ( !Input::exists( 'name' ) ) {
|
||||||
Check::addUserError( 'You must provide a name.' );
|
Check::addUserError( 'You must provide a name.' );
|
||||||
return false;
|
return false;
|
||||||
@ -38,12 +38,12 @@ class FeedbackForms extends Forms {
|
|||||||
Check::addUserError( 'Invalid name.' );
|
Check::addUserError( 'Invalid name.' );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ( !empty( Input::post( 'feedbackEmail' ) ) && !Check::email( Input::post( 'feedbackEmail' ) ) ) {
|
if ( !empty( Input::post( 'contactEmail' ) ) && !Check::email( Input::post( 'contactEmail' ) ) ) {
|
||||||
Check::addUserError( 'Invalid Email.' );
|
Check::addUserError( 'Invalid Email.' );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ( Input::post( 'entry' ) == '' ) {
|
if ( Input::post( 'entry' ) == '' ) {
|
||||||
Check::addUserError( 'Feedback cannot be empty.' );
|
Check::addUserError( 'Contact cannot be empty.' );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ( !Check::token() ) {
|
if ( !Check::token() ) {
|
||||||
@ -53,4 +53,4 @@ class FeedbackForms extends Forms {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
new FeedbackForms;
|
new ContactForms;
|
@ -1,12 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* app/plugins/feedback/models/feedback.php
|
* app/plugins/contact/models/contact.php
|
||||||
*
|
*
|
||||||
* This class is used for the manipulation of the feedback database table.
|
* This class is used for the manipulation of the feedback database table.
|
||||||
*
|
*
|
||||||
* @todo make this send a confirmation email
|
* @todo make this send a confirmation email
|
||||||
*
|
*
|
||||||
* @package TP Feedback
|
* @package TP Contact
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
* @author Joey Kimsey <Joey@thetempusproject.com>
|
* @author Joey Kimsey <Joey@thetempusproject.com>
|
||||||
* @link https://TheTempusProject.com
|
* @link https://TheTempusProject.com
|
||||||
@ -17,9 +17,9 @@ namespace TheTempusProject\Models;
|
|||||||
use TheTempusProject\Bedrock\Functions\Check;
|
use TheTempusProject\Bedrock\Functions\Check;
|
||||||
use TheTempusProject\Canary\Bin\Canary as Debug;
|
use TheTempusProject\Canary\Bin\Canary as Debug;
|
||||||
use TheTempusProject\Classes\DatabaseModel;
|
use TheTempusProject\Classes\DatabaseModel;
|
||||||
use TheTempusProject\Plugins\Feedback as Plugin;
|
use TheTempusProject\Plugins\Contact as Plugin;
|
||||||
|
|
||||||
class Feedback extends DatabaseModel {
|
class Contact extends DatabaseModel {
|
||||||
public $tableName = 'feedback';
|
public $tableName = 'feedback';
|
||||||
public $databaseMatrix = [
|
public $databaseMatrix = [
|
||||||
[ 'name', 'varchar', '128' ],
|
[ 'name', 'varchar', '128' ],
|
||||||
@ -39,7 +39,7 @@ class Feedback extends DatabaseModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves a feedback form to the db.
|
* Saves a contact form to the db.
|
||||||
*
|
*
|
||||||
* @param string $name -the name on the form
|
* @param string $name -the name on the form
|
||||||
* @param string $email -the email provided
|
* @param string $email -the email provided
|
||||||
@ -48,7 +48,7 @@ class Feedback extends DatabaseModel {
|
|||||||
*/
|
*/
|
||||||
public function create( $name, $email, $feedback ) {
|
public function create( $name, $email, $feedback ) {
|
||||||
if ( !$this->plugin->checkEnabled() ) {
|
if ( !$this->plugin->checkEnabled() ) {
|
||||||
Debug::info( 'Feedback is disabled in the config.' );
|
Debug::info( 'Contact is disabled in the config.' );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$fields = [
|
$fields = [
|
||||||
@ -59,14 +59,14 @@ class Feedback extends DatabaseModel {
|
|||||||
'ip' => $_SERVER['REMOTE_ADDR'],
|
'ip' => $_SERVER['REMOTE_ADDR'],
|
||||||
];
|
];
|
||||||
if ( !self::$db->insert( $this->tableName, $fields ) ) {
|
if ( !self::$db->insert( $this->tableName, $fields ) ) {
|
||||||
Debug::info( 'Feedback::create - failed to insert to db' );
|
Debug::info( 'Contact::create - failed to insert to db' );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return self::$db->lastId();
|
return self::$db->lastId();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to clear feedback from the DB.
|
* Function to clear contact from the DB.
|
||||||
*
|
*
|
||||||
* @todo is there a way i could check for success here I'm pretty sure this is just a bad idea?
|
* @todo is there a way i could check for success here I'm pretty sure this is just a bad idea?
|
||||||
* @return bool
|
* @return bool
|
||||||
@ -76,8 +76,8 @@ class Feedback extends DatabaseModel {
|
|||||||
self::$log = new Log;
|
self::$log = new Log;
|
||||||
}
|
}
|
||||||
self::$db->delete( $this->tableName, ['ID', '>=', '0'] );
|
self::$db->delete( $this->tableName, ['ID', '>=', '0'] );
|
||||||
self::$log->admin( 'Cleared Feedback' );
|
self::$log->admin( 'Contacts Cleared' );
|
||||||
Debug::info( 'Feedback Cleared' );
|
Debug::info( 'Contacts Cleared' );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* app/plugins/feedback/plugin.php
|
* app/plugins/contact/plugin.php
|
||||||
*
|
*
|
||||||
* This houses all of the main plugin info and functionality.
|
* This houses all of the main plugin info and functionality.
|
||||||
*
|
*
|
||||||
* @package TP Feedback
|
* @package TP Contact
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
* @author Joey Kimsey <Joey@thetempusproject.com>
|
* @author Joey Kimsey <Joey@thetempusproject.com>
|
||||||
* @link https://TheTempusProject.com
|
* @link https://TheTempusProject.com
|
||||||
@ -14,18 +14,18 @@ namespace TheTempusProject\Plugins;
|
|||||||
|
|
||||||
use TheTempusProject\Classes\Plugin;
|
use TheTempusProject\Classes\Plugin;
|
||||||
|
|
||||||
class Feedback extends Plugin {
|
class Contact extends Plugin {
|
||||||
public $pluginName = 'TP Feedback';
|
public $pluginName = 'TP Contact';
|
||||||
public $pluginAuthor = 'JoeyK';
|
public $pluginAuthor = 'JoeyK';
|
||||||
public $pluginWebsite = 'https://TheTempusProject.com';
|
public $pluginWebsite = 'https://TheTempusProject.com';
|
||||||
public $modelVersion = '1.0';
|
public $modelVersion = '1.0';
|
||||||
public $pluginVersion = '3.0';
|
public $pluginVersion = '3.0';
|
||||||
public $pluginDescription = 'A simple plugin which adds a form and management for user submitted feedback.';
|
public $pluginDescription = 'A simple plugin which adds a form and management for user submitted contact forms.';
|
||||||
public $configName = 'feedback';
|
public $configName = 'contact';
|
||||||
public $configMatrix = [
|
public $configMatrix = [
|
||||||
'enabled' => [
|
'enabled' => [
|
||||||
'type' => 'radio',
|
'type' => 'radio',
|
||||||
'pretty' => 'Enable User Feedback.',
|
'pretty' => 'Enable User Contact.',
|
||||||
'default' => true,
|
'default' => true,
|
||||||
],
|
],
|
||||||
'sendEmail' => [
|
'sendEmail' => [
|
||||||
@ -36,25 +36,25 @@ class Feedback extends Plugin {
|
|||||||
'emailTemplate' => [
|
'emailTemplate' => [
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
'pretty' => 'Email Template',
|
'pretty' => 'Email Template',
|
||||||
'default' => 'feedbackEmail',
|
'default' => 'contactEmail',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
public $permissionMatrix = [
|
public $permissionMatrix = [
|
||||||
'feedback' => [
|
'contact' => [
|
||||||
'pretty' => 'Can Submit Feedback',
|
'pretty' => 'Can Submit Contact',
|
||||||
'default' => false,
|
'default' => true,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
public $contact_footer_links = [
|
public $contact_footer_links = [
|
||||||
[
|
[
|
||||||
'text' => 'Feedback',
|
'text' => 'Contact',
|
||||||
'url' => '{ROOT_URL}feedback',
|
'url' => '{ROOT_URL}contact',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
public $admin_links = [
|
public $admin_links = [
|
||||||
[
|
[
|
||||||
'text' => '<i class="fa fa-fw fa-support"></i> Feedback',
|
'text' => '<i class="fa fa-fw fa-support"></i> Contact',
|
||||||
'url' => '{ROOT_URL}admin/feedback',
|
'url' => '{ROOT_URL}admin/contact',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
<legend>Feedback</legend>
|
<legend>Contact Forms</legend>
|
||||||
{PAGINATION}
|
{PAGINATION}
|
||||||
<form action="{ROOT_URL}admin/feedback/delete" method="post">
|
<form action="{ROOT_URL}admin/contact/delete" method="post">
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@ -20,8 +20,8 @@
|
|||||||
<td>{ID}</td>
|
<td>{ID}</td>
|
||||||
<td>{DTC}{time}{/DTC}</td>
|
<td>{DTC}{time}{/DTC}</td>
|
||||||
<td>{feedback}</td>
|
<td>{feedback}</td>
|
||||||
<td><a href="{ROOT_URL}admin/feedback/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
|
<td><a href="{ROOT_URL}admin/contact/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}admin/feedback/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<td><a href="{ROOT_URL}admin/contact/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" value="{ID}" name="F_[]">
|
<input type="checkbox" value="{ID}" name="F_[]">
|
||||||
</td>
|
</td>
|
||||||
@ -39,4 +39,4 @@
|
|||||||
<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">Delete</button>
|
||||||
</form>
|
</form>
|
||||||
<br />
|
<br />
|
||||||
<a href="{ROOT_URL}admin/feedback/clear">clear all</a>
|
<a href="{ROOT_URL}admin/contact/clear">clear all</a>
|
@ -1,9 +1,9 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
||||||
<div class="card panel-primary">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header bg-dark">
|
||||||
<h3 class="card-title">Feedback</h3>
|
<h3 class="card-title">Contact</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -43,7 +43,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
{ADMIN}
|
{ADMIN}
|
||||||
<form action="{ROOT_URL}admin/feedback/delete" method="post">
|
<form action="{ROOT_URL}admin/contact/delete" method="post">
|
||||||
<INPUT type="hidden" name="F_" value="{ID}"/>
|
<INPUT type="hidden" name="F_" value="{ID}"/>
|
||||||
<input type="hidden" name="token" value="{TOKEN}" />
|
<input type="hidden" name="token" value="{TOKEN}" />
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-times"></i></button>
|
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-times"></i></button>
|
@ -1,15 +1,17 @@
|
|||||||
<div class="container py-4">
|
<div class="context-main-bg container py-4 my-4">
|
||||||
<h2 class="text-center mb-4">Feedback</h2>
|
<h2 class="text-center mb-4">Contact Us</h2>
|
||||||
|
<div class="col-lg-6 offset-md-3">
|
||||||
<p>
|
<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.
|
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>
|
||||||
<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.
|
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>
|
</p>
|
||||||
|
</div>
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
<!-- Name -->
|
<!-- Name -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="name" class="col-lg-2 col-form-label text-end">Name:</label>
|
<label for="name" class="col-lg-3 col-form-label text-end">Name:</label>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<input type="text" class="form-control" name="name" id="name" required>
|
<input type="text" class="form-control" name="name" id="name" required>
|
||||||
</div>
|
</div>
|
||||||
@ -17,15 +19,15 @@
|
|||||||
|
|
||||||
<!-- Email (Optional) -->
|
<!-- Email (Optional) -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="feedbackEmail" class="col-lg-2 col-form-label text-end">E-mail: (optional)</label>
|
<label for="contactEmail" class="col-lg-3 col-form-label text-end">E-mail: (optional)</label>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<input type="email" class="form-control" name="feedbackEmail" id="feedbackEmail">
|
<input type="email" class="form-control" name="contactEmail" id="contactEmail">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Feedback -->
|
<!-- Feedback -->
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="entry" class="col-lg-2 col-form-label text-end">Feedback:</label>
|
<label for="entry" class="col-lg-3 col-form-label text-end">Feedback:</label>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<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" required></textarea>
|
||||||
<small class="form-text text-muted">Max: 2000 characters</small>
|
<small class="form-text text-muted">Max: 2000 characters</small>
|
@ -58,6 +58,7 @@ class DefaultLoader extends Loader {
|
|||||||
Components::set( 'topNavRightDropdown', Template::parse( App::$topNavRightDropdown ) );
|
Components::set( 'topNavRightDropdown', Template::parse( App::$topNavRightDropdown ) );
|
||||||
Components::set( 'STATUS', Views::simpleView( 'nav.statusLoggedIn' ) );
|
Components::set( 'STATUS', Views::simpleView( 'nav.statusLoggedIn' ) );
|
||||||
Components::set( 'USERNAME', \ucfirst( App::$activeUser->username ) );
|
Components::set( 'USERNAME', \ucfirst( App::$activeUser->username ) );
|
||||||
|
Components::set( 'AVATAR', App::$activeUser->avatar );
|
||||||
} else {
|
} else {
|
||||||
Components::set( 'STATUS', Views::simpleView( 'nav.statusLoggedOut' ) );
|
Components::set( 'STATUS', Views::simpleView( 'nav.statusLoggedOut' ) );
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/ISSUES}
|
{/ISSUES}
|
||||||
<div class="pt-4">
|
<div class="">
|
||||||
{CONTENT}
|
{CONTENT}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<div class="col-8 mx-auto">
|
<div class="col-8 mx-auto p-4 rounded shadow-sm mb-5 context-main-bg mt-4">
|
||||||
<p>
|
<h2 class="text-center text-primary mb-4">Welcome to AllTheBookmarks</h2>
|
||||||
AllTheBookmarks was built out of a need to manage my own bookmarks better. As a web developer, I would not only use urls for every aspect of my job, but i also needed to switch browsers, operating systems, or devices. For years I had a version of this tool that I used on my own local network. In 2025 I'm bringing it to anyone who wants it.
|
<p class="lead">
|
||||||
|
AllTheBookmarks was built out of a need to manage my own bookmarks better. As a web developer, I would not only use URLs for every aspect of my job, but I also needed to switch browsers, operating systems, or devices. For years, I had a version of this tool that I used on my own local network. In 2025, I'm bringing it to anyone who wants it.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Right now this entire system was built and managed by myself. As stated, I have used my own version of this for years but translating it to publicly available is not a 1 to 1 job. There may be bugs or issues encountered while you use the produxct. I can't guarantee a fix for every need in every case immidiately, but I do actively keep track of bugs and work hard to ensure everyone has a great experiience usiing the app.
|
Right now this entire system was built and managed by myself. As stated, I have used my own version of this for years but translating it to publicly available is not a 1 to 1 job. There may be bugs or issues encountered while you use the produxct. I can't guarantee a fix for every need in every case immidiately, but I do actively keep track of bugs and work hard to ensure everyone has a great experiience usiing the app.
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td align="center">{username}</td>
|
<td align="center">{username}</td>
|
||||||
<td><a href="{ROOT_URL}admin/users/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-user"></i></a></td>
|
<td><a href="{ROOT_URL}admin/users/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-user"></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-square"></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>
|
||||||
</tr>
|
</tr>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><a href="{ROOT_URL}admin/groups/view/{ID}">{name}</a></td>
|
<td><a href="{ROOT_URL}admin/groups/view/{ID}">{name}</a></td>
|
||||||
<td><a href="{ROOT_URL}admin/groups/listmembers/{ID}">{userCount}</a></td>
|
<td><a href="{ROOT_URL}admin/groups/listmembers/{ID}">{userCount}</a></td>
|
||||||
<td><a href="{ROOT_URL}admin/groups/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
|
<td><a href="{ROOT_URL}admin/groups/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}admin/groups/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<td><a href="{ROOT_URL}admin/groups/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="G_[]">
|
<input type="checkbox" value="{ID}" name="G_[]">
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<td>{ID}</td>
|
<td>{ID}</td>
|
||||||
<td><a href='{ROOT_URL}admin/users/view/{ID}'>{username}</a></td>
|
<td><a href='{ROOT_URL}admin/users/view/{ID}'>{username}</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-square"></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>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" value="{ID}" name="U_[]">
|
<input type="checkbox" value="{ID}" name="U_[]">
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
||||||
<div class="card panel-primary">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header bg-dark">
|
||||||
<h3 class="card-title">{name}</h3>
|
<h3 class="card-title">{name}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
||||||
<div class="card panel-primary">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header bg-dark">
|
||||||
<h3 class="card-title">Model Info</h3>
|
<h3 class="card-title">Model Info</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
||||||
<div class="card panel-primary">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header bg-dark">
|
||||||
<h3 class="card-title">Plugin Info</h3>
|
<h3 class="card-title">Plugin Info</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
<td>{redirect_type}</td>
|
<td>{redirect_type}</td>
|
||||||
<td>{original_url}</td>
|
<td>{original_url}</td>
|
||||||
<td>{forwarded_url}</td>
|
<td>{forwarded_url}</td>
|
||||||
<td><a href="{ROOT_URL}admin/routes/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
|
<td><a href="{ROOT_URL}admin/routes/edit/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
|
||||||
<td><a href="{ROOT_URL}admin/routes/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<td><a href="{ROOT_URL}admin/routes/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="R_[]">
|
<input type="checkbox" value="{ID}" name="R_[]">
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
||||||
<div class="card panel-primary">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header bg-dark">
|
||||||
<h3 class="card-title">{nickname}</h3>
|
<h3 class="card-title">{nickname}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
||||||
<div class="card panel-primary">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header bg-dark">
|
||||||
<h3 class="card-title">{name}</h3>
|
<h3 class="card-title">{name}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<td align="center">{ID}</td>
|
<td align="center">{ID}</td>
|
||||||
<td><a href='{ROOT_URL}admin/users/view/{ID}'>{username}</a></td>
|
<td><a href='{ROOT_URL}admin/users/view/{ID}'>{username}</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-square"></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>
|
||||||
<td>
|
<td>
|
||||||
<input type="checkbox" value="{ID}" name="U_[]">
|
<input type="checkbox" value="{ID}" name="U_[]">
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
<div class="col-sm-12 col-md-6 col-lg-6 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 top-pad" >
|
||||||
<div class="card panel-primary">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header bg-dark">
|
||||||
<h3 class="card-title">{username}</h3>
|
<h3 class="card-title">{username}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@ -54,7 +54,7 @@
|
|||||||
{ADMIN}
|
{ADMIN}
|
||||||
<span class="float-right">
|
<span class="float-right">
|
||||||
<a href="{ROOT_URL}admin/users/edit/{ID}">
|
<a href="{ROOT_URL}admin/users/edit/{ID}">
|
||||||
<button name="submit" value="edit" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></button>
|
<button name="submit" value="edit" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></button>
|
||||||
</a>
|
</a>
|
||||||
<a href="{ROOT_URL}admin/users/delete/{ID}">
|
<a href="{ROOT_URL}admin/users/delete/{ID}">
|
||||||
<button name="submit" value="delete" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-times"></i></button>
|
<button name="submit" value="delete" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-times"></i></button>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
<div class="container py-5">
|
<div class="container py-5 context-main-bg my-5">
|
||||||
<h1 class="mb-4">Frequently Asked Questions</h1>
|
<h1 class="mb-4">Frequently Asked Questions</h1>
|
||||||
|
<hr>
|
||||||
|
|
||||||
<!-- Table of Contents -->
|
<!-- Table of Contents -->
|
||||||
<div class="mb-5">
|
<div class="mb-5">
|
||||||
|
@ -1,44 +1,56 @@
|
|||||||
<form action="{ROOT_URL}home/login" method="post" class="form-horizontal">
|
<section class="h-100 gradient-form pt-5 context-main-bg">
|
||||||
<legend>Please sign in</legend>
|
<div class="container pb-5 h-100">
|
||||||
|
<div class="row d-flex justify-content-center align-items-center h-100">
|
||||||
|
<div class="col-xl-10">
|
||||||
|
<div class="card rounded-3 text-black">
|
||||||
|
<div class="row g-0">
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="card-body p-md-5 mx-md-4">
|
||||||
|
|
||||||
<!-- Username -->
|
<div class="text-center">
|
||||||
<div class="form-group row">
|
<img src="{ROOT_URL}{LOGO}" style="width: 185px;" alt="logo">
|
||||||
<label for="username" class="col-lg-3 col-form-label">Username</label>
|
<h4 class="mt-1 mb-5 pb-1">AllTheBookmarks</h4>
|
||||||
<div class="col-lg-9">
|
|
||||||
<input type="text" class="form-control" name="username" id="username" placeholder="Username" required autofocus>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Password -->
|
<form action="{ROOT_URL}home/login" method="post">
|
||||||
<div class="form-group row">
|
<p>Please login to your account</p>
|
||||||
<label for="password" class="col-lg-3 col-form-label">Password</label>
|
|
||||||
<div class="col-lg-9">
|
<div data-mdb-input-init class="form-outline mb-4">
|
||||||
<input type="password" class="form-control" name="password" id="password" placeholder="Password" required>
|
<input name="username" type="text" id="username" class="form-control" placeholder="Username" />
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Remember Me -->
|
<div data-mdb-input-init class="form-outline mb-4">
|
||||||
<div class="form-group row">
|
<input name="password" type="password" id="password" class="form-control" placeholder="password" />
|
||||||
<div class="col-lg-3"></div>
|
|
||||||
<div class="col-lg-9">
|
|
||||||
<div class="form-check">
|
|
||||||
<input type="checkbox" class="form-check-input" name="remember" id="remember" value="remember-me">
|
|
||||||
<label class="form-check-label" for="remember">Remember me</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Submit Button -->
|
<div class="text-center pt-1 mb-5 pb-1">
|
||||||
<div class="form-group row">
|
<button name="submit" value="submit" type="submit" data-mdb-button-init data-mdb-ripple-init class="btn btn-primary btn-block fa-lg gradient-custom-2 mb-3">Sign
|
||||||
<div class="col-lg-12 text-center">
|
in</button>
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-lg btn-primary">Sign in</button>
|
<a class="text-muted" href="{ROOT_URL}register/recover">Forgot password?</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex align-items-center justify-content-center pb-4">
|
||||||
|
<p class="mb-0 me-2">Don't have an account?</p>
|
||||||
|
<a href="{ROOT_URL}register">
|
||||||
|
|
||||||
|
<button type="button" data-mdb-button-init data-mdb-ripple-init class="btn btn-outline-dark">Create new</button>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Hidden Token -->
|
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<!-- Additional Links -->
|
</div>
|
||||||
<p>Don't have an account? You can register <a href="{ROOT_URL}register">here</a>.</p>
|
</div>
|
||||||
<p>If you need assistance with your username or password, please <a href="{ROOT_URL}register/recover">Click here</a>.</p>
|
<div class="col-lg-6 d-flex align-items-center gradient-custom-2">
|
||||||
|
<div class="text-white px-3 py-4 p-md-5 mx-md-4">
|
||||||
|
<h4 class="mb-4">I appreciate you.</h4>
|
||||||
|
<p class="small mb-0">As a solo developer, i appreciate each and every person who uses my products. There aren't many of you, so thank you</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
@ -7,7 +7,7 @@
|
|||||||
data-bs-toggle="dropdown"
|
data-bs-toggle="dropdown"
|
||||||
aria-haspopup="true"
|
aria-haspopup="true"
|
||||||
aria-expanded="false">
|
aria-expanded="false">
|
||||||
<img src="{ROOT_URL}{LOGO}" alt="" width="32" height="32" class="rounded-circle me-2"> <strong class="mr-3">{USERNAME}</strong>
|
<img src="{ROOT_URL}{AVATAR}" alt="" width="32" height="32" class="rounded-circle me-2"> <strong class="mr-3">{USERNAME}</strong>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="userDropdown">
|
<ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="userDropdown">
|
||||||
<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>
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
<li class="dropdown nav-link">
|
|
||||||
|
<div class="dropdown nav-item mx-2">
|
||||||
<a
|
<a
|
||||||
href="#"
|
href="#"
|
||||||
class="nav-link 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-haspopup="true"
|
||||||
aria-expanded="false">
|
aria-expanded="false">
|
||||||
<i class="fa fa-user"></i>
|
<i class="fa fa-user"></i>
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown">
|
<div class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="userDropdown">
|
||||||
<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,3 +1,4 @@
|
|||||||
|
<div class="context-main-bg p-4 my-5">
|
||||||
<h1>Privacy Policy</h1>
|
<h1>Privacy Policy</h1>
|
||||||
<p>Last updated: December 09, 2024</p>
|
<p>Last updated: December 09, 2024</p>
|
||||||
<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>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>
|
||||||
@ -196,3 +197,8 @@
|
|||||||
<p>By visiting this page on our website: <a href="https://allthebookmarks.com/contact" rel="external nofollow noopener" target="_blank">https://allthebookmarks.com/contact</a></p>
|
<p>By visiting this page on our website: <a href="https://allthebookmarks.com/contact" rel="external nofollow noopener" target="_blank">https://allthebookmarks.com/contact</a></p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<div class="text-center py-3">
|
||||||
|
<a href="#top" class="btn btn-outline-primary">Back to Top</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@ -55,12 +55,12 @@
|
|||||||
|
|
||||||
<!-- Admin Controls -->
|
<!-- Admin Controls -->
|
||||||
<div class="card-footer text-center">
|
<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">
|
<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> Message
|
<i class="fa fa-envelope"></i> Message
|
||||||
</a>
|
</a>
|
||||||
{ADMIN}
|
|
||||||
<a href="{ROOT_URL}admin/users/edit/{ID}" class="btn btn-warning btn-sm me-2" data-bs-toggle="tooltip" title="Edit User">
|
<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-square"></i> Edit
|
<i class="fa fa-pencil"></i> Edit
|
||||||
</a>
|
</a>
|
||||||
<a href="{ROOT_URL}admin/users/delete/{ID}" class="btn btn-danger btn-sm" data-bs-toggle="tooltip" title="Delete User">
|
<a href="{ROOT_URL}admin/users/delete/{ID}" class="btn btn-danger btn-sm" data-bs-toggle="tooltip" title="Delete User">
|
||||||
<i class="fa fa-times"></i> Delete
|
<i class="fa fa-times"></i> Delete
|
||||||
|
6
app/views/termsPage.html
Normal file
6
app/views/termsPage.html
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<div class="terms-page col-lg-8 mx-auto my-5">
|
||||||
|
{TERMS}
|
||||||
|
<div class="text-center py-3">
|
||||||
|
<a href="#top" class="btn btn-outline-primary">Back to Top</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -23,6 +23,11 @@ use TheTempusProject\Hermes\Functions\Route;
|
|||||||
use TheTempusProject\Houdini\Classes\Components;
|
use TheTempusProject\Houdini\Classes\Components;
|
||||||
use TheTempusProject\Houdini\Classes\Views;
|
use TheTempusProject\Houdini\Classes\Views;
|
||||||
|
|
||||||
|
// I switched to cloudflare which uses a dynamic proxy kinda thing, so any IP address lookups go wonky unless i get the OG IIP
|
||||||
|
if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) && filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP ) ) {
|
||||||
|
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiate a new instance of our application.
|
* Instantiate a new instance of our application.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user