Working on web admin

Former-commit-id: 61974ea048
This commit is contained in:
Jérôme Schneider 2012-04-28 13:21:17 +02:00
parent 640fc5f8b5
commit 9a563689f3
99 changed files with 463 additions and 267 deletions

0
.gitignore vendored Normal file → Executable file
View file

View file

@ -1,155 +0,0 @@
<?php
/***************************************************************
* Copyright notice
*
* (c) 2012 Jérôme Schneider <mail@jeromeschneider.fr>
* All rights reserved
*
* http://baikal.codr.fr
*
* This script is part of the Baïkal Server project. The Baïkal
* Server project is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
function rmBeginSlash($sString) {
if(substr($sString, 0, 1) === "/") {
$sString = substr($sString, 1);
}
return $sString;
}
function rmEndSlash($sString) {
if(substr($sString, -1) === "/") {
$sString = substr($sString, 0, -1);
}
return $sString;
}
function appendSlash($sString) {
if(substr($sString, -1) !== "/") {
$sString .= "/";
}
return $sString;
}
function prependSlash($sString) {
if(substr($sString, 0, 1) !== "/") {
$sString = "/" . $sString;
}
return $sString;
}
function installTool() {
if(defined("BAIKAL_CONTEXT_INSTALL") && BAIKAL_CONTEXT_INSTALL === TRUE) {
return;
} else {
$sInstallToolUrl = BAIKAL_URI . "admin/install/";
header("Location: " . $sInstallToolUrl);
exit(0);
}
}
# Asserting PHP 5.3.0+
if(version_compare(PHP_VERSION, '5.3.0', '<')) {
die('Baikal Fatal Error: Baikal requires PHP 5.3.0+ to run properly. You version is: ' . PHP_VERSION . '.');
}
# Registering Baikal classloader
define("BAIKAL_PATH_FRAMEWORKROOT", dirname(dirname(__FILE__)) . "/");
require_once(BAIKAL_PATH_FRAMEWORKROOT . '/Core/ClassLoader.php');
\Baikal\Core\ClassLoader::register();
\Baikal\Core\Tools::assertEnvironmentIsOk();
# determine Baïkal install root path
# not using realpath here to avoid symlinks resolution
define("BAIKAL_PATH_ROOT", dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . "/"); # ../../../../../
define("BAIKAL_PATH_CORE", BAIKAL_PATH_ROOT . "Core/");
define("BAIKAL_PATH_SPECIFIC", BAIKAL_PATH_ROOT . "Specific/");
define("BAIKAL_PATH_FRAMEWORKS", BAIKAL_PATH_CORE . "Frameworks/");
define("BAIKAL_PATH_WWWROOT", BAIKAL_PATH_CORE . "WWWRoot/");
# Define path to Baïkal SQLite file
define("BAIKAL_SQLITE_FILE", BAIKAL_PATH_SPECIFIC . "db/baikal.sqlite");
require_once(BAIKAL_PATH_CORE . "Distrib.php");
# Determine BAIKAL_URI
$sScript = substr($_SERVER["SCRIPT_FILENAME"], strlen($_SERVER["DOCUMENT_ROOT"]));
$sDirName = appendSlash(dirname($sScript));
$sBaseUrl = appendSlash(substr($sDirName, 0, -1 * strlen(BAIKAL_CONTEXT_BASEURI)));
$aParts = explode("/", $_SERVER["SERVER_PROTOCOL"]);
$sProtocol = strtolower(array_shift($aParts));
define("BAIKAL_BASEURI", $sBaseUrl);
define("BAIKAL_URI", $sProtocol . "://" . rmEndSlash($_SERVER["HTTP_HOST"]) . $sBaseUrl);
unset($sScript); unset($sDirName); unset($sBaseUrl); unset($sProtocol); unset($aParts);
# Bootstrap Flake
require_once(BAIKAL_PATH_FRAMEWORKS . "Flake/Core/Bootstrap.php");
# Check that a config file exists
if(
!file_exists(BAIKAL_PATH_SPECIFIC . "config.php") ||
!file_exists(BAIKAL_PATH_SPECIFIC . "config.system.php")
) {
installTool();
} else {
require_once(BAIKAL_PATH_SPECIFIC . "config.php");
require_once(BAIKAL_PATH_SPECIFIC . "config.system.php");
date_default_timezone_set(BAIKAL_TIMEZONE);
# Check that Baïkal is already configured
if(!defined("BAIKAL_CONFIGURED_VERSION")) {
installTool();
} else {
# Check that running version matches configured version
if(version_compare(BAIKAL_VERSION, BAIKAL_CONFIGURED_VERSION) > 0) {
installTool();
} else {
# Check that admin password is set
if(!defined("BAIKAL_ADMIN_PASSWORDHASH")) {
installTool();
}
\Baikal\Core\Tools::assertBaikalIsOk();
# Establishing connection with database
$GLOBALS["DB"] = new \Flake\Core\Database\Sqlite(BAIKAL_SQLITE_FILE);
# Mapping PHP errors to exceptions; needed by SabreDAV
function exception_error_handler($errno, $errstr, $errfile, $errline) {
throw new \ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
unset($bShouldCheckEnv);
# SabreDAV Autoloader
require_once(BAIKAL_PATH_SABREDAV . 'autoload.php');
}
}
}

View file

27
CoreVersions/0.2.0/Frameworks/Baikal/Core/Tools.php Normal file → Executable file
View file

@ -48,50 +48,59 @@ class Tools {
}
}
public static function configureEnvironment() {
set_exception_handler('\Baikal\Core\Tools::handleException');
ini_set("error_reporting", E_ALL);
}
function handleException($exception) {
echo $exception;
}
public static function assertBaikalIsOk() {
# Asserting DB file exists
if(!file_exists(BAIKAL_SQLITE_FILE)) {
if(!file_exists(PROJECT_SQLITE_FILE)) {
throw new \Exception("DB file does not exist. To create it, please copy 'Core/Resources/baikal.empty.sqlite' to 'Specific/db/baikal.sqlite'.");
}
# Asserting DB file is readable
if(!is_readable(BAIKAL_SQLITE_FILE)) {
if(!is_readable(PROJECT_SQLITE_FILE)) {
throw new \Exception("DB file is not readable. Please give read permissions to httpd user on file 'Specific/db/baikal.sqlite'.");
}
# Asserting DB file is writable
if(!is_writable(BAIKAL_SQLITE_FILE)) {
if(!is_writable(PROJECT_SQLITE_FILE)) {
throw new \Exception("DB file is not writable. Please give write permissions to httpd user on file 'Specific/db/baikal.sqlite'.");
}
# Asserting config file exists
if(!file_exists(BAIKAL_PATH_SPECIFIC . "config.php")) {
if(!file_exists(PROJECT_PATH_SPECIFIC . "config.php")) {
throw new \Exception("Specific/config.php does not exist. Please use the Install tool to create it.");
}
# Asserting config file is readable
if(!is_readable(BAIKAL_PATH_SPECIFIC . "config.php")) {
if(!is_readable(PROJECT_PATH_SPECIFIC . "config.php")) {
throw new \Exception("Specific/config.php is not readable. Please give read permissions to httpd user on file 'Specific/config.php'.");
}
# Asserting config file is writable
if(!is_writable(BAIKAL_PATH_SPECIFIC . "config.php")) {
if(!is_writable(PROJECT_PATH_SPECIFIC . "config.php")) {
throw new \Exception("Specific/config.php is not writable. Please give write permissions to httpd user on file 'Specific/config.php'.");
}
# Asserting system config file exists
if(!file_exists(BAIKAL_PATH_SPECIFIC . "config.system.php")) {
if(!file_exists(PROJECT_PATH_SPECIFIC . "config.system.php")) {
throw new \Exception("Specific/config.system.php does not exist. Please use the Install tool to create it.");
}
# Asserting system config file is readable
if(!is_readable(BAIKAL_PATH_SPECIFIC . "config.system.php")) {
if(!is_readable(PROJECT_PATH_SPECIFIC . "config.system.php")) {
throw new \Exception("Specific/config.system.php is not readable. Please give read permissions to httpd user on file 'Specific/config.system.php'.");
}
# Asserting system config file is writable
if(!is_writable(BAIKAL_PATH_SPECIFIC . "config.system.php")) {
if(!is_writable(PROJECT_PATH_SPECIFIC . "config.system.php")) {
throw new \Exception("Specific/config.system.php is not writable. Please give write permissions to httpd user on file 'Specific/config.system.php'.");
}
}

View file

@ -0,0 +1,97 @@
<?php
/***************************************************************
* Copyright notice
*
* (c) 2012 Jérôme Schneider <mail@jeromeschneider.fr>
* All rights reserved
*
* http://baikal.codr.fr
*
* This script is part of the Baïkal Server project. The Baïkal
* Server project is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
namespace Baikal;
class Framework extends \Flake\Core\Framework {
public static function installTool() {
if(defined("BAIKAL_CONTEXT_INSTALL") && BAIKAL_CONTEXT_INSTALL === TRUE) {
return;
} else {
$sInstallToolUrl = PROJECT_URI . "admin/install/";
header("Location: " . $sInstallToolUrl);
exit(0);
}
}
public static function bootstrap() {
# Registering Baikal classloader
define("BAIKAL_PATH_FRAMEWORKROOT", dirname(__FILE__) . "/");
require_once(BAIKAL_PATH_FRAMEWORKROOT . '/Core/ClassLoader.php');
\Baikal\Core\ClassLoader::register();
\Baikal\Core\Tools::assertEnvironmentIsOk();
\Baikal\Core\Tools::configureEnvironment();
# Check that a config file exists
if(
!file_exists(PROJECT_PATH_SPECIFIC . "config.php") ||
!file_exists(PROJECT_PATH_SPECIFIC . "config.system.php")
) {
self::installTool();
} else {
require_once(PROJECT_PATH_SPECIFIC . "config.php");
require_once(PROJECT_PATH_SPECIFIC . "config.system.php");
date_default_timezone_set(BAIKAL_TIMEZONE);
# Check that Baïkal is already configured
if(!defined("BAIKAL_CONFIGURED_VERSION")) {
self::installTool();
} else {
# Check that running version matches configured version
if(version_compare(BAIKAL_VERSION, BAIKAL_CONFIGURED_VERSION) > 0) {
self::installTool();
} else {
# Check that admin password is set
if(!defined("BAIKAL_ADMIN_PASSWORDHASH")) {
self::installTool();
}
\Baikal\Core\Tools::assertBaikalIsOk();
set_error_handler("\Baikal\Framework::exception_error_handler");
unset($bShouldCheckEnv);
# SabreDAV Autoloader
require_once(BAIKAL_PATH_SABREDAV . 'autoload.php');
}
}
}
}
# Mapping PHP errors to exceptions; needed by SabreDAV
function exception_error_handler($errno, $errstr, $errfile, $errline) {
throw new \ErrorException($errstr, 0, $errno, $errfile, $errline);
}
}

View file

View file

View file

View file

0
CoreVersions/0.2.0/Frameworks/Baikal/Model/Config.php Normal file → Executable file
View file

View file

View file

View file

0
CoreVersions/0.2.0/Frameworks/Baikal/Model/User.php Normal file → Executable file
View file

View file

View file

@ -35,8 +35,13 @@ class Initialize extends \Flake\Core\Controller {
public function __construct() {
parent::__construct();
# Assert that /Specific is writable
if(!file_exists(PROJECT_PATH_SPECIFIC) || !is_dir(PROJECT_PATH_SPECIFIC) || !is_writable(PROJECT_PATH_SPECIFIC)) {
throw new \Flake\Core\DocumentedException("specificreadonly");
}
$this->createDefaultConfigFilesIfNeeded();
$this->oModel = new \Baikal\Model\Config\Standard(BAIKAL_PATH_SPECIFIC . "config.php");
$this->oModel = new \Baikal\Model\Config\Standard(PROJECT_PATH_SPECIFIC . "config.php");
# Assert that config file is writable
if(!$this->oModel->writable()) {
@ -53,7 +58,7 @@ class Initialize extends \Flake\Core\Controller {
$this->oForm->execute();
if($this->oForm->persisted()) {
$sContent = file_get_contents(BAIKAL_PATH_SPECIFIC . "config.system.php");
$sContent = file_get_contents(PROJECT_PATH_SPECIFIC . "config.system.php");
$sBaikalVersion = BAIKAL_VERSION;
$sEncryptionKey = md5(microtime() . rand());
@ -68,7 +73,7 @@ define("BAIKAL_CONFIGURED_VERSION", "{$sBaikalVersion}");
PHP;
# Writing results to file
file_put_contents(BAIKAL_PATH_SPECIFIC . "config.system.php", $sContent . "\n\n" . $sNewConstants);
file_put_contents(PROJECT_PATH_SPECIFIC . "config.system.php", $sContent . "\n\n" . $sNewConstants);
}
}
}
@ -85,7 +90,7 @@ PHP;
HTML;
if($this->oForm->persisted()) {
$sHtml .= "<p>Baïkal is now configured. You may now <a class='btn btn-success' href='" . BAIKAL_URI . "admin/'>Access the Baïkal admin</a></h2>";
$sHtml .= "<p>Baïkal is now configured. You may now <a class='btn btn-success' href='" . PROJECT_URI . "admin/'>Access the Baïkal admin</a></h2>";
} else {
# Display the config form
@ -96,25 +101,25 @@ HTML;
}
protected function tagConfiguredVersion() {
file_put_contents(BAIKAL_PATH_SPECIFIC . "config.php", $sContent);
file_put_contents(PROJECT_PATH_SPECIFIC . "config.php", $sContent);
}
protected function createDefaultConfigFilesIfNeeded() {
# Create empty config.php if needed
if(!file_exists(BAIKAL_PATH_SPECIFIC . "config.php")) {
@touch(BAIKAL_PATH_SPECIFIC . "config.php");
if(!file_exists(PROJECT_PATH_SPECIFIC . "config.php")) {
@touch(PROJECT_PATH_SPECIFIC . "config.php");
$sContent = "<?php\n" . \Baikal\Core\Tools::getCopyrightNotice() . "\n\n";
$sContent .= $this->getDefaultConfig();
file_put_contents(BAIKAL_PATH_SPECIFIC . "config.php", $sContent);
file_put_contents(PROJECT_PATH_SPECIFIC . "config.php", $sContent);
}
# Create empty config.system.php if needed
if(!file_exists(BAIKAL_PATH_SPECIFIC . "config.system.php")) {
@touch(BAIKAL_PATH_SPECIFIC . "config.system.php");
if(!file_exists(PROJECT_PATH_SPECIFIC . "config.system.php")) {
@touch(PROJECT_PATH_SPECIFIC . "config.system.php");
$sContent = "<?php\n" . \Baikal\Core\Tools::getCopyrightNotice() . "\n\n";
$sContent .= $this->getDefaultSystemConfig();
file_put_contents(BAIKAL_PATH_SPECIFIC . "config.system.php", $sContent);
file_put_contents(PROJECT_PATH_SPECIFIC . "config.system.php", $sContent);
}
}
@ -163,16 +168,16 @@ define("BAIKAL_STANDALONE_ALLOWED", FALSE);
define("BAIKAL_STANDALONE_PORT", 8888);
# PATH to SabreDAV
define("BAIKAL_PATH_SABREDAV", BAIKAL_PATH_FRAMEWORKS . "SabreDAV/lib/Sabre/");
define("BAIKAL_PATH_SABREDAV", PROJECT_PATH_FRAMEWORKS . "SabreDAV/lib/Sabre/");
# If you change this value, you'll have to re-generate passwords for all your users
define("BAIKAL_AUTH_REALM", "BaikalDAV");
# Should begin and end with a "/"
define("BAIKAL_CARD_BASEURI", BAIKAL_BASEURI . "card.php/");
define("BAIKAL_CARD_BASEURI", PROJECT_BASEURI . "card.php/");
# Should begin and end with a "/"
define("BAIKAL_CAL_BASEURI", BAIKAL_BASEURI . "cal.php/");
define("BAIKAL_CAL_BASEURI", PROJECT_BASEURI . "cal.php/");
CODE;
$sCode = trim($sCode);
return $sCode;

View file

@ -30,7 +30,7 @@ class Standard extends \Flake\Core\Controller {
public function __construct() {
parent::__construct();
$this->oModel = new \Baikal\Model\Config\Standard(BAIKAL_PATH_SPECIFIC . "config.php");
$this->oModel = new \Baikal\Model\Config\Standard(PROJECT_PATH_SPECIFIC . "config.php");
# Assert that config file is writable
if(!$this->oModel->writable()) {

View file

@ -30,7 +30,7 @@ class System extends \Flake\Core\Controller {
public function __construct() {
parent::__construct();
$this->oModel = new \Baikal\Model\Config\System(BAIKAL_PATH_SPECIFIC . "config.system.php");
$this->oModel = new \Baikal\Model\Config\System(PROJECT_PATH_SPECIFIC . "config.system.php");
# Assert that config file is writable
if(!$this->oModel->writable()) {

View file

View file

@ -44,7 +44,7 @@ class Auth {
}
$bLocked = TRUE;
$sEnableFile = BAIKAL_PATH_SPECIFIC . "ENABLE_ADMIN";
$sEnableFile = PROJECT_PATH_SPECIFIC . "ENABLE_ADMIN";
if(file_exists($sEnableFile)) {
clearstatcache();

View file

View file

View file

@ -24,21 +24,23 @@
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
define("BAIKALADMIN_PATH_ROOT", dirname(dirname(__FILE__)) . "/");
namespace BaikalAdmin;
# Bootstrap Baïkal Core
require_once(dirname(dirname(dirname(__FILE__))) . "/Baikal/Core/Bootstrap.php"); # ../../, symlink-safe
class Framework extends \Flake\Core\Framework {
# Bootstrap Formal
require_once(dirname(dirname(dirname(__FILE__))) . "/Formal/Core/Bootstrap.php");
public static function bootstrap() {
define("BAIKALADMIN_PATH_ROOT", dirname(__FILE__) . "/"); # ./
# Registering BaikalAdmin classloader
require_once(dirname(__FILE__) . '/ClassLoader.php');
\BaikalAdmin\Core\ClassLoader::register();
\Baikal\Framework::bootstrap();
\Formal\Framework::bootstrap();
# Relative to BAIKAL_URI; so that BAIKAL_URI . BAIKALADMIN_URIPATH corresponds to the full URL to Baïkal admin
define("BAIKALADMIN_URIPATH", "admin/");
$GLOBALS["ROUTER"]::setURIPath(BAIKALADMIN_URIPATH);
# Registering BaikalAdmin classloader
require_once(BAIKALADMIN_PATH_ROOT . '/Core/ClassLoader.php');
\BaikalAdmin\Core\ClassLoader::register();
# Include BaikalAdmin Framework config
require_once(BAIKALADMIN_PATH_ROOT . "config.php");
$GLOBALS["ROUTER"]::setURIPath("admin/");
# Include BaikalAdmin Framework config
require_once(BAIKALADMIN_PATH_ROOT . "config.php");
}
}

View file

View file

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

View file

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 227 KiB

View file

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

View file

View file

View file

View file

View file

View file

View file

View file

View file

@ -26,13 +26,16 @@
ini_set("display_errors", 1);
error_reporting(E_ALL);
define("BAIKAL_CONTEXT_BASEURI", "/admin/");
define("PROJECT_CONTEXT_BASEURI", "/admin/");
define("BAIKAL_CONTEXT", TRUE);
define("BAIKAL_CONTEXT_ADMIN", TRUE);
# Bootstrap Flake
require_once(dirname(dirname(dirname(__FILE__))) . "/Flake/Core/Bootstrap.php"); # ../../
# Bootstrap BaikalAdmin
require_once(dirname(dirname(__FILE__)) . "/Core/Bootstrap.php"); # ../
\BaikalAdmin\Framework::bootstrap();
# Evaluate assertions
\BaikalAdmin\Core\Auth::assertEnabled();
@ -42,7 +45,7 @@ require_once(dirname(dirname(__FILE__)) . "/Core/Bootstrap.php"); # ../
$oPage = new \Flake\Controller\Page(BAIKALADMIN_PATH_TEMPLATES . "Page/index.html");
$oPage->injectHTTPHeaders();
$oPage->setTitle("Baïkal Web Admin");
$oPage->setBaseUrl(BAIKAL_URI);
$oPage->setBaseUrl(PROJECT_URI);
$oPage->zone("navbar")->addBlock(new \BaikalAdmin\Controller\Navigation\Topbar());

View file

@ -26,13 +26,16 @@
ini_set("display_errors", 1);
error_reporting(E_ALL);
define("BAIKAL_CONTEXT_BASEURI", "/admin/install/");
define("PROJECT_CONTEXT_BASEURI", "/admin/install/");
define("BAIKAL_CONTEXT", TRUE);
define("BAIKAL_CONTEXT_INSTALL", TRUE);
# Bootstrap Flake
require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/Flake/Core/Bootstrap.php"); # ../../../
# Bootstrap BaikalAdmin
require_once(dirname(dirname(dirname(__FILE__))) . "/Core/Bootstrap.php"); # ../../
\BaikalAdmin\Framework::bootstrap();
# Evaluate assertions
\BaikalAdmin\Core\Auth::assertUnlocked();
@ -41,7 +44,7 @@ require_once(dirname(dirname(dirname(__FILE__))) . "/Core/Bootstrap.php"); # ../
$oPage = new \Flake\Controller\Page(BAIKALADMIN_PATH_TEMPLATES . "Page/index.html");
$oPage->injectHTTPHeaders();
$oPage->setTitle("Baïkal Maintainance");
$oPage->setBaseUrl(BAIKAL_URI);
$oPage->setBaseUrl(PROJECT_URI);
$oPage->zone("navbar")->addBlock(new \BaikalAdmin\Controller\Navigation\Topbar\Install());

0
CoreVersions/0.2.0/Frameworks/BaikalAdmin/config.php Normal file → Executable file
View file

View file

@ -24,6 +24,14 @@
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
# Asserting PHP 5.3.0+
if(version_compare(PHP_VERSION, '5.3.0', '<')) {
die('Flake Fatal Error: Flake requires PHP 5.3.0+ to run properly. Your version is: ' . PHP_VERSION . '.');
}
# Define absolute server path to Flake Framework
define("FLAKE_PATH_ROOT", dirname(dirname(__FILE__)) . "/"); # ../
if(!defined('LF')) {
define('LF', chr(10));
}
@ -38,28 +46,77 @@ if(array_key_exists("SERVER_NAME", $_SERVER) && $_SERVER["SERVER_NAME"] === "mon
define("MONGOOSE_SERVER", FALSE);
}
define("FLAKE_PATH_ROOT", dirname(dirname(__FILE__)) . "/"); # ../
# Display errors messages, except notices
#ini_set("display_errors", 1);
#ini_set("error_reporting", E_ALL & ~E_NOTICE);
if(!function_exists("appendSlash")) {
function appendSlash($sPath) {
if($sPath{strlen($sPath) - 1} !== "/") {
$sPath .= "/";
}
return $sPath;
function rmBeginSlash($sString) {
if(substr($sString, 0, 1) === "/") {
$sString = substr($sString, 1);
}
return $sString;
}
function rmEndSlash($sString) {
if(substr($sString, -1) === "/") {
$sString = substr($sString, 0, -1);
}
return $sString;
}
function appendSlash($sString) {
if(substr($sString, -1) !== "/") {
$sString .= "/";
}
return $sString;
}
function prependSlash($sString) {
if(substr($sString, 0, 1) !== "/") {
$sString = "/" . $sString;
}
return $sString;
}
if(!function_exists("debug")) {
function debug($mVar, $sHeader=0) {
\Flake\Util\Tools::debug($mVar, $sHeader);
}
}
#################################################################################################
# determine Flake install root path
# not using realpath here to avoid symlinks resolution
define("PROJECT_PATH_ROOT", dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . "/"); # ../../../../../
define("PROJECT_PATH_CORE", PROJECT_PATH_ROOT . "Core/");
define("PROJECT_PATH_SPECIFIC", PROJECT_PATH_ROOT . "Specific/");
define("PROJECT_PATH_FRAMEWORKS", PROJECT_PATH_CORE . "Frameworks/");
define("PROJECT_PATH_WWWROOT", PROJECT_PATH_CORE . "WWWRoot/");
# Define path to Baïkal SQLite file
define("PROJECT_SQLITE_FILE", PROJECT_PATH_SPECIFIC . "db/baikal.sqlite");
define("PROJECT_SAFEHASH_SALT", "une-clef-super-secrete");
require_once(PROJECT_PATH_CORE . "Distrib.php");
# Determine PROJECT_URI
$sScript = substr($_SERVER["SCRIPT_FILENAME"], strlen($_SERVER["DOCUMENT_ROOT"]));
$sDirName = appendSlash(dirname($sScript));
$sBaseUrl = appendSlash(substr($sDirName, 0, -1 * strlen(PROJECT_CONTEXT_BASEURI)));
$aParts = explode("/", $_SERVER["SERVER_PROTOCOL"]);
$sProtocol = strtolower(array_shift($aParts));
define("PROJECT_BASEURI", $sBaseUrl);
define("PROJECT_URI", $sProtocol . "://" . rmEndSlash($_SERVER["HTTP_HOST"]) . $sBaseUrl);
unset($sScript); unset($sDirName); unset($sBaseUrl); unset($sProtocol); unset($aParts);
#################################################################################################
require_once(FLAKE_PATH_ROOT . 'Core/ClassLoader.php');
\Flake\Core\ClassLoader::register();
@ -77,13 +134,13 @@ if(!\Flake\Util\Tools::isCliPhp()) {
setlocale(LC_ALL, FLAKE_LOCALE);
date_default_timezone_set(FLAKE_TIMEZONE);
if(defined("FLAKE_DB_FILEPATH") && file_exists(FLAKE_DB_FILEPATH) && is_readable(FLAKE_DB_FILEPATH) && !isset($GLOBALS["DB"])) {
$GLOBALS["DB"] = new \Flake\Core\Database\Sqlite(FLAKE_DB_FILEPATH);
if(defined("PROJECT_SQLITE_FILE") && file_exists(PROJECT_SQLITE_FILE) && is_readable(PROJECT_SQLITE_FILE) && !isset($GLOBALS["DB"])) {
$GLOBALS["DB"] = new \Flake\Core\Database\Sqlite(PROJECT_SQLITE_FILE);
}
$GLOBALS["TEMPLATESTACK"] = array();
$aUrlInfo = parse_url(FLAKE_URI);
$aUrlInfo = parse_url(PROJECT_URI);
define("FLAKE_DOMAIN", $_SERVER["HTTP_HOST"]);
define("FLAKE_URIPATH", \Flake\Util\Tools::stripBeginSlash($aUrlInfo["path"]));
unset($aUrlInfo);

View file

@ -34,34 +34,50 @@ class ClassLoader {
public static function loadClass($sFullClassName) {
$sClassPath = FALSE;
$aParts = explode("\\", $sFullClassName);
if(count($aParts) === 1) {
return;
}
if($aParts[0] !== "Flake" && $aParts[0] !== "Specific" && $aParts[0] !== "Frameworks") {
# Extracting the Radical
$sRadical = $aParts[0];
if(in_array($sRadical, array("Flake", "Specific", "Frameworks"))) {
if($sRadical === "Flake") {
$sRootPath = FLAKE_PATH_ROOT;
} elseif($sRadical === "Specific") {
$sRootPath = FLAKE_PATH_SPECIFIC;
} else {
$sRootPath = PROJECT_PATH_FRAMEWORKS;
}
# Stripping radical
array_shift($aParts);
# Classname is the last part
$sClassName = array_pop($aParts);
# Path to class
$sClassPath = $sRootPath . implode("/", $aParts) . "/" . $sClassName . ".php";
} elseif(count($aParts) > 1) {
if($aParts[1] === "Framework") {
# It must be a Flake Framework
$sClassPath = PROJECT_PATH_FRAMEWORKS . $sRadical . "/Framework.php";
}
}
if($sClassPath === FALSE) {
return;
}
// ejecting the Radical
$sRadical = array_shift($aParts);
if($sRadical === "Flake") {
$sRootPath = FLAKE_PATH_ROOT;
} elseif($sRadical === "Specific") {
$sRootPath = FLAKE_PATH_SPECIFIC; # When prefix does not point another namespaced framework, we use "Specific"
} elseif($sRadical === "Frameworks") {
$sRootPath = FLAKE_PATH_FRAMEWORKS;
}
$sClassName = array_pop($aParts);
$sBasePath = $sRootPath . implode("/", $aParts) . "/";
$sClassPath = $sBasePath . $sClassName . ".php";
if(file_exists($sClassPath) && is_readable($sClassPath)) {
require_once($sClassPath);
} else {
echo '<h1>PHP Autoload Error. Cannot find ' . $sFullClassName . '</h1>';
echo '<h1>PHP Autoload Error. Cannot find ' . $sFullClassName . ' in ' . $sClassPath . '</h1>';
echo "<pre>" . print_r(debug_backtrace(), TRUE) . "</pre>";
die();
}

View file

@ -0,0 +1,83 @@
<?php
/***************************************************************
* Copyright notice
*
* (c) 2012 Jérôme Schneider <mail@jeromeschneider.fr>
* All rights reserved
*
* http://baikal.codr.fr
*
* This script is part of the Baïkal Server project. The Baïkal
* Server project is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
namespace Flake\Core;
class DocumentedException extends \Exception {
protected $aMarkers = array();
# Redefine the exception signature
public function __construct($message, $aMarkers = array()) {
$this->aMarkers = $aMarkers;
parent::__construct($message, 0, null);
}
# custom string representation of object
public function __toString() {
$aDoc = $this->getDocumentation();
debug($aDoc);
return "<span style='color: red;'>" . htmlspecialchars($this->message) . "</span>";
}
protected function getSoftrefPath() {
$sSoftRef = $this->getMessage();
$aTrace = $this->getTrace();
if($sSoftRef{0} === "\\") {
# An absolute softref has been given
return $sSoftRef;
}
if(isset($aTrace[0]["class"])) {
return "\\" . $aTrace[0]["class"] . "#" . $sSoftRef;
}
return $sSoftRef;
}
protected function getDocumentation() {
# Determine the documentation softref
$sSoftRefPath = $this->getSoftrefPath();
return $sSoftRefPath;
/*
$aParts = explode("#", \Flake\Util\Tools::trimStrings($sSoftRefPath, "\\"));
$aSegments = explode("\\", $aParts[0]);
$sKey = $aParts[1];
# Is it a Framework ?
if(\Flake\Util\Frameworks::isAFramework($aSegments[0])) {
$sPath = \Flake\Util\Frameworks::getPath($aSegments[0]);
die($sPath);
}
debug($aParts);
return $sSoftRefPath;
*/
}
}

