mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge remote-tracking branch 'origin/3.0' into 3.1
Conflicts: control/Director.php
This commit is contained in:
commit
14a56c18e9
@ -286,10 +286,9 @@
|
|||||||
|
|
||||||
// Copy attributes. We can't replace the node completely
|
// Copy attributes. We can't replace the node completely
|
||||||
// without removing or detaching its children nodes.
|
// without removing or detaching its children nodes.
|
||||||
for(var i=0; i<newNode[0].attributes.length; i++){
|
$.each(['id', 'style', 'class', 'data-pagetype'], function(i, attrName) {
|
||||||
var attr = newNode[0].attributes[i];
|
node.attr(attrName, newNode.attr(attrName));
|
||||||
node.attr(attr.name, attr.value);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
// Replace inner content
|
// Replace inner content
|
||||||
var origChildren = node.children('ul').detach();
|
var origChildren = node.children('ul').detach();
|
||||||
|
@ -7,6 +7,6 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') {
|
|||||||
'ModelAdmin.DELETED': "Gelöscht",
|
'ModelAdmin.DELETED': "Gelöscht",
|
||||||
'ModelAdmin.VALIDATIONERROR': "Validationsfehler",
|
'ModelAdmin.VALIDATIONERROR': "Validationsfehler",
|
||||||
'LeftAndMain.PAGEWASDELETED': "Diese Seite wurde gelöscht.",
|
'LeftAndMain.PAGEWASDELETED': "Diese Seite wurde gelöscht.",
|
||||||
'LeftAndMain.CONFIRMUNSAVED': "Sind Sie sicher, dasß Sie die Seite verlassen möchten?\n\nWARNUNG: Ihre Änderungen werden nicht gespeichert.\n\nDrücken Sie \"OK\" um fortzufahren, oder \"Abbrechen\" um auf dieser Seite zu bleiben."
|
'LeftAndMain.CONFIRMUNSAVED': "Sind Sie sicher, dass Sie die Seite verlassen möchten?\n\nWARNUNG: Ihre Änderungen werden nicht gespeichert.\n\nDrücken Sie \"OK\" um fortzufahren, oder \"Abbrechen\" um auf dieser Seite zu bleiben."
|
||||||
});
|
});
|
||||||
}
|
}
|
@ -189,9 +189,11 @@ class RSSFeed extends ViewableData {
|
|||||||
$prevState = SSViewer::get_source_file_comments();
|
$prevState = SSViewer::get_source_file_comments();
|
||||||
SSViewer::set_source_file_comments(false);
|
SSViewer::set_source_file_comments(false);
|
||||||
|
|
||||||
|
$response = Controller::curr()->getResponse();
|
||||||
|
|
||||||
if(is_int($this->lastModified)) {
|
if(is_int($this->lastModified)) {
|
||||||
HTTP::register_modification_timestamp($this->lastModified);
|
HTTP::register_modification_timestamp($this->lastModified);
|
||||||
header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $this->lastModified) . ' GMT');
|
$response->addHeader("Last-Modified", gmdate("D, d M Y H:i:s", $this->lastModified) . ' GMT');
|
||||||
}
|
}
|
||||||
if(!empty($this->etag)) {
|
if(!empty($this->etag)) {
|
||||||
HTTP::register_etag($this->etag);
|
HTTP::register_etag($this->etag);
|
||||||
@ -199,7 +201,7 @@ class RSSFeed extends ViewableData {
|
|||||||
|
|
||||||
if(!headers_sent()) {
|
if(!headers_sent()) {
|
||||||
HTTP::add_cache_headers();
|
HTTP::add_cache_headers();
|
||||||
header("Content-type: text/xml");
|
$response->addHeader("Content-Type", "application/rss+xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
SSViewer::set_source_file_comments($prevState);
|
SSViewer::set_source_file_comments($prevState);
|
||||||
|
@ -141,17 +141,6 @@ class Director implements TemplateGlobalProvider {
|
|||||||
|
|
||||||
$res = Injector::inst()->get('RequestProcessor')->postRequest($req, $response, $model);
|
$res = Injector::inst()->get('RequestProcessor')->postRequest($req, $response, $model);
|
||||||
if ($res !== false) {
|
if ($res !== false) {
|
||||||
// Set content length (according to RFC2616)
|
|
||||||
if(
|
|
||||||
!headers_sent()
|
|
||||||
&& $response->getBody()
|
|
||||||
&& $req->httpMethod() != 'HEAD'
|
|
||||||
&& $response->getStatusCode() >= 200
|
|
||||||
&& !in_array($response->getStatusCode(), array(204, 304))
|
|
||||||
) {
|
|
||||||
$response->fixContentLength();
|
|
||||||
}
|
|
||||||
|
|
||||||
$response->output();
|
$response->output();
|
||||||
} else {
|
} else {
|
||||||
// @TODO Proper response here.
|
// @TODO Proper response here.
|
||||||
|
@ -160,6 +160,9 @@ class SS_HTTPResponse {
|
|||||||
*/
|
*/
|
||||||
public function setBody($body) {
|
public function setBody($body) {
|
||||||
$this->body = $body;
|
$this->body = $body;
|
||||||
|
|
||||||
|
// Set content-length in bytes. Use mbstring to avoid problems with mb_internal_encoding() and mbstring.func_overload
|
||||||
|
$this->headers['Content-Length'] = mb_strlen($this->body,'8bit');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -276,14 +279,6 @@ class SS_HTTPResponse {
|
|||||||
return in_array($this->statusCode, array(301, 302, 401, 403));
|
return in_array($this->statusCode, array(301, 302, 401, 403));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Set content-length in bytes. Should be called right before {@link output()}.
|
|
||||||
*/
|
|
||||||
public function fixContentLength() {
|
|
||||||
// Use mbstring to avoid problems with mb_internal_encoding() and mbstring.func_overload
|
|
||||||
$this->headers['Content-Length'] = mb_strlen($this->body,'8bit');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -421,6 +421,7 @@ class TreeDropdownField_Readonly extends TreeDropdownField {
|
|||||||
$field = new LookupField($this->name, $this->title, $source);
|
$field = new LookupField($this->name, $this->title, $source);
|
||||||
$field->setValue($this->value);
|
$field->setValue($this->value);
|
||||||
$field->setForm($this->form);
|
$field->setForm($this->form);
|
||||||
|
$field->dontEscape = true;
|
||||||
return $field->Field();
|
return $field->Field();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -210,9 +210,38 @@ class ManyManyList extends RelationList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Array Map of field => fieldtype
|
* Gets the join table used for the relationship.
|
||||||
|
*
|
||||||
|
* @return string the name of the table
|
||||||
*/
|
*/
|
||||||
function getExtraFields() {
|
public function getJoinTable() {
|
||||||
|
return $this->joinTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the key used to store the ID of the local/parent object.
|
||||||
|
*
|
||||||
|
* @return string the field name
|
||||||
|
*/
|
||||||
|
public function getLocalKey() {
|
||||||
|
return $this->localKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the key used to store the ID of the foreign/child object.
|
||||||
|
*
|
||||||
|
* @return string the field name
|
||||||
|
*/
|
||||||
|
public function getForeignKey() {
|
||||||
|
return $this->foreignKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the extra fields included in the relationship.
|
||||||
|
*
|
||||||
|
* @return array a map of field names to types
|
||||||
|
*/
|
||||||
|
public function getExtraFields() {
|
||||||
return $this->extraFields;
|
return $this->extraFields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,19 @@ class Varchar extends StringField {
|
|||||||
parent::__construct($name, $options);
|
parent::__construct($name, $options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allow the ability to access the size of the field programatically. This
|
||||||
|
* can be useful if you want to have text fields with a length limit that
|
||||||
|
* is dictated by the DB field.
|
||||||
|
*
|
||||||
|
* TextField::create('Title')->setMaxLength(singleton('SiteTree')->dbObject('Title')->getSize())
|
||||||
|
*
|
||||||
|
* @return int The size of the field
|
||||||
|
*/
|
||||||
|
public function getSize() {
|
||||||
|
return $this->size;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (non-PHPdoc)
|
* (non-PHPdoc)
|
||||||
* @see DBField::requireField()
|
* @see DBField::requireField()
|
||||||
|
@ -373,7 +373,7 @@ class Group extends DataObject {
|
|||||||
// without this check, a user would be able to add himself to an administrators group
|
// without this check, a user would be able to add himself to an administrators group
|
||||||
// with just access to the "Security" admin interface
|
// with just access to the "Security" admin interface
|
||||||
Permission::checkMember($member, "CMS_ACCESS_SecurityAdmin") &&
|
Permission::checkMember($member, "CMS_ACCESS_SecurityAdmin") &&
|
||||||
!DataObject::get("Permission", "GroupID = $this->ID AND Code = 'ADMIN'")
|
!Permission::get()->filter(array('GroupID' => $this->ID, 'Code' => 'ADMIN'))->exists()
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -15,7 +15,6 @@ class HTTPResponseTest extends SapphireTest {
|
|||||||
|
|
||||||
public function testContentLengthHeader() {
|
public function testContentLengthHeader() {
|
||||||
$r = new SS_HTTPResponse('123ü');
|
$r = new SS_HTTPResponse('123ü');
|
||||||
$r->fixContentLength();
|
|
||||||
$this->assertNotNull($r->getHeader('Content-Length'), 'Content-length header is added');
|
$this->assertNotNull($r->getHeader('Content-Length'), 'Content-length header is added');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
5,
|
5,
|
||||||
@ -24,7 +23,6 @@ class HTTPResponseTest extends SapphireTest {
|
|||||||
);
|
);
|
||||||
|
|
||||||
$r->setBody('1234ü');
|
$r->setBody('1234ü');
|
||||||
$r->fixContentLength();
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
6,
|
6,
|
||||||
$r->getHeader('Content-Length'),
|
$r->getHeader('Content-Length'),
|
||||||
|
@ -1109,7 +1109,7 @@ class Requirements_Backend {
|
|||||||
$this->css($path.$css, $media);
|
$this->css($path.$css, $media);
|
||||||
}
|
}
|
||||||
else if ($module) {
|
else if ($module) {
|
||||||
$this->css($module.$css);
|
$this->css($module.$css, $media);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user