add composer's vendor directory
This commit is contained in:
parent
01a3860d73
commit
60b094d5fa
745 changed files with 56017 additions and 1 deletions
175
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/Subscription.php
vendored
Normal file
175
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/Subscription.php
vendored
Normal file
|
@ -0,0 +1,175 @@
|
|||
<?php
|
||||
|
||||
namespace PicoFeed\Serialization;
|
||||
|
||||
/**
|
||||
* Class Subscription
|
||||
*
|
||||
* @package PicoFeed\Serialization
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class Subscription
|
||||
{
|
||||
protected $title = '';
|
||||
protected $feedUrl = '';
|
||||
protected $siteUrl = '';
|
||||
protected $category = '';
|
||||
protected $description = '';
|
||||
protected $type = '';
|
||||
|
||||
/**
|
||||
* Create object instance
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return Subscription
|
||||
*/
|
||||
public static function create()
|
||||
{
|
||||
return new static();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set title
|
||||
*
|
||||
* @access public
|
||||
* @param string $title
|
||||
* @return Subscription
|
||||
*/
|
||||
public function setTitle($title)
|
||||
{
|
||||
$this->title = $title;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get title
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle()
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set feed URL
|
||||
*
|
||||
* @access public
|
||||
* @param string $feedUrl
|
||||
* @return Subscription
|
||||
*/
|
||||
public function setFeedUrl($feedUrl)
|
||||
{
|
||||
$this->feedUrl = $feedUrl;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get feed URL
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getFeedUrl()
|
||||
{
|
||||
return $this->feedUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set site URL
|
||||
*
|
||||
* @access public
|
||||
* @param string $siteUrl
|
||||
* @return Subscription
|
||||
*/
|
||||
public function setSiteUrl($siteUrl)
|
||||
{
|
||||
$this->siteUrl = $siteUrl;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get site URL
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getSiteUrl()
|
||||
{
|
||||
return $this->siteUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set category
|
||||
*
|
||||
* @access public
|
||||
* @param string $category
|
||||
* @return Subscription
|
||||
*/
|
||||
public function setCategory($category)
|
||||
{
|
||||
$this->category = $category;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get category
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getCategory()
|
||||
{
|
||||
return $this->category;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set description
|
||||
*
|
||||
* @access public
|
||||
* @param string $description
|
||||
* @return Subscription
|
||||
*/
|
||||
public function setDescription($description)
|
||||
{
|
||||
$this->description = $description;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get description
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription()
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set type
|
||||
*
|
||||
* @access public
|
||||
* @param string $type
|
||||
* @return Subscription
|
||||
*/
|
||||
public function setType($type)
|
||||
{
|
||||
$this->type = $type;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get type
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getType()
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
}
|
75
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/SubscriptionList.php
vendored
Normal file
75
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/SubscriptionList.php
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
|
||||
namespace PicoFeed\Serialization;
|
||||
|
||||
/**
|
||||
* Class SubscriptionList
|
||||
*
|
||||
* @package PicoFeed\Serialization
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class SubscriptionList
|
||||
{
|
||||
/**
|
||||
* OPML entries
|
||||
*
|
||||
* @var Subscription[]
|
||||
*/
|
||||
public $subscriptions = array();
|
||||
|
||||
/**
|
||||
* Title
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $title = '';
|
||||
|
||||
/**
|
||||
* Create object instance
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return SubscriptionList
|
||||
*/
|
||||
public static function create()
|
||||
{
|
||||
return new static();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set title
|
||||
*
|
||||
* @access public
|
||||
* @param string $title
|
||||
* @return SubscriptionList
|
||||
*/
|
||||
public function setTitle($title)
|
||||
{
|
||||
$this->title = $title;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get title
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle()
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add subscription
|
||||
*
|
||||
* @access public
|
||||
* @param Subscription $subscription
|
||||
* @return SubscriptionList
|
||||
*/
|
||||
public function addSubscription(Subscription $subscription)
|
||||
{
|
||||
$this->subscriptions[] = $subscription;
|
||||
return $this;
|
||||
}
|
||||
}
|
204
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/SubscriptionListBuilder.php
vendored
Normal file
204
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/SubscriptionListBuilder.php
vendored
Normal file
|
@ -0,0 +1,204 @@
|
|||
<?php
|
||||
|
||||
namespace PicoFeed\Serialization;
|
||||
|
||||
use DOMDocument;
|
||||
use DOMElement;
|
||||
|
||||
/**
|
||||
* Class SubscriptionListBuilder
|
||||
*
|
||||
* @package PicoFeed\Serialization
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class SubscriptionListBuilder
|
||||
{
|
||||
/**
|
||||
* @var SubscriptionList
|
||||
*/
|
||||
protected $subscriptionList;
|
||||
|
||||
/**
|
||||
* @var DOMDocument
|
||||
*/
|
||||
protected $document;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @access public
|
||||
* @param SubscriptionList $subscriptionList
|
||||
*/
|
||||
public function __construct(SubscriptionList $subscriptionList)
|
||||
{
|
||||
$this->subscriptionList = $subscriptionList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get object instance
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @param SubscriptionList $subscriptionList
|
||||
* @return SubscriptionListBuilder
|
||||
*/
|
||||
public static function create(SubscriptionList $subscriptionList)
|
||||
{
|
||||
return new static($subscriptionList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build OPML feed
|
||||
*
|
||||
* @access public
|
||||
* @param string $filename
|
||||
* @return string
|
||||
*/
|
||||
public function build($filename = '')
|
||||
{
|
||||
$this->document = new DomDocument('1.0', 'UTF-8');
|
||||
$this->document->formatOutput = true;
|
||||
|
||||
$opmlElement = $this->document->createElement('opml');
|
||||
$opmlElement->setAttribute('version', '1.0');
|
||||
|
||||
$headElement = $this->document->createElement('head');
|
||||
|
||||
if ($this->subscriptionList->getTitle() !== '') {
|
||||
$titleElement = $this->document->createElement('title');
|
||||
$titleElement->appendChild($this->document->createTextNode($this->subscriptionList->getTitle()));
|
||||
$headElement->appendChild($titleElement);
|
||||
}
|
||||
|
||||
$opmlElement->appendChild($headElement);
|
||||
$opmlElement->appendChild($this->buildBody());
|
||||
$this->document->appendChild($opmlElement);
|
||||
|
||||
if ($filename !== '') {
|
||||
$this->document->save($filename);
|
||||
return '';
|
||||
}
|
||||
|
||||
return $this->document->saveXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the list has categories
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function hasCategories()
|
||||
{
|
||||
foreach ($this->subscriptionList->subscriptions as $subscription) {
|
||||
if ($subscription->getCategory() !== '') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build OPML body
|
||||
*
|
||||
* @access protected
|
||||
* @return DOMElement
|
||||
*/
|
||||
protected function buildBody()
|
||||
{
|
||||
$bodyElement = $this->document->createElement('body');
|
||||
|
||||
if ($this->hasCategories()) {
|
||||
$this->buildCategories($bodyElement);
|
||||
return $bodyElement;
|
||||
}
|
||||
|
||||
foreach ($this->subscriptionList->subscriptions as $subscription) {
|
||||
$bodyElement->appendChild($this->buildSubscription($subscription));
|
||||
}
|
||||
|
||||
return $bodyElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build categories section
|
||||
*
|
||||
* @access protected
|
||||
* @param DOMElement $bodyElement
|
||||
*/
|
||||
protected function buildCategories(DOMElement $bodyElement)
|
||||
{
|
||||
$categories = $this->groupByCategories();
|
||||
|
||||
foreach ($categories as $category => $subscriptions) {
|
||||
$bodyElement->appendChild($this->buildCategory($category, $subscriptions));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Build category tag
|
||||
*
|
||||
* @access protected
|
||||
* @param string $category
|
||||
* @param array $subscriptions
|
||||
* @return DOMElement
|
||||
*/
|
||||
protected function buildCategory($category, array $subscriptions)
|
||||
{
|
||||
$outlineElement = $this->document->createElement('outline');
|
||||
$outlineElement->setAttribute('text', $category);
|
||||
|
||||
foreach ($subscriptions as $subscription) {
|
||||
$outlineElement->appendChild($this->buildSubscription($subscription));
|
||||
}
|
||||
|
||||
return $outlineElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build subscription entry
|
||||
*
|
||||
* @access public
|
||||
* @param Subscription $subscription
|
||||
* @return DOMElement
|
||||
*/
|
||||
protected function buildSubscription(Subscription $subscription)
|
||||
{
|
||||
$outlineElement = $this->document->createElement('outline');
|
||||
$outlineElement->setAttribute('type', $subscription->getType() ?: 'rss');
|
||||
$outlineElement->setAttribute('text', $subscription->getTitle() ?: $subscription->getFeedUrl());
|
||||
$outlineElement->setAttribute('xmlUrl', $subscription->getFeedUrl());
|
||||
|
||||
if ($subscription->getTitle() !== '') {
|
||||
$outlineElement->setAttribute('title', $subscription->getTitle());
|
||||
}
|
||||
|
||||
if ($subscription->getDescription() !== '') {
|
||||
$outlineElement->setAttribute('description', $subscription->getDescription());
|
||||
}
|
||||
|
||||
if ($subscription->getSiteUrl() !== '') {
|
||||
$outlineElement->setAttribute('htmlUrl', $subscription->getSiteUrl());
|
||||
}
|
||||
|
||||
return $outlineElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Group subscriptions by category
|
||||
*
|
||||
* @access private
|
||||
* @return array
|
||||
*/
|
||||
private function groupByCategories()
|
||||
{
|
||||
$categories = array();
|
||||
|
||||
foreach ($this->subscriptionList->subscriptions as $subscription) {
|
||||
$categories[$subscription->getCategory()][] = $subscription;
|
||||
}
|
||||
|
||||
return $categories;
|
||||
}
|
||||
}
|
100
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/SubscriptionListParser.php
vendored
Normal file
100
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/SubscriptionListParser.php
vendored
Normal file
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
namespace PicoFeed\Serialization;
|
||||
|
||||
use PicoFeed\Parser\MalformedXmlException;
|
||||
use PicoFeed\Parser\XmlParser;
|
||||
use SimpleXMLElement;
|
||||
|
||||
/**
|
||||
* Class SubscriptionListParser
|
||||
*
|
||||
* @package PicoFeed\Serialization
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class SubscriptionListParser
|
||||
{
|
||||
/**
|
||||
* @var SubscriptionList
|
||||
*/
|
||||
protected $subscriptionList;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $data;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @access public
|
||||
* @param string $data
|
||||
*/
|
||||
public function __construct($data)
|
||||
{
|
||||
$this->subscriptionList = new SubscriptionList();
|
||||
$this->data = trim($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get object instance
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @param string $data
|
||||
* @return SubscriptionListParser
|
||||
*/
|
||||
public static function create($data)
|
||||
{
|
||||
return new static($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a subscription list entry
|
||||
*
|
||||
* @access public
|
||||
* @throws MalformedXmlException
|
||||
* @return SubscriptionList
|
||||
*/
|
||||
public function parse()
|
||||
{
|
||||
$xml = XmlParser::getSimpleXml($this->data);
|
||||
|
||||
if (! $xml || !isset($xml->head) || !isset($xml->body)) {
|
||||
throw new MalformedXmlException('Unable to parse OPML file: invalid XML');
|
||||
}
|
||||
|
||||
$this->parseTitle($xml->head);
|
||||
$this->parseEntries($xml->body);
|
||||
|
||||
return $this->subscriptionList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse title
|
||||
*
|
||||
* @access protected
|
||||
* @param SimpleXMLElement $xml
|
||||
*/
|
||||
protected function parseTitle(SimpleXMLElement $xml)
|
||||
{
|
||||
$this->subscriptionList->setTitle((string) $xml->title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse entries
|
||||
*
|
||||
* @access protected
|
||||
* @param SimpleXMLElement $body
|
||||
*/
|
||||
private function parseEntries(SimpleXMLElement $body)
|
||||
{
|
||||
foreach ($body->outline as $outlineElement) {
|
||||
if (isset($outlineElement->outline)) {
|
||||
$this->parseEntries($outlineElement);
|
||||
} else {
|
||||
$this->subscriptionList->subscriptions[] = SubscriptionParser::create($body, $outlineElement)->parse();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
142
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/SubscriptionParser.php
vendored
Normal file
142
vendor/fguillot/picofeed/lib/PicoFeed/Serialization/SubscriptionParser.php
vendored
Normal file
|
@ -0,0 +1,142 @@
|
|||
<?php
|
||||
|
||||
namespace PicoFeed\Serialization;
|
||||
|
||||
use SimpleXMLElement;
|
||||
|
||||
/**
|
||||
* Class SubscriptionParser
|
||||
*
|
||||
* @package PicoFeed\Serialization
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class SubscriptionParser
|
||||
{
|
||||
/**
|
||||
* @var Subscription
|
||||
*/
|
||||
protected $subscription;
|
||||
|
||||
/**
|
||||
* @var SimpleXMLElement
|
||||
*/
|
||||
private $outlineElement;
|
||||
|
||||
/**
|
||||
* @var SimpleXMLElement
|
||||
*/
|
||||
private $parentElement;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $parentElement
|
||||
* @param SimpleXMLElement $outlineElement
|
||||
*/
|
||||
public function __construct(SimpleXMLElement $parentElement, SimpleXMLElement $outlineElement)
|
||||
{
|
||||
$this->parentElement = $parentElement;
|
||||
$this->outlineElement = $outlineElement;
|
||||
$this->subscription = new Subscription();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get object instance
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @param SimpleXMLElement $parentElement
|
||||
* @param SimpleXMLElement $outlineElement
|
||||
* @return SubscriptionParser
|
||||
*/
|
||||
public static function create(SimpleXMLElement $parentElement, SimpleXMLElement $outlineElement)
|
||||
{
|
||||
return new static($parentElement, $outlineElement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse subscription entry
|
||||
*
|
||||
* @access public
|
||||
* @return Subscription
|
||||
*/
|
||||
public function parse()
|
||||
{
|
||||
$this->subscription->setCategory($this->findCategory());
|
||||
$this->subscription->setTitle($this->findTitle());
|
||||
$this->subscription->setFeedUrl($this->findFeedUrl());
|
||||
$this->subscription->setSiteUrl($this->findSiteUrl());
|
||||
$this->subscription->setType($this->findType());
|
||||
$this->subscription->setDescription($this->findDescription());
|
||||
|
||||
return $this->subscription;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find category.
|
||||
*
|
||||
* @access protected
|
||||
* @return string
|
||||
*/
|
||||
protected function findCategory()
|
||||
{
|
||||
return isset($this->parentElement['text']) ? (string) $this->parentElement['text'] : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Find title.
|
||||
*
|
||||
* @access protected
|
||||
* @return string
|
||||
*/
|
||||
protected function findTitle()
|
||||
{
|
||||
return isset($this->outlineElement['title']) ? (string) $this->outlineElement['title'] : (string) $this->outlineElement['text'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Find feed url.
|
||||
*
|
||||
* @access protected
|
||||
* @return string
|
||||
*/
|
||||
protected function findFeedUrl()
|
||||
{
|
||||
return (string) $this->outlineElement['xmlUrl'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Find site url.
|
||||
*
|
||||
* @access protected
|
||||
* @return string
|
||||
*/
|
||||
protected function findSiteUrl()
|
||||
{
|
||||
return isset($this->outlineElement['htmlUrl']) ? (string) $this->outlineElement['htmlUrl'] : $this->findFeedUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Find type.
|
||||
*
|
||||
* @access protected
|
||||
* @return string
|
||||
*/
|
||||
protected function findType()
|
||||
{
|
||||
return isset($this->outlineElement['version']) ? (string) $this->outlineElement['version'] :
|
||||
isset($this->outlineElement['type']) ? (string) $this->outlineElement['type'] : 'rss';
|
||||
}
|
||||
|
||||
/**
|
||||
* Find description.
|
||||
*
|
||||
* @access protected
|
||||
* @return string
|
||||
*/
|
||||
protected function findDescription()
|
||||
{
|
||||
return isset($this->outlineElement['description']) ? (string) $this->outlineElement['description'] : $this->findTitle();
|
||||
}
|
||||
}
|
Reference in a new issue