mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
139 lines
2.7 KiB
PHP
139 lines
2.7 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace SilverStripe\Control\RSS;
|
||
|
|
||
|
use SilverStripe\Control\Director;
|
||
|
use SilverStripe\ORM\FieldType\DBField;
|
||
|
use SilverStripe\ORM\FieldType\DBHTMLText;
|
||
|
use SilverStripe\View\ViewableData;
|
||
|
use BadMethodCallException;
|
||
|
|
||
|
/**
|
||
|
* RSSFeed_Entry class
|
||
|
*
|
||
|
* This class is used for entries of an RSS feed.
|
||
|
*
|
||
|
* @see RSSFeed
|
||
|
*/
|
||
|
class RSSFeed_Entry extends ViewableData
|
||
|
{
|
||
|
/**
|
||
|
* The object that represents the item, it contains all the data.
|
||
|
*
|
||
|
* @var mixed
|
||
|
*/
|
||
|
protected $failover;
|
||
|
|
||
|
/**
|
||
|
* Name of the title field of feed entries
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $titleField;
|
||
|
|
||
|
/**
|
||
|
* Name of the description field of feed entries
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $descriptionField;
|
||
|
|
||
|
/**
|
||
|
* Name of the author field of feed entries
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $authorField;
|
||
|
|
||
|
/**
|
||
|
* Create a new RSSFeed entry.
|
||
|
* @param ViewableData $entry
|
||
|
* @param string $titleField
|
||
|
* @param string $descriptionField
|
||
|
* @param string $authorField
|
||
|
*/
|
||
|
public function __construct($entry, $titleField, $descriptionField, $authorField)
|
||
|
{
|
||
|
$this->failover = $entry;
|
||
|
$this->titleField = $titleField;
|
||
|
$this->descriptionField = $descriptionField;
|
||
|
$this->authorField = $authorField;
|
||
|
|
||
|
parent::__construct();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the description of this entry
|
||
|
*
|
||
|
* @return DBField Returns the description of the entry.
|
||
|
*/
|
||
|
public function Title()
|
||
|
{
|
||
|
return $this->rssField($this->titleField);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the description of this entry
|
||
|
*
|
||
|
* @return DBField Returns the description of the entry.
|
||
|
*/
|
||
|
public function Description()
|
||
|
{
|
||
|
$description = $this->rssField($this->descriptionField);
|
||
|
|
||
|
// HTML fields need links re-written
|
||
|
if ($description instanceof DBHTMLText) {
|
||
|
return $description->obj('AbsoluteLinks');
|
||
|
}
|
||
|
|
||
|
return $description;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the author of this entry
|
||
|
*
|
||
|
* @return DBField Returns the author of the entry.
|
||
|
*/
|
||
|
public function Author()
|
||
|
{
|
||
|
return $this->rssField($this->authorField);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Return the safely casted field
|
||
|
*
|
||
|
* @param string $fieldName Name of field
|
||
|
* @return DBField
|
||
|
*/
|
||
|
public function rssField($fieldName)
|
||
|
{
|
||
|
if ($fieldName) {
|
||
|
return $this->failover->obj($fieldName);
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get a link to this entry
|
||
|
*
|
||
|
* @return string Returns the URL of this entry
|
||
|
* @throws BadMethodCallException
|
||
|
*/
|
||
|
public function AbsoluteLink()
|
||
|
{
|
||
|
if ($this->failover->hasMethod('AbsoluteLink')) {
|
||
|
return $this->failover->AbsoluteLink();
|
||
|
} else {
|
||
|
if ($this->failover->hasMethod('Link')) {
|
||
|
return Director::absoluteURL($this->failover->Link());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
throw new BadMethodCallException(
|
||
|
$this->failover->class .
|
||
|
" object has neither an AbsoluteLink nor a Link method." .
|
||
|
" Can't put a link in the RSS feed", E_USER_WARNING
|
||
|
);
|
||
|
}
|
||
|
}
|