r20150130

This commit is contained in:
Pachira 2016-01-30 01:18:23 +01:00
parent 7d23f1b6c7
commit 232ddc6114
9 changed files with 151 additions and 12 deletions

View file

@ -7,6 +7,7 @@
"phpmailer/phpmailer": "*",
"paypal/rest-api-sdk-php": "*",
"jbbcode/jbbcode": "*",
"corneltek/cliframework": "*"
"corneltek/cliframework": "*",
"phroute/phroute": "^2.1"
}
}

View file

@ -0,0 +1,16 @@
<?php
/*
* Meta controllers
*/
namespace Sakura\Controllers;
use Sakura\Template;
/**
* Class Meta
* @package Sakura
*/
class Meta
{
}

View file

@ -1,14 +1,85 @@
<?php
/*
* Router class
* Router Wrapper
*/
namespace Sakura;
use Phroute\Phroute\RouteCollector;
use Phroute\Phroute\Dispatcher;
/**
* Class Router
* @package Sakura
*/
class Router
{
// Router container
protected static $router = null;
// Base path
protected static $basePath = null;
// Dispatcher
protected static $dispatcher = null;
// Request methods
protected static $methods = [
'GET',
'POST',
'PUT',
'PATCH',
'DELETE',
'HEAD',
'ANY'
];
// Add a handler
public static function __callStatic($name, $args)
{
// Check if the method exists
if (in_array($name = strtoupper($name), self::$methods)) {
$path = isset($args[2]) && $args !== null ? [$args[0], $args[2]] : $args[0];
$filter = isset($args[3]) ? $args[3] : [];
self::$router->addRoute($name, $path, $args[1], $filter);
}
}
// Initialisation function
public static function init($basePath = '/')
{
// Set base path
self::setBasePath($basePath);
// Create router
self::$router = new RouteCollector;
}
// Set base path
public static function setBasePath($basePath)
{
self::$basePath = $basePath;
}
// Parse the url
private static function parseUrl($url)
{
return parse_url(str_replace(self::$basePath, '', $url), PHP_URL_PATH);
}
// Handle requests
public static function handle($method, $url)
{
// Check if the dispatcher is defined
if (self::$dispatcher === null) {
self::$dispatcher = new Dispatcher(self::$router->getData());
}
// Parse url
$url = self::parseUrl($url);
// Handle the request
return self::$dispatcher->dispatch($method, $url);
}
}

View file

@ -6,6 +6,12 @@ var DynLoad = (function () {
}
// Add the hooks
DynLoad.init = function () {
if (this.active) {
return;
}
else {
this.active = true;
}
// Add an event listener to the document
document.addEventListener("click", function (e) {
// Check if a href attribute is set
@ -21,7 +27,7 @@ var DynLoad = (function () {
var doc = (new DOMParser()).parseFromString(loader.response(), "text/html");
history.pushState(null, null, e.target['href']);
document.head.innerHTML = doc.head.innerHTML;
document.getElementById("content").innerHTML = doc.getElementById("content").innerHTML;
document.getElementById("contentwrapper").innerHTML = doc.getElementById("contentwrapper").innerHTML;
var evt = document.createEvent('Event');
evt.initEvent('load', false, false);
window.dispatchEvent(evt);
@ -31,5 +37,7 @@ var DynLoad = (function () {
}
});
};
// Is active
DynLoad.active = false;
return DynLoad;
})();

View file

@ -3,8 +3,17 @@
*/
class DynLoad {
// Is active
public static active: boolean = false;
// Add the hooks
public static init(): void {
if (this.active) {
return;
} else {
this.active = true;
}
// Add an event listener to the document
document.addEventListener("click", (e) => {
// Check if a href attribute is set
@ -23,7 +32,7 @@ class DynLoad {
var doc = (new DOMParser()).parseFromString(loader.response(), "text/html");
history.pushState(null, null, e.target['href']);
document.head.innerHTML = doc.head.innerHTML;
document.getElementById("content").innerHTML = doc.getElementById("content").innerHTML;
document.getElementById("contentwrapper").innerHTML = doc.getElementById("contentwrapper").innerHTML;
var evt = document.createEvent('Event');
evt.initEvent('load', false, false);
window.dispatchEvent(evt);

19
public/router.php Normal file
View file

@ -0,0 +1,19 @@
<?php
/*
* Sakura Router
*/
// Declare Namespace
namespace Sakura;
// Include components
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
if (!Config::local('dev', 'show_changelog') || !Config::local('dev', 'show_errors')) {
exit;
}
Router::setBasePath('/router.php');
// Handle requests
echo Router::handle($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);

7
routes.php Normal file
View file

@ -0,0 +1,7 @@
<?php
/*
* Router paths
*/
// Define namespace
namespace Sakura;

View file

@ -8,7 +8,7 @@
namespace Sakura;
// Define Sakura version
define('SAKURA_VERSION', '20160126');
define('SAKURA_VERSION', '20160130');
define('SAKURA_VLABEL', 'Amethyst');
define('SAKURA_COLOUR', '#9966CC');
@ -51,6 +51,7 @@ require_once ROOT . 'libraries/News.php';
require_once ROOT . 'libraries/Payments.php';
require_once ROOT . 'libraries/Perms.php';
require_once ROOT . 'libraries/Rank.php';
require_once ROOT . 'libraries/Router.php';
require_once ROOT . 'libraries/Session.php';
require_once ROOT . 'libraries/Template.php';
require_once ROOT . 'libraries/Trick.php';
@ -60,6 +61,7 @@ require_once ROOT . 'libraries/Users.php';
require_once ROOT . 'libraries/Utils.php';
require_once ROOT . 'libraries/Whois.php';
require_once ROOT . 'libraries/Console/Application.php';
require_once ROOT . 'libraries/Controllers/Meta.php';
require_once ROOT . 'libraries/Forum/Forum.php';
require_once ROOT . 'libraries/Forum/Post.php';
require_once ROOT . 'libraries/Forum/Thread.php';
@ -116,6 +118,12 @@ if (Config::get('no_cron_service')) {
// Start output buffering
ob_start(Config::get('use_gzip') ? 'ob_gzhandler' : null);
// Initialise the router
Router::init();
// Include routes file
include_once ROOT . 'routes.php';
// Auth check
$authCheck = Users::checkLogin();

View file

@ -1,7 +1,7 @@
{% set friends = profile.friends(2)|batch(12) %}
{% set paginationPages = friends %}
{% set paginationUrl %}{{ urls.format('SETTING_MODE', ['friends', 'listing']) }}{% endset %}
{% set paginationUrl %}{{ urls.format('USER_FRIENDS', [profile.id]) }}{% endset %}
<div class="new-profile-mode-title">
<h1 class="stylised">Friends</h1>
@ -16,9 +16,9 @@
</div>
{% endfor %}
<div class="clear"></div>
{% if friends|length > 1 %}
<div>
{% include 'elements/pagination.twig' %}
</div>
{% endif %}
</div>
</div>
{% if friends|length > 1 %}
<div style="text-align: right;">
{% include 'elements/pagination.twig' %}
</div>
{% endif %}