From 62076389c31373637582b7ff236305b91af9f5a7 Mon Sep 17 00:00:00 2001
From: aoneil
Date: Tue, 7 Aug 2007 22:19:05 +0000
Subject: [PATCH] Moved installer to open, the right copy this time!
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/phpinstaller/trunk@39713 467b73ca-7a2a-4603-9d3b-597d59a354a9
---
COPYING | 17 +
ChangeLog | 207 +++++++++++++
INSTALL | 22 ++
UPGRADING | 6 +
check-php.php | 22 ++
config-form.css | 63 ++++
config-form.html | 115 +++++++
index.html | 17 +
index.php | 3 +
install.php | 792 +++++++++++++++++++++++++++++++++++++++++++++++
rewritetest.php | 75 +++++
11 files changed, 1339 insertions(+)
create mode 100644 COPYING
create mode 100644 ChangeLog
create mode 100644 INSTALL
create mode 100644 UPGRADING
create mode 100644 check-php.php
create mode 100644 config-form.css
create mode 100644 config-form.html
create mode 100644 index.html
create mode 100644 index.php
create mode 100644 install.php
create mode 100644 rewritetest.php
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..9ffbaac
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,17 @@
+Copyright (c) 2007, SilverStripe Limited - www.silverstripe.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of SilverStripe nor the names of its contributors may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..07c64f5
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,207 @@
+SilverStripe ChangeLog
+
+2.0.3
+ - Theme support
+ - Widget support
+ - TinyMCE has been updated to 2.1.1.1
+ - Improved spam detection
+ - More API documentation
+ - PHP notice fixes
+ - Added support for __ss_environment.php files
+ - Use normal authentification rather than basicauth for db/build
+ - Fix CSS of profiler pop-up
+ - Fix specific newsletter bug
+ - Added sorting, highlighting, formatting to TableListField
+ - Automatic filesystem backup of POST-data in Form
+ - Support for right-aligned titles in FormField
+ - Custom CSS-clases in FormFields by addExtraClass() and removeExtraClass()
+ - Validation in ComplexTableField_Popup
+ - Added BankAccountField
+ - Changed DropdownField.php $emptyString-syntax from '0' to ''
+ - Better validation in PhoneNumberField
+ - Validation and RequiredFields for TableField
+ - Fixed IE6 DOM-parsing bug caused by FormResponse::load_form()
+ - Triggering previewwrite for 'delete' and 'replace' SQL-actions
+ - Changed record-insertion in DataObject
+ - Added DataObjectSet->getRange()
+ - Added Date::past_date()
+ - Boolean.php accepts database-default
+ - Added Varchar->RTF()
+ - Added Convert::raw2htmlatt(), Convert::raw2mailto()
+ - Optionally hide backtrace-headers in Debug::message() and Debug::show() (applied in 'showqueries')
+ - Improved validation in Email::is_valid_address()
+ - MimeType-fallback for Email (from /etc/mime.types)
+ - Added Description-field to Group.php
+ - Added $strict-flag to Permission::check()
+ - Fixed Permission::get_members_by_permission()
+ - Implemented showIndicator() and hideIndicator(), Improved statusMessage() to clear manually instead of fixed interval, added hideStatusMessage()
+ - Added memory_limit to publishall()
+ - Styling changes in TreeDropdownField, TableListField
+ - Allow member cms fields to be added by DataObjectDecorators
+ - Fix many-many component set relation setting
+ - Added FiledSet::insertAfter()
+ - Allow classes other than typography to be set on HtmlEditorFields
+ - Added readonly transforamtion for ImageField
+ - The Link for a RedirectorPage points to its target
+ - Add SQL_ prefix in place it was missing in Email
+ - Added ContentController::project()
+ - layout.css, form.css and typography.css are automatically included
+ - Allow CMS users to limit view/edit access to a page.
+ - Added a check to make sure record exists before calling hasMethod on it in CheckboxSetField
+ - Don't show classes user doesn't have permissions to change to in class dropdown
+ - Fixed bug in DataObject::addStaticVars()
+ - Check for string 'true' as well as boolean in SiteTree::MetaTags()
+ - Fix AllNewsletters value not being passed to OptionSetField in SubscribeForm
+ - Fix reading of Live pages in CMSMain
+ - Fix double page reading after changing the class
+ - Fix insert flash
+ - Fix version regex for release candidates
+ - Fix delete in Files and Images section
+ - Fixed saving root folder causes error
+ - Fixed "non-numeric ID" error that occurs when visiting newsletter section for a newsletter that doesn't exist (caused by session sometimes)
+ - Added anchors to page comments, and made rss feed link to them
+
+
+2.0.2
+ - BlackCandy is the new default theme
+ - Much more API Documentation
+ - Reduced warnings when E_NOTICE is enabled
+ - Modules must now have _config.php files in order to be loaded
+ - Forms in newsletter & security section were incorrectly submitting when enter was pressed
+ - Fixed validation of date fields in a user defined form
+ - Fixed search in MemberTableField
+ - Fixed multiple security groups being created when logging in with default admin
+ - Ensure that WYSIWYG context menu always appears on the screen
+ - Fixed permissions for administrating page comments
+ - Added pagination for page comments
+ - Fixed a bug where you couldn't always edit the bottom of an WYSIWYG editor field
+ - Fixed ContentController::PageComments() method to die if spammers are POSTing form data when comments are disabled
+ - Fixed permission checking on PHP 5.0.5
+ - Fixed 'cannot access protected property' error in Security section on PHP 5.0.5
+ - Fixed javascript validation of forms
+ - Don't show popup when validation fails in Security section
+ - Fixed error when asp_tags = On
+ - Fixed bug where you have a non-required field with numeric validation
+ - Added ContentNegotiator::set_encoding() to choose a character set other than utf-8
+ - Added a limit of 20 steps in Breadcrumbs generation
+ - Changed SiteTree.Title length from 100 to 255
+ - Fixed random password generator in Member::createNewPassword()
+ - Fixed bug where scrollbars aren't shown in the CMS
+ - Let CMSMain be used to manage objects without Sort
+ - Fixed BatchProcess to not display an error if no objects could be processed
+ - The help button now redirects to http://userhelp.silverstripe.com
+ - Fixed a bug where a user is redirected incorrectly after logging in
+ - Changed temp-folder selection to not leave temp files lying around, and put silverstripe temp files into a silverstripe-cache folder
+ - Removed duplicate XML class
+ - Made guid of PageComments in rss feed unique
+ - Performance improvements to client-side javascript
+ - Fixed bugs caused by missing html elements
+ - Optimised behaviour load times
+ - Sorted the output of profiler
+ - Performance enhancements to form and template code
+ - Added trace argument to Profiler::show
+ - Added profiling scaffolds
+ - Fixed code to remove need for short_open_tag
+ - Fixed FileSize generation for sizes of just over 1 meg
+ - only show $messageBlock in FormField::FieldHolder() if $Message is existing
+ - fixed rightTitle and id in FormField::FieldHolder()
+ - Added Email::send_all_emails_to to assist in testing
+ - Added Email::cc_all_emails_to() and Email::bcc_all_emails_to()
+ - Fixed ?isDev=1 mode
+ - Replaced sendLiveErrorsTo with send_errors_to, for more flexibility
+ - Set default of sendWarnings on Debug::send_errors_to
+ - Fixed formatting of error emails sent from ajax requests
+ - Removed debug plumbing from the results of Debug::backtrace()
+ - Added ?profile_trace=1 url variable tool to show a trace on the profiler
+ - Simplified return data of htmlEmail, an inconsequential internal optimisation
+ - Create assets folder if it doesn't exist when uploading a file
+ - Improvements to profiling information
+ - Fixed bug in SiteTree::NestedTitle()
+ - Updated CalendarDateField, adding a calendar icon to the right of it
+ - Updated date field in CMS-edited forms to use CalendarDateField
+ - Added Form::current_action() and Form::single_field_required() to aid in form optimisation
+ - Don't append /home to the home page URL
+ - Small fix for windows installations
+ - Fixed efficiency problems in Versioned::get_latest_version
+ - Fixed File::sync(), to let it recurse into new directories in a single execution
+ - Fixed bug with getting form action that was breaking form submission and complextablefield pop-up
+ - Prepared CheckboxSetField for use editing a many-many join in the CMS, popualted with a SQLMap object
+ - Added TreeDropdownField::setTreeBaseID, for showing a sub-tree in your field
+ - Fixed SQLMap iteration
+ - Added option to TableField, to aid putting TableFields inside the ComplexTableField? popup
+ - Simplified EmailField validation error message
+ - Fixed some bugs in the debug emailer
+ - Reduced amount of ajax-refetching that the TreeSelectorFields do
+ - Added 'open in new window' checkbox to link inserter
+ - Fix macron support in reports
+ - Improved debug message (remove big blocks of redundant data)
+ - Allow for the disabling of default buttons. Apply this to CMSMain and GenericDataAdmin in the administration, so that we don't default to clicking the *DELETE* button.
+ - Added default value to first arg of permissionFailure(); it's not actually used!
+ - Added PermissionProvider class and Permission::get_codes()
+ - Added ClassInfo::implementorsOf()
+ - Added providePermissions() for core items, and set up a dropdown interface for the security CMS admin
+ - Added DataObject::add_extension() for adding decorators in _config.php
+ - Added DataObjectDecorator::extraDBFields() for modifying the decorated data objects, adding extra database fields
+ - Improved handling of EditableFormFields on new UserDefinedForms
+ - Version displayed in CMS now works correctly
+ - Removed non-XHTML compliant border attributes from editor
+ - Updated GenericDataAdmin to use new permissions model
+ - Fixed CMS action button support when text size increases
+ - Added message when report is empty
+ - fixed (overrides) to CSS to avoid larger font-size due to em values
+ - Fixed tree scrolling and resizing issues
+ - Improved search results message shown on first load
+ - Added 2nd argument to LeftAndMain::setApplicationName so that the name in the top corner and the name shown elsewhere can be 2 different strings
+ - Added event.setStyle to prototype_improvements.js
+ - Fix weird bug in behaviour to do with class.applyToChildren
+ - Add class text field to image properties dialog in TinyMCE
+ - Added ?debug_behaviour=1 URL option for debugging behaviour calls with Firebug
+ - Made calendar control register a date change when the calendar is used
+ - Improved console.log alternative
+ - Fixed sizing issues with CMS right content area
+ - Installer changes
+ - Added option of installing either the default template, or the tutorial template
+ - mod_rewrite check now works with http authentification
+ - Workaround for 'URL file-access is disabled in the server configuration' using curl for mod_rewrite test
+ - Better error message if the installer can't detect the web server
+ - Added an alternative .htaccess configuration
+
+2.0.1
+ - Text->FirstParagraph() now only shows the first paragraph
+ - Fixed HTMLText->Summary()
+ - Fixed layout issues on IE7 for TreeDropdownField
+ - Don't show Akismet errors to user
+ - Removed overloaded MemberTableField->sourceItems() that was causing problems
+ - Improved layout of UserDefinedForm submissions in CMS
+ - Fixed UserDefinedForm submission emails
+ - Fixed UserDefinedForm permissions
+ - If a file extension doesn't have a maximum upload size associated with it, then allow uploads of any size
+ - Fixed a bug with the TreeMultiselectField that prevented it from displaying the checkboxes
+ - Made Scheduled tasks concrete so they can be instantiated
+ - Fixed sizing of tabs in CMS
+ - Fixed popup for single asset in Files & Images section
+ - Mime types fallback for servers don't have /etc/mime.types
+ - Fixed link to CMS on default homepage
+ - TableField fixes
+ - mb_string module is now an optional dependency
+ - Fixed security vunerability in search
+ - Fixed permissions table in Security section
+ - GD::color_web2gd() was using incorrect substr
+ - Fixed last link css
+ - Fixed el no properties error in IE
+ - Fixed duplicate checkbox fields in UserDefinedForm
+ - Fixed css in UserDefinedForm
+ - Don't show name field on root folder in Assets section
+ - Pressing the flash button a second time now hides the dropdown
+ - Added strong_create method to Object, as useCustomClass was not working correctly
+ - Installer fixes
+ - Fixed MySQL version check
+ - Merge with existing .htaccess file
+ - Test that mod_rewrite is working
+ - Added option to delete installer files after successful install
+ - Fixed PHP4 parse error so installer loads and shows correct error message
+ - Apache test passes if apache is used but apache php functions are not available
+ - SilverStripe needs at least PHP version 5.0.4
+
+2.0.0
+ - Initial release
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..df687a9
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,22 @@
+Thanks for downloading SilverStripe CMS.
+
+Simply extract the archive to a folder in a web-accessible location and visit the folder
+in your web browser (which in turn runs index.php).
+
+This will lead you through a web-based installation process.
+
+
+Server Requirements
+ * PHP 5+
+ * MySQL 4.1+
+ * Apache or Lighttpd webserver (feel free to try with others)
+ * Details at http://doc.silverstripe.com/doku.php?id=server-requirements
+
+
+General documentation, tutorials:
+ * Wiki: http://doc.silverstripe.com/
+ * Tutorials: http://doc.silverstripe.com/doku.php?id=silverstripe-tutorial
+
+
+Forum
+ * http://www.silverstripe.com/silverstripe-forum/
\ No newline at end of file
diff --git a/UPGRADING b/UPGRADING
new file mode 100644
index 0000000..5b32585
--- /dev/null
+++ b/UPGRADING
@@ -0,0 +1,6 @@
+To upgrade your installation of SilverStripe, simply copy the
+sapphire, cms & jsparty folders overtop of your existing installation.
+Then flush the cache and rebuild the database (db/build?flush=1).
+
+If there are any special notes on upgrading to a particular version,
+these will be documented here.
diff --git a/check-php.php b/check-php.php
new file mode 100644
index 0000000..6e8f033
--- /dev/null
+++ b/check-php.php
@@ -0,0 +1,22 @@
+
+
+
+
+No PHP Support
+
+
+
+
No PHP Support
+
+
Before I can install SilverStripe 2, you must add PHP support to your webserver.
Thanks for choosing to use SilverStripe! Please follow the instructions below to get SilverStripe
+installed.
+
+
+
+
+
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..9ee87ea
--- /dev/null
+++ b/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..4fb6c3a
--- /dev/null
+++ b/index.php
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/install.php b/install.php
new file mode 100644
index 0000000..bdeba79
--- /dev/null
+++ b/install.php
@@ -0,0 +1,792 @@
+ "localhost",
+ "username" => "root",
+ "password" => "",
+ "database" => "SS_mysite",
+ );
+}
+
+$alreadyInstalled = (file_exists('assets') || file_exists('mysite/_config.php'));
+
+if(file_exists('sapphire/silverstripe_version')) {
+ $sapphireVersionFile = file_get_contents('sapphire/silverstripe_version');
+ if(strstr($sapphireVersionFile, "/sapphire/trunk")) {
+ $silverstripe_version = "trunk";
+ } else {
+ preg_match("/sapphire\/(?:(?:branches)|(?:tags))(?:\/rc)?\/([A-Za-z0-9._-]+)\/silverstripe_version/", $sapphireVersionFile, $matches);
+ $silverstripe_version = $matches[1];
+ }
+} else {
+ $silverstripe_version = "unknown";
+}
+
+// Check requirements
+$req = new InstallRequirements();
+$req->check();
+
+if($req->hasErrors()) $hasErrorOtherThanDatabase = true;
+
+if($databaseConfig) {
+ $dbReq = new InstallRequirements();
+ $dbReq->checkdatabase($databaseConfig);
+}
+
+// Actual processor
+if(isset($_REQUEST['go']) && !$req->hasErrors() && !$dbReq->hasErrors()) {
+ // Confirm before reinstalling
+ if(!isset($_REQUEST['force_reinstall']) && $alreadyInstalled) {
+ include('config-form.html');
+
+ } else {
+ $inst = new Installer();
+ $inst->install($_REQUEST);
+ }
+
+// Show the config form
+} else {
+ include('config-form.html');
+}
+
+/**
+ * This class checks requirements
+ * Each of the requireXXX functions takes an argument which gives a user description of the test. It's an array
+ * of 3 parts:
+ * $description[0] - The test catetgory
+ * $description[1] - The test title
+ * $description[2] - The test error to show, if it goes wrong
+ */
+
+class InstallRequirements {
+ var $errors, $warnings, $tests;
+
+ /**
+ * Just check that the database configuration is okay
+ */
+ function checkdatabase($databaseConfig) {
+ if($this->requireFunction('mysql_connect', array("PHP Configuration", "MySQL support", "MySQL support not included in PHP."))) {
+ $this->requireMySQLServer($databaseConfig['server'], array("MySQL Configuration", "Does the server exist",
+ "Can't find the a MySQL server on '$databaseConfig[server]'", $databaseConfig['server']));
+ if($this->requireMysqlConnection($databaseConfig['server'], $databaseConfig['username'], $databaseConfig['password'],
+ array("MySQL Configuration", "Are the access credentials correct", "That username/password doesn't work"))) {
+ @$this->requireMySQLVersion("4.1", array("MySQL Configuration", "MySQL version at least 4.1", "MySQL version 4.1 is required, you only have ", "MySQL " . mysql_get_server_info()));
+ }
+ $this->requireDatabaseOrCreatePermissions($databaseConfig['server'], $databaseConfig['username'], $databaseConfig['password'], $databaseConfig['database'],
+ array("MySQL Configuration", "Can I access/create the database", "I can't create new databases and the database '$databaseConfig[database]' doesn't exist"));
+ }
+ }
+
+
+ /**
+ * Check everything except the database
+ */
+ function check() {
+ $this->errors = null;
+
+ $this->requirePHPVersion('5.0.4', array("PHP Configuration", "PHP5 installed", null, "PHP version " . phpversion()));
+
+ // Check that we can identify the root folder successfully
+ $this->requireFile('config-form.html', array("File permissions",
+ "Does the webserver know where files are stored?",
+ "The webserver isn't letting me identify where files are stored.",
+ $this->getBaseDir()
+ ));
+ $this->requireFile('mysite', array("File permissions", "mysite/ folder exists", "There's no mysite folder."));
+ $this->requireFile('sapphire', array("File permissions", "sapphire/ folder exists", "There's no sapphire folder."));
+ $this->requireFile('cms', array("File permissions", "cms/ folder exists", "There's no cms folder."));
+ $this->requireFile('jsparty', array("File permissions", "jsparty/ folder exists", "There's no jsparty folder."));
+ $this->requireWriteable('.', array("File permissions", "Is the base folder writeable?", null));
+ $this->requireWriteable('mysite', array("File permissions", "Is the mysite /folder writeable?", null));
+
+ if(!is_writeable(dirname(tempnam('adfadsfdas','')))) {
+ $this->error(array("File permissions", "Is the temporary folder writeable?", "The temporary folder isn't writeable!"));
+ }
+
+ // Check that there's no stray files to get in the way
+ //$this->moveFileOutOfTheWay('.htaccess', "Please remove the current .htaccess file.");
+ //$this->moveFileOutOfTheWay('mysite/_config.php', "Please remove the current mysite/_config.php file.");
+
+ // Check for rewriting
+
+ $webserver = strip_tags(trim($_SERVER['SERVER_SIGNATURE']));
+ if($webserver == '') {
+ $webserver = "I can't tell what webserver you are running";
+ }
+
+ $this->isRunningApache(array("Webserver Configuration", "Server software", "$webserver. Without Apache I can't tell if mod_rewrite is enabled.", $webserver));
+ if(function_exists('apache_get_modules')) {
+ $this->requireApacheModule('mod_rewrite', array("Webserver Configuration", "mod_rewrite enabled", "You need mod_rewrite to run SilverStripe CMS, but it is not enabled."));
+ } else {
+ $this->warning(array("Webserver Configuration", "mod_rewrite enabled", "I can't tell whether mod_rewrite is running. You may need to configure a rewriting rule yourself."));
+ }
+
+ // Check for $_SERVER configuration
+ $this->requireServerVariables(array('SCRIPT_NAME','HTTP_HOST','SCRIPT_FILENAME'), array("Webserver config", "Recognised webserver", "You seem to be using an unsupported webserver. The server variables SCRIPT_NAME, HTTP_HOST, SCRIPT_FILENAME need to be set."));
+
+ // Check for GD support
+ if(!$this->requireFunction("imagecreatetruecolor", array("PHP Configuration", "GD2 support", "PHP must have GD version 2."))) {
+ $this->requireFunction("imagecreate", array("PHP Configuration", "GD2 support", "GD2 support", "GD support for PHP not included."));
+ }
+
+ // Check for XML support
+ $this->requireFunction('xml_set_object', array("PHP Configuration", "XML support", "XML support not included in PHP."));
+
+ // Check for MySQL support
+ $this->requireFunction('mysql_connect', array("PHP Configuration", "MySQL support", "MySQL support not included in PHP."));
+
+ // Check memory allocation
+ $this->requireMemory(20*1024*1024, 32*1024*1024, array("PHP Configuration", "Memory allocated (PHP config option 'memory_limit')", "SilverStripe needs a minimum of 20M allocated to PHP, but recommends 32M.", ini_get("memory_limit")));
+
+ // Check allow_call_time_pass_reference
+ $this->suggestPHPSetting('allow_call_time_pass_reference', array(1,'1','on','On'), array("PHP Configuration", "Check that the php.ini setting allow_call_time_pass_reference is on",
+ "You can install with allow_call_time_pass_reference not set, but some warnings may get displayed. For best results, turn it on."));
+
+ return $this->errors;
+ }
+
+ function suggestPHPSetting($settingName, $settingValues, $testDetails) {
+ $this->testing($testDetails);
+
+ $val = ini_get($settingName);
+ if(!in_array($val, $settingValues) && $val != $settingValues) {
+ $testDetails[2] = "$settingName is set to '$val' in php.ini. $testDetails[2]";
+ $this->warning($testDetails);
+ }
+ }
+
+ function requireMemory($min, $recommended, $testDetails) {
+ $this->testing($testDetails);
+ $mem = $this->getPHPMemory();
+
+ if($mem < $min && $mem > 0) {
+ $testDetails[2] .= " You only have " . ini_get("memory_limit") . " allocated";
+ $this->error($testDetails);
+ } else if($mem < $recommended && $mem > 0) {
+ $testDetails[2] .= " You only have " . ini_get("memory_limit") . " allocated";
+ $this->warning($testDetails);
+ } elseif($mem == 0) {
+ $testDetails[2] .= " We can't determine how much memory you have allocated. Install only if you're sure you've allocated at least 20 MB.";
+ $this->warning($testDetails);
+ }
+ }
+
+ function getPHPMemory() {
+ $memString = ini_get("memory_limit");
+
+ switch(strtolower(substr($memString,-1))) {
+ case "k":
+ return round(substr($memString,0,-1)*1024);
+
+ case "m":
+ return round(substr($memString,0,-1)*1024*1024);
+
+ case "g":
+ return round(substr($memString,0,-1)*1024*1024*1024);
+
+ default:
+ return round($memString);
+ }
+ }
+
+ function listErrors() {
+ if($this->errors) {
+ echo "
The following problems are preventing me from installing SilverStripe CMS:
";
+ }
+ }
+ }
+
+ function showInstallStatus() {
+ if($this->warnings) {
+ echo "I have installed SilverStripe CMS, however, you should note the following:";
+ foreach($this->warnings as $warning) {
+ echo "
";
+ flush();
+
+ $this->createFile("$template/_config.php", << "$config[database]",
+ "server" => "{$config['mysql']['server']}",
+ "username" => "{$config['mysql']['username']}",
+ "password" => "{$config['mysql']['password']}",
+ "database" => "{$config['mysql']['database']}",
+);
+
+// If we're running on local host, or a server with 'dev.' in its
+// name, set the site to dev mode. You should add test for your
+// development servers here also.
+if(strpos(Director::baseURL(), "localhost") !== false ||
+ strpos(Director::baseURL(), "127.0.0.1") !== false ||
+ strpos(Director::baseURL(), "dev.")) {
+ Director::set_environment_type("dev");
+ }
+
+?>
+PHP
+ );
+
+ echo "
ERROR: mod_rewrite not working, redirecting to mod_rewrite test page
";
+ if(file_exists('../.htaccess_orig')) {
+ copy('../.htaccess_orig', '../.htaccess');
+ } else {
+ unlink('../.htaccess');
+ }
+ echo "I will now try and direct you to rewritetest to troubleshoot mod_rewrite
+
+ ";
+ return false;
+ }
+ return true;
+ }
+
+ function performModRewriteTest() {
+ $baseURL = dirname($_SERVER['SCRIPT_NAME']);
+ if($baseURL == "/") {
+ $baseURL = "";
+ }
+
+ // Check if mod_rewrite works properly
+ $location = 'http://' . (isset($_SERVER['PHP_AUTH_USER']) ? "$_SERVER[PHP_AUTH_USER]:$_SERVER[PHP_AUTH_PW]@" : '') . $_SERVER['HTTP_HOST'] . $baseURL . '/InstallerTest/testRewrite';
+ @$testrewriting = file_get_contents($location);
+
+ if($testrewriting == 'OK') {
+ return true;
+ }
+
+ // Workaround for 'URL file-access is disabled in the server configuration' using curl
+ if(function_exists('curl_init')) {
+ $ch = curl_init($location);
+ $fp = @fopen("temp", "w");
+ curl_setopt($ch, CURLOPT_FILE, $fp);
+ curl_setopt($ch, CURLOPT_HEADER, 0);
+ curl_exec($ch);
+ curl_close($ch);
+ fclose($fp);
+ $testrewriting = file_get_contents('temp');
+ unlink('temp');
+ if($testrewriting == 'OK') {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+}
+
+/**
+ * Copy a file, or recursively copy a folder and its contents
+ *
+ * @author Aidan Lister
+ * @version 1.0.1
+ * @link http://aidanlister.com/repos/v/function.copyr.php
+ * @param string $source Source path
+ * @param string $dest Destination path
+ * @return bool Returns TRUE on success, FALSE on failure
+ */
+function copyr($source, $dest)
+{
+ // Simple copy for a file
+ if (is_file($source)) {
+ return copy($source, $dest);
+ }
+
+ // Make destination directory
+ if (!is_dir($dest)) {
+ mkdir($dest);
+ }
+
+ // Loop through the folder
+ $dir = dir($source);
+ while (false !== $entry = $dir->read()) {
+ // Skip pointers
+ if ($entry == '.' || $entry == '..') {
+ continue;
+ }
+
+ // Deep copy directories
+ if ($dest !== "$source/$entry") {
+ copyr("$source/$entry", "$dest/$entry");
+ }
+ }
+
+ // Clean up
+ $dir->close();
+ return true;
+}
+
+function rm($fileglob)
+{
+ if (is_string($fileglob)) {
+ if (is_file($fileglob)) {
+ return unlink($fileglob);
+ } else if (is_dir($fileglob)) {
+ $ok = rm("$fileglob/*");
+ if (! $ok) {
+ return false;
+ }
+ return rmdir($fileglob);
+ } else {
+ $matching = glob($fileglob);
+ if ($matching === false) {
+ trigger_error(sprintf('No files match supplied glob %s', $fileglob), E_USER_WARNING);
+ return false;
+ }
+ $rcs = array_map('rm', $matching);
+ if (in_array(false, $rcs)) {
+ return false;
+ }
+ }
+ } else if (is_array($fileglob)) {
+ $rcs = array_map('rm', $fileglob);
+ if (in_array(false, $rcs)) {
+ return false;
+ }
+ } else {
+ trigger_error('Param #1 must be filename or glob pattern, or array of filenames or glob patterns', E_USER_ERROR);
+ return false;
+ }
+
+ return true;
+}
+
+?>
diff --git a/rewritetest.php b/rewritetest.php
new file mode 100644
index 0000000..1e8ac75
--- /dev/null
+++ b/rewritetest.php
@@ -0,0 +1,75 @@
+home/successfullyinstalled.
+ ";
+} else {
+ $modRewriteWorking = performModRewriteTest();
+
+ if(!$modRewriteWorking) {
+ copy(".htaccess_alternative", ".htaccess");
+ $modRewriteWorking = performModRewriteTest();
+ }
+
+ if($modRewriteWorking) {
+ echo "mod_rewrite is working! I will now try and direct you to
+ home/successfullyinstalled to confirm that the installation was successful.
+
+ ";
+ } else {
+ unlink('.htaccess');
+ if(file_exists('.htaccess_orig')) {
+ copy('.htaccess_orig', '.htaccess');
+ }
+ echo "mod_rewrite doesn't appear to be working. Make sure:" .
+ "
" .
+ "
mod_rewrite is enabled in your httpd.conf
" .
+ "
AllowOverride is enabled for the current path.
" .
+ "
" .
+ "Please check these options, then refresh this page." .
+ "If you believe that your configuration is correct, click here to proceed anyway.";
+ }
+}
+
+function performModRewriteTest() {
+ $baseURL = dirname($_SERVER['SCRIPT_NAME']);
+ if($baseURL == "/") {
+ $baseURL = "";
+ }
+
+ // Check if mod_rewrite works properly
+ $location = 'http://' . (isset($_SERVER['PHP_AUTH_USER']) ? "$_SERVER[PHP_AUTH_USER]:$_SERVER[PHP_AUTH_PW]@" : '') . $_SERVER['HTTP_HOST'] . $baseURL . '/InstallerTest/testRewrite';
+ @$testrewriting = file_get_contents($location);
+
+ if($testrewriting == 'OK') {
+ return true;
+ }
+
+ // Workaround for 'URL file-access is disabled in the server configuration' using curl
+ if(function_exists('curl_init')) {
+ $ch = curl_init($location);
+ $fp = @fopen("temp", "w");
+ curl_setopt($ch, CURLOPT_FILE, $fp);
+ curl_setopt($ch, CURLOPT_HEADER, 0);
+ curl_exec($ch);
+ curl_close($ch);
+ fclose($fp);
+ $testrewriting = file_get_contents('temp');
+ unlink('temp');
+ if($testrewriting == 'OK') {
+ return true;
+ }
+ }
+
+ return false;
+}
+?>