remove unnecessary variable declaration

This commit is contained in:
Nicolas Lœuillet 2014-04-06 20:53:31 +02:00
parent 292cd0dbd5
commit 7a873ef1d7
2 changed files with 387 additions and 389 deletions

View file

@ -101,8 +101,7 @@
*/ */
public function setDescription($description) public function setDescription($description)
{ {
$tag = 'description'; $this->setElement('description', $description);
$this->setElement($tag, $description);
} }
/** /**

View file

@ -18,424 +18,423 @@ define('JSONP', 3, true);
*/ */
class FeedWriter class FeedWriter
{ {
private $self = null; // self URL - http://feed2.w3.org/docs/warning/MissingAtomSelfLink.html private $self = null; // self URL - http://feed2.w3.org/docs/warning/MissingAtomSelfLink.html
private $hubs = array(); // PubSubHubbub hubs private $hubs = array(); // PubSubHubbub hubs
private $channels = array(); // Collection of channel elements private $channels = array(); // Collection of channel elements
private $items = array(); // Collection of items as object of FeedItem class. private $items = array(); // Collection of items as object of FeedItem class.
private $data = array(); // Store some other version wise data private $data = array(); // Store some other version wise data
private $CDATAEncoding = array(); // The tag names which have to encoded as CDATA private $CDATAEncoding = array(); // The tag names which have to encoded as CDATA
private $xsl = null; // stylesheet to render RSS (used by Chrome) private $xsl = null; // stylesheet to render RSS (used by Chrome)
private $json = null; // JSON object private $json = null; // JSON object
private $version = null; private $version = null;
/** /**
* Constructor * Constructor
* *
* @param constant the version constant (RSS2 or JSON). * @param constant the version constant (RSS2 or JSON).
*/ */
function __construct($version = RSS2) function __construct($version = RSS2)
{ {
$this->version = $version; $this->version = $version;
// Setting default value for assential channel elements // Setting default value for assential channel elements
$this->channels['title'] = $version . ' Feed'; $this->channels['title'] = $version . ' Feed';
$this->channels['link'] = 'http://www.ajaxray.com/blog'; $this->channels['link'] = 'http://www.ajaxray.com/blog';
//Tag names to encode in CDATA //Tag names to encode in CDATA
$this->CDATAEncoding = array('description', 'content:encoded', 'content', 'subtitle', 'summary'); $this->CDATAEncoding = array('description', 'content:encoded', 'content', 'subtitle', 'summary');
} }
public function setFormat($format) { public function setFormat($format) {
$this->version = $format; $this->version = $format;
} }
// Start # public functions --------------------------------------------- // Start # public functions ---------------------------------------------
/** /**
* Set a channel element * Set a channel element
* @access public * @access public
* @param srting name of the channel tag * @param srting name of the channel tag
* @param string content of the channel tag * @param string content of the channel tag
* @return void * @return void
*/ */
public function setChannelElement($elementName, $content) public function setChannelElement($elementName, $content)
{ {
$this->channels[$elementName] = $content ; $this->channels[$elementName] = $content ;
} }
/** /**
* Set multiple channel elements from an array. Array elements * Set multiple channel elements from an array. Array elements
* should be 'channelName' => 'channelContent' format. * should be 'channelName' => 'channelContent' format.
* *
* @access public * @access public
* @param array array of channels * @param array array of channels
* @return void * @return void
*/ */
public function setChannelElementsFromArray($elementArray) public function setChannelElementsFromArray($elementArray)
{ {
if(! is_array($elementArray)) return; if(! is_array($elementArray)) return;
foreach ($elementArray as $elementName => $content) foreach ($elementArray as $elementName => $content)
{ {
$this->setChannelElement($elementName, $content); $this->setChannelElement($elementName, $content);
} }
} }
/** /**
* Genarate the actual RSS/JSON file * Genarate the actual RSS/JSON file
* *
* @access public * @access public
* @return void * @return void
*/ */
public function genarateFeed() public function genarateFeed()
{ {
if ($this->version == RSS2) { if ($this->version == RSS2) {
// header('Content-type: text/xml; charset=UTF-8'); // header('Content-type: text/xml; charset=UTF-8');
// this line prevents Chrome 20 from prompting download // this line prevents Chrome 20 from prompting download
// used by Google: https://news.google.com/news/feeds?ned=us&topic=b&output=rss // used by Google: https://news.google.com/news/feeds?ned=us&topic=b&output=rss
// header('X-content-type-options: nosniff'); // header('X-content-type-options: nosniff');
} elseif ($this->version == JSON) { } elseif ($this->version == JSON) {
// header('Content-type: application/json; charset=UTF-8'); // header('Content-type: application/json; charset=UTF-8');
$this->json = new stdClass(); $this->json = new stdClass();
} elseif ($this->version == JSONP) { } elseif ($this->version == JSONP) {
// header('Content-type: application/javascript; charset=UTF-8'); // header('Content-type: application/javascript; charset=UTF-8');
$this->json = new stdClass(); $this->json = new stdClass();
} }
$this->printHead(); $this->printHead();
$this->printChannels(); $this->printChannels();
$this->printItems(); $this->printItems();
$this->printTale(); $this->printTale();
if ($this->version == JSON || $this->version == JSONP) { if ($this->version == JSON || $this->version == JSONP) {
echo json_encode($this->json); echo json_encode($this->json);
} }
} }
/** /**
* Create a new FeedItem. * Create a new FeedItem.
* *
* @access public * @access public
* @return object instance of FeedItem class * @return object instance of FeedItem class
*/ */
public function createNewItem() public function createNewItem()
{ {
$Item = new FeedItem($this->version); $Item = new FeedItem($this->version);
return $Item; return $Item;
} }
/** /**
* Add a FeedItem to the main class * Add a FeedItem to the main class
* *
* @access public * @access public
* @param object instance of FeedItem class * @param object instance of FeedItem class
* @return void * @return void
*/ */
public function addItem($feedItem) public function addItem($feedItem)
{ {
$this->items[] = $feedItem; $this->items[] = $feedItem;
} }
// Wrapper functions ------------------------------------------------------------------- // Wrapper functions -------------------------------------------------------------------
/** /**
* Set the 'title' channel element * Set the 'title' channel element
* *
* @access public * @access public
* @param srting value of 'title' channel tag * @param srting value of 'title' channel tag
* @return void * @return void
*/ */
public function setTitle($title) public function setTitle($title)
{ {
$this->setChannelElement('title', $title); $this->setChannelElement('title', $title);
} }
/** /**
* Add a hub to the channel element * Add a hub to the channel element
* *
* @access public * @access public
* @param string URL * @param string URL
* @return void * @return void
*/ */
public function addHub($hub) public function addHub($hub)
{ {
$this->hubs[] = $hub; $this->hubs[] = $hub;
} }
/** /**
* Set XSL URL * Set XSL URL
* *
* @access public * @access public
* @param string URL * @param string URL
* @return void * @return void
*/ */
public function setXsl($xsl) public function setXsl($xsl)
{ {
$this->xsl = $xsl; $this->xsl = $xsl;
} }
/** /**
* Set self URL * Set self URL
* *
* @access public * @access public
* @param string URL * @param string URL
* @return void * @return void
*/ */
public function setSelf($self) public function setSelf($self)
{ {
$this->self = $self; $this->self = $self;
} }
/** /**
* Set the 'description' channel element * Set the 'description' channel element
* *
* @access public * @access public
* @param srting value of 'description' channel tag * @param srting value of 'description' channel tag
* @return void * @return void
*/ */
public function setDescription($desciption) public function setDescription($description)
{ {
$tag = 'description'; $this->setChannelElement('description', $description);
$this->setChannelElement($tag, $desciption); }
}
/** /**
* Set the 'link' channel element * Set the 'link' channel element
* *
* @access public * @access public
* @param srting value of 'link' channel tag * @param srting value of 'link' channel tag
* @return void * @return void
*/ */
public function setLink($link) public function setLink($link)
{ {
$this->setChannelElement('link', $link); $this->setChannelElement('link', $link);
} }
/** /**
* Set the 'image' channel element * Set the 'image' channel element
* *
* @access public * @access public
* @param srting title of image * @param srting title of image
* @param srting link url of the imahe * @param srting link url of the imahe
* @param srting path url of the image * @param srting path url of the image
* @return void * @return void
*/ */
public function setImage($title, $link, $url) public function setImage($title, $link, $url)
{ {
$this->setChannelElement('image', array('title'=>$title, 'link'=>$link, 'url'=>$url)); $this->setChannelElement('image', array('title'=>$title, 'link'=>$link, 'url'=>$url));
} }
// End # public functions ---------------------------------------------- // End # public functions ----------------------------------------------
// Start # private functions ---------------------------------------------- // Start # private functions ----------------------------------------------
/** /**
* Prints the xml and rss namespace * Prints the xml and rss namespace
* *
* @access private * @access private
* @return void * @return void
*/ */
private function printHead() private function printHead()
{ {
if ($this->version == RSS2) if ($this->version == RSS2)
{ {
$out = '<?xml version="1.0" encoding="utf-8"?>'."\n"; $out = '<?xml version="1.0" encoding="utf-8"?>'."\n";
if ($this->xsl) $out .= '<?xml-stylesheet type="text/xsl" href="'.htmlspecialchars($this->xsl).'"?>' . PHP_EOL; if ($this->xsl) $out .= '<?xml-stylesheet type="text/xsl" href="'.htmlspecialchars($this->xsl).'"?>' . PHP_EOL;
$out .= '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">' . PHP_EOL; $out .= '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">' . PHP_EOL;
echo $out; echo $out;
} }
elseif ($this->version == JSON || $this->version == JSONP) elseif ($this->version == JSON || $this->version == JSONP)
{ {
$this->json->rss = array('@attributes' => array('version' => '2.0')); $this->json->rss = array('@attributes' => array('version' => '2.0'));
} }
} }
/** /**
* Closes the open tags at the end of file * Closes the open tags at the end of file
* *
* @access private * @access private
* @return void * @return void
*/ */
private function printTale() private function printTale()
{ {
if ($this->version == RSS2) if ($this->version == RSS2)
{ {
echo '</channel>',PHP_EOL,'</rss>'; echo '</channel>',PHP_EOL,'</rss>';
} }
// do nothing for JSON // do nothing for JSON
} }
/** /**
* Creates a single node as xml format * Creates a single node as xml format
* *
* @access private * @access private
* @param string name of the tag * @param string name of the tag
* @param mixed tag value as string or array of nested tags in 'tagName' => 'tagValue' format * @param mixed tag value as string or array of nested tags in 'tagName' => 'tagValue' format
* @param array Attributes(if any) in 'attrName' => 'attrValue' format * @param array Attributes(if any) in 'attrName' => 'attrValue' format
* @return string formatted xml tag * @return string formatted xml tag
*/ */
private function makeNode($tagName, $tagContent, $attributes = null) private function makeNode($tagName, $tagContent, $attributes = null)
{ {
if ($this->version == RSS2) if ($this->version == RSS2)
{ {
$nodeText = ''; $nodeText = '';
$attrText = ''; $attrText = '';
if (is_array($attributes)) if (is_array($attributes))
{ {
foreach ($attributes as $key => $value) foreach ($attributes as $key => $value)
{ {
$attrText .= " $key=\"$value\" "; $attrText .= " $key=\"$value\" ";
} }
} }
$nodeText .= "<{$tagName}{$attrText}>"; $nodeText .= "<{$tagName}{$attrText}>";
if (is_array($tagContent)) if (is_array($tagContent))
{ {
foreach ($tagContent as $key => $value) foreach ($tagContent as $key => $value)
{ {
$nodeText .= $this->makeNode($key, $value); $nodeText .= $this->makeNode($key, $value);
} }
} }
else else
{ {
//$nodeText .= (in_array($tagName, $this->CDATAEncoding))? $tagContent : htmlentities($tagContent); //$nodeText .= (in_array($tagName, $this->CDATAEncoding))? $tagContent : htmlentities($tagContent);
$nodeText .= htmlspecialchars($tagContent); $nodeText .= htmlspecialchars($tagContent);
} }
//$nodeText .= (in_array($tagName, $this->CDATAEncoding))? "]]></$tagName>" : "</$tagName>"; //$nodeText .= (in_array($tagName, $this->CDATAEncoding))? "]]></$tagName>" : "</$tagName>";
$nodeText .= "</$tagName>"; $nodeText .= "</$tagName>";
return $nodeText . PHP_EOL; return $nodeText . PHP_EOL;
} }
elseif ($this->version == JSON || $this->version == JSONP) elseif ($this->version == JSON || $this->version == JSONP)
{ {
$tagName = (string)$tagName; $tagName = (string)$tagName;
$tagName = strtr($tagName, ':', '_'); $tagName = strtr($tagName, ':', '_');
$node = null; $node = null;
if (!$tagContent && is_array($attributes) && count($attributes)) if (!$tagContent && is_array($attributes) && count($attributes))
{ {
$node = array('@attributes' => $this->json_keys($attributes)); $node = array('@attributes' => $this->json_keys($attributes));
} else { } else {
if (is_array($tagContent)) { if (is_array($tagContent)) {
$node = $this->json_keys($tagContent); $node = $this->json_keys($tagContent);
} else { } else {
$node = $tagContent; $node = $tagContent;
} }
} }
return $node; return $node;
} }
return ''; // should not get here return ''; // should not get here
} }
private function json_keys(array $array) { private function json_keys(array $array) {
$new = array(); $new = array();
foreach ($array as $key => $val) { foreach ($array as $key => $val) {
if (is_string($key)) $key = strtr($key, ':', '_'); if (is_string($key)) $key = strtr($key, ':', '_');
if (is_array($val)) { if (is_array($val)) {
$new[$key] = $this->json_keys($val); $new[$key] = $this->json_keys($val);
} else { } else {
$new[$key] = $val; $new[$key] = $val;
} }
} }
return $new; return $new;
} }
/** /**
* @desc Print channels * @desc Print channels
* @access private * @access private
* @return void * @return void
*/ */
private function printChannels() private function printChannels()
{ {
//Start channel tag //Start channel tag
if ($this->version == RSS2) { if ($this->version == RSS2) {
echo '<channel>' . PHP_EOL; echo '<channel>' . PHP_EOL;
// add hubs // add hubs
foreach ($this->hubs as $hub) { foreach ($this->hubs as $hub) {
//echo $this->makeNode('link', '', array('rel'=>'hub', 'href'=>$hub, 'xmlns'=>'http://www.w3.org/2005/Atom')); //echo $this->makeNode('link', '', array('rel'=>'hub', 'href'=>$hub, 'xmlns'=>'http://www.w3.org/2005/Atom'));
echo '<link rel="hub" href="'.htmlspecialchars($hub).'" xmlns="http://www.w3.org/2005/Atom" />' . PHP_EOL; echo '<link rel="hub" href="'.htmlspecialchars($hub).'" xmlns="http://www.w3.org/2005/Atom" />' . PHP_EOL;
} }
// add self // add self
if (isset($this->self)) { if (isset($this->self)) {
//echo $this->makeNode('link', '', array('rel'=>'self', 'href'=>$this->self, 'xmlns'=>'http://www.w3.org/2005/Atom')); //echo $this->makeNode('link', '', array('rel'=>'self', 'href'=>$this->self, 'xmlns'=>'http://www.w3.org/2005/Atom'));
echo '<link rel="self" href="'.htmlspecialchars($this->self).'" xmlns="http://www.w3.org/2005/Atom" />' . PHP_EOL; echo '<link rel="self" href="'.htmlspecialchars($this->self).'" xmlns="http://www.w3.org/2005/Atom" />' . PHP_EOL;
} }
//Print Items of channel //Print Items of channel
foreach ($this->channels as $key => $value) foreach ($this->channels as $key => $value)
{ {
echo $this->makeNode($key, $value); echo $this->makeNode($key, $value);
} }
} elseif ($this->version == JSON || $this->version == JSONP) { } elseif ($this->version == JSON || $this->version == JSONP) {
$this->json->rss['channel'] = (object)$this->json_keys($this->channels); $this->json->rss['channel'] = (object)$this->json_keys($this->channels);
} }
} }
/** /**
* Prints formatted feed items * Prints formatted feed items
* *
* @access private * @access private
* @return void * @return void
*/ */
private function printItems() private function printItems()
{ {
foreach ($this->items as $item) { foreach ($this->items as $item) {
$itemElements = $item->getElements(); $itemElements = $item->getElements();
echo $this->startItem(); echo $this->startItem();
if ($this->version == JSON || $this->version == JSONP) { if ($this->version == JSON || $this->version == JSONP) {
$json_item = array(); $json_item = array();
} }
foreach ($itemElements as $thisElement) { foreach ($itemElements as $thisElement) {
foreach ($thisElement as $instance) { foreach ($thisElement as $instance) {
if ($this->version == RSS2) { if ($this->version == RSS2) {
echo $this->makeNode($instance['name'], $instance['content'], $instance['attributes']); echo $this->makeNode($instance['name'], $instance['content'], $instance['attributes']);
} elseif ($this->version == JSON || $this->version == JSONP) { } elseif ($this->version == JSON || $this->version == JSONP) {
$_json_node = $this->makeNode($instance['name'], $instance['content'], $instance['attributes']); $_json_node = $this->makeNode($instance['name'], $instance['content'], $instance['attributes']);
if (count($thisElement) > 1) { if (count($thisElement) > 1) {
$json_item[strtr($instance['name'], ':', '_')][] = $_json_node; $json_item[strtr($instance['name'], ':', '_')][] = $_json_node;
} else { } else {
$json_item[strtr($instance['name'], ':', '_')] = $_json_node; $json_item[strtr($instance['name'], ':', '_')] = $_json_node;
} }
} }
} }
} }
echo $this->endItem(); echo $this->endItem();
if ($this->version == JSON || $this->version == JSONP) { if ($this->version == JSON || $this->version == JSONP) {
if (count($this->items) > 1) { if (count($this->items) > 1) {
$this->json->rss['channel']->item[] = $json_item; $this->json->rss['channel']->item[] = $json_item;
} else { } else {
$this->json->rss['channel']->item = $json_item; $this->json->rss['channel']->item = $json_item;
} }
} }
} }
} }
/** /**
* Make the starting tag of channels * Make the starting tag of channels
* *
* @access private * @access private
* @return void * @return void
*/ */
private function startItem() private function startItem()
{ {
if ($this->version == RSS2) if ($this->version == RSS2)
{ {
echo '<item>' . PHP_EOL; echo '<item>' . PHP_EOL;
} }
// nothing for JSON // nothing for JSON
} }
/** /**
* Closes feed item tag * Closes feed item tag
* *
* @access private * @access private
* @return void * @return void
*/ */
private function endItem() private function endItem()
{ {
if ($this->version == RSS2) if ($this->version == RSS2)
{ {
echo '</item>' . PHP_EOL; echo '</item>' . PHP_EOL;
} }
// nothing for JSON // nothing for JSON
} }
// End # private functions ---------------------------------------------- // End # private functions ----------------------------------------------
} }