View file

@ -24,8 +24,8 @@
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
define("FORMAL_PATH_ROOT", dirname(dirname(__FILE__)) . "/");
namespace Flake\Core;
# Registering BaikalAdmin classloader
require_once(dirname(__FILE__) . '/ClassLoader.php');
\Formal\Core\ClassLoader::register();
class Framework extends \Flake\Core\FLObject {
}

0
CoreVersions/0.2.0/Frameworks/Flake/Core/Requester.php Normal file → Executable file
View file

19
CoreVersions/0.2.0/Frameworks/Flake/Util/Frameworks.php Normal file → Executable file
View file

@ -30,7 +30,26 @@ class Frameworks extends \Flake\Core\FLObject {
private function __construct() { # private constructor to force static class
}
public function isAFramework($sName) {
$sName = trim(\Flake\Util\Tools::trimSlashes($sName));
if($sName === "" || $sName === "." || $sName === "..") {
return FALSE;
}
$sFrameworkPath = PROJECT_PATH_FRAMEWORKS . $sName;
return file_exists($sFrameworkPath) && is_dir($sFrameworkPath);
}
public static function enabled($sFramework) {
return FALSE;
}
# TODO: Create a 'Framework' Model
public function getPath($sName) {
if(self::isAFramework($sName)) {
throw new \Flake\Core\DocumentedException("notaframework", $sName);
}
return \Flake\Util\Tools::appendSlash(PROJECT_PATH_FRAMEWORKS . $sName);
}
}

