mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
MINOR: Fixed newlines and set svn:eol-style to native
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@79478 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
6bd759b4ca
commit
610232f19c
@ -1,231 +1,231 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Base class for URL access to development tools. Currently supports the
|
||||
* ; and TaskRunner.
|
||||
*
|
||||
* @todo documentation for how to add new unit tests and tasks
|
||||
* @package sapphire
|
||||
* @subpackage dev
|
||||
*/
|
||||
class DevelopmentAdmin extends Controller {
|
||||
|
||||
static $url_handlers = array(
|
||||
'' => 'index',
|
||||
'$Action' => '$Action',
|
||||
'$Action//$Action/$ID' => 'handleAction',
|
||||
);
|
||||
|
||||
function init() {
|
||||
parent::init();
|
||||
|
||||
// We allow access to this controller regardless of live-status or ADMIN permission only
|
||||
// if on CLI. Access to this controller is always allowed in "dev-mode", or of the user is ADMIN.
|
||||
$canAccess = (
|
||||
Director::isDev()
|
||||
|| Director::is_cli()
|
||||
|| Permission::check("ADMIN")
|
||||
);
|
||||
if(!$canAccess) {
|
||||
return Security::permissionFailure($this,
|
||||
"This page is secured and you need administrator rights to access it. " .
|
||||
"Enter your credentials below and we will send you right along.");
|
||||
}
|
||||
|
||||
// check for valid url mapping
|
||||
// lacking this information can cause really nasty bugs,
|
||||
// e.g. when running Director::test() from a FunctionalTest instance
|
||||
global $_FILE_TO_URL_MAPPING;
|
||||
if(Director::is_cli()) {
|
||||
if(isset($_FILE_TO_URL_MAPPING)) {
|
||||
$fullPath = $testPath = $_SERVER['SCRIPT_FILENAME'];
|
||||
while($testPath && $testPath != "/") {
|
||||
$matched = false;
|
||||
if(isset($_FILE_TO_URL_MAPPING[$testPath])) {
|
||||
$matched = true;
|
||||
break;
|
||||
}
|
||||
$testPath = dirname($testPath);
|
||||
}
|
||||
if(!$matched) {
|
||||
echo 'Warning: You probably want to define '.
|
||||
'an entry in $_FILE_TO_URL_MAPPING that covers "' . Director::baseFolder() . '"' . "\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo 'Warning: You probably want to define $_FILE_TO_URL_MAPPING in '.
|
||||
'your _ss_environment.php as instructed on the "sake" page of the doc.silverstripe.com wiki' . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function index() {
|
||||
$actions = array(
|
||||
"build" => "Build/rebuild this environment (formerly db/build). Call this whenever you have updated your project sources",
|
||||
"reset" => "Reset this environment - truncate the database and rebuild. This is useful after testing to start with a fresh working copy",
|
||||
"tests" => "See a list of unit tests to run",
|
||||
"tests/all" => "Run all tests",
|
||||
"jstests" => "See a list of JavaScript tests to run",
|
||||
"jstests/all" => "Run all JavaScript tests",
|
||||
"modules/add" => "Add a module, for example, 'sake dev/modules/add ecommerce'",
|
||||
"tasks" => "See a list of build tasks to run",
|
||||
"viewcode" => "Read source code in a literate programming style",
|
||||
);
|
||||
|
||||
// Web mode
|
||||
if(!Director::is_cli()) {
|
||||
// This action is sake-only right now.
|
||||
unset($actions["modules/add"]);
|
||||
|
||||
$renderer = new DebugView();
|
||||
$renderer->writeHeader();
|
||||
$renderer->writeInfo("Sapphire Development Tools", Director::absoluteBaseURL());
|
||||
$base = Director::baseURL();
|
||||
|
||||
echo '<div class="options"><ul>';
|
||||
foreach($actions as $action => $description) {
|
||||
echo "<li><a href=\"{$base}dev/$action\"><b>/dev/$action:</b> $description</a></li>\n";
|
||||
}
|
||||
|
||||
$renderer->writeFooter();
|
||||
|
||||
// CLI mode
|
||||
} else {
|
||||
echo "SAPPHIRE DEVELOPMENT TOOLS\n--------------------------\n\n";
|
||||
echo "You can execute any of the following commands:\n\n";
|
||||
foreach($actions as $action => $description) {
|
||||
echo " sake dev/$action: $description\n";
|
||||
}
|
||||
echo "\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
function tests($request) {
|
||||
return new TestRunner();
|
||||
}
|
||||
|
||||
function jstests($request) {
|
||||
return new JSTestRunner();
|
||||
}
|
||||
|
||||
function tasks() {
|
||||
return new TaskRunner();
|
||||
}
|
||||
|
||||
function modules() {
|
||||
return new ModuleManager();
|
||||
}
|
||||
|
||||
function viewmodel() {
|
||||
return new ModelViewer();
|
||||
}
|
||||
|
||||
function build() {
|
||||
if(Director::is_cli()) {
|
||||
$da = new DatabaseAdmin();
|
||||
$da->build();
|
||||
} else {
|
||||
$renderer = new DebugView();
|
||||
$renderer->writeHeader();
|
||||
$renderer->writeInfo("Environment Builder (formerly db/build)", Director::absoluteBaseURL());
|
||||
echo "<div style=\"margin: 0 2em\">";
|
||||
|
||||
$da = new DatabaseAdmin();
|
||||
$da->build();
|
||||
|
||||
echo "</div>";
|
||||
$renderer->writeFooter();
|
||||
}
|
||||
}
|
||||
|
||||
function reset() {
|
||||
global $databaseConfig;
|
||||
$databaseName = $databaseConfig['database'];
|
||||
|
||||
if(Director::is_cli()) {
|
||||
echo "\nPlease run dev/reset from your web browser.\n";
|
||||
} else {
|
||||
$renderer = new DebugView();
|
||||
$renderer->writeHeader();
|
||||
$renderer->writeInfo('Database reset', 'Completely truncate and rebuild the current database');
|
||||
echo '<div style="margin: 0 2em">';
|
||||
|
||||
if(isset($_GET['done'])) {
|
||||
echo "<p style=\"color: green\"><b>$databaseName</b> has been completely truncated and rebuilt.</p>";
|
||||
echo "<p>Note: If you had <i>SS_DEFAULT_ADMIN_USERNAME</i> and <i>SS_DEFAULT_ADMIN_PASSWORD</i>
|
||||
defined in your <b>_ss_environment.php</b> file, a default admin Member record has been created
|
||||
with those credentials.</p>";
|
||||
} else {
|
||||
echo $this->ResetForm()->renderWith('Form');
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
$renderer->writeFooter();
|
||||
}
|
||||
}
|
||||
|
||||
function ResetForm() {
|
||||
global $databaseConfig;
|
||||
$databaseName = $databaseConfig['database'];
|
||||
|
||||
if(!Session::get('devResetRandNumber')) {
|
||||
$rand = rand(5,500);
|
||||
Session::set('devResetRandNumber', $rand);
|
||||
} else {
|
||||
$rand = Session::get('devResetRandNumber');
|
||||
}
|
||||
|
||||
$form = new Form(
|
||||
$this,
|
||||
'ResetForm',
|
||||
new FieldSet(
|
||||
new LiteralField('ResetWarning', "<p style=\"color: red\">WARNING: This will completely
|
||||
destroy ALL existing data in <b>$databaseName</b>! Press the button below to
|
||||
confirm this action.</p>"),
|
||||
new HiddenField('devResetRandNumber', '', $rand)
|
||||
),
|
||||
new FieldSet(
|
||||
new FormAction('doReset', 'Reset and completely rebuild the database')
|
||||
)
|
||||
);
|
||||
|
||||
$form->setFormAction(Director::absoluteBaseURL() . 'dev/ResetForm');
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
function doReset($data, $form, $request) {
|
||||
if(!isset($data['devResetRandNumber'])) {
|
||||
Director::redirectBack();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Avoid accidental database resets by checking the posted number to the one in session
|
||||
if(Session::get('devResetRandNumber') != $data['devResetRandNumber']) {
|
||||
Director::redirectBack();
|
||||
return false;
|
||||
}
|
||||
|
||||
$da = new DatabaseAdmin();
|
||||
$da->clearAllData();
|
||||
|
||||
// If _ss_environment.php has some constants set for default admin, set these up in the request
|
||||
$_REQUEST['username'] = defined('SS_DEFAULT_ADMIN_USERNAME') ? SS_DEFAULT_ADMIN_USERNAME : null;
|
||||
$_REQUEST['password'] = defined('SS_DEFAULT_ADMIN_PASSWORD') ? SS_DEFAULT_ADMIN_PASSWORD : null;
|
||||
|
||||
$da->build();
|
||||
|
||||
Session::clear('devResetRandNumber');
|
||||
Director::redirect(Director::absoluteBaseURL() . 'dev/reset?done=1');
|
||||
}
|
||||
|
||||
function errors() {
|
||||
Director::redirect("Debug_");
|
||||
}
|
||||
|
||||
function viewcode($request) {
|
||||
return new CodeViewer();
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Base class for URL access to development tools. Currently supports the
|
||||
* ; and TaskRunner.
|
||||
*
|
||||
* @todo documentation for how to add new unit tests and tasks
|
||||
* @package sapphire
|
||||
* @subpackage dev
|
||||
*/
|
||||
class DevelopmentAdmin extends Controller {
|
||||
|
||||
static $url_handlers = array(
|
||||
'' => 'index',
|
||||
'$Action' => '$Action',
|
||||
'$Action//$Action/$ID' => 'handleAction',
|
||||
);
|
||||
|
||||
function init() {
|
||||
parent::init();
|
||||
|
||||
// We allow access to this controller regardless of live-status or ADMIN permission only
|
||||
// if on CLI. Access to this controller is always allowed in "dev-mode", or of the user is ADMIN.
|
||||
$canAccess = (
|
||||
Director::isDev()
|
||||
|| Director::is_cli()
|
||||
|| Permission::check("ADMIN")
|
||||
);
|
||||
if(!$canAccess) {
|
||||
return Security::permissionFailure($this,
|
||||
"This page is secured and you need administrator rights to access it. " .
|
||||
"Enter your credentials below and we will send you right along.");
|
||||
}
|
||||
|
||||
// check for valid url mapping
|
||||
// lacking this information can cause really nasty bugs,
|
||||
// e.g. when running Director::test() from a FunctionalTest instance
|
||||
global $_FILE_TO_URL_MAPPING;
|
||||
if(Director::is_cli()) {
|
||||
if(isset($_FILE_TO_URL_MAPPING)) {
|
||||
$fullPath = $testPath = $_SERVER['SCRIPT_FILENAME'];
|
||||
while($testPath && $testPath != "/") {
|
||||
$matched = false;
|
||||
if(isset($_FILE_TO_URL_MAPPING[$testPath])) {
|
||||
$matched = true;
|
||||
break;
|
||||
}
|
||||
$testPath = dirname($testPath);
|
||||
}
|
||||
if(!$matched) {
|
||||
echo 'Warning: You probably want to define '.
|
||||
'an entry in $_FILE_TO_URL_MAPPING that covers "' . Director::baseFolder() . '"' . "\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo 'Warning: You probably want to define $_FILE_TO_URL_MAPPING in '.
|
||||
'your _ss_environment.php as instructed on the "sake" page of the doc.silverstripe.com wiki' . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function index() {
|
||||
$actions = array(
|
||||
"build" => "Build/rebuild this environment (formerly db/build). Call this whenever you have updated your project sources",
|
||||
"reset" => "Reset this environment - truncate the database and rebuild. This is useful after testing to start with a fresh working copy",
|
||||
"tests" => "See a list of unit tests to run",
|
||||
"tests/all" => "Run all tests",
|
||||
"jstests" => "See a list of JavaScript tests to run",
|
||||
"jstests/all" => "Run all JavaScript tests",
|
||||
"modules/add" => "Add a module, for example, 'sake dev/modules/add ecommerce'",
|
||||
"tasks" => "See a list of build tasks to run",
|
||||
"viewcode" => "Read source code in a literate programming style",
|
||||
);
|
||||
|
||||
// Web mode
|
||||
if(!Director::is_cli()) {
|
||||
// This action is sake-only right now.
|
||||
unset($actions["modules/add"]);
|
||||
|
||||
$renderer = new DebugView();
|
||||
$renderer->writeHeader();
|
||||
$renderer->writeInfo("Sapphire Development Tools", Director::absoluteBaseURL());
|
||||
$base = Director::baseURL();
|
||||
|
||||
echo '<div class="options"><ul>';
|
||||
foreach($actions as $action => $description) {
|
||||
echo "<li><a href=\"{$base}dev/$action\"><b>/dev/$action:</b> $description</a></li>\n";
|
||||
}
|
||||
|
||||
$renderer->writeFooter();
|
||||
|
||||
// CLI mode
|
||||
} else {
|
||||
echo "SAPPHIRE DEVELOPMENT TOOLS\n--------------------------\n\n";
|
||||
echo "You can execute any of the following commands:\n\n";
|
||||
foreach($actions as $action => $description) {
|
||||
echo " sake dev/$action: $description\n";
|
||||
}
|
||||
echo "\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
function tests($request) {
|
||||
return new TestRunner();
|
||||
}
|
||||
|
||||
function jstests($request) {
|
||||
return new JSTestRunner();
|
||||
}
|
||||
|
||||
function tasks() {
|
||||
return new TaskRunner();
|
||||
}
|
||||
|
||||
function modules() {
|
||||
return new ModuleManager();
|
||||
}
|
||||
|
||||
function viewmodel() {
|
||||
return new ModelViewer();
|
||||
}
|
||||
|
||||
function build() {
|
||||
if(Director::is_cli()) {
|
||||
$da = new DatabaseAdmin();
|
||||
$da->build();
|
||||
} else {
|
||||
$renderer = new DebugView();
|
||||
$renderer->writeHeader();
|
||||
$renderer->writeInfo("Environment Builder (formerly db/build)", Director::absoluteBaseURL());
|
||||
echo "<div style=\"margin: 0 2em\">";
|
||||
|
||||
$da = new DatabaseAdmin();
|
||||
$da->build();
|
||||
|
||||
echo "</div>";
|
||||
$renderer->writeFooter();
|
||||
}
|
||||
}
|
||||
|
||||
function reset() {
|
||||
global $databaseConfig;
|
||||
$databaseName = $databaseConfig['database'];
|
||||
|
||||
if(Director::is_cli()) {
|
||||
echo "\nPlease run dev/reset from your web browser.\n";
|
||||
} else {
|
||||
$renderer = new DebugView();
|
||||
$renderer->writeHeader();
|
||||
$renderer->writeInfo('Database reset', 'Completely truncate and rebuild the current database');
|
||||
echo '<div style="margin: 0 2em">';
|
||||
|
||||
if(isset($_GET['done'])) {
|
||||
echo "<p style=\"color: green\"><b>$databaseName</b> has been completely truncated and rebuilt.</p>";
|
||||
echo "<p>Note: If you had <i>SS_DEFAULT_ADMIN_USERNAME</i> and <i>SS_DEFAULT_ADMIN_PASSWORD</i>
|
||||
defined in your <b>_ss_environment.php</b> file, a default admin Member record has been created
|
||||
with those credentials.</p>";
|
||||
} else {
|
||||
echo $this->ResetForm()->renderWith('Form');
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
$renderer->writeFooter();
|
||||
}
|
||||
}
|
||||
|
||||
function ResetForm() {
|
||||
global $databaseConfig;
|
||||
$databaseName = $databaseConfig['database'];
|
||||
|
||||
if(!Session::get('devResetRandNumber')) {
|
||||
$rand = rand(5,500);
|
||||
Session::set('devResetRandNumber', $rand);
|
||||
} else {
|
||||
$rand = Session::get('devResetRandNumber');
|
||||
}
|
||||
|
||||
$form = new Form(
|
||||
$this,
|
||||
'ResetForm',
|
||||
new FieldSet(
|
||||
new LiteralField('ResetWarning', "<p style=\"color: red\">WARNING: This will completely
|
||||
destroy ALL existing data in <b>$databaseName</b>! Press the button below to
|
||||
confirm this action.</p>"),
|
||||
new HiddenField('devResetRandNumber', '', $rand)
|
||||
),
|
||||
new FieldSet(
|
||||
new FormAction('doReset', 'Reset and completely rebuild the database')
|
||||
)
|
||||
);
|
||||
|
||||
$form->setFormAction(Director::absoluteBaseURL() . 'dev/ResetForm');
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
function doReset($data, $form, $request) {
|
||||
if(!isset($data['devResetRandNumber'])) {
|
||||
Director::redirectBack();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Avoid accidental database resets by checking the posted number to the one in session
|
||||
if(Session::get('devResetRandNumber') != $data['devResetRandNumber']) {
|
||||
Director::redirectBack();
|
||||
return false;
|
||||
}
|
||||
|
||||
$da = new DatabaseAdmin();
|
||||
$da->clearAllData();
|
||||
|
||||
// If _ss_environment.php has some constants set for default admin, set these up in the request
|
||||
$_REQUEST['username'] = defined('SS_DEFAULT_ADMIN_USERNAME') ? SS_DEFAULT_ADMIN_USERNAME : null;
|
||||
$_REQUEST['password'] = defined('SS_DEFAULT_ADMIN_PASSWORD') ? SS_DEFAULT_ADMIN_PASSWORD : null;
|
||||
|
||||
$da->build();
|
||||
|
||||
Session::clear('devResetRandNumber');
|
||||
Director::redirect(Director::absoluteBaseURL() . 'dev/reset?done=1');
|
||||
}
|
||||
|
||||
function errors() {
|
||||
Director::redirect("Debug_");
|
||||
}
|
||||
|
||||
function viewcode($request) {
|
||||
return new CodeViewer();
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,173 +1,173 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<title>SilverStripe CMS Installation</title>
|
||||
<script type="text/js">
|
||||
function show(id) {
|
||||
document.getElementById(id).style.display = '';
|
||||
}
|
||||
function hide(id) {
|
||||
document.getElementById(id).style.display = 'none';
|
||||
}
|
||||
</script>
|
||||
<link rel="stylesheet" type="text/css" href="themes/blackcandy/css/layout.css" />
|
||||
<link rel="stylesheet" type="text/css" href="themes/blackcandy/css/typography.css" />
|
||||
<link rel="stylesheet" type="text/css" href="themes/blackcandy/css/form.css" />
|
||||
<link rel="stylesheet" type="text/css" href="sapphire/dev/install/install.css" />
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="BgContainer">
|
||||
<div id="Container">
|
||||
<div id="Header">
|
||||
<h1>SilverStripe CMS Installation</h1>
|
||||
<p>Version <?php echo $silverstripe_version; ?></p>
|
||||
</div>
|
||||
|
||||
<div id="Navigation"> </div>
|
||||
<div class="clear"><!-- --></div>
|
||||
|
||||
<div id="Layout">
|
||||
<div class="typography">
|
||||
<h1>Welcome to SilverStripe</h1>
|
||||
<p>Thanks for choosing to use SilverStripe! Please follow the instructions below to get SilverStripe installed.</p>
|
||||
|
||||
<form action="install.php" method="post">
|
||||
<?php if(isset($hasErrorOtherThanDatabase)) { ?>
|
||||
<p class="error">
|
||||
You aren't currently able to install the software. Please <a href="#requirements">see below</a> for details.<br />
|
||||
If you are having problems meeting the requirements, see the <a href="http://doc.silverstripe.com/doku.php?id=server-requirements">server requirements wiki page</a>.
|
||||
</p>
|
||||
<?php } else { ?>
|
||||
<?php if($req->hasWarnings()) { ?>
|
||||
<p class="warning">
|
||||
There are some issues that we recommend you look at before installing, however, you are still able to install the software.
|
||||
Please see below for details.<br />
|
||||
If you are having problems meeting the requirements, see the <a href="http://doc.silverstripe.com/doku.php?id=server-requirements">server requirements wiki page</a>.
|
||||
</p>
|
||||
<?php } else if(!$dbReq->hasErrors()) { ?>
|
||||
<p class="good">
|
||||
You're ready to install!
|
||||
</p>
|
||||
<?php } ?>
|
||||
<p>
|
||||
<b>Template to install:</b>
|
||||
</p>
|
||||
<ul id="Themes">
|
||||
<li><input type="radio" name="template" value="blackcandy" id="BlackCandy" <?php if(!isset($_POST['template']) || $_POST['template'] == 'blackcandy') {?>checked="checked"<?php }?> /><label for="BlackCandy">BlackCandy, default template ready to use.</label></li>
|
||||
<li><input type="radio" name="template" value="tutorial" id="EmptyTemplate" <?php if(isset($_POST['template']) && $_POST['template'] == 'tutorial') {?>checked="checked"<?php }?>/><label for="EmptyTemplate">Empty template, ready to begin the tutorial.</label></li>
|
||||
</ul>
|
||||
<p>You can change the template or download another from the SilverStripe website after installation.</p>
|
||||
|
||||
<input type="checkbox" id="stats" name="stats" checked="checked"><label for="stats">Send information on my webserver to SilverStripe (this is only version information, used for statistical purposes)</label><br />
|
||||
|
||||
|
||||
<?php if($alreadyInstalled) { ?>
|
||||
<p class="warning">
|
||||
<strong>Note:</strong> It seems as though SilverStripe is already installed here. If you ask me to install, I will overwrite
|
||||
the <strong>.htaccess</strong> and <strong>mysite/_config.php</strong> files.
|
||||
<br />
|
||||
<input type="checkbox" id="ReIn" name="force_reinstall" onclick="document.getElementById('install_button').disabled = !this.checked" /><label for="ReIn">That's okay, please re-install SilverStripe and overwrite these files.</label>
|
||||
</p>
|
||||
<?php } ?>
|
||||
|
||||
<p>
|
||||
<?php if($alreadyInstalled) { ?>
|
||||
<input id="install_button" type="submit" disabled="disabled" class="action" name="go" value="Install SilverStripe" onclick="document.getElementById('saving_top').style.display = ''; this.value = 'Installing SilverStripe...'" />
|
||||
<?php } else { ?>
|
||||
<input id="install_button" type="submit" class="action" name="go" value="Install SilverStripe" onclick="document.getElementById('saving_top').style.display = ''; this.value = 'Installing SilverStripe...'" />
|
||||
<?php } ?>
|
||||
|
||||
<span id="saving_top" style="display: none">
|
||||
|
||||
<img src="cms/images/network-save.gif" />
|
||||
(this will take a minute or so)
|
||||
</span>
|
||||
</p>
|
||||
<?php } ?>
|
||||
|
||||
<input type="hidden" name="database" value="MySQLDatabase" />
|
||||
<h4>MySQL Database</h4>
|
||||
<?php if($dbReq->hasErrors()) { ?>
|
||||
<p class="error"><!-- class="error" -->
|
||||
These database details don't appear to be correct. Please enter the correct details before installing.
|
||||
</p>
|
||||
<?php } else { ?>
|
||||
<p class="good">
|
||||
These database details look all good!
|
||||
</p>
|
||||
<?php } ?>
|
||||
|
||||
<p id="mysql_credentials">
|
||||
<label for="mysql_server">MySQL server:</label>
|
||||
<span class="middleColumn"><input id="mysql_server" class="text" type="text" name="mysql[server]" value="<?php echo $databaseConfig['server']; ?>" /></span>
|
||||
<label for="mysql_username">MySQL username:</label>
|
||||
<span class="middleColumn"><input id="mysql_username" class="text" type="text" name="mysql[username]" value="<?php echo $databaseConfig['username']; ?>" /></span>
|
||||
<label for="mysql_password">MySQL password:</label>
|
||||
<span class="middleColumn"><input id="mysql_password" class="text" type="password" name="mysql[password]" value="<?php echo $databaseConfig['password']; ?>" /></span>
|
||||
<label for="mysql_database">MySQL database:</label>
|
||||
<span class="middleColumn"><input id="mysql_database" class="text" type="text" name="mysql[database]" value="<?php echo $databaseConfig['database']; ?>" onchange="this.value = this.value.replace(/[\/\\:*?"<>|. \t]+/g,'');" /></span>
|
||||
<input type="submit" class="action" value="Re-check requirements" />
|
||||
</p>
|
||||
<p class="mysql">SilverStripe stores its content in a MySQL database. Please provide the username and password to connect to the server here. If this account has permission to create databases, then we will create the database for you; otherwise, you must give the name of a database that already exists.</p>
|
||||
<div class="clear"><!-- --></div>
|
||||
<h5>Details</h5>
|
||||
<?php $dbReq->showTable("MySQL Configuration"); ?>
|
||||
|
||||
<br />
|
||||
|
||||
<h4>SilverStripe Administration Account</h4>
|
||||
|
||||
<p id="AdminAccount">
|
||||
<label for="admin_username">Administrator email:</label>
|
||||
<span class="middleColumn"><input type="text" class="text" name="admin[username]" id="admin_username" value="<?php echo $adminConfig['username']; ?>" /></span>
|
||||
<label for="admin_password">Administrator password:</label>
|
||||
<span class="middleColumn"><input type="text" class="text" name="admin[password]" id="admin_password" value="<?php echo $adminConfig['password']; ?>" /></span>
|
||||
<label for="admin_firstname">Administrator first name:</label>
|
||||
<span class="middleColumn"><input type="text" class="text" name="admin[firstname]" id="admin_firstname" value="<?php echo $adminConfig['firstname']; ?>" /></span>
|
||||
<label for="admin_surname">Administrator surname:</label>
|
||||
<span class="middleColumn"><input type="text" class="text" name="admin[surname]" id="admin_surname" value="<?php echo $adminConfig['surname']; ?>" /></span>
|
||||
</p>
|
||||
<p class="adminAcc">
|
||||
We will set up 1 administrator account for you automatically. Enter the email address and password. If you'd
|
||||
rather log-in with a username instead of an email address, enter that instead.
|
||||
</p>
|
||||
|
||||
<br />
|
||||
|
||||
<h4>Development Servers</h4>
|
||||
<p id="DevSites">
|
||||
<label for="devsites">Development servers:</label>
|
||||
<span class="middleColumn"><textarea name="devsites" id="devsites" rows="5" />localhost
|
||||
127.0.0.1</textarea></span>
|
||||
</p>
|
||||
<p class="devHelp">
|
||||
SilverStripe allows you to run a site in <a href="http://doc.silverstripe.com/doku.php?id=devmode">development mode</a>.
|
||||
This shows all error messages in the web browser instead of emailing them to the administrator, and allows
|
||||
the database to be built without logging in as administrator. Please enter the host/domain names for servers
|
||||
you will be using for development.
|
||||
</p>
|
||||
|
||||
<br />
|
||||
|
||||
|
||||
<h4 id="requirements">Requirements</h4>
|
||||
<?php
|
||||
$req->showTable();
|
||||
?>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear"><!-- --></div>
|
||||
</div>
|
||||
|
||||
<div id="Footer">
|
||||
<div class="footerTop"><!-- --></div>
|
||||
<p><a href="http://www.silverstripe.com">SilverStripe Open Source CMS</a> | Copyright © 2008 SilverStripe Limited</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<title>SilverStripe CMS Installation</title>
|
||||
<script type="text/js">
|
||||
function show(id) {
|
||||
document.getElementById(id).style.display = '';
|
||||
}
|
||||
function hide(id) {
|
||||
document.getElementById(id).style.display = 'none';
|
||||
}
|
||||
</script>
|
||||
<link rel="stylesheet" type="text/css" href="themes/blackcandy/css/layout.css" />
|
||||
<link rel="stylesheet" type="text/css" href="themes/blackcandy/css/typography.css" />
|
||||
<link rel="stylesheet" type="text/css" href="themes/blackcandy/css/form.css" />
|
||||
<link rel="stylesheet" type="text/css" href="sapphire/dev/install/install.css" />
|
||||
<link rel="shortcut icon" href="favicon.ico" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="BgContainer">
|
||||
<div id="Container">
|
||||
<div id="Header">
|
||||
<h1>SilverStripe CMS Installation</h1>
|
||||
<p>Version <?php echo $silverstripe_version; ?></p>
|
||||
</div>
|
||||
|
||||
<div id="Navigation"> </div>
|
||||
<div class="clear"><!-- --></div>
|
||||
|
||||
<div id="Layout">
|
||||
<div class="typography">
|
||||
<h1>Welcome to SilverStripe</h1>
|
||||
<p>Thanks for choosing to use SilverStripe! Please follow the instructions below to get SilverStripe installed.</p>
|
||||
|
||||
<form action="install.php" method="post">
|
||||
<?php if(isset($hasErrorOtherThanDatabase)) { ?>
|
||||
<p class="error">
|
||||
You aren't currently able to install the software. Please <a href="#requirements">see below</a> for details.<br />
|
||||
If you are having problems meeting the requirements, see the <a href="http://doc.silverstripe.com/doku.php?id=server-requirements">server requirements wiki page</a>.
|
||||
</p>
|
||||
<?php } else { ?>
|
||||
<?php if($req->hasWarnings()) { ?>
|
||||
<p class="warning">
|
||||
There are some issues that we recommend you look at before installing, however, you are still able to install the software.
|
||||
Please see below for details.<br />
|
||||
If you are having problems meeting the requirements, see the <a href="http://doc.silverstripe.com/doku.php?id=server-requirements">server requirements wiki page</a>.
|
||||
</p>
|
||||
<?php } else if(!$dbReq->hasErrors()) { ?>
|
||||
<p class="good">
|
||||
You're ready to install!
|
||||
</p>
|
||||
<?php } ?>
|
||||
<p>
|
||||
<b>Template to install:</b>
|
||||
</p>
|
||||
<ul id="Themes">
|
||||
<li><input type="radio" name="template" value="blackcandy" id="BlackCandy" <?php if(!isset($_POST['template']) || $_POST['template'] == 'blackcandy') {?>checked="checked"<?php }?> /><label for="BlackCandy">BlackCandy, default template ready to use.</label></li>
|
||||
<li><input type="radio" name="template" value="tutorial" id="EmptyTemplate" <?php if(isset($_POST['template']) && $_POST['template'] == 'tutorial') {?>checked="checked"<?php }?>/><label for="EmptyTemplate">Empty template, ready to begin the tutorial.</label></li>
|
||||
</ul>
|
||||
<p>You can change the template or download another from the SilverStripe website after installation.</p>
|
||||
|
||||
<input type="checkbox" id="stats" name="stats" checked="checked"><label for="stats">Send information on my webserver to SilverStripe (this is only version information, used for statistical purposes)</label><br />
|
||||
|
||||
|
||||
<?php if($alreadyInstalled) { ?>
|
||||
<p class="warning">
|
||||
<strong>Note:</strong> It seems as though SilverStripe is already installed here. If you ask me to install, I will overwrite
|
||||
the <strong>.htaccess</strong> and <strong>mysite/_config.php</strong> files.
|
||||
<br />
|
||||
<input type="checkbox" id="ReIn" name="force_reinstall" onclick="document.getElementById('install_button').disabled = !this.checked" /><label for="ReIn">That's okay, please re-install SilverStripe and overwrite these files.</label>
|
||||
</p>
|
||||
<?php } ?>
|
||||
|
||||
<p>
|
||||
<?php if($alreadyInstalled) { ?>
|
||||
<input id="install_button" type="submit" disabled="disabled" class="action" name="go" value="Install SilverStripe" onclick="document.getElementById('saving_top').style.display = ''; this.value = 'Installing SilverStripe...'" />
|
||||
<?php } else { ?>
|
||||
<input id="install_button" type="submit" class="action" name="go" value="Install SilverStripe" onclick="document.getElementById('saving_top').style.display = ''; this.value = 'Installing SilverStripe...'" />
|
||||
<?php } ?>
|
||||
|
||||
<span id="saving_top" style="display: none">
|
||||
|
||||
<img src="cms/images/network-save.gif" />
|
||||
(this will take a minute or so)
|
||||
</span>
|
||||
</p>
|
||||
<?php } ?>
|
||||
|
||||
<input type="hidden" name="database" value="MySQLDatabase" />
|
||||
<h4>MySQL Database</h4>
|
||||
<?php if($dbReq->hasErrors()) { ?>
|
||||
<p class="error"><!-- class="error" -->
|
||||
These database details don't appear to be correct. Please enter the correct details before installing.
|
||||
</p>
|
||||
<?php } else { ?>
|
||||
<p class="good">
|
||||
These database details look all good!
|
||||
</p>
|
||||
<?php } ?>
|
||||
|
||||
<p id="mysql_credentials">
|
||||
<label for="mysql_server">MySQL server:</label>
|
||||
<span class="middleColumn"><input id="mysql_server" class="text" type="text" name="mysql[server]" value="<?php echo $databaseConfig['server']; ?>" /></span>
|
||||
<label for="mysql_username">MySQL username:</label>
|
||||
<span class="middleColumn"><input id="mysql_username" class="text" type="text" name="mysql[username]" value="<?php echo $databaseConfig['username']; ?>" /></span>
|
||||
<label for="mysql_password">MySQL password:</label>
|
||||
<span class="middleColumn"><input id="mysql_password" class="text" type="password" name="mysql[password]" value="<?php echo $databaseConfig['password']; ?>" /></span>
|
||||
<label for="mysql_database">MySQL database:</label>
|
||||
<span class="middleColumn"><input id="mysql_database" class="text" type="text" name="mysql[database]" value="<?php echo $databaseConfig['database']; ?>" onchange="this.value = this.value.replace(/[\/\\:*?"<>|. \t]+/g,'');" /></span>
|
||||
<input type="submit" class="action" value="Re-check requirements" />
|
||||
</p>
|
||||
<p class="mysql">SilverStripe stores its content in a MySQL database. Please provide the username and password to connect to the server here. If this account has permission to create databases, then we will create the database for you; otherwise, you must give the name of a database that already exists.</p>
|
||||
<div class="clear"><!-- --></div>
|
||||
<h5>Details</h5>
|
||||
<?php $dbReq->showTable("MySQL Configuration"); ?>
|
||||
|
||||
<br />
|
||||
|
||||
<h4>SilverStripe Administration Account</h4>
|
||||
|
||||
<p id="AdminAccount">
|
||||
<label for="admin_username">Administrator email:</label>
|
||||
<span class="middleColumn"><input type="text" class="text" name="admin[username]" id="admin_username" value="<?php echo $adminConfig['username']; ?>" /></span>
|
||||
<label for="admin_password">Administrator password:</label>
|
||||
<span class="middleColumn"><input type="text" class="text" name="admin[password]" id="admin_password" value="<?php echo $adminConfig['password']; ?>" /></span>
|
||||
<label for="admin_firstname">Administrator first name:</label>
|
||||
<span class="middleColumn"><input type="text" class="text" name="admin[firstname]" id="admin_firstname" value="<?php echo $adminConfig['firstname']; ?>" /></span>
|
||||
<label for="admin_surname">Administrator surname:</label>
|
||||
<span class="middleColumn"><input type="text" class="text" name="admin[surname]" id="admin_surname" value="<?php echo $adminConfig['surname']; ?>" /></span>
|
||||
</p>
|
||||
<p class="adminAcc">
|
||||
We will set up 1 administrator account for you automatically. Enter the email address and password. If you'd
|
||||
rather log-in with a username instead of an email address, enter that instead.
|
||||
</p>
|
||||
|
||||
<br />
|
||||
|
||||
<h4>Development Servers</h4>
|
||||
<p id="DevSites">
|
||||
<label for="devsites">Development servers:</label>
|
||||
<span class="middleColumn"><textarea name="devsites" id="devsites" rows="5" />localhost
|
||||
127.0.0.1</textarea></span>
|
||||
</p>
|
||||
<p class="devHelp">
|
||||
SilverStripe allows you to run a site in <a href="http://doc.silverstripe.com/doku.php?id=devmode">development mode</a>.
|
||||
This shows all error messages in the web browser instead of emailing them to the administrator, and allows
|
||||
the database to be built without logging in as administrator. Please enter the host/domain names for servers
|
||||
you will be using for development.
|
||||
</p>
|
||||
|
||||
<br />
|
||||
|
||||
|
||||
<h4 id="requirements">Requirements</h4>
|
||||
<?php
|
||||
$req->showTable();
|
||||
?>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear"><!-- --></div>
|
||||
</div>
|
||||
|
||||
<div id="Footer">
|
||||
<div class="footerTop"><!-- --></div>
|
||||
<p><a href="http://www.silverstripe.com">SilverStripe Open Source CMS</a> | Copyright © 2008 SilverStripe Limited</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,118 +1,118 @@
|
||||
body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#Container * {
|
||||
text-align: left;
|
||||
}
|
||||
ul#Themes{
|
||||
list-style: none;
|
||||
margin: 5px;
|
||||
}
|
||||
ul#Themes li {
|
||||
clear: both;
|
||||
padding: 3px 0;
|
||||
}
|
||||
ul#Themes input {
|
||||
float: left;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
}
|
||||
ul#Themes label {
|
||||
margin: -2px 5px 0 15px;
|
||||
}
|
||||
.good td {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.warning td {
|
||||
color: #ef7f24;
|
||||
}
|
||||
.testResults .error td {
|
||||
border: 1px #CCC solid;
|
||||
color: red;
|
||||
}
|
||||
|
||||
p.error {
|
||||
padding: 0.5em;
|
||||
background-color: #ffe9e9;
|
||||
border: 1px #ff8e8e solid;
|
||||
color: #f03838;
|
||||
}
|
||||
p.warning {
|
||||
padding: 0.5em;
|
||||
background-color: #fef1e1;
|
||||
border: 1px #ffc28b solid;
|
||||
color: #cb6a1c;
|
||||
}
|
||||
p.warning label {
|
||||
display: inline;
|
||||
margin-left: 5px;
|
||||
color: #cb6a1c
|
||||
}
|
||||
p.good {
|
||||
padding: 0.5em;
|
||||
background-color: #e2fee1;
|
||||
border: 1px #43cb3e solid;
|
||||
color: #359318;
|
||||
}
|
||||
p.error a,
|
||||
p.warning a,
|
||||
p.good a {
|
||||
color: inherit;
|
||||
text-decoration: underline;
|
||||
}
|
||||
p.error a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
span.middleColumn {
|
||||
width: 312px;
|
||||
margin-right: 0;
|
||||
padding: 4px;
|
||||
}
|
||||
input.text, textarea, select {
|
||||
padding: 2px;
|
||||
border: 1px solid #A7A7A7;
|
||||
color: #000;
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
width: 305px;
|
||||
body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#Container * {
|
||||
text-align: left;
|
||||
}
|
||||
ul#Themes{
|
||||
list-style: none;
|
||||
margin: 5px;
|
||||
}
|
||||
ul#Themes li {
|
||||
clear: both;
|
||||
padding: 3px 0;
|
||||
}
|
||||
ul#Themes input {
|
||||
float: left;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
}
|
||||
ul#Themes label {
|
||||
margin: -2px 5px 0 15px;
|
||||
}
|
||||
.good td {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.warning td {
|
||||
color: #ef7f24;
|
||||
}
|
||||
.testResults .error td {
|
||||
border: 1px #CCC solid;
|
||||
color: red;
|
||||
}
|
||||
|
||||
p.error {
|
||||
padding: 0.5em;
|
||||
background-color: #ffe9e9;
|
||||
border: 1px #ff8e8e solid;
|
||||
color: #f03838;
|
||||
}
|
||||
p.warning {
|
||||
padding: 0.5em;
|
||||
background-color: #fef1e1;
|
||||
border: 1px #ffc28b solid;
|
||||
color: #cb6a1c;
|
||||
}
|
||||
p.warning label {
|
||||
display: inline;
|
||||
margin-left: 5px;
|
||||
color: #cb6a1c
|
||||
}
|
||||
p.good {
|
||||
padding: 0.5em;
|
||||
background-color: #e2fee1;
|
||||
border: 1px #43cb3e solid;
|
||||
color: #359318;
|
||||
}
|
||||
p.error a,
|
||||
p.warning a,
|
||||
p.good a {
|
||||
color: inherit;
|
||||
text-decoration: underline;
|
||||
}
|
||||
p.error a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
span.middleColumn {
|
||||
width: 312px;
|
||||
margin-right: 0;
|
||||
padding: 4px;
|
||||
}
|
||||
input.text, textarea, select {
|
||||
padding: 2px;
|
||||
border: 1px solid #A7A7A7;
|
||||
color: #000;
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
width: 305px;
|
||||
}
|
||||
#stats {
|
||||
float: left;
|
||||
margin: 5px;
|
||||
}
|
||||
table.testResults {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 10px 0;
|
||||
}
|
||||
#Layout h4 {
|
||||
font-size: 2em;
|
||||
clear: left;
|
||||
}
|
||||
.testResults td {
|
||||
border: 1px #CCC solid;
|
||||
width: 400px;
|
||||
padding: 4px;
|
||||
}
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
p.mysql,
|
||||
p.adminAcc,
|
||||
p.devHelp {
|
||||
padding-top: 20px;
|
||||
}
|
||||
p#mysql_credentials,
|
||||
table.testResults {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 10px 0;
|
||||
}
|
||||
#Layout h4 {
|
||||
font-size: 2em;
|
||||
clear: left;
|
||||
}
|
||||
.testResults td {
|
||||
border: 1px #CCC solid;
|
||||
width: 400px;
|
||||
padding: 4px;
|
||||
}
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
p.mysql,
|
||||
p.adminAcc,
|
||||
p.devHelp {
|
||||
padding-top: 20px;
|
||||
}
|
||||
p#mysql_credentials,
|
||||
p#AdminAccount,
|
||||
p#DevSites {
|
||||
width: 330px;
|
||||
margin-top: 0;
|
||||
float: left;
|
||||
}
|
||||
#Layout input.action {
|
||||
text-align: center;
|
||||
width: 160px;
|
||||
font-size: 1em;
|
||||
p#DevSites {
|
||||
width: 330px;
|
||||
margin-top: 0;
|
||||
float: left;
|
||||
}
|
||||
#Layout input.action {
|
||||
text-align: center;
|
||||
width: 160px;
|
||||
font-size: 1em;
|
||||
}
|
@ -29,15 +29,15 @@ RelationComplexTableField.prototype = {
|
||||
//if( checkedListNameArray == null ) {
|
||||
checkedListNameArray = [];
|
||||
checkedListNameArray.push( checkedListName );
|
||||
checkedArray = [];
|
||||
checkedArray = [];
|
||||
if( checkedList.getAttribute( 'value' ) )
|
||||
checkedArray.push( checkedList.getAttribute( 'value' ).split( ',' ) );
|
||||
//}
|
||||
/*
|
||||
else if( checkedListNameArray.indexOf( checkedListName ) < 0 ) {
|
||||
checkedListNameArray.push( checkedListName );
|
||||
checkedListNameArray.push( checkedListName );
|
||||
if( checkedList.getAttribute( 'value' ) )
|
||||
checkedArray[ checkedListNameArray.length - 1 ] = checkedList.getAttribute( 'value' ).split( ',' );
|
||||
checkedArray[ checkedListNameArray.length - 1 ] = checkedList.getAttribute( 'value' ).split( ',' );
|
||||
}
|
||||
else {
|
||||
|
||||
@ -56,7 +56,7 @@ RelationComplexTableField.prototype = {
|
||||
if( checkedArray[ index ] && checkedArray[ index ].indexOf( markingInput.getAttribute( 'value' ) ) > -1 ) {
|
||||
markingInput.setAttribute( 'checked', 'checked' );}
|
||||
else
|
||||
markingInput.removeAttribute( 'checked' );
|
||||
markingInput.removeAttribute( 'checked' );
|
||||
}
|
||||
} */
|
||||
|
||||
@ -75,7 +75,7 @@ RelationComplexTableField.prototype = {
|
||||
for( var i = 0; i < inputs.length; i++ ) {
|
||||
var checkedList = inputs[ i ];
|
||||
if( checkedList.getAttribute( 'name' ) == checkedListName )
|
||||
break;
|
||||
break;
|
||||
}
|
||||
var index = checkedListNameArray.indexOf( checkedListName );
|
||||
|
||||
@ -104,8 +104,8 @@ RelationComplexTableField.prototype = {
|
||||
|
||||
// 3) Update The Hidden Input Field
|
||||
|
||||
checkedList.setAttribute( 'value', checkedArray[ index ] );
|
||||
}
|
||||
checkedList.setAttribute( 'value', checkedArray[ index ] );
|
||||
}
|
||||
};
|
||||
|
||||
Behaviour.register( rules );
|
||||
|
@ -1,233 +1,233 @@
|
||||
/**
|
||||
* On-demand JavaScript handler
|
||||
* Based on http://plugins.jquery.com/files/issues/jquery.ondemand.js_.txt and modified to integrate with Sapphire
|
||||
*/
|
||||
(function($){
|
||||
|
||||
function isExternalScript(url){
|
||||
re = new RegExp('(http|https)://');
|
||||
return re.test(url);
|
||||
};
|
||||
|
||||
$.extend({
|
||||
|
||||
requireConfig : {
|
||||
routeJs : '', // empty default paths give more flexibility and user has
|
||||
routeCss : '' // choice of using this config or full path in scriptUrl argument
|
||||
}, // previously were useless for users which don't use '_js/' and '_css/' folders. (by PGA)
|
||||
|
||||
queue : [],
|
||||
pending : null,
|
||||
loaded_list : null, // loaded files list - to protect against loading existed file again (by PGA)
|
||||
|
||||
|
||||
// Added by SRM: Initialise the loaded_list with the scripts included on first load
|
||||
initialiseItemLoadedList : function() {
|
||||
if(this.loaded_list == null) {
|
||||
$this = this;
|
||||
$this.loaded_list = {};
|
||||
$('script').each(function() {
|
||||
if($(this).attr('src')) $this.loaded_list[ $(this).attr('src') ] = 1;
|
||||
});
|
||||
$('link[@rel="stylesheet"]').each(function() {
|
||||
if($(this).attr('href')) $this.loaded_list[ $(this).attr('href') ] = 1;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns true if the given CSS or JS script has already been loaded
|
||||
*/
|
||||
isItemLoaded : function(scriptUrl) {
|
||||
this.initialiseItemLoadedList();
|
||||
return this.loaded_list[scriptUrl] != undefined;
|
||||
},
|
||||
|
||||
requireJs : function(scriptUrl, callback, opts, obj, scope)
|
||||
{
|
||||
|
||||
if(opts != undefined || opts == null){
|
||||
$.extend($.requireConfig, opts);
|
||||
}
|
||||
|
||||
var _request = {
|
||||
url : scriptUrl,
|
||||
callback : callback,
|
||||
opts : opts,
|
||||
obj : obj,
|
||||
scope : scope
|
||||
}
|
||||
|
||||
if(this.pending)
|
||||
{
|
||||
this.queue.push(_request);
|
||||
return;
|
||||
}
|
||||
|
||||
this.pending = _request;
|
||||
|
||||
this.initialiseItemLoadedList();
|
||||
|
||||
if (this.loaded_list[this.pending.url] != undefined) { // if required file exists (by PGA)
|
||||
this.requestComplete(); // => request complete
|
||||
return;
|
||||
}
|
||||
|
||||
var _this = this;
|
||||
var _url = (isExternalScript(scriptUrl)) ? scriptUrl : $.requireConfig.routeJs + scriptUrl;
|
||||
var _head = document.getElementsByTagName('head')[0];
|
||||
var _scriptTag = document.createElement('script');
|
||||
|
||||
// Firefox, Opera
|
||||
$(_scriptTag).bind('load', function(){
|
||||
_this.requestComplete();
|
||||
});
|
||||
|
||||
// IE
|
||||
_scriptTag.onreadystatechange = function(){
|
||||
if(this.readyState === 'loaded' || this.readyState === 'complete'){
|
||||
_this.requestComplete();
|
||||
}
|
||||
}
|
||||
|
||||
_scriptTag.type = "text/javascript";
|
||||
_scriptTag.src = _url;
|
||||
|
||||
_head.appendChild(_scriptTag);
|
||||
},
|
||||
|
||||
requestComplete : function()
|
||||
{
|
||||
|
||||
if(this.pending.callback){
|
||||
if(this.pending.obj){
|
||||
if(this.pending.scope){
|
||||
this.pending.callback.call(this.pending.obj);
|
||||
} else {
|
||||
this.pending.callback.call(window, this.pending.obj);
|
||||
}
|
||||
} else {
|
||||
this.pending.callback.call();
|
||||
}
|
||||
}
|
||||
|
||||
this.loaded_list[this.pending.url] = 1; // adding loaded file to loaded list (by PGA)
|
||||
this.pending = null;
|
||||
|
||||
if(this.queue.length > 0)
|
||||
{
|
||||
var request = this.queue.shift();
|
||||
this.requireJs(request.url, request.callback, request.opts, request.obj, request.scope);
|
||||
}
|
||||
},
|
||||
|
||||
requireCss : function(styleUrl, media){
|
||||
if(media == null) media = 'all';
|
||||
|
||||
// Don't double up on loading scripts
|
||||
if(this.isItemLoaded(styleUrl)) return;
|
||||
|
||||
if(document.createStyleSheet){
|
||||
var ss = document.createStyleSheet($.requireConfig.routeCss + styleUrl);
|
||||
ss.media = media;
|
||||
|
||||
} else {
|
||||
var styleTag = document.createElement('link');
|
||||
$(styleTag).attr({
|
||||
href : $.requireConfig.routeCss + styleUrl,
|
||||
type : 'text/css',
|
||||
media : media,
|
||||
rel : 'stylesheet'
|
||||
}).appendTo($('head').get(0));
|
||||
}
|
||||
|
||||
this.loaded_list[styleUrl] = 1;
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
/**
|
||||
* Sapphire extensions
|
||||
* Ajax requests are amended to look for X-Include-JS and X-Include-CSS headers
|
||||
*/
|
||||
_originalAjax = $.ajax;
|
||||
$.ajax = function(s) {
|
||||
var _complete = s.complete;
|
||||
var _success = s.success;
|
||||
var _dataType = s.dataType;
|
||||
|
||||
// This replaces the usual ajax success & complete handlers. They are called after any on demand JS is loaded.
|
||||
var _ondemandComplete = function(xml) {
|
||||
var status = jQuery.httpSuccess(xml) ? 'success' : 'error';
|
||||
if(status == 'success') {
|
||||
data = jQuery.httpData(xml, _dataType);
|
||||
if(_success) _success(data, status, xml);
|
||||
}
|
||||
if(_complete) _complete(xml, status);
|
||||
}
|
||||
|
||||
// We remove the success handler and take care of calling it outselves within _ondemandComplete
|
||||
s.success = null;
|
||||
s.complete = function(xml, status) {
|
||||
processOnDemandHeaders(xml, _ondemandComplete);
|
||||
}
|
||||
|
||||
return _originalAjax(s);
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
|
||||
/**
|
||||
* This is the on-demand handler used by our patched version of prototype.
|
||||
* once we get rid of all uses of prototype, we can remove this
|
||||
*/
|
||||
function prototypeOnDemandHandler(xml, callback) {
|
||||
processOnDemandHeaders(xml, callback);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process the X-Include-CSS and X-Include-JS headers provided by the Requirements class
|
||||
*/
|
||||
function processOnDemandHeaders(xml, _ondemandComplete) {
|
||||
var i;
|
||||
// CSS
|
||||
if(xml.getResponseHeader('X-Include-CSS')) {
|
||||
var cssIncludes = xml.getResponseHeader('X-Include-CSS').split(',');
|
||||
for(i=0;i<cssIncludes.length;i++) {
|
||||
// Syntax 1: "URL:##:media"
|
||||
if(cssIncludes[i].match(/^(.*):##:(.*)$/)) {
|
||||
jQuery.requireCss(RegExp.$1, RegExp.$2);
|
||||
|
||||
// Syntax 2: "URL"
|
||||
} else {
|
||||
jQuery.requireCss(cssIncludes[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// JavaScript
|
||||
var newIncludes = [];
|
||||
if(xml.getResponseHeader('X-Include-JS')) {
|
||||
var jsIncludes = xml.getResponseHeader('X-Include-JS').split(',');
|
||||
for(i=0;i<jsIncludes.length;i++) {
|
||||
if(!jQuery.isItemLoaded(jsIncludes[i])) {
|
||||
newIncludes.push(jsIncludes[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We make an array of the includes that are actually new, and attach the callback to the last one
|
||||
// They are placed in a queue and will be included in order. This means that the callback will
|
||||
// be able to execute script in the new includes (such as a livequery update)
|
||||
if(newIncludes.length > 0) {
|
||||
for(i=0;i<jsIncludes.length;i++) {
|
||||
jQuery.requireJs(jsIncludes[i], (i == jsIncludes.length-1) ? function() { _ondemandComplete(xml); } : null);
|
||||
}
|
||||
|
||||
// If there aren't any new includes, then we can just call the callbacks ourselves
|
||||
} else {
|
||||
_ondemandComplete(xml, status);
|
||||
}
|
||||
/**
|
||||
* On-demand JavaScript handler
|
||||
* Based on http://plugins.jquery.com/files/issues/jquery.ondemand.js_.txt and modified to integrate with Sapphire
|
||||
*/
|
||||
(function($){
|
||||
|
||||
function isExternalScript(url){
|
||||
re = new RegExp('(http|https)://');
|
||||
return re.test(url);
|
||||
};
|
||||
|
||||
$.extend({
|
||||
|
||||
requireConfig : {
|
||||
routeJs : '', // empty default paths give more flexibility and user has
|
||||
routeCss : '' // choice of using this config or full path in scriptUrl argument
|
||||
}, // previously were useless for users which don't use '_js/' and '_css/' folders. (by PGA)
|
||||
|
||||
queue : [],
|
||||
pending : null,
|
||||
loaded_list : null, // loaded files list - to protect against loading existed file again (by PGA)
|
||||
|
||||
|
||||
// Added by SRM: Initialise the loaded_list with the scripts included on first load
|
||||
initialiseItemLoadedList : function() {
|
||||
if(this.loaded_list == null) {
|
||||
$this = this;
|
||||
$this.loaded_list = {};
|
||||
$('script').each(function() {
|
||||
if($(this).attr('src')) $this.loaded_list[ $(this).attr('src') ] = 1;
|
||||
});
|
||||
$('link[@rel="stylesheet"]').each(function() {
|
||||
if($(this).attr('href')) $this.loaded_list[ $(this).attr('href') ] = 1;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns true if the given CSS or JS script has already been loaded
|
||||
*/
|
||||
isItemLoaded : function(scriptUrl) {
|
||||
this.initialiseItemLoadedList();
|
||||
return this.loaded_list[scriptUrl] != undefined;
|
||||
},
|
||||
|
||||
requireJs : function(scriptUrl, callback, opts, obj, scope)
|
||||
{
|
||||
|
||||
if(opts != undefined || opts == null){
|
||||
$.extend($.requireConfig, opts);
|
||||
}
|
||||
|
||||
var _request = {
|
||||
url : scriptUrl,
|
||||
callback : callback,
|
||||
opts : opts,
|
||||
obj : obj,
|
||||
scope : scope
|
||||
}
|
||||
|
||||
if(this.pending)
|
||||
{
|
||||
this.queue.push(_request);
|
||||
return;
|
||||
}
|
||||
|
||||
this.pending = _request;
|
||||
|
||||
this.initialiseItemLoadedList();
|
||||
|
||||
if (this.loaded_list[this.pending.url] != undefined) { // if required file exists (by PGA)
|
||||
this.requestComplete(); // => request complete
|
||||
return;
|
||||
}
|
||||
|
||||
var _this = this;
|
||||
var _url = (isExternalScript(scriptUrl)) ? scriptUrl : $.requireConfig.routeJs + scriptUrl;
|
||||
var _head = document.getElementsByTagName('head')[0];
|
||||
var _scriptTag = document.createElement('script');
|
||||
|
||||
// Firefox, Opera
|
||||
$(_scriptTag).bind('load', function(){
|
||||
_this.requestComplete();
|
||||
});
|
||||
|
||||
// IE
|
||||
_scriptTag.onreadystatechange = function(){
|
||||
if(this.readyState === 'loaded' || this.readyState === 'complete'){
|
||||
_this.requestComplete();
|
||||
}
|
||||
}
|
||||
|
||||
_scriptTag.type = "text/javascript";
|
||||
_scriptTag.src = _url;
|
||||
|
||||
_head.appendChild(_scriptTag);
|
||||
},
|
||||
|
||||
requestComplete : function()
|
||||
{
|
||||
|
||||
if(this.pending.callback){
|
||||
if(this.pending.obj){
|
||||
if(this.pending.scope){
|
||||
this.pending.callback.call(this.pending.obj);
|
||||
} else {
|
||||
this.pending.callback.call(window, this.pending.obj);
|
||||
}
|
||||
} else {
|
||||
this.pending.callback.call();
|
||||
}
|
||||
}
|
||||
|
||||
this.loaded_list[this.pending.url] = 1; // adding loaded file to loaded list (by PGA)
|
||||
this.pending = null;
|
||||
|
||||
if(this.queue.length > 0)
|
||||
{
|
||||
var request = this.queue.shift();
|
||||
this.requireJs(request.url, request.callback, request.opts, request.obj, request.scope);
|
||||
}
|
||||
},
|
||||
|
||||
requireCss : function(styleUrl, media){
|
||||
if(media == null) media = 'all';
|
||||
|
||||
// Don't double up on loading scripts
|
||||
if(this.isItemLoaded(styleUrl)) return;
|
||||
|
||||
if(document.createStyleSheet){
|
||||
var ss = document.createStyleSheet($.requireConfig.routeCss + styleUrl);
|
||||
ss.media = media;
|
||||
|
||||
} else {
|
||||
var styleTag = document.createElement('link');
|
||||
$(styleTag).attr({
|
||||
href : $.requireConfig.routeCss + styleUrl,
|
||||
type : 'text/css',
|
||||
media : media,
|
||||
rel : 'stylesheet'
|
||||
}).appendTo($('head').get(0));
|
||||
}
|
||||
|
||||
this.loaded_list[styleUrl] = 1;
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
/**
|
||||
* Sapphire extensions
|
||||
* Ajax requests are amended to look for X-Include-JS and X-Include-CSS headers
|
||||
*/
|
||||
_originalAjax = $.ajax;
|
||||
$.ajax = function(s) {
|
||||
var _complete = s.complete;
|
||||
var _success = s.success;
|
||||
var _dataType = s.dataType;
|
||||
|
||||
// This replaces the usual ajax success & complete handlers. They are called after any on demand JS is loaded.
|
||||
var _ondemandComplete = function(xml) {
|
||||
var status = jQuery.httpSuccess(xml) ? 'success' : 'error';
|
||||
if(status == 'success') {
|
||||
data = jQuery.httpData(xml, _dataType);
|
||||
if(_success) _success(data, status, xml);
|
||||
}
|
||||
if(_complete) _complete(xml, status);
|
||||
}
|
||||
|
||||
// We remove the success handler and take care of calling it outselves within _ondemandComplete
|
||||
s.success = null;
|
||||
s.complete = function(xml, status) {
|
||||
processOnDemandHeaders(xml, _ondemandComplete);
|
||||
}
|
||||
|
||||
return _originalAjax(s);
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
|
||||
/**
|
||||
* This is the on-demand handler used by our patched version of prototype.
|
||||
* once we get rid of all uses of prototype, we can remove this
|
||||
*/
|
||||
function prototypeOnDemandHandler(xml, callback) {
|
||||
processOnDemandHeaders(xml, callback);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process the X-Include-CSS and X-Include-JS headers provided by the Requirements class
|
||||
*/
|
||||
function processOnDemandHeaders(xml, _ondemandComplete) {
|
||||
var i;
|
||||
// CSS
|
||||
if(xml.getResponseHeader('X-Include-CSS')) {
|
||||
var cssIncludes = xml.getResponseHeader('X-Include-CSS').split(',');
|
||||
for(i=0;i<cssIncludes.length;i++) {
|
||||
// Syntax 1: "URL:##:media"
|
||||
if(cssIncludes[i].match(/^(.*):##:(.*)$/)) {
|
||||
jQuery.requireCss(RegExp.$1, RegExp.$2);
|
||||
|
||||
// Syntax 2: "URL"
|
||||
} else {
|
||||
jQuery.requireCss(cssIncludes[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// JavaScript
|
||||
var newIncludes = [];
|
||||
if(xml.getResponseHeader('X-Include-JS')) {
|
||||
var jsIncludes = xml.getResponseHeader('X-Include-JS').split(',');
|
||||
for(i=0;i<jsIncludes.length;i++) {
|
||||
if(!jQuery.isItemLoaded(jsIncludes[i])) {
|
||||
newIncludes.push(jsIncludes[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We make an array of the includes that are actually new, and attach the callback to the last one
|
||||
// They are placed in a queue and will be included in order. This means that the callback will
|
||||
// be able to execute script in the new includes (such as a livequery update)
|
||||
if(newIncludes.length > 0) {
|
||||
for(i=0;i<jsIncludes.length;i++) {
|
||||
jQuery.requireJs(jsIncludes[i], (i == jsIncludes.length-1) ? function() { _ondemandComplete(xml); } : null);
|
||||
}
|
||||
|
||||
// If there aren't any new includes, then we can just call the callbacks ourselves
|
||||
} else {
|
||||
_ondemandComplete(xml, status);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user