From 58dbe416ee618c24ed89f6092fed93a90f4ee04c Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Mon, 10 Nov 2008 03:51:35 +0000 Subject: [PATCH] Merged from branches/2.2 git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@65523 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- core/i18n.php | 2 +- core/model/SiteTree.php | 29 +++++++++++++++++++++++++++-- core/model/fieldtypes/Text.php | 1 + filesystem/Folder.php | 3 +++ forms/CompositeDateField.php | 8 +++++--- forms/CountryDropdownField.php | 8 ++++---- forms/TableField.php | 8 ++++---- forms/TreeDropdownField.php | 2 +- forms/Validator.php | 7 ++++++- security/MemberLoginForm.php | 25 +++++++++++++------------ security/Security.php | 4 +++- 11 files changed, 68 insertions(+), 29 deletions(-) diff --git a/core/i18n.php b/core/i18n.php index a10154487..81c4b26e0 100755 --- a/core/i18n.php +++ b/core/i18n.php @@ -590,7 +590,7 @@ class i18n extends Object { 'lt' => array('Lithuanian', 'lietuviškai'), 'lmo' => array('Lombard', 'Lombardo'), 'mk' => array('Macedonian', 'македонски'), - 'mi' => array('Maori', 'Maori'), + 'mi' => array('Maori', 'Māori'), 'ms' => array('Malay', 'Bahasa melayu'), 'mt' => array('Maltese', 'Malti'), 'mr' => array('Marathi', 'मराठी'), diff --git a/core/model/SiteTree.php b/core/model/SiteTree.php index 90b096702..9aeb466a9 100644 --- a/core/model/SiteTree.php +++ b/core/model/SiteTree.php @@ -184,6 +184,11 @@ class SiteTree extends DataObject { 'Title', 'Content', ); + + /** + * This controls whether of not extendCMSFields() is called by getCMSFields. + */ + private static $runCMSFieldsExtensions = true; /** * Get the URL for this page. @@ -1287,8 +1292,10 @@ class SiteTree extends DataObject { $tabReports->setTitle(_t('SiteTree.TABREPORTS', "Reports")); $tabAccess->setTitle(_t('SiteTree.TABACCESS', "Access")); $tabBacklinks->setTitle(_t('SiteTree.TABBACKLINKS', "BackLinks")); - - $this->extend('updateCMSFields', $fields); + + if(self::$runCMSFieldsExtensions) { + $this->extend('updateCMSFields', $fields); + } return $fields; } @@ -1699,6 +1706,24 @@ class SiteTree extends DataObject { return $classes; } + + /** + * Stops extendCMSFields() being called on getCMSFields(). + * This is useful when you need access to fields added by subclasses + * of SiteTree in a decorator. Call before calling parent::getCMSFields(), + * and reenable afterwards. + */ + public static function disableCMSFieldsExtensions() { + self::$runCMSFieldsExtensions = false; + } + + /** + * Reenables extendCMSFields() being called on getCMSFields() after + * it has been disabled by disableCMSFieldsExtensions(). + */ + public static function enableCMSFieldsExtensions() { + self::$runCMSFieldsExtensions = true; + } } ?> diff --git a/core/model/fieldtypes/Text.php b/core/model/fieldtypes/Text.php index d528b4a88..a2921c3ea 100644 --- a/core/model/fieldtypes/Text.php +++ b/core/model/fieldtypes/Text.php @@ -67,6 +67,7 @@ class Text extends DBField { * @param int $sentCount The amount of sentences you want. */ function LimitSentences($sentCount = 2) { + $output = ''; $data = Convert::xml2raw($this->value); $sentences = explode('.', $data); if(count($sentences) == 1) { diff --git a/filesystem/Folder.php b/filesystem/Folder.php index 2672b82c9..5fe80fb72 100755 --- a/filesystem/Folder.php +++ b/filesystem/Folder.php @@ -25,6 +25,7 @@ class Folder extends File { $item = new Folder(); $item->ParentID = $parentID; $item->Name = $part; + $item->Title = $part; $item->write(); if(!file_exists($item->getFullPath())) mkdir($item->getFullPath(),Filesystem::$folder_create_mask); } @@ -32,6 +33,8 @@ class Folder extends File { } return $item; } +// To Make SSP Gallery structure work +// $item->Title = $part; /** * Syncronise the file database with the actual content of the assets folder diff --git a/forms/CompositeDateField.php b/forms/CompositeDateField.php index b5a9d3bdc..3b52407a9 100755 --- a/forms/CompositeDateField.php +++ b/forms/CompositeDateField.php @@ -7,8 +7,10 @@ class CompositeDateField extends DateField { function __construct($name, $title, $value = null, $yearRange = null){ - $year = $month = $date = null; - if($value) list($year,$month, $date) = explode('-', $value); + $exploded = explode('-', $value); + $year = isset($exploded[0]) ? $exploded[0] : null; + $month = isset($exploded[1]) ? $exploded[1] : null; + $date = isset($exploded[2]) ? $exploded[2] : null; $this->dateDropdown = new DropdownField($name."[date]", "", array('NotSet' => '('._t('CompositeDateField.DAY', 'Day').')', @@ -173,4 +175,4 @@ class CompositeDateField_Disabled extends DateField { return "date_disabled readonly"; } } -?> \ No newline at end of file +?> diff --git a/forms/CountryDropdownField.php b/forms/CountryDropdownField.php index 8195b6a34..4342f5989 100644 --- a/forms/CountryDropdownField.php +++ b/forms/CountryDropdownField.php @@ -9,9 +9,9 @@ class CountryDropdownField extends DropdownField { protected $defaultToVisitorCountry = true; function __construct($name, $title, $source = null, $value = "", $form=null) { - if(!is_array($source)) { - $source = Geoip::getCountryDropDown(); - } + if(!is_array($source)) $source = Geoip::getCountryDropDown(); + if(!$value) $value = Geoip::visitor_country(); + parent::__construct($name, $title, $source, $value, $form); } @@ -28,4 +28,4 @@ class CountryDropdownField extends DropdownField { } } -?> \ No newline at end of file +?> diff --git a/forms/TableField.php b/forms/TableField.php index af2573d21..23124a9ce 100644 --- a/forms/TableField.php +++ b/forms/TableField.php @@ -274,14 +274,14 @@ class TableField extends TableListField { // Sort into proper array $this->value = ArrayLib::invert($this->value); $dataObjects = $this->sortData($this->value, $record->ID); - if($dataObjects['new']) { + if(isset($dataObjects['new']) && $dataObjects['new']) { $newFields = $this->sortData($dataObjects['new'], $record->ID); } $savedObj = $this->saveData($dataObjects, $this->editExisting); - if($savedObj && $newFields) { - $savedObj += $this->saveData($newFields,false); - } else if($newFields) { + if($savedObj && isset($newFields)) { + $savedObj = $this->saveData($newFields,false); + } else if(isset($newFields)) { $savedObj = $this->saveData($newFields,false); } $items = $this->sourceItems(); diff --git a/forms/TreeDropdownField.php b/forms/TreeDropdownField.php index 5e229baee..3a33ce0f3 100755 --- a/forms/TreeDropdownField.php +++ b/forms/TreeDropdownField.php @@ -43,7 +43,7 @@ class TreeDropdownField extends FormField { if($this->value) { $record = DataObject::get_by_id($this->sourceObject, $this->value); - $title = ($record) ? $record->Title : ''; + $title = ($record) ? $record->Title : _t('DropdownField.CHOOSE', "(Choose)", PR_MEDIUM, 'Start-value of a dropdown'); } else { $title = _t('DropdownField.CHOOSE', "(Choose)", PR_MEDIUM, 'Start-value of a dropdown'); } diff --git a/forms/Validator.php b/forms/Validator.php index 2e1cdb225..7e7780c8a 100755 --- a/forms/Validator.php +++ b/forms/Validator.php @@ -141,7 +141,12 @@ Behaviour.register({ }, onblur : function() { if(this.old_onblur()) { - return $('$formID').validate(this); + // Don't perform instant validation for CalendarDateField fields; it creates usability wierdness. + if(this.parentNode.className.indexOf('calendardate') == -1 || this.value) { + return $('$formID').validate(this); + } else { + return true; + } } } }, diff --git a/security/MemberLoginForm.php b/security/MemberLoginForm.php index 119a8ba9f..30c798a9e 100644 --- a/security/MemberLoginForm.php +++ b/security/MemberLoginForm.php @@ -119,22 +119,29 @@ class MemberLoginForm extends LoginForm { Session::clear("BackURL"); Director::redirect($backURL); } else { + $firstname = Convert::raw2xml($member->FirstName); + Session::set("Security.Message.message", + sprintf(_t('Member.WELCOMEBACK', "Welcome Back, %s"), $firstname) + ); + Session::set("Security.Message.type", "good"); Director::redirectBack(); } } else { Session::set('SessionForms.MemberLoginForm.Email', $data['Email']); Session::set('SessionForms.MemberLoginForm.Remember', isset($data['Remember'])); - - if(isset($_REQUEST['BackURL']) && $backURL = $_REQUEST['BackURL']) { - Session::set('BackURL', $backURL); - } + + if(isset($_REQUEST['BackURL'])) $backURL = $_REQUEST['BackURL']; + else $backURL = null; + + if($backURL) Session::set('BackURL', $backURL); if($badLoginURL = Session::get("BadLoginURL")) { Director::redirect($badLoginURL); } else { // Show the right tab on failed login - Director::redirect(Director::absoluteURL(Security::Link("login")) . - '#' . $this->FormName() .'_tab'); + $loginLink = Director::absoluteURL(Security::Link("login")); + if($backURL) $loginLink .= '?BackURL=' . urlencode($backURL); + Director::redirect($loginLink . '#' . $this->FormName() .'_tab'); } } } @@ -163,12 +170,6 @@ class MemberLoginForm extends LoginForm { */ public function performLogin($data) { if($member = MemberAuthenticator::authenticate($data, $this)) { - $firstname = Convert::raw2xml($member->FirstName); - Session::set("Security.Message.message", - sprintf(_t('Member.WELCOMEBACK', "Welcome Back, %s"), $firstname) - ); - Session::set("Security.Message.type", "good"); - $member->LogIn(isset($data['Remember'])); return $member; diff --git a/security/Security.php b/security/Security.php index 81b2b0d1b..82d263cb4 100644 --- a/security/Security.php +++ b/security/Security.php @@ -348,6 +348,8 @@ class Security extends Controller { "Content" => $content, )); } + + Session::clear('Security.Message'); // custom processing if(SSViewer::hasTemplate("Security_login")) { @@ -802,7 +804,7 @@ class Security extends Controller { 'salt' => null, 'algorithm' => 'none'); - } elseif((self::$encryptPasswords == false) || ($algorithm == 'none')) { + } elseif((!$algorithm && self::$encryptPasswords == false) || ($algorithm == 'none')) { // The password should not be encrypted return array('password' => substr($password, 0, 64), 'salt' => null,