Build out CMS frontend, add Bootstrap theme, add WYSIWYG editing
This commit is contained in:
parent
1897f4984b
commit
7fa0c00cda
@ -31,6 +31,9 @@ function returnToSender($msg, $arg = "") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch ($VARS['action']) {
|
switch ($VARS['action']) {
|
||||||
|
case "saveedits":
|
||||||
|
$page = $VARS['page'];
|
||||||
|
$content = $VARS['content'];
|
||||||
case "signout":
|
case "signout":
|
||||||
session_destroy();
|
session_destroy();
|
||||||
header('Location: index.php');
|
header('Location: index.php');
|
||||||
|
BIN
database.mwb
BIN
database.mwb
Binary file not shown.
111
lib/requiredpublic.php
Normal file
111
lib/requiredpublic.php
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file contains global settings and utility functions.
|
||||||
|
*/
|
||||||
|
ob_start(); // allow sending headers after content
|
||||||
|
// Settings file
|
||||||
|
require __DIR__ . '/../settings.php';
|
||||||
|
|
||||||
|
if (!DEBUG) {
|
||||||
|
error_reporting(0);
|
||||||
|
} else {
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 'On');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unicode, solves almost all stupid encoding problems
|
||||||
|
header('Content-Type: text/html; charset=utf-8');
|
||||||
|
|
||||||
|
// Strip PHP version
|
||||||
|
header('X-Powered-By: PHP');
|
||||||
|
|
||||||
|
// Security
|
||||||
|
header('X-Content-Type-Options: nosniff');
|
||||||
|
header('X-XSS-Protection: 1; mode=block');
|
||||||
|
header('X-Frame-Options: "DENY"');
|
||||||
|
header('Referrer-Policy: "no-referrer, strict-origin-when-cross-origin"');
|
||||||
|
$SECURE_NONCE = base64_encode(random_bytes(8));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Composer
|
||||||
|
require __DIR__ . '/../vendor/autoload.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kill off the running process and spit out an error message
|
||||||
|
* @param string $error error message
|
||||||
|
*/
|
||||||
|
function sendError($error) {
|
||||||
|
global $SECURE_NONCE;
|
||||||
|
die("<!DOCTYPE html>"
|
||||||
|
. "<meta charset=\"UTF-8\">"
|
||||||
|
. "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"
|
||||||
|
. "<title>Error</title>"
|
||||||
|
. "<style nonce=\"" . $SECURE_NONCE . "\">"
|
||||||
|
. "h1 {color: red; font-family: sans-serif; font-size: 20px; margin-bottom: 0px;} "
|
||||||
|
. "h2 {font-family: sans-serif; font-size: 16px;} "
|
||||||
|
. "p {font-family: monospace; font-size: 14px; width: 100%; wrap-style: break-word;} "
|
||||||
|
. "i {font-size: 12px;}"
|
||||||
|
. "</style>"
|
||||||
|
. "<h1>A fatal application error has occurred.</h1>"
|
||||||
|
. "<i>(This isn't your fault.)</i>"
|
||||||
|
. "<h2>Details:</h2>"
|
||||||
|
. "<p>" . htmlspecialchars($error) . "</p>");
|
||||||
|
}
|
||||||
|
|
||||||
|
date_default_timezone_set(TIMEZONE);
|
||||||
|
|
||||||
|
// Database settings
|
||||||
|
// Also inits database and stuff
|
||||||
|
use Medoo\Medoo;
|
||||||
|
|
||||||
|
$database;
|
||||||
|
try {
|
||||||
|
$database = new Medoo([
|
||||||
|
'database_type' => DB_TYPE,
|
||||||
|
'database_name' => DB_NAME,
|
||||||
|
'server' => DB_SERVER,
|
||||||
|
'username' => DB_USER,
|
||||||
|
'password' => DB_PASS,
|
||||||
|
'charset' => DB_CHARSET
|
||||||
|
]);
|
||||||
|
} catch (Exception $ex) {
|
||||||
|
//header('HTTP/1.1 500 Internal Server Error');
|
||||||
|
sendError("Database error. Try again later. $ex");
|
||||||
|
}
|
||||||
|
|
||||||
|
function getdatabase() {
|
||||||
|
global $database;
|
||||||
|
return $database;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getsiteid() {
|
||||||
|
global $database;
|
||||||
|
return $database->get("sites", "siteid");
|
||||||
|
}
|
||||||
|
|
||||||
|
function getpageslug() {
|
||||||
|
global $database;
|
||||||
|
if (isset($_GET['id'])) {
|
||||||
|
$id = $_GET['id'];
|
||||||
|
} else {
|
||||||
|
$id = "index";
|
||||||
|
}
|
||||||
|
if ($database->has("pages", ["AND" => ["slug" => $id, "siteid" => getsiteid()]])) {
|
||||||
|
return $id;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getpagetemplate() {
|
||||||
|
global $database;
|
||||||
|
$slug = getpageslug();
|
||||||
|
if (!is_null($slug)) {
|
||||||
|
return $database->get("pages", "template", ["AND" => ["slug" => $slug, "siteid" => getsiteid()]]);
|
||||||
|
}
|
||||||
|
return "404";
|
||||||
|
}
|
149
lib/themefunctions.php
Normal file
149
lib/themefunctions.php
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once __DIR__ . "/requiredpublic.php";
|
||||||
|
|
||||||
|
function get_site_name($echo = true) {
|
||||||
|
$db = getdatabase();
|
||||||
|
$title = $db->get('sites', "sitename", ["siteid" => getsiteid()]);
|
||||||
|
if ($echo) {
|
||||||
|
echo $title;
|
||||||
|
} else {
|
||||||
|
return $title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_site_url($echo = true) {
|
||||||
|
$db = getdatabase();
|
||||||
|
$url = $db->get('sites', "url", ["siteid" => getsiteid()]);
|
||||||
|
if ($echo) {
|
||||||
|
echo $url;
|
||||||
|
} else {
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_page_title($echo = true) {
|
||||||
|
$db = getdatabase();
|
||||||
|
$title = $db->get("pages", "title", ["AND" => ["slug" => getpageslug(), "siteid" => getsiteid()]]);
|
||||||
|
if ($echo) {
|
||||||
|
echo $title;
|
||||||
|
} else {
|
||||||
|
return $title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_page_clean_title($echo = true) {
|
||||||
|
$title = strip_tags(get_page_title(false));
|
||||||
|
if ($echo) {
|
||||||
|
echo $title;
|
||||||
|
} else {
|
||||||
|
return $title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_page_slug($echo = true) {
|
||||||
|
if ($echo) {
|
||||||
|
echo getpageslug();
|
||||||
|
} else {
|
||||||
|
return getpageslug();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_page_url($echo = true, $slug = null) {
|
||||||
|
if ($slug == null) {
|
||||||
|
$slug = get_page_slug(false);
|
||||||
|
}
|
||||||
|
$url = get_site_url(false) . "index.php?id=$slug";
|
||||||
|
if ($echo) {
|
||||||
|
echo $url;
|
||||||
|
} else {
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_component($name, $context = null, $echo = true) {
|
||||||
|
$db = getdatabase();
|
||||||
|
if ($context == null) {
|
||||||
|
$context = get_page_slug(false);
|
||||||
|
}
|
||||||
|
$pageid = $db->get("pages", "pageid", ["AND" => ["slug" => $context, "siteid" => getsiteid()]]);
|
||||||
|
$content = "";
|
||||||
|
if ($db->has("components", ["AND" => ["pageid" => $pageid, "name" => $name]])) {
|
||||||
|
$content = $db->get("components", "content", ["AND" => ["pageid" => $pageid, "name" => $name]]);
|
||||||
|
}
|
||||||
|
if ($echo) {
|
||||||
|
echo $content;
|
||||||
|
} else {
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_page_content($slug = null) {
|
||||||
|
get_component("content", $slug);
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_header() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_theme_url($echo = true) {
|
||||||
|
$db = getdatabase();
|
||||||
|
$site = $db->get('sites', ["sitename", "url", "theme"], ["siteid" => getsiteid()]);
|
||||||
|
$url = $site["url"] . "themes/" . $site["theme"];
|
||||||
|
if ($echo) {
|
||||||
|
echo $url;
|
||||||
|
} else {
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_theme_color_url($echo = true) {
|
||||||
|
$db = getdatabase();
|
||||||
|
$site = $db->get('sites', ["sitename", "url", "theme", "color"], ["siteid" => getsiteid()]);
|
||||||
|
if ($site["color"] == null) {
|
||||||
|
$site["color"] = "default";
|
||||||
|
}
|
||||||
|
if (!file_exists(__DIR__ . "/../public/themes/" . $site["theme"] . "/colors/" . $site['color'])) {
|
||||||
|
$site['color'] = "default";
|
||||||
|
}
|
||||||
|
$url = $site["url"] . "themes/" . $site["theme"] . "/colors/" . $site["color"];
|
||||||
|
if ($echo) {
|
||||||
|
echo $url;
|
||||||
|
} else {
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_navigation($currentpage = null, $classPrefix = "", $liclass = "", $currentclass = "current", $linkclass = "", $currentlinkclass = "active") {
|
||||||
|
$db = getdatabase();
|
||||||
|
$pages = $db->select('pages', ['pageid', 'parentid', 'slug', 'nav'], ["AND" => ["siteid" => getsiteid(), "nav[!]" => null], "ORDER" => ["navorder" => "ASC"]]);
|
||||||
|
if (is_null($currentpage)) {
|
||||||
|
$current = getpageslug();
|
||||||
|
} else {
|
||||||
|
$current = $currentpage;
|
||||||
|
}
|
||||||
|
foreach ($pages as $p) {
|
||||||
|
$class = $classPrefix . $p['slug'] . " $liclass";
|
||||||
|
$aclass = $linkclass;
|
||||||
|
if ($p['slug'] == $current) {
|
||||||
|
$class .= " $currentclass";
|
||||||
|
$aclass .= " $currentlinkclass";
|
||||||
|
}
|
||||||
|
echo '<li class="' . $class . '">'
|
||||||
|
. '<a class="' . $aclass . '" href="' . get_page_url(false, $p['slug']) . '">'
|
||||||
|
. $p['nav']
|
||||||
|
. '</a>'
|
||||||
|
. '</li>' . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function return_site_ver() {
|
||||||
|
// Stub for GetSimple
|
||||||
|
return "SiteWriter";
|
||||||
|
}
|
9
public/file.php
Normal file
9
public/file.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// TODO: Allow access to an uploaded files directory via this script.
|
31
public/index.php
Normal file
31
public/index.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once __DIR__ . "/../lib/requiredpublic.php";
|
||||||
|
require_once __DIR__ . "/../lib/themefunctions.php";
|
||||||
|
|
||||||
|
if (!getsiteid()) {
|
||||||
|
sendError("No website has been created yet. Please open " . SITE_TITLE . " and make one.");
|
||||||
|
}
|
||||||
|
|
||||||
|
$theme = $database->get("sites", "theme", ["siteid" => getsiteid()]);
|
||||||
|
|
||||||
|
$template = getpagetemplate();
|
||||||
|
include __DIR__ . "/themes/$theme/$template.php";
|
||||||
|
|
||||||
|
if (isset($_GET['edit'])) {
|
||||||
|
?>
|
||||||
|
<link href="<?php echo URL; ?>/static/css/summernote-lite.css" rel="stylesheet" />
|
||||||
|
<script src="<?php echo URL; ?>/static/js/summernote-lite.js"></script>
|
||||||
|
<script src="<?php echo URL; ?>/static/js/editor.js"></script>
|
||||||
|
<script>
|
||||||
|
var save_url = "<?php echo URL; ?>/action.php";
|
||||||
|
var page_slug = "<?php getpageslug(); ?>";
|
||||||
|
</script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
27
public/themes/bootstrap/404.php
Normal file
27
public/themes/bootstrap/404.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include __DIR__ . "/inc/header.inc.php";
|
||||||
|
?>
|
||||||
|
|
||||||
|
<main role="main" class="mt-5">
|
||||||
|
<div class="jumbotron">
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="display-4">404 Page Not Found</h1>
|
||||||
|
<div class="ml-2 lead">
|
||||||
|
The requested page could not be found.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
include __DIR__ . "/inc/footer.inc.php";
|
||||||
|
?>
|
7
public/themes/bootstrap/assets/bootstrap.min.js
vendored
Normal file
7
public/themes/bootstrap/assets/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
public/themes/bootstrap/assets/jquery-3.3.1.slim.min.js
vendored
Normal file
2
public/themes/bootstrap/assets/jquery-3.3.1.slim.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
public/themes/bootstrap/assets/popper.min.js
vendored
Normal file
5
public/themes/bootstrap/assets/popper.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/cerulean/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/cerulean/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/cosmo/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/cosmo/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/cyborg/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/cyborg/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/darkly/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/darkly/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
7
public/themes/bootstrap/colors/default/bootstrap.min.css
vendored
Normal file
7
public/themes/bootstrap/colors/default/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/flatly/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/flatly/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/journal/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/journal/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/litera/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/litera/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/lumen/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/lumen/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/lux/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/lux/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/materia/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/materia/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/minty/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/minty/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/pulse/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/pulse/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/sandstone/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/sandstone/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/simplex/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/simplex/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/sketchy/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/sketchy/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/slate/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/slate/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/solar/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/solar/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/spacelab/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/spacelab/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/superhero/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/superhero/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/united/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/united/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
12
public/themes/bootstrap/colors/yeti/bootstrap.min.css
vendored
Normal file
12
public/themes/bootstrap/colors/yeti/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
40
public/themes/bootstrap/contact.php
Normal file
40
public/themes/bootstrap/contact.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include __DIR__ . "/inc/header.inc.php";
|
||||||
|
?>
|
||||||
|
|
||||||
|
<main role="main" class="mt-5">
|
||||||
|
<div class="jumbotron">
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="display-4"><?php get_page_title(); ?></h1>
|
||||||
|
<p class="ml-2 lead sw-editable" data-component="lead"><?php get_component("lead"); ?></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<form action="<?php get_site_url(); ?>/contact.php" method="POST">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 col-md-6 mb-3">
|
||||||
|
<label for="name">Name</label>
|
||||||
|
<input type="text" class="form-control" name="name" id="name" placeholder="" required />
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-md-6 mb-3">
|
||||||
|
<label for="email">Email</label>
|
||||||
|
<input type="email" class="form-control" name="email" id="email" placeholder="you@example.com" required />
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
<label for="message">Message</label>
|
||||||
|
<textarea class="form-control" name="message" id="message" placeholder="" required ></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
include __DIR__ . "/inc/footer.inc.php";
|
||||||
|
?>
|
31
public/themes/bootstrap/default.php
Normal file
31
public/themes/bootstrap/default.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include __DIR__ . "/inc/header.inc.php";
|
||||||
|
?>
|
||||||
|
|
||||||
|
<main role="main" class="mt-5">
|
||||||
|
<div class="jumbotron">
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="display-4"><?php get_page_title(); ?></h1>
|
||||||
|
<div class="ml-2 lead">
|
||||||
|
<div class="sw-editable" data-component="lead">
|
||||||
|
<?php get_component("lead"); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="sw-editable" data-component="content">
|
||||||
|
<?php get_page_content(); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
include __DIR__ . "/inc/footer.inc.php";
|
||||||
|
?>
|
45
public/themes/bootstrap/home.php
Normal file
45
public/themes/bootstrap/home.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include __DIR__ . "/inc/header.inc.php";
|
||||||
|
?>
|
||||||
|
|
||||||
|
<main role="main" class="mt-5">
|
||||||
|
<div class="jumbotron">
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="display-4"><?php get_page_title(); ?></h1>
|
||||||
|
<div class="ml-2 lead">
|
||||||
|
<div class="sw-editable" data-component="lead">
|
||||||
|
<?php get_component("lead"); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="sw-editable" data-component="cardrow-1">
|
||||||
|
<?php get_component("cardrow-1"); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="sw-editable" data-component="cardrow-2">
|
||||||
|
<?php get_component("cardrow-2"); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="sw-editable" data-component="cardrow-3">
|
||||||
|
<?php get_component("cardrow-3"); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
include __DIR__ . "/inc/footer.inc.php";
|
||||||
|
?>
|
12
public/themes/bootstrap/inc/footer.inc.php
Normal file
12
public/themes/bootstrap/inc/footer.inc.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
?>
|
||||||
|
<script src="<?php get_theme_url(); ?>/assets/jquery-3.3.1.slim.min.js"></script>
|
||||||
|
<script src="<?php get_theme_url(); ?>/assets/popper.min.js"></script>
|
||||||
|
<script src="<?php get_theme_url(); ?>/assets/bootstrap.min.js"></script>
|
25
public/themes/bootstrap/inc/header.inc.php
Normal file
25
public/themes/bootstrap/inc/header.inc.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
<link rel="stylesheet" href="<?php get_theme_color_url(); ?>/bootstrap.min.css" />
|
||||||
|
<title><?php get_site_name(); ?></title>
|
||||||
|
<?php get_header(); ?>
|
||||||
|
|
||||||
|
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-primary">
|
||||||
|
<a class="navbar-brand" href="<?php get_site_url(); ?>"><?php get_site_name(); ?></a>
|
||||||
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-collapse" aria-controls="navbar-collapse" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse" id="navbar-collapse">
|
||||||
|
<ul class="navbar-nav mr-auto">
|
||||||
|
<?php get_navigation(null, "", "nav-item", "active", "nav-link"); ?>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
107
public/themes/bootstrap/theme.json
Normal file
107
public/themes/bootstrap/theme.json
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
{
|
||||||
|
"name": "Bootstrap",
|
||||||
|
"templates": {
|
||||||
|
"default": {
|
||||||
|
"title": "Default",
|
||||||
|
"description": "A regular page."
|
||||||
|
},
|
||||||
|
"home": {
|
||||||
|
"title": "Home",
|
||||||
|
"description": "A homepage."
|
||||||
|
},
|
||||||
|
"contact": {
|
||||||
|
"title": "Contact",
|
||||||
|
"description": "A page with a contact form."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"colors": {
|
||||||
|
"default": {
|
||||||
|
"title": "Default",
|
||||||
|
"description": "Standard Bootstrap theme"
|
||||||
|
},
|
||||||
|
"cerulean": {
|
||||||
|
"title": "Cerulean",
|
||||||
|
"description": "A calm blue sky"
|
||||||
|
},
|
||||||
|
"cosmo": {
|
||||||
|
"title": "Cosmo",
|
||||||
|
"description": "An ode to Metro"
|
||||||
|
},
|
||||||
|
"cyborg": {
|
||||||
|
"title": "Cyborg",
|
||||||
|
"description": "Jet black and electric blue"
|
||||||
|
},
|
||||||
|
"darkly": {
|
||||||
|
"title": "Darkly",
|
||||||
|
"description": "Flatly in night mode"
|
||||||
|
},
|
||||||
|
"flatly": {
|
||||||
|
"title": "Flatly",
|
||||||
|
"description": "Flat and modern"
|
||||||
|
},
|
||||||
|
"journal": {
|
||||||
|
"title": "Journal",
|
||||||
|
"description": "Crisp like a new sheet of paper"
|
||||||
|
},
|
||||||
|
"litera": {
|
||||||
|
"title": "Litera",
|
||||||
|
"description": "The medium is the message"
|
||||||
|
},
|
||||||
|
"lumen": {
|
||||||
|
"title": "Lumen",
|
||||||
|
"description": "Light and shadow"
|
||||||
|
},
|
||||||
|
"lux": {
|
||||||
|
"title": "Lux",
|
||||||
|
"description": "A touch of class"
|
||||||
|
},
|
||||||
|
"materia": {
|
||||||
|
"title": "Materia",
|
||||||
|
"description": "Material is the metaphor"
|
||||||
|
},
|
||||||
|
"minty": {
|
||||||
|
"title": "Minty",
|
||||||
|
"description": "A fresh feel"
|
||||||
|
},
|
||||||
|
"pulse": {
|
||||||
|
"title": "Pulse",
|
||||||
|
"description": "A trace of purple"
|
||||||
|
},
|
||||||
|
"sandstone": {
|
||||||
|
"title": "Sandstone",
|
||||||
|
"description": "A touch of warmth"
|
||||||
|
},
|
||||||
|
"simplex": {
|
||||||
|
"title": "Simplex",
|
||||||
|
"description": "Mini and minimalist"
|
||||||
|
},
|
||||||
|
"sketchy": {
|
||||||
|
"title": "Sketchy",
|
||||||
|
"description": "A hand-drawn look for mockups and mirth"
|
||||||
|
},
|
||||||
|
"slate": {
|
||||||
|
"title": "Slate",
|
||||||
|
"description": "Shades of gunmetal gray"
|
||||||
|
},
|
||||||
|
"solar": {
|
||||||
|
"title": "Solar",
|
||||||
|
"description": "A spin on Solarized"
|
||||||
|
},
|
||||||
|
"spacelab": {
|
||||||
|
"title": "Spacelab",
|
||||||
|
"description": "Silvery and sleek"
|
||||||
|
},
|
||||||
|
"superhero": {
|
||||||
|
"title": "Superhero",
|
||||||
|
"description": "The brave and the blue"
|
||||||
|
},
|
||||||
|
"united": {
|
||||||
|
"title": "United",
|
||||||
|
"description": "Ubuntu orange and unique font"
|
||||||
|
},
|
||||||
|
"yeti": {
|
||||||
|
"title": "Yeti",
|
||||||
|
"description": "A friendly foundation"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,10 @@ define("PORTAL_KEY", "123");
|
|||||||
define("TIMEZONE", "America/Denver");
|
define("TIMEZONE", "America/Denver");
|
||||||
|
|
||||||
// Base URL for site links.
|
// Base URL for site links.
|
||||||
define('URL', '.');
|
define('URL', '/sitewriter');
|
||||||
|
|
||||||
|
// Folder for public files
|
||||||
|
define('FILE_UPLOAD_PATH', __DIR__ . '/public/files');
|
||||||
|
|
||||||
// Use Captcheck on login screen
|
// Use Captcheck on login screen
|
||||||
// https://captcheck.netsyms.com
|
// https://captcheck.netsyms.com
|
||||||
|
BIN
static/css/font/summernote.eot
Normal file
BIN
static/css/font/summernote.eot
Normal file
Binary file not shown.
BIN
static/css/font/summernote.ttf
Normal file
BIN
static/css/font/summernote.ttf
Normal file
Binary file not shown.
BIN
static/css/font/summernote.woff
Normal file
BIN
static/css/font/summernote.woff
Normal file
Binary file not shown.
1
static/css/summernote-lite.css
Normal file
1
static/css/summernote-lite.css
Normal file
File diff suppressed because one or more lines are too long
31
static/js/editor.js
Normal file
31
static/js/editor.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(".sw-editable").summernote({
|
||||||
|
airMode: false,
|
||||||
|
toolbar: [
|
||||||
|
['style', ['bold', 'italic', 'underline', 'clear']],
|
||||||
|
['font', ['strikethrough', 'superscript', 'subscript']],
|
||||||
|
['fontsize', ['fontsize']],
|
||||||
|
['para', ['ul', 'ol']],
|
||||||
|
['insert', ['link', 'picture']],
|
||||||
|
['misc', ['undo', 'redo', 'fullscreen', 'codeview']]
|
||||||
|
],
|
||||||
|
placeholder: 'Click to edit'
|
||||||
|
});
|
||||||
|
|
||||||
|
function saveEdits() {
|
||||||
|
var components = [];
|
||||||
|
$(".sw-editable").each(function (e) {
|
||||||
|
components[$(this).data("component")] = $(this).html();
|
||||||
|
});
|
||||||
|
var content = JSON.stringify(components);
|
||||||
|
$.post(save_url, {
|
||||||
|
action: "saveedits",
|
||||||
|
page: "",
|
||||||
|
content: content
|
||||||
|
});
|
||||||
|
}
|
7837
static/js/summernote-lite.js
Normal file
7837
static/js/summernote-lite.js
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user