Merge pull request #1401 from open-sausages/pulls/4.0/ownership-api

API Mark image tracking as owned
This commit is contained in:
Ingo Schommer 2016-03-08 11:55:01 +13:00
commit 08202f018f
2 changed files with 33 additions and 13 deletions

View File

@ -19,11 +19,21 @@ class SiteTreeFileExtension extends DataExtension {
'BackLinkTracking' => 'SiteTree.ImageTracking' // {@see SiteTreeLinkTracking} 'BackLinkTracking' => 'SiteTree.ImageTracking' // {@see SiteTreeLinkTracking}
); );
/**
* Images tracked by pages are owned by those pages
*
* @config
* @var array
*/
private static $owned_by = array(
'BackLinkTracking'
);
public function updateCMSFields(FieldList $fields) { public function updateCMSFields(FieldList $fields) {
$fields->insertAfter( $fields->insertAfter(
ReadonlyField::create( ReadonlyField::create(
'BackLinkCount', 'BackLinkCount',
_t('AssetTableField.BACKLINKCOUNT', 'Used on:'), _t('AssetTableField.BACKLINKCOUNT', 'Used on:'),
$this->BackLinkTracking()->Count() . ' ' . _t('AssetTableField.PAGES', 'page(s)') $this->BackLinkTracking()->Count() . ' ' . _t('AssetTableField.PAGES', 'page(s)')
) )
->addExtraClass('cms-description-toggle') ->addExtraClass('cms-description-toggle')
@ -72,17 +82,17 @@ class SiteTreeFileExtension extends DataExtension {
$links = $this->owner->getManyManyComponents('BackLinkTracking'); $links = $this->owner->getManyManyComponents('BackLinkTracking');
$this->owner->extend('updateBackLinkTracking', $links); $this->owner->extend('updateBackLinkTracking', $links);
if(class_exists("Subsite")){ if(class_exists("Subsite")){
Subsite::disable_subsite_filter($rememberSubsiteFilter); Subsite::disable_subsite_filter($rememberSubsiteFilter);
} }
return $links; return $links;
} }
/** /**
* @todo Unnecessary shortcut for AssetTableField, coupled with cms module. * @todo Unnecessary shortcut for AssetTableField, coupled with cms module.
* *
* @return integer * @return integer
*/ */
public function BackLinkTrackingCount() { public function BackLinkTrackingCount() {
@ -93,7 +103,7 @@ class SiteTreeFileExtension extends DataExtension {
return 0; return 0;
} }
} }
/** /**
* Updates link tracking in the current stage. * Updates link tracking in the current stage.
*/ */
@ -125,10 +135,10 @@ class SiteTreeFileExtension extends DataExtension {
// after ->doPublish() is invoked. // after ->doPublish() is invoked.
$this->updateLinks(); $this->updateLinks();
} }
/** /**
* Rewrite links to the $old file to now point to the $new file. * Rewrite links to the $old file to now point to the $new file.
* *
* @uses SiteTree->rewriteFileID() * @uses SiteTree->rewriteFileID()
*/ */
public function updateLinks() { public function updateLinks() {
@ -140,17 +150,17 @@ class SiteTreeFileExtension extends DataExtension {
if(class_exists('Subsite')) { if(class_exists('Subsite')) {
Subsite::disable_subsite_filter(true); Subsite::disable_subsite_filter(true);
} }
$pages = $this->owner->BackLinkTracking(); $pages = $this->owner->BackLinkTracking();
if($pages) { if($pages) {
foreach($pages as $page) { foreach($pages as $page) {
$page->rewriteFileLinks(); $page->rewriteFileLinks();
} }
} }
if(class_exists('Subsite')) { if(class_exists('Subsite')) {
Subsite::disable_subsite_filter(false); Subsite::disable_subsite_filter(false);
} }
} }
} }

View File

@ -41,13 +41,23 @@ class SiteTreeLinkTracking extends DataExtension {
private static $many_many = array( private static $many_many = array(
"LinkTracking" => "SiteTree", "LinkTracking" => "SiteTree",
"ImageTracking" => "File" "ImageTracking" => "File" // {@see SiteTreeFileExtension}
); );
private static $belongs_many_many = array( private static $belongs_many_many = array(
"BackLinkTracking" => "SiteTree.LinkTracking" "BackLinkTracking" => "SiteTree.LinkTracking"
); );
/**
* Tracked images are considered owned by this page
*
* @config
* @var array
*/
private static $owns = array(
"ImageTracking"
);
private static $many_many_extraFields = array( private static $many_many_extraFields = array(
"LinkTracking" => array("FieldName" => "Varchar"), "LinkTracking" => array("FieldName" => "Varchar"),
"ImageTracking" => array("FieldName" => "Varchar") "ImageTracking" => array("FieldName" => "Varchar")