Merged from branches/2.3

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@77764 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Sean Harvey 2009-05-25 06:59:21 +00:00
parent 4d55f1e5d7
commit 75ba6a1ab9
7 changed files with 58 additions and 15 deletions

View File

@ -201,9 +201,12 @@ class i18nTextCollector extends Object {
$includeName = $reg[1]; $includeName = $reg[1];
$includeFileName = "{$includeName}.ss"; $includeFileName = "{$includeName}.ss";
$filePath = SSViewer::getTemplateFileByType($includeName, 'Includes'); $filePath = SSViewer::getTemplateFileByType($includeName, 'Includes');
$includeContent = file_get_contents($filePath); if(!$filePath) $filePath = SSViewer::getTemplateFileByType($includeName, 'main');
if($filePath) {
$includeContent = file_get_contents($filePath);
$entitiesArr = array_merge($entitiesArr,(array)$this->collectFromTemplate($includeContent, $module, $includeFileName));
}
// @todo Will get massively confused if you include the includer -> infinite loop // @todo Will get massively confused if you include the includer -> infinite loop
$entitiesArr = array_merge($entitiesArr,(array)$this->collectFromTemplate($includeContent, $module, $includeFileName));
} }
// @todo respect template tags (< % _t() % > instead of _t()) // @todo respect template tags (< % _t() % > instead of _t())

View File

@ -25,6 +25,7 @@ class i18nTextCollectorTask extends BuildTask {
* @uses DataObject->collectI18nStatics() * @uses DataObject->collectI18nStatics()
*/ */
public function run($request) { public function run($request) {
set_time_limit(0);
$c = new i18nTextCollector(); $c = new i18nTextCollector();
$restrictModules = ($request->getVar('module')) ? explode(',', $request->getVar('module')) : null; $restrictModules = ($request->getVar('module')) ? explode(',', $request->getVar('module')) : null;
return $c->run($restrictModules); return $c->run($restrictModules);

View File

@ -62,7 +62,7 @@ class RedirectorPage extends Page {
function redirectionLink() { function redirectionLink() {
if($this->RedirectionType == 'External') { if($this->RedirectionType == 'External') {
if($this->ExternalURL) { if($this->ExternalURL) {
return Convert::raw2att($this->ExternalURL); return $this->ExternalURL;
} }
} else { } else {

View File

@ -1041,6 +1041,18 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
parent::onAfterWrite(); parent::onAfterWrite();
} }
function onBeforeDelete() {
parent::onBeforeDelete();
// If deleting this page, delete all its children.
if($children = $this->Children()) {
foreach($children as $child) {
$child->delete();
}
}
}
function onAfterDelete() { function onAfterDelete() {
// Need to flush cache to avoid outdated versionnumber references // Need to flush cache to avoid outdated versionnumber references
$this->flushCache(); $this->flushCache();
@ -1389,8 +1401,8 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
} }
} }
if($this->IsDeletedFromStage) { if($this->canEdit()) {
if($this->can('CMSEdit')) { if($this->IsDeletedFromStage) {
if($this->ExistsOnLive) { if($this->ExistsOnLive) {
// "restore" // "restore"
$actions->push(new FormAction('revert',_t('CMSMain.RESTORE','Restore'))); $actions->push(new FormAction('revert',_t('CMSMain.RESTORE','Restore')));
@ -1400,13 +1412,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid
// "restore" // "restore"
$actions->push(new FormAction('restore',_t('CMSMain.RESTORE','Restore'))); $actions->push(new FormAction('restore',_t('CMSMain.RESTORE','Restore')));
} }
} } else {
} else {
if($this->canEdit()) {
// "delete" // "delete"
$actions->push($deleteAction = new FormAction('delete',_t('CMSMain.DELETE','Delete from the draft site'))); $actions->push($deleteAction = new FormAction('delete',_t('CMSMain.DELETE','Delete from the draft site')));
$deleteAction->addExtraClass('delete'); $deleteAction->addExtraClass('delete');
// "save" // "save"
$actions->push(new FormAction('save',_t('CMSMain.SAVE','Save'))); $actions->push(new FormAction('save',_t('CMSMain.SAVE','Save')));
} }

View File

@ -5,9 +5,10 @@
.SelectionGroup li { .SelectionGroup li {
list-style-type: none; list-style-type: none;
float : left; float : left;
width: 100%;
clear : both; clear : both;
} }
.SelectionGroup li input { .SelectionGroup li input.selector {
width: 20px; width: 20px;
float : left; float : left;
} }

View File

@ -47,7 +47,7 @@ class TextareaField extends FormField {
return $this->createTag( return $this->createTag(
'span', 'span',
$attributes, $attributes,
($this->value) ? Convert::raw2xml($this->value) : '<i>(' . _t('FormField.NONE', 'none') . ')</i>' (($this->value) ? htmlentities($this->value) : '<i>(' . _t('FormField.NONE', 'none') . ')</i>')
); );
} else { } else {
$attributes = array( $attributes = array(
@ -60,7 +60,7 @@ class TextareaField extends FormField {
if($this->disabled) $attributes['disabled'] = 'disabled'; if($this->disabled) $attributes['disabled'] = 'disabled';
return $this->createTag('textarea', $attributes, Convert::raw2xml($this->value)); return $this->createTag('textarea', $attributes, htmlentities($this->value));
} }
} }

View File

@ -5,7 +5,7 @@
*/ */
class SiteTreeTest extends SapphireTest { class SiteTreeTest extends SapphireTest {
static $fixture_file = 'sapphire/tests/SiteTreeTest.yml'; static $fixture_file = 'sapphire/tests/SiteTreeTest.yml';
/** /**
* Test generation of the URLSegment values. * Test generation of the URLSegment values.
* - Turns things into lowercase-hyphen-format * - Turns things into lowercase-hyphen-format
@ -81,6 +81,8 @@ class SiteTreeTest extends SapphireTest {
$checkSiteTree = DataObject::get_one("SiteTree", "\"URLSegment\" = 'get-one-test-page'"); $checkSiteTree = DataObject::get_one("SiteTree", "\"URLSegment\" = 'get-one-test-page'");
$this->assertEquals("V1", $checkSiteTree->Title); $this->assertEquals("V1", $checkSiteTree->Title);
Versioned::reading_stage($oldStage);
} }
function testChidrenOfRootAreTopLevelPages() { function testChidrenOfRootAreTopLevelPages() {
@ -189,7 +191,7 @@ class SiteTreeTest extends SapphireTest {
$this->assertEquals('Page', $requeriedPage->class); $this->assertEquals('Page', $requeriedPage->class);
$page2 = $this->objFromFixture('Page', 'staff'); $page2 = $this->objFromFixture('Page', 'products');
$page2ID = $page2->ID; $page2ID = $page2->ID;
$page2->doUnpublish(); $page2->doUnpublish();
$page2->delete(); $page2->delete();
@ -203,7 +205,7 @@ class SiteTreeTest extends SapphireTest {
Versioned::reading_stage('Stage'); Versioned::reading_stage('Stage');
$requeriedPage = DataObject::get_by_id("Page", $page2ID); $requeriedPage = DataObject::get_by_id("Page", $page2ID);
$this->assertEquals('Staff', $requeriedPage->Title); $this->assertEquals('Products', $requeriedPage->Title);
$this->assertEquals('Page', $requeriedPage->class); $this->assertEquals('Page', $requeriedPage->class);
} }
@ -219,6 +221,32 @@ class SiteTreeTest extends SapphireTest {
// Note: One day, it would be more appropriate to return null instead of false for queries such as these // Note: One day, it would be more appropriate to return null instead of false for queries such as these
$this->assertFalse(SiteTree::get_by_url("home", "1 = 2")); $this->assertFalse(SiteTree::get_by_url("home", "1 = 2"));
} }
function testDeleteFromStageOperatesRecursively() {
$parentPage = $this->objFromFixture('Page', 'about');
$parentPage->delete();
$this->assertFalse($this->objFromFixture('Page', 'about'));
$this->assertFalse($this->objFromFixture('Page', 'staff'));
$this->assertFalse($this->objFromFixture('Page', 'staffduplicate'));
}
function testDeleteFromLiveOperatesRecursively() {
$this->objFromFixture('Page', 'about')->doPublish();
$this->objFromFixture('Page', 'staff')->doPublish();
$this->objFromFixture('Page', 'staffduplicate')->doPublish();
$parentPage = $this->objFromFixture('Page', 'about');
$parentPage->doDeleteFromLive();
Versioned::reading_stage('Live');
$this->assertFalse($this->objFromFixture('Page', 'about'));
$this->assertFalse($this->objFromFixture('Page', 'staff'));
$this->assertFalse($this->objFromFixture('Page', 'staffduplicate'));
Versioned::reading_stage('Stage');
}
} }