mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
MINOR Moved File->BackLinkTracking feature from 'sapphire' to 'cms'
This commit is contained in:
parent
42fa7572e7
commit
d93025d668
@ -86,10 +86,6 @@ class File extends DataObject {
|
||||
|
||||
static $many_many = array();
|
||||
|
||||
static $belongs_many_many = array(
|
||||
"BackLinkTracking" => "SiteTree",
|
||||
);
|
||||
|
||||
static $defaults = array();
|
||||
|
||||
static $extensions = array(
|
||||
@ -182,20 +178,6 @@ class File extends DataObject {
|
||||
return $this->Title;
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Unnecessary shortcut for AssetTableField, coupled with cms module.
|
||||
*
|
||||
* @return Integer
|
||||
*/
|
||||
function BackLinkTrackingCount() {
|
||||
$pages = $this->BackLinkTracking();
|
||||
if($pages) {
|
||||
return $pages->Count();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Event handler called before deleting from the database.
|
||||
* You can overload this to clean up or otherwise process data before delete this
|
||||
@ -212,28 +194,6 @@ class File extends DataObject {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates link tracking.
|
||||
*/
|
||||
protected function onAfterDelete() {
|
||||
parent::onAfterDelete();
|
||||
|
||||
$brokenPages = $this->BackLinkTracking();
|
||||
if($brokenPages) {
|
||||
$origStage = Versioned::current_stage();
|
||||
|
||||
// This will syncLinkTracking on draft
|
||||
Versioned::reading_stage('Stage');
|
||||
foreach($brokenPages as $brokenPage) $brokenPage->write();
|
||||
|
||||
// This will syncLinkTracking on published
|
||||
Versioned::reading_stage('Live');
|
||||
foreach($brokenPages as $brokenPage) $brokenPage->write();
|
||||
|
||||
Versioned::reading_stage($origStage);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Enforce on filesystem URL level via mod_rewrite
|
||||
*
|
||||
@ -508,24 +468,11 @@ class File extends DataObject {
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewrite links to the $old file to now point to the $new file.
|
||||
*
|
||||
* @uses SiteTree->rewriteFileURL()
|
||||
*
|
||||
* @param String $old File path relative to the webroot
|
||||
* @param String $new File path relative to the webroot
|
||||
*/
|
||||
protected function updateLinks($old, $new) {
|
||||
if(class_exists('Subsite')) Subsite::disable_subsite_filter(true);
|
||||
|
||||
$pages = $this->BackLinkTracking();
|
||||
|
||||
$summary = "";
|
||||
if($pages) {
|
||||
foreach($pages as $page) $page->rewriteFileURL($old,$new);
|
||||
}
|
||||
|
||||
if(class_exists('Subsite')) Subsite::disable_subsite_filter(false);
|
||||
$this->extend('updateLinks', $old, $new);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,112 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Tests link tracking to files and images.
|
||||
*/
|
||||
class FileLinkTrackingTest extends SapphireTest {
|
||||
static $fixture_file = "sapphire/tests/FileLinkTrackingTest.yml";
|
||||
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
$this->logInWithPermission('ADMIN');
|
||||
|
||||
$fh = fopen(Director::baseFolder() . '/assets/testscript-test-file.pdf', "w");
|
||||
fwrite($fh, str_repeat('x',1000000));
|
||||
fclose($fh);
|
||||
}
|
||||
function tearDown() {
|
||||
parent::tearDown();
|
||||
$testFiles = array(
|
||||
'/assets/testscript-test-file.pdf',
|
||||
'/assets/renamed-test-file.pdf',
|
||||
'/assets/renamed-test-file-second-time.pdf',
|
||||
);
|
||||
foreach($testFiles as $file) {
|
||||
if(file_exists(Director::baseFolder().$file)) unlink(Director::baseFolder().$file);
|
||||
}
|
||||
}
|
||||
|
||||
function testFileRenameUpdatesDraftAndPublishedPages() {
|
||||
$page = $this->objFromFixture('Page', 'page1');
|
||||
$this->assertTrue($page->doPublish());
|
||||
$this->assertContains('<img src="assets/testscript-test-file.pdf"',
|
||||
DB::query("SELECT \"Content\" FROM \"SiteTree_Live\" WHERE \"ID\" = $page->ID")->value());
|
||||
|
||||
$file = $this->objFromFixture('File', 'file1');
|
||||
$file->Name = 'renamed-test-file.pdf';
|
||||
$file->write();
|
||||
|
||||
$this->assertContains('<img src="assets/renamed-test-file.pdf"',
|
||||
DB::query("SELECT \"Content\" FROM \"SiteTree\" WHERE \"ID\" = $page->ID")->value());
|
||||
$this->assertContains('<img src="assets/renamed-test-file.pdf"',
|
||||
DB::query("SELECT \"Content\" FROM \"SiteTree_Live\" WHERE \"ID\" = $page->ID")->value());
|
||||
}
|
||||
|
||||
function testFileLinkRewritingOnVirtualPages() {
|
||||
// Publish the source page
|
||||
$page = $this->objFromFixture('Page', 'page1');
|
||||
$this->assertTrue($page->doPublish());
|
||||
|
||||
// Create a virtual page from it, and publish that
|
||||
$svp = new VirtualPage();
|
||||
$svp->CopyContentFromID = $page->ID;
|
||||
$svp->write();
|
||||
$svp->doPublish();
|
||||
|
||||
// Rename the file
|
||||
$file = $this->objFromFixture('File', 'file1');
|
||||
$file->Name = 'renamed-test-file.pdf';
|
||||
$file->write();
|
||||
|
||||
// Verify that the draft and publish virtual pages both have the corrected link
|
||||
$this->assertContains('<img src="assets/renamed-test-file.pdf"',
|
||||
DB::query("SELECT \"Content\" FROM \"SiteTree\" WHERE \"ID\" = $svp->ID")->value());
|
||||
$this->assertContains('<img src="assets/renamed-test-file.pdf"',
|
||||
DB::query("SELECT \"Content\" FROM \"SiteTree_Live\" WHERE \"ID\" = $svp->ID")->value());
|
||||
}
|
||||
|
||||
function testLinkRewritingOnAPublishedPageDoesntMakeItEditedOnDraft() {
|
||||
// Publish the source page
|
||||
$page = $this->objFromFixture('Page', 'page1');
|
||||
$this->assertTrue($page->doPublish());
|
||||
$this->assertFalse($page->IsModifiedOnStage);
|
||||
|
||||
// Rename the file
|
||||
$file = $this->objFromFixture('File', 'file1');
|
||||
$file->Name = 'renamed-test-file.pdf';
|
||||
$file->write();
|
||||
|
||||
// Caching hack
|
||||
Versioned::prepopulate_versionnumber_cache('SiteTree', 'Stage', array($page->ID));
|
||||
Versioned::prepopulate_versionnumber_cache('SiteTree', 'Live', array($page->ID));
|
||||
|
||||
// Confirm that the page hasn't gone green.
|
||||
$this->assertFalse($page->IsModifiedOnStage);
|
||||
}
|
||||
|
||||
function testTwoFileRenamesInARowWork() {
|
||||
$page = $this->objFromFixture('Page', 'page1');
|
||||
$this->assertTrue($page->doPublish());
|
||||
$this->assertContains('<img src="assets/testscript-test-file.pdf"',
|
||||
DB::query("SELECT \"Content\" FROM \"SiteTree_Live\" WHERE \"ID\" = $page->ID")->value());
|
||||
|
||||
// Rename the file twice
|
||||
$file = $this->objFromFixture('File', 'file1');
|
||||
$file->Name = 'renamed-test-file.pdf';
|
||||
$file->write();
|
||||
|
||||
// TODO Workaround for bug in DataObject->getChangedFields(), which returns stale data,
|
||||
// and influences File->updateFilesystem()
|
||||
$file = DataObject::get_by_id('File', $file->ID);
|
||||
$file->Name = 'renamed-test-file-second-time.pdf';
|
||||
$file->write();
|
||||
|
||||
// Confirm that the correct image is shown in both the draft and live site
|
||||
$this->assertContains('<img src="assets/renamed-test-file-second-time.pdf"',
|
||||
DB::query("SELECT \"Content\" FROM \"SiteTree\" WHERE \"ID\" = $page->ID")->value());
|
||||
$this->assertContains('<img src="assets/renamed-test-file-second-time.pdf"',
|
||||
DB::query("SELECT \"Content\" FROM \"SiteTree_Live\" WHERE \"ID\" = $page->ID")->value());
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
@ -1,10 +0,0 @@
|
||||
# These need to come first so that SiteTree has the link meta-data written.
|
||||
File:
|
||||
file1:
|
||||
Filename: assets/testscript-test-file.pdf
|
||||
|
||||
Page:
|
||||
page1:
|
||||
Title: page1
|
||||
URLSegment: page1
|
||||
Content: <p><img src="assets/testscript-test-file.pdf" /></p>
|
Loading…
Reference in New Issue
Block a user