View file

@ -65,7 +65,7 @@ class Tools extends \Flake\Core\FLObject {
}
public static function serverToRelativeWebPath($sAbsPath) {
return "/" . str_replace(FLAKE_PATH_WWWROOT, "", $sAbsPath);
return "/" . str_replace(PROJECT_PATH_WWWROOT, "", $sAbsPath);
}
public static function view_array($array_in) {
@ -192,7 +192,7 @@ class Tools extends \Flake\Core\FLObject {
}
public static function safelock($sString) {
return substr(md5(FLAKE_SAFEHASH_SALT . ":" . $sString), 0, 5);
return substr(md5(PROJECT_SAFEHASH_SALT . ":" . $sString), 0, 5);
}
public static function redirect($sUrl) {
@ -568,42 +568,65 @@ TEST;
return $_SERVER['HTTP_USER_AGENT'];
}
###########
public static function appendSlash($sString) {
if(substr($sString, -1) !== "/") {
$sString .= "/";
}
return $sString;
return self::appendString($sString, "/");
}
public static function prependSlash($sString) {
if(substr($sString, 0, 1) !== "/") {
$sString = "/" . $sString;
}
return $sString;
return self::prependString($sString, "/");
}
public static function stripBeginSlash($sString) {
if(substr($sString, 0, 1) === "/") {
$sString = substr($sString, 1);
}
return $sString;
return self::stripBeginString($sString, "/");
}
public static function stripEndSlash($sString) {
if(substr($sString, -1) === "/") {
$sString = substr($sString, 0, -1);
}
return $sString;
return self::stripEndString($sString, "/");
}
public static function trimSlashes($sString) {
return self::stripBeginSlash(self::stripEndSlash($sString));
}
###########
public static function appendString($sString, $sAppend) {
if(substr($sString, -1 * strlen($sAppend)) !== $sAppend) {
$sString .= $sAppend;
}
return $sString;
}
public static function prependString($sString, $sAppend) {
if(substr($sString, 0, 1 * strlen($sAppend)) !== $sAppend) {
$sString = $sAppend . $sString;
}
return $sString;
}
public static function stripBeginString($sString, $sAppend) {
if(substr($sString, 0, 1 * strlen($sAppend)) === $sAppend) {
$sString = substr($sString, strlen($sAppend));
}
return $sString;
}
public static function stripEndString($sString, $sAppend) {
if(substr($sString, -1 * strlen($sAppend)) === $sAppend) {
$sString = substr($sString, 0, -1 * strlen($sAppend));
}
return $sString;
}
public static function trimStrings($sString, $sAppend) {
return self::stripBeginString(self::stripEndString($sString, $sAppend), $sAppend);
}
###########
public static function router() {
return "\Flake\Util\Router\QuestionMarkRewrite";
}

6
CoreVersions/0.2.0/Frameworks/Flake/config.php Normal file → Executable file
View file

@ -24,12 +24,6 @@
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
define("FLAKE_URI", BAIKAL_URI);
define("FLAKE_DB_FILEPATH", BAIKAL_SQLITE_FILE);
define("FLAKE_PATH_FRAMEWORKS", BAIKAL_PATH_FRAMEWORKS);
define("FLAKE_PATH_WWWROOT", BAIKAL_PATH_WWWROOT);
define("FLAKE_SAFEHASH_SALT", "une-clef-super-secrete");
define("FLAKE_LOCALE", "fr_FR.UTF-8");
if(defined("BAIKAL_TIMEZONE")) {

View file

0
CoreVersions/0.2.0/Frameworks/Formal/Core/Message.php Normal file → Executable file
View file

0
CoreVersions/0.2.0/Frameworks/Formal/Element.php Normal file → Executable file
View file

View file

View file

View file

0
CoreVersions/0.2.0/Frameworks/Formal/Element/Text.php Normal file → Executable file
View file

0
CoreVersions/0.2.0/Frameworks/Formal/Form.php Normal file → Executable file
View file

View file

View file

@ -0,0 +1,37 @@
<?php
/***************************************************************
* Copyright notice
*
* (c) 2012 Jérôme Schneider <mail@jeromeschneider.fr>
* All rights reserved
*
* http://baikal.codr.fr
*
* This script is part of the Baïkal Server project. The Baïkal
* Server project is free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
namespace Formal;
class Framework extends \Flake\Core\Framework {
public static function bootstrap() {
define("FORMAL_PATH_ROOT", dirname(__FILE__) . "/");
require_once(dirname(__FILE__) . '/Core/ClassLoader.php');
\Formal\Core\ClassLoader::register();
}
}

View file

View file

View file

View file

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View file

View file

View file

0
CoreVersions/0.2.0/Resources/Web/README.md Normal file → Executable file
View file

View file

@ -34,7 +34,7 @@ require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/Core/Frameworks/Ba
# Bootstraping BaikalAdmin
require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/Core/Frameworks/BaikalAdmin/Core/Bootstrap.php"); # ../../../
$sConfigFile = BAIKAL_PATH_SPECIFIC . "config.php";
$sConfigFile = PROJECT_PATH_SPECIFIC . "config.php";
if(!file_exists($sConfigFile)) {
die("Specific/config.php is does not exist. Aborting, cannot modify admin password.");

View file

@ -25,7 +25,7 @@
***************************************************************/
define("BAIKAL_CONTEXT", TRUE);
define("BAIKAL_CONTEXT_BASEURI", "/");
define("PROJECT_CONTEXT_BASEURI", "/");
# Bootstraping Baikal
require_once(dirname(dirname(__FILE__)) . "/Frameworks/Baikal/Core/Bootstrap.php");

View file

@ -25,7 +25,7 @@
***************************************************************/
define("BAIKAL_CONTEXT", TRUE);
define("BAIKAL_CONTEXT_BASEURI", "/");
define("PROJECT_CONTEXT_BASEURI", "/");
# Bootstraping Baikal
require_once(dirname(dirname(__FILE__)) . "/Frameworks/Baikal/Core/Bootstrap.php");

View file

@ -24,7 +24,7 @@
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
define("BAIKAL_CONTEXT", TRUE);
define("BAIKAL_CONTEXT_BASEURI", "/");
define("PROJECT_CONTEXT_BASEURI", "/");
# Bootstraping Baikal
require_once(dirname(dirname(__FILE__)) . "/Frameworks/Baikal/Core/Bootstrap.php");

Binary file not shown.

0
html/.htaccess Normal file → Executable file
View file