mirror of
https://github.com/wilr/silverstripe-googlesitemaps.git
synced 2024-10-22 11:05:48 +02:00
Merge pull request #100 from nikrolls/support-namespaced-dataobjects
Added support for namespaced data objects
This commit is contained in:
commit
6fd2901aaf
@ -380,7 +380,7 @@ class GoogleSitemap extends Object
|
||||
$lastModified = ($sliced) ? $sliced->dbObject('LastEdited')->Format('Y-m-d') : date('Y-m-d');
|
||||
|
||||
$sitemaps->push(new ArrayData(array(
|
||||
'ClassName' => $class,
|
||||
'ClassName' => $this->sanitiseClassName($class),
|
||||
'Page' => $i,
|
||||
'LastModified' => $lastModified
|
||||
)));
|
||||
@ -491,4 +491,13 @@ class GoogleSitemap extends Object
|
||||
{
|
||||
return GoogleSitemap::create();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitise a namespaced class' name for inclusion in a link
|
||||
* @return string
|
||||
*/
|
||||
protected function sanitiseClassName($class)
|
||||
{
|
||||
return str_replace('\\', '-', $class);
|
||||
}
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ class GoogleSitemapController extends Controller
|
||||
*/
|
||||
public function sitemap()
|
||||
{
|
||||
$class = $this->request->param('ID');
|
||||
$class = $this->unsanitiseClassName($this->request->param('ID'));
|
||||
$page = $this->request->param('OtherID');
|
||||
|
||||
if (GoogleSitemap::enabled() && $class && $page) {
|
||||
@ -76,4 +76,13 @@ class GoogleSitemapController extends Controller
|
||||
return new SS_HTTPResponse('Page not found', 404);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsanitise a namespaced class' name from a URL param
|
||||
* @return string
|
||||
*/
|
||||
protected function unsanitiseClassName($class)
|
||||
{
|
||||
return str_replace('-', '\\', $class);
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,8 @@ class GoogleSitemapTest extends FunctionalTest
|
||||
protected $extraDataObjects = array(
|
||||
'GoogleSitemapTest_DataObject',
|
||||
'GoogleSitemapTest_OtherDataObject',
|
||||
'GoogleSitemapTest_UnviewableDataObject'
|
||||
'GoogleSitemapTest_UnviewableDataObject',
|
||||
'SilverStripe\GoogleSitemaps\Test_DataObject',
|
||||
);
|
||||
|
||||
public function setUp()
|
||||
@ -188,6 +189,34 @@ class GoogleSitemapTest extends FunctionalTest
|
||||
Config::inst()->update('GoogleSitemap', 'objects_per_sitemap', $original);
|
||||
}
|
||||
|
||||
public function testAccessingNestedNamespacedSiteMap()
|
||||
{
|
||||
$original = Config::inst()->get('GoogleSitemap', 'objects_per_sitemap');
|
||||
Config::inst()->update('GoogleSitemap', 'objects_per_sitemap', 1);
|
||||
GoogleSitemap::register_dataobject("SilverStripe\\GoogleSitemaps\\Test_DataObject");
|
||||
|
||||
$response = $this->get('sitemap.xml/sitemap/SilverStripe-GoogleSitemaps-Test_DataObject/1');
|
||||
$body = $response->getBody();
|
||||
|
||||
$this->assertEquals(200, $response->getStatusCode(), 'successful loaded nested sitemap');
|
||||
|
||||
Config::inst()->update('GoogleSitemap', 'objects_per_sitemap', $original);
|
||||
}
|
||||
|
||||
public function testAccessingNestedNamespacedSiteMapCaseInsensitive()
|
||||
{
|
||||
$original = Config::inst()->get('GoogleSitemap', 'objects_per_sitemap');
|
||||
Config::inst()->update('GoogleSitemap', 'objects_per_sitemap', 1);
|
||||
GoogleSitemap::register_dataobject("SilverStripe\\GoogleSitemaps\\Test_DataObject");
|
||||
|
||||
$response = $this->get('sitemap.xml/sitemap/silverstripe-googlesitemaps-test_dataobject/1');
|
||||
$body = $response->getBody();
|
||||
|
||||
$this->assertEquals(200, $response->getStatusCode(), 'successful loaded nested sitemap');
|
||||
|
||||
Config::inst()->update('GoogleSitemap', 'objects_per_sitemap', $original);
|
||||
}
|
||||
|
||||
public function testGetItemsWithPages()
|
||||
{
|
||||
if (!class_exists('Page')) {
|
||||
|
27
tests/NamespacedTestObject.php
Normal file
27
tests/NamespacedTestObject.php
Normal file
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\GoogleSitemaps;
|
||||
|
||||
use Director, DataObject, TestOnly;
|
||||
|
||||
/**
|
||||
* @package googlesitemaps
|
||||
* @subpackage tests
|
||||
*/
|
||||
class Test_DataObject extends DataObject implements TestOnly
|
||||
{
|
||||
|
||||
public static $db = array(
|
||||
'Priority' => 'Varchar(10)'
|
||||
);
|
||||
|
||||
public function canView($member = null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function AbsoluteLink()
|
||||
{
|
||||
return Director::absoluteBaseURL();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user