parent
							
								
									9e5af08f7e
								
							
						
					
					
						commit
						89650784f5
					
				
					 12 changed files with 131 additions and 76 deletions
				
			
		| 
						 | 
				
			
			@ -26,3 +26,4 @@
 | 
			
		|||
 | 
			
		||||
define("BAIKAL_VERSION", "0.2.0");
 | 
			
		||||
define("BAIKAL_HOMEPAGE", "http://baikal.codr.fr");
 | 
			
		||||
define("PROJECT_PACKAGE", "regular");
 | 
			
		||||
| 
						 | 
				
			
			@ -61,17 +61,17 @@ class Tools {
 | 
			
		|||
		
 | 
			
		||||
		# Asserting DB file exists
 | 
			
		||||
		if(!file_exists(PROJECT_SQLITE_FILE)) {
 | 
			
		||||
			throw new \Exception("DB file does not exist. To create it, please copy 'Core/Resources/db.empty.sqlite' to 'Specific/db/.ht.db.sqlite'");
 | 
			
		||||
			throw new \Exception("DB file does not exist. To create it, please copy 'Core/Resources/db.empty.sqlite' to '" . PROJECT_SQLITE_FILE . "'");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		# Asserting DB file is readable
 | 
			
		||||
		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/.ht.db.sqlite'.");
 | 
			
		||||
			throw new \Exception("DB file is not readable. Please give read permissions to httpd user on file '" . PROJECT_SQLITE_FILE . "'.");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		# Asserting DB file is writable
 | 
			
		||||
		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/.ht.db.sqlite'.");
 | 
			
		||||
			throw new \Exception("DB file is not writable. Please give write permissions to httpd user on file '" . PROJECT_SQLITE_FILE . "'.");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		# Asserting config file exists
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,7 +44,7 @@ class Framework extends \Flake\Core\Framework {
 | 
			
		|||
		
 | 
			
		||||
		# Registering Baikal classloader
 | 
			
		||||
		define("BAIKAL_PATH_FRAMEWORKROOT", dirname(__FILE__) . "/");
 | 
			
		||||
		require_once(BAIKAL_PATH_FRAMEWORKROOT . '/Core/ClassLoader.php');
 | 
			
		||||
		require_once(BAIKAL_PATH_FRAMEWORKROOT . 'Core/ClassLoader.php');
 | 
			
		||||
		\Baikal\Core\ClassLoader::register();
 | 
			
		||||
 | 
			
		||||
		\Baikal\Core\Tools::assertEnvironmentIsOk();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,6 +47,9 @@ class System extends \Baikal\Model\Config {
 | 
			
		|||
		"BAIKAL_STANDALONE_PORT" => array(
 | 
			
		||||
			"type" => "integer",
 | 
			
		||||
		),
 | 
			
		||||
		"PROJECT_SQLITE_FILE" => array(
 | 
			
		||||
			"type" => "litteral",
 | 
			
		||||
		),
 | 
			
		||||
	);
 | 
			
		||||
		
 | 
			
		||||
	protected $aData = array(
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +59,7 @@ class System extends \Baikal\Model\Config {
 | 
			
		|||
		"BAIKAL_CAL_BASEURI" => "",
 | 
			
		||||
		"BAIKAL_STANDALONE_ALLOWED" => "",
 | 
			
		||||
		"BAIKAL_STANDALONE_PORT" => "",
 | 
			
		||||
		"PROJECT_SQLITE_FILE" => "",
 | 
			
		||||
	);
 | 
			
		||||
	
 | 
			
		||||
	public function formMorphologyForThisModelInstance() {
 | 
			
		||||
| 
						 | 
				
			
			@ -83,19 +87,6 @@ class System extends \Baikal\Model\Config {
 | 
			
		|||
			)
 | 
			
		||||
		)));
 | 
			
		||||
		
 | 
			
		||||
		$oMorpho->add(new \Formal\Element\Text(array(
 | 
			
		||||
			"prop" => "BAIKAL_PATH_SABREDAV",
 | 
			
		||||
			"label" => "Path to SabreDAV",
 | 
			
		||||
			"validation" => "required",
 | 
			
		||||
			"inputclass" => "input-xxlarge",
 | 
			
		||||
			"help" => "The absolute server path to SabreDAV API",
 | 
			
		||||
			"popover" => array(
 | 
			
		||||
				"title" => "Path to SabreDAV",
 | 
			
		||||
				"content" => "If Baïkal is hosted in a subfolder, this path should reflect it.<br /><strong>Whatever happens, it should begin and end with a slash.</strong>",
 | 
			
		||||
				"position" => "top"
 | 
			
		||||
			)
 | 
			
		||||
		)));
 | 
			
		||||
		
 | 
			
		||||
		$oMorpho->add(new \Formal\Element\Text(array(
 | 
			
		||||
			"prop" => "BAIKAL_AUTH_REALM",
 | 
			
		||||
			"label" => "Auth realm",
 | 
			
		||||
| 
						 | 
				
			
			@ -119,6 +110,27 @@ class System extends \Baikal\Model\Config {
 | 
			
		|||
			)));
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		$oMorpho->add(new \Formal\Element\Text(array(
 | 
			
		||||
			"prop" => "BAIKAL_PATH_SABREDAV",
 | 
			
		||||
			"label" => "Path to SabreDAV",
 | 
			
		||||
			"validation" => "required",
 | 
			
		||||
			"inputclass" => "input-xxlarge",
 | 
			
		||||
			"help" => "The absolute server path to SabreDAV API",
 | 
			
		||||
			"popover" => array(
 | 
			
		||||
				"title" => "Path to SabreDAV",
 | 
			
		||||
				"content" => "If Baïkal is hosted in a subfolder, this path should reflect it.<br /><strong>Whatever happens, it should begin and end with a slash.</strong>",
 | 
			
		||||
				"position" => "top"
 | 
			
		||||
			)
 | 
			
		||||
		)));
 | 
			
		||||
		
 | 
			
		||||
		$oMorpho->add(new \Formal\Element\Text(array(
 | 
			
		||||
			"prop" => "PROJECT_SQLITE_FILE",
 | 
			
		||||
			"label" => "SQLite file path",
 | 
			
		||||
			"validation" => "required",
 | 
			
		||||
			"inputclass" => "input-xxlarge",
 | 
			
		||||
			"help" => "The absolute server path to the SQLite file",
 | 
			
		||||
		)));
 | 
			
		||||
				
 | 
			
		||||
		return $oMorpho;
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,5 +59,8 @@ mv html/* .
 | 
			
		|||
mv html/.htaccess .
 | 
			
		||||
rm -Rf html
 | 
			
		||||
 | 
			
		||||
# Tagging Distrib
 | 
			
		||||
cat Core/Distrib.php | sed -e "s/\"regular\"/\"flat\"/g" > Core/Distrib.php
 | 
			
		||||
 | 
			
		||||
# Displaying result
 | 
			
		||||
echo "#     "$TEMPDIR
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,8 @@ class Initialize extends \Flake\Core\Controller {
 | 
			
		|||
		}
 | 
			
		||||
		
 | 
			
		||||
		$this->createDefaultConfigFilesIfNeeded();
 | 
			
		||||
		$this->createHtaccessFilesIfNeeded();
 | 
			
		||||
		
 | 
			
		||||
		$this->oModel = new \Baikal\Model\Config\Standard(PROJECT_PATH_SPECIFIC . "config.php");
 | 
			
		||||
		
 | 
			
		||||
		# Assert that config file is writable
 | 
			
		||||
| 
						 | 
				
			
			@ -103,6 +105,25 @@ PHP;
 | 
			
		|||
		file_put_contents(PROJECT_PATH_SPECIFIC . "config.php", $sContent);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	protected function createHtaccessFilesIfNeeded() {
 | 
			
		||||
 | 
			
		||||
		if(!file_exists(PROJECT_PATH_DOCUMENTROOT . ".htaccess")) {
 | 
			
		||||
			@copy(PROJECT_PATH_CORERESOURCES . "htaccess-documentroot", PROJECT_PATH_DOCUMENTROOT . ".htaccess");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if(!file_exists(PROJECT_PATH_DOCUMENTROOT . ".htaccess")) {
 | 
			
		||||
			throw new \Exception("Unable to create " . PROJECT_PATH_DOCUMENTROOT . ".htaccess; you may try to create it manually by copying " . PROJECT_PATH_CORERESOURCES . "htaccess-documentroot");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if(!file_exists(PROJECT_PATH_SPECIFIC . ".htaccess")) {
 | 
			
		||||
			@copy(PROJECT_PATH_CORERESOURCES . "htaccess-specific", PROJECT_PATH_SPECIFIC . ".htaccess");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if(!file_exists(PROJECT_PATH_SPECIFIC . ".htaccess")) {
 | 
			
		||||
			throw new \Exception("Unable to create " . PROJECT_PATH_SPECIFIC . ".htaccess; you may try to create it manually by copying " . PROJECT_PATH_CORERESOURCES . "htaccess-specific");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	protected function createDefaultConfigFilesIfNeeded() {
 | 
			
		||||
 | 
			
		||||
		# Create empty config.php if needed
 | 
			
		||||
| 
						 | 
				
			
			@ -180,6 +201,10 @@ define("BAIKAL_CARD_BASEURI", PROJECT_BASEURI . "card.php/");
 | 
			
		|||
 | 
			
		||||
# Should begin and end with a "/"
 | 
			
		||||
define("BAIKAL_CAL_BASEURI", PROJECT_BASEURI . "cal.php/");
 | 
			
		||||
 | 
			
		||||
# Define path to Baïkal Database SQLite file
 | 
			
		||||
define("PROJECT_SQLITE_FILE", PROJECT_PATH_SPECIFIC . "db/db.sqlite");
 | 
			
		||||
 | 
			
		||||
CODE;
 | 
			
		||||
		$sCode = trim($sCode);
 | 
			
		||||
		return $sCode;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,35 +0,0 @@
 | 
			
		|||
<?php
 | 
			
		||||
#################################################################
 | 
			
		||||
#  Copyright notice
 | 
			
		||||
#
 | 
			
		||||
#  (c) 2012 Jérôme Schneider <mail@jeromeschneider.fr>
 | 
			
		||||
#  All rights reserved
 | 
			
		||||
#
 | 
			
		||||
#  http://flake.codr.fr
 | 
			
		||||
#
 | 
			
		||||
#  This script is part of the Flake project. The Flake
 | 
			
		||||
#  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 Auth extends \Flake\Core\FLObject {
 | 
			
		||||
	public static function isAdmin() {
 | 
			
		||||
		$sUrl = \Flake\Util\Tools::getCurrentUrl();
 | 
			
		||||
		$aParts = explode("/", $sUrl);
 | 
			
		||||
		return in_array("edit", $aParts);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -101,34 +101,25 @@ class Framework extends \Flake\Core\Framework {
 | 
			
		|||
		# not using realpath here to avoid symlinks resolution
 | 
			
		||||
 | 
			
		||||
		define("PROJECT_PATH_CORE", PROJECT_PATH_ROOT . "Core/");
 | 
			
		||||
		define("PROJECT_PATH_CORERESOURCES", PROJECT_PATH_CORE . "Resources/");
 | 
			
		||||
		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/.ht.db.sqlite");
 | 
			
		||||
		
 | 
			
		||||
		# Activate Flake class loader
 | 
			
		||||
		require_once(FLAKE_PATH_ROOT . 'Core/ClassLoader.php');
 | 
			
		||||
		\Flake\Core\ClassLoader::register();
 | 
			
		||||
 | 
			
		||||
		# Asserting DB file exists
 | 
			
		||||
		if(!file_exists(PROJECT_SQLITE_FILE)) {
 | 
			
		||||
			die("<h3>DB file does not exist. To create it, please copy '<span style='font-family: monospace; background: yellow;'>Core/Resources/db.empty.sqlite</span>' to '<span style='font-family: monospace;background: yellow;'>Specific/db/.ht.db.sqlite</span>'</h3>");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		# Asserting DB file is readable
 | 
			
		||||
		if(!is_readable(PROJECT_SQLITE_FILE)) {
 | 
			
		||||
			die("<h3>DB file is not readable. Please give read permissions on file '<span style='font-family: monospace; background: yellow;'>Specific/db/.ht.db.sqlite</span>'</h3>");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		# Asserting DB file is writable
 | 
			
		||||
		if(!is_writable(PROJECT_SQLITE_FILE)) {
 | 
			
		||||
			die("<h3>DB file is not writable. Please give write permissions on file '<span style='font-family: monospace; background: yellow;'>Specific/db/.ht.db.sqlite</span>'</h3>");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		require_once(PROJECT_PATH_CORE . "Distrib.php");
 | 
			
		||||
		
 | 
			
		||||
		if(PROJECT_PACKAGE === "regular") {
 | 
			
		||||
			define("PROJECT_PATH_DOCUMENTROOT", PROJECT_PATH_ROOT . "html/");
 | 
			
		||||
		} elseif(PROJECT_PACKAGE === "flat") {
 | 
			
		||||
			define("PROJECT_PATH_DOCUMENTROOT", PROJECT_PATH_ROOT);
 | 
			
		||||
		} else {
 | 
			
		||||
			throw new \Exception("Unrecognized PROJECT_PACKAGE value.");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		# Determine PROJECT_URI
 | 
			
		||||
		$sScript = substr($_SERVER["SCRIPT_FILENAME"], strlen($_SERVER["DOCUMENT_ROOT"]));
 | 
			
		||||
		$sDirName = self::appendSlash(dirname($sScript));
 | 
			
		||||
| 
						 | 
				
			
			@ -157,15 +148,53 @@ class Framework extends \Flake\Core\Framework {
 | 
			
		|||
		setlocale(LC_ALL, FLAKE_LOCALE);
 | 
			
		||||
		date_default_timezone_set(FLAKE_TIMEZONE);
 | 
			
		||||
		
 | 
			
		||||
		if(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(PROJECT_URI);
 | 
			
		||||
		define("FLAKE_DOMAIN", $_SERVER["HTTP_HOST"]);
 | 
			
		||||
		define("FLAKE_URIPATH", \Flake\Util\Tools::stripBeginSlash($aUrlInfo["path"]));
 | 
			
		||||
		unset($aUrlInfo);
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		# Include Project config
 | 
			
		||||
		$sConfigPath = PROJECT_PATH_SPECIFIC . "config.php";
 | 
			
		||||
		$sConfigSystemPath = PROJECT_PATH_SPECIFIC . "config.system.php";
 | 
			
		||||
		
 | 
			
		||||
		if(file_exists($sConfigPath)) {
 | 
			
		||||
			require_once($sConfigPath);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if(file_exists($sConfigSystemPath)) {
 | 
			
		||||
			require_once($sConfigSystemPath);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		self::initDb();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	protected static function initDb() {
 | 
			
		||||
		
 | 
			
		||||
		# Asserting DB filepath is set
 | 
			
		||||
		if(!defined("PROJECT_SQLITE_FILE")) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		# Asserting DB file exists
 | 
			
		||||
		if(!file_exists(PROJECT_SQLITE_FILE)) {
 | 
			
		||||
			die("<h3>DB file does not exist. To create it, please copy '<span style='font-family: monospace; background: yellow;'>Core/Resources/db.empty.sqlite</span>' to '<span style='font-family: monospace;background: yellow;'>" . PROJECT_SQLITE_FILE . "</span>'</h3>");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		# Asserting DB file is readable
 | 
			
		||||
		if(!is_readable(PROJECT_SQLITE_FILE)) {
 | 
			
		||||
			die("<h3>DB file is not readable. Please give read permissions on file '<span style='font-family: monospace; background: yellow;'>" . PROJECT_SQLITE_FILE . "</span>'</h3>");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		# Asserting DB file is writable
 | 
			
		||||
		if(!is_writable(PROJECT_SQLITE_FILE)) {
 | 
			
		||||
			die("<h3>DB file is not writable. Please give write permissions on file '<span style='font-family: monospace; background: yellow;'>" . PROJECT_SQLITE_FILE . "</span>'</h3>");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if(file_exists(PROJECT_SQLITE_FILE) && is_readable(PROJECT_SQLITE_FILE) && !isset($GLOBALS["DB"])) {
 | 
			
		||||
			$GLOBALS["DB"] = new \Flake\Core\Database\Sqlite(PROJECT_SQLITE_FILE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								CoreVersions/0.2.0/Resources/htaccess-documentroot
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								CoreVersions/0.2.0/Resources/htaccess-documentroot
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
# Disabling cache management
 | 
			
		||||
# that could cause problems with DAV requests
 | 
			
		||||
# Useful only for Apache servers, with AllowOverride All
 | 
			
		||||
# (ie, .htaccess files enabled)
 | 
			
		||||
 | 
			
		||||
# Allow HTTP headers with Apache/FastCGI
 | 
			
		||||
# See http://code.google.com/p/sabredav/wiki/Authentication#Apache_+_(Fast)CGI
 | 
			
		||||
 | 
			
		||||
<IfModule mod_rewrite.c>
 | 
			
		||||
	RewriteEngine On
 | 
			
		||||
	RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
 | 
			
		||||
</IfModule>
 | 
			
		||||
 | 
			
		||||
<IfModule mod_expires.c>
 | 
			
		||||
	ExpiresActive Off
 | 
			
		||||
</IfModule>
 | 
			
		||||
							
								
								
									
										2
									
								
								CoreVersions/0.2.0/Resources/htaccess-specific
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								CoreVersions/0.2.0/Resources/htaccess-specific
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
Order allow,deny
 | 
			
		||||
Deny from all
 | 
			
		||||
							
								
								
									
										2
									
								
								Specific/.htaccess
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Specific/.htaccess
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
Order allow,deny
 | 
			
		||||
Deny from all
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue