forked from blallo/rss-bridge
Merge branch 'ContinuousIntegration' of https://github.com/logmanoriginal/rss-bridge
This commit is contained in:
commit
88919a43fd
21 changed files with 1502 additions and 1396 deletions
|
@ -2,14 +2,12 @@
|
|||
/**
|
||||
* Cache with file system
|
||||
*/
|
||||
class FileCache extends CacheAbstract{
|
||||
class FileCache extends CacheAbstract {
|
||||
protected $cacheDirCreated; // boolean to avoid always chck dir cache existance
|
||||
|
||||
public function loadData(){
|
||||
$this->isPrepareCache();
|
||||
|
||||
$datas = unserialize(file_get_contents($this->getCacheFile()));
|
||||
|
||||
return $datas;
|
||||
}
|
||||
|
||||
|
@ -18,13 +16,10 @@ class FileCache extends CacheAbstract{
|
|||
|
||||
//Re-encode datas to UTF-8
|
||||
//$datas = Cache::utf8_encode_deep($datas);
|
||||
|
||||
$writeStream = file_put_contents($this->getCacheFile(), serialize($datas));
|
||||
|
||||
if(!$writeStream) {
|
||||
|
||||
throw new \Exception("Cannot write the cache... Do you have the right permissions ?");
|
||||
|
||||
}
|
||||
|
||||
return $this;
|
||||
|
@ -34,7 +29,7 @@ class FileCache extends CacheAbstract{
|
|||
$this->isPrepareCache();
|
||||
|
||||
$cacheFile = $this->getCacheFile();
|
||||
if( file_exists($cacheFile) ){
|
||||
if(file_exists($cacheFile)){
|
||||
return filemtime($cacheFile);
|
||||
}
|
||||
|
||||
|
@ -47,7 +42,7 @@ class FileCache extends CacheAbstract{
|
|||
* @return \Exception|true
|
||||
*/
|
||||
protected function isPrepareCache(){
|
||||
if( is_null($this->param) ){
|
||||
if(is_null($this->param)){
|
||||
throw new \Exception('Please feed "prepare" method before try to load');
|
||||
}
|
||||
|
||||
|
@ -62,7 +57,7 @@ class FileCache extends CacheAbstract{
|
|||
$cacheDir = __DIR__ . '/../cache/'; // FIXME : configuration ?
|
||||
|
||||
// FIXME : implement recursive dir creation
|
||||
if( is_null($this->cacheDirCreated) && !is_dir($cacheDir) ){
|
||||
if(is_null($this->cacheDirCreated) && !is_dir($cacheDir)){
|
||||
$this->cacheDirCreated = true;
|
||||
|
||||
mkdir($cacheDir,0705);
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
<?php
|
||||
/**
|
||||
* Atom
|
||||
* Documentation Source http://en.wikipedia.org/wiki/Atom_%28standard%29 and http://tools.ietf.org/html/rfc4287
|
||||
* Documentation Source http://en.wikipedia.org/wiki/Atom_%28standard%29 and
|
||||
* http://tools.ietf.org/html/rfc4287
|
||||
*/
|
||||
class AtomFormat extends FormatAbstract{
|
||||
|
||||
|
@ -61,7 +62,7 @@ EOD;
|
|||
|
||||
// Remove invalid non-UTF8 characters
|
||||
ini_set('mbstring.substitute_character', 'none');
|
||||
$toReturn= mb_convert_encoding($toReturn, 'UTF-8', 'UTF-8');
|
||||
$toReturn = mb_convert_encoding($toReturn, 'UTF-8', 'UTF-8');
|
||||
return $toReturn;
|
||||
}
|
||||
|
||||
|
@ -73,7 +74,7 @@ EOD;
|
|||
return parent::display();
|
||||
}
|
||||
|
||||
private function xml_encode($text) {
|
||||
private function xml_encode($text){
|
||||
return htmlspecialchars($text, ENT_XML1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
class HtmlFormat extends FormatAbstract{
|
||||
class HtmlFormat extends FormatAbstract {
|
||||
|
||||
public function stringify(){
|
||||
$extraInfos = $this->getExtraInfos();
|
||||
|
@ -13,8 +13,23 @@ class HtmlFormat extends FormatAbstract{
|
|||
$entryAuthor = isset($item['author']) ? '<br /><p class="author">by: ' . $item['author'] . '</p>' : '';
|
||||
$entryTitle = isset($item['title']) ? $this->sanitizeHtml(strip_tags($item['title'])) : '';
|
||||
$entryUri = isset($item['uri']) ? $item['uri'] : $uri;
|
||||
$entryTimestamp = isset($item['timestamp']) ? '<time datetime="' . date(DATE_ATOM, $item['timestamp']) . '">' . date(DATE_ATOM, $item['timestamp']) . '</time>' : '';
|
||||
$entryContent = isset($item['content']) ? '<div class="content">' . $this->sanitizeHtml($item['content']). '</div>' : '';
|
||||
|
||||
$entryTimestamp = '';
|
||||
if(isset($item['timestamp'])){
|
||||
$entryTimestamp = '<time datetime="'
|
||||
. date(DATE_ATOM, $item['timestamp'])
|
||||
. '">'
|
||||
. date(DATE_ATOM, $item['timestamp'])
|
||||
. '</time>';
|
||||
}
|
||||
|
||||
$entryContent = '';
|
||||
if(isset($item['content'])){
|
||||
$entryContent = '<div class="content">'
|
||||
. $this->sanitizeHtml($item['content'])
|
||||
. '</div>';
|
||||
}
|
||||
|
||||
$entries .= <<<EOD
|
||||
|
||||
<section class="feeditem">
|
||||
|
@ -27,7 +42,6 @@ class HtmlFormat extends FormatAbstract{
|
|||
EOD;
|
||||
}
|
||||
|
||||
|
||||
/* Data are prepared, now let's begin the "MAGIE !!!" */
|
||||
$toReturn = <<<EOD
|
||||
<!DOCTYPE html>
|
||||
|
|
|
@ -3,11 +3,10 @@
|
|||
* Json
|
||||
* Builds a JSON string from $this->items and return it to browser.
|
||||
*/
|
||||
class JsonFormat extends FormatAbstract{
|
||||
class JsonFormat extends FormatAbstract {
|
||||
|
||||
public function stringify(){
|
||||
$items = $this->getItems();
|
||||
|
||||
return json_encode($items, JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* Mrss
|
||||
* Documentation Source http://www.rssboard.org/media-rss
|
||||
*/
|
||||
class MrssFormat extends FormatAbstract{
|
||||
class MrssFormat extends FormatAbstract {
|
||||
|
||||
public function stringify(){
|
||||
$https = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 's' : '';
|
||||
|
@ -14,7 +14,13 @@ class MrssFormat extends FormatAbstract{
|
|||
|
||||
$extraInfos = $this->getExtraInfos();
|
||||
$title = $this->xml_encode($extraInfos['name']);
|
||||
$uri = $this->xml_encode(!empty($extraInfos['uri']) ? $extraInfos['uri'] : 'https://github.com/sebsauvage/rss-bridge');
|
||||
|
||||
if(!empty($extraInfos['uri'])){
|
||||
$uri = $this->xml_encode($extraInfos['uri']);
|
||||
} else {
|
||||
$uri = 'https://github.com/sebsauvage/rss-bridge';
|
||||
}
|
||||
|
||||
$icon = $this->xml_encode('http://icons.better-idea.org/icon?url='. $uri .'&size=64');
|
||||
|
||||
$items = '';
|
||||
|
@ -41,7 +47,10 @@ EOD;
|
|||
/* Data are prepared, now let's begin the "MAGIE !!!" */
|
||||
$toReturn = '<?xml version="1.0" encoding="UTF-8"?>';
|
||||
$toReturn .= <<<EOD
|
||||
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<rss version="2.0"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:media="http://search.yahoo.com/mrss/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>{$title}</title>
|
||||
<link>http{$https}://{$httpHost}{$httpInfo}/</link>
|
||||
|
@ -56,7 +65,7 @@ EOD;
|
|||
|
||||
// Remove invalid non-UTF8 characters
|
||||
ini_set('mbstring.substitute_character', 'none');
|
||||
$toReturn= mb_convert_encoding($toReturn, 'UTF-8', 'UTF-8');
|
||||
$toReturn = mb_convert_encoding($toReturn, 'UTF-8', 'UTF-8');
|
||||
return $toReturn;
|
||||
}
|
||||
|
||||
|
@ -68,7 +77,7 @@ EOD;
|
|||
return parent::display();
|
||||
}
|
||||
|
||||
private function xml_encode($text) {
|
||||
private function xml_encode($text){
|
||||
return htmlspecialchars($text, ENT_XML1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* Plaintext
|
||||
* Returns $this->items as raw php data.
|
||||
*/
|
||||
class PlaintextFormat extends FormatAbstract{
|
||||
class PlaintextFormat extends FormatAbstract {
|
||||
|
||||
public function stringify(){
|
||||
$items = $this->getItems();
|
||||
|
|
84
index.php
84
index.php
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
TODO :
|
||||
- factorize the annotation system
|
||||
- factorize to adapter : Format, Bridge, Cache (actually code is almost the same)
|
||||
- factorize to adapter : Format, Bridge, Cache(actually code is almost the same)
|
||||
- implement annotation cache for entrance page
|
||||
- Cache : I think logic must be change as least to avoid to reconvert object from json in FileCache case.
|
||||
- add namespace to avoid futur problem ?
|
||||
|
@ -12,9 +12,9 @@ TODO :
|
|||
|
||||
//define('PROXY_URL', 'tcp://192.168.0.0:28');
|
||||
// Set to true if you allow users to disable proxy usage for specific bridges
|
||||
define('PROXY_BYBRIDGE',false);
|
||||
define('PROXY_BYBRIDGE', false);
|
||||
// Comment this line or keep PROXY_NAME empty to display PROXY_URL instead
|
||||
define('PROXY_NAME','Hidden Proxy Name');
|
||||
define('PROXY_NAME', 'Hidden Proxy Name');
|
||||
|
||||
date_default_timezone_set('UTC');
|
||||
error_reporting(0);
|
||||
|
@ -22,23 +22,23 @@ error_reporting(0);
|
|||
/*
|
||||
Create a file named 'DEBUG' for enabling debug mode.
|
||||
For further security, you may put whitelisted IP addresses
|
||||
in the 'DEBUG' file, one IP per line. Empty file allows anyone (!).
|
||||
in the 'DEBUG' file, one IP per line. Empty file allows anyone(!).
|
||||
Debugging allows displaying PHP error messages and bypasses the cache: this can allow a malicious
|
||||
client to retrieve data about your server and hammer a provider throught your rss-bridge instance.
|
||||
*/
|
||||
if (file_exists('DEBUG')) {
|
||||
if(file_exists('DEBUG')){
|
||||
$debug_enabled = true;
|
||||
$debug_whitelist = trim(file_get_contents('DEBUG'));
|
||||
if (strlen($debug_whitelist) > 0) {
|
||||
if(strlen($debug_whitelist) > 0){
|
||||
$debug_enabled = false;
|
||||
foreach (explode("\n", $debug_whitelist) as $allowed_ip) {
|
||||
if (trim($allowed_ip) === $_SERVER['REMOTE_ADDR']) {
|
||||
foreach(explode("\n", $debug_whitelist) as $allowed_ip){
|
||||
if(trim($allowed_ip) === $_SERVER['REMOTE_ADDR']){
|
||||
$debug_enabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($debug_enabled) {
|
||||
if($debug_enabled){
|
||||
ini_set('display_errors', '1');
|
||||
error_reporting(E_ALL);
|
||||
define('DEBUG', 'true');
|
||||
|
@ -48,11 +48,13 @@ if (file_exists('DEBUG')) {
|
|||
require_once __DIR__ . '/lib/RssBridge.php';
|
||||
|
||||
// extensions check
|
||||
if (!extension_loaded('openssl'))
|
||||
if(!extension_loaded('openssl'))
|
||||
die('"openssl" extension not loaded. Please check "php.ini"');
|
||||
|
||||
// FIXME : beta test UA spoofing, please report any blacklisting by PHP-fopen-unfriendly websites
|
||||
ini_set('user_agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20121202 Firefox/30.0 (rss-bridge/0.1; +https://github.com/sebsauvage/rss-bridge)');
|
||||
ini_set('user_agent', 'Mozilla/5.0(X11; Linux x86_64; rv:30.0)
|
||||
Gecko/20121202 Firefox/30.0(rss-bridge/0.1;
|
||||
+https://github.com/sebsauvage/rss-bridge)');
|
||||
|
||||
// default whitelist
|
||||
$whitelist_file = './whitelist.txt';
|
||||
|
@ -74,42 +76,42 @@ $whitelist_default = array(
|
|||
"WikipediaBridge",
|
||||
"YoutubeBridge");
|
||||
|
||||
if (!file_exists($whitelist_file)) {
|
||||
if(!file_exists($whitelist_file)){
|
||||
$whitelist_selection = $whitelist_default;
|
||||
$whitelist_write = implode("\n", $whitelist_default);
|
||||
file_put_contents($whitelist_file, $whitelist_write);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$whitelist_selection = explode("\n", file_get_contents($whitelist_file));
|
||||
}
|
||||
|
||||
Cache::purge();
|
||||
|
||||
try{
|
||||
try {
|
||||
|
||||
Bridge::setDir(__DIR__ . '/bridges/');
|
||||
Format::setDir(__DIR__ . '/formats/');
|
||||
Cache::setDir(__DIR__ . '/caches/');
|
||||
|
||||
$action=filter_input(INPUT_GET,'action');
|
||||
$bridge=filter_input(INPUT_GET,'bridge');
|
||||
$action = filter_input(INPUT_GET, 'action');
|
||||
$bridge = filter_input(INPUT_GET, 'bridge');
|
||||
|
||||
if($action === 'display' && !empty($bridge)){
|
||||
// DEPRECATED: 'nameBridge' scheme is replaced by 'name' in bridge parameter values
|
||||
// this is to keep compatibility until futher complete removal
|
||||
if(($pos=strpos($bridge,'Bridge'))===(strlen($bridge)-strlen('Bridge'))){
|
||||
$bridge=substr($bridge,0,$pos);
|
||||
if(($pos = strpos($bridge, 'Bridge')) === (strlen($bridge) - strlen('Bridge'))){
|
||||
$bridge = substr($bridge, 0, $pos);
|
||||
}
|
||||
|
||||
$format = filter_input(INPUT_GET,'format');
|
||||
$format = filter_input(INPUT_GET, 'format');
|
||||
|
||||
// DEPRECATED: 'nameFormat' scheme is replaced by 'name' in format parameter values
|
||||
// this is to keep compatibility until futher complete removal
|
||||
if(($pos=strpos($format,'Format'))===(strlen($format)-strlen('Format'))){
|
||||
$format=substr($format,0,$pos);
|
||||
if(($pos = strpos($format, 'Format')) === (strlen($format) - strlen('Format'))){
|
||||
$format = substr($format, 0, $pos);
|
||||
}
|
||||
|
||||
|
||||
// whitelist control
|
||||
if(!Bridge::isWhitelisted($whitelist_selection, $bridge)) {
|
||||
if(!Bridge::isWhitelisted($whitelist_selection, $bridge)){
|
||||
throw new \HttpException('This bridge is not whitelisted', 401);
|
||||
die;
|
||||
}
|
||||
|
@ -118,21 +120,20 @@ try{
|
|||
|
||||
// Data retrieval
|
||||
$bridge = Bridge::create($bridge);
|
||||
if(!defined("DEBUG")) {
|
||||
if(!defined("DEBUG"))
|
||||
$bridge->setCache($cache);
|
||||
}
|
||||
|
||||
$noproxy=filter_input(INPUT_GET,'_noproxy',FILTER_VALIDATE_BOOLEAN);
|
||||
if(defined('PROXY_URL') && PROXY_BYBRIDGE && $noproxy){
|
||||
$bridge->useProxy=false;
|
||||
}
|
||||
$noproxy = filter_input(INPUT_GET, '_noproxy', FILTER_VALIDATE_BOOLEAN);
|
||||
if(defined('PROXY_URL') && PROXY_BYBRIDGE && $noproxy)
|
||||
$bridge->useProxy = false;
|
||||
|
||||
$params=$_GET;
|
||||
$params = $_GET;
|
||||
unset($params['action']);
|
||||
unset($params['bridge']);
|
||||
unset($params['format']);
|
||||
unset($params['_noproxy']);
|
||||
$bridge->setDatas($params);
|
||||
|
||||
// Data transformation
|
||||
try {
|
||||
$format = Format::create($format);
|
||||
|
@ -143,20 +144,19 @@ try{
|
|||
'uri' => $bridge->getURI(),
|
||||
))
|
||||
->display();
|
||||
} catch(Exception $e) {
|
||||
|
||||
echo "The brige has crashed. You should report this to the bridges maintainer";
|
||||
|
||||
} catch(Exception $e){
|
||||
echo "The bridge has crashed. You should report this to the bridges maintainer";
|
||||
}
|
||||
die;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
catch(HttpException $e){
|
||||
header('HTTP/1.1 ' . $e->getCode() . ' ' . Http::getMessageForCode($e->getCode()));
|
||||
header('Content-Type: text/plain');
|
||||
die($e->getMessage());
|
||||
}
|
||||
|
||||
catch(\Exception $e){
|
||||
die($e->getMessage());
|
||||
}
|
||||
|
@ -182,18 +182,14 @@ $formats = Format::searchInformation();
|
|||
</header>
|
||||
<?php
|
||||
$activeFoundBridgeCount = 0;
|
||||
$showInactive = filter_input(INPUT_GET,'show_inactive',FILTER_VALIDATE_BOOLEAN);
|
||||
$showInactive = filter_input(INPUT_GET, 'show_inactive', FILTER_VALIDATE_BOOLEAN);
|
||||
$inactiveBridges = '';
|
||||
$bridgeList = Bridge::listBridges();
|
||||
foreach($bridgeList as $bridgeName)
|
||||
{
|
||||
if(Bridge::isWhitelisted($whitelist_selection, $bridgeName))
|
||||
{
|
||||
foreach($bridgeList as $bridgeName){
|
||||
if(Bridge::isWhitelisted($whitelist_selection, $bridgeName)){
|
||||
echo HTMLUtils::displayBridgeCard($bridgeName, $formats);
|
||||
$activeFoundBridgeCount++;
|
||||
}
|
||||
elseif ($showInactive)
|
||||
{
|
||||
} elseif($showInactive) {
|
||||
// inactive bridges
|
||||
$inactiveBridges .= HTMLUtils::displayBridgeCard($bridgeName, $formats, false) . PHP_EOL;
|
||||
}
|
||||
|
|
|
@ -36,7 +36,8 @@ EOD;
|
|||
$pathBridge = self::getDir() . $nameBridge . '.php';
|
||||
|
||||
if(!file_exists($pathBridge)){
|
||||
throw new \Exception('The bridge you looking for does not exist. It should be at path ' . $pathBridge);
|
||||
throw new \Exception('The bridge you looking for does not exist. It should be at path '
|
||||
. $pathBridge);
|
||||
}
|
||||
|
||||
require_once $pathBridge;
|
||||
|
@ -92,10 +93,10 @@ EOD;
|
|||
|
||||
static public function isWhitelisted($whitelist, $name){
|
||||
if(in_array($name, $whitelist)
|
||||
or in_array($name . '.php', $whitelist)
|
||||
or in_array($name . 'Bridge', $whitelist) // DEPRECATED
|
||||
or in_array($name . 'Bridge.php', $whitelist) // DEPRECATED
|
||||
or count($whitelist) === 1 and trim($whitelist[0]) === '*'){
|
||||
|| in_array($name . '.php', $whitelist)
|
||||
|| in_array($name . 'Bridge', $whitelist) // DEPRECATED
|
||||
|| in_array($name . 'Bridge.php', $whitelist) // DEPRECATED
|
||||
|| count($whitelist) === 1 and trim($whitelist[0]) === '*'){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
|
|
@ -37,8 +37,9 @@ abstract class BridgeAbstract implements BridgeInterface {
|
|||
|
||||
protected function validateTextValue($value, $pattern = null){
|
||||
if(!is_null($pattern)){
|
||||
$filteredValue = filter_var($value, FILTER_VALIDATE_REGEXP,
|
||||
array('options' => array(
|
||||
$filteredValue = filter_var($value
|
||||
, FILTER_VALIDATE_REGEXP
|
||||
, array('options' => array(
|
||||
'regexp' => '/^' . $pattern . '$/'
|
||||
))
|
||||
);
|
||||
|
@ -91,13 +92,13 @@ abstract class BridgeAbstract implements BridgeInterface {
|
|||
if(!is_array($data))
|
||||
return false;
|
||||
|
||||
foreach($data as $name=>$value){
|
||||
foreach($data as $name => $value){
|
||||
$registered = false;
|
||||
foreach(static::PARAMETERS as $context=>$set){
|
||||
if(array_key_exists($name,$set)){
|
||||
foreach(static::PARAMETERS as $context => $set){
|
||||
if(array_key_exists($name, $set)){
|
||||
$registered = true;
|
||||
if(!isset($set[$name]['type'])){
|
||||
$set[$name]['type']='text';
|
||||
$set[$name]['type'] = 'text';
|
||||
}
|
||||
|
||||
switch($set[$name]['type']){
|
||||
|
@ -209,35 +210,35 @@ abstract class BridgeAbstract implements BridgeInterface {
|
|||
}
|
||||
|
||||
protected function getQueriedContext(array $inputs){
|
||||
$queriedContexts=array();
|
||||
foreach(static::PARAMETERS as $context=>$set){
|
||||
$queriedContexts[$context]=null;
|
||||
foreach($set as $id=>$properties){
|
||||
$queriedContexts = array();
|
||||
foreach(static::PARAMETERS as $context => $set){
|
||||
$queriedContexts[$context] = null;
|
||||
foreach($set as $id => $properties){
|
||||
if(isset($inputs[$id]) && !empty($inputs[$id])){
|
||||
$queriedContexts[$context]=true;
|
||||
}elseif(isset($properties['required']) &&
|
||||
$properties['required']===true){
|
||||
$queriedContexts[$context]=false;
|
||||
$queriedContexts[$context] = true;
|
||||
} elseif(isset($properties['required'])
|
||||
&& $properties['required'] === true){
|
||||
$queriedContexts[$context] = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(array_key_exists('global',static::PARAMETERS) &&
|
||||
$queriedContexts['global']===false){
|
||||
if(array_key_exists('global', static::PARAMETERS)
|
||||
&& $queriedContexts['global'] === false){
|
||||
return null;
|
||||
}
|
||||
unset($queriedContexts['global']);
|
||||
|
||||
switch(array_sum($queriedContexts)){
|
||||
case 0:
|
||||
foreach($queriedContexts as $context=>$queried){
|
||||
foreach($queriedContexts as $context => $queried){
|
||||
if (is_null($queried)){
|
||||
return $context;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
case 1: return array_search(true,$queriedContexts);
|
||||
case 1: return array_search(true, $queriedContexts);
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
@ -337,7 +338,7 @@ abstract class BridgeAbstract implements BridgeInterface {
|
|||
$contextOptions = array(
|
||||
'http' => array(
|
||||
'user_agent' => ini_get('user_agent')
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
if(defined('PROXY_URL') && $this->useProxy){
|
||||
|
@ -347,7 +348,7 @@ abstract class BridgeAbstract implements BridgeInterface {
|
|||
if(is_null($context)){
|
||||
$context = stream_context_create($contextOptions);
|
||||
} else {
|
||||
$prevContext=$context;
|
||||
$prevContext = $context;
|
||||
if(!stream_context_set_option($context, $contextOptions)){
|
||||
$context = $prevContext;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
require_once(__DIR__ . '/CacheInterface.php');
|
||||
class Cache{
|
||||
class Cache {
|
||||
|
||||
static protected $dirCache;
|
||||
|
||||
|
@ -9,13 +9,14 @@ class Cache{
|
|||
}
|
||||
|
||||
static public function create($nameCache){
|
||||
if( !static::isValidNameCache($nameCache) ){
|
||||
throw new \InvalidArgumentException('Name cache must be at least one uppercase follow or not by alphanumeric or dash characters.');
|
||||
if(!static::isValidNameCache($nameCache)){
|
||||
throw new \InvalidArgumentException('Name cache must be at least one
|
||||
uppercase follow or not by alphanumeric or dash characters.');
|
||||
}
|
||||
|
||||
$pathCache = self::getDir() . $nameCache . '.php';
|
||||
|
||||
if( !file_exists($pathCache) ){
|
||||
if(!file_exists($pathCache)){
|
||||
throw new \Exception('The cache you looking for does not exist.');
|
||||
}
|
||||
|
||||
|
@ -25,11 +26,11 @@ class Cache{
|
|||
}
|
||||
|
||||
static public function setDir($dirCache){
|
||||
if( !is_string($dirCache) ){
|
||||
if(!is_string($dirCache)){
|
||||
throw new \InvalidArgumentException('Dir cache must be a string.');
|
||||
}
|
||||
|
||||
if( !file_exists($dirCache) ){
|
||||
if(!file_exists($dirCache)){
|
||||
throw new \Exception('Dir cache does not exist.');
|
||||
}
|
||||
|
||||
|
@ -39,7 +40,7 @@ class Cache{
|
|||
static public function getDir(){
|
||||
$dirCache = self::$dirCache;
|
||||
|
||||
if( is_null($dirCache) ){
|
||||
if(is_null($dirCache)){
|
||||
throw new \LogicException(__CLASS__ . ' class need to know cache path !');
|
||||
}
|
||||
|
||||
|
@ -51,39 +52,40 @@ class Cache{
|
|||
}
|
||||
|
||||
|
||||
static public function utf8_encode_deep(&$input) {
|
||||
if (is_string($input)) {
|
||||
static public function utf8_encode_deep(&$input){
|
||||
if (is_string($input)){
|
||||
$input = utf8_encode($input);
|
||||
} else if (is_array($input)) {
|
||||
foreach ($input as &$value) {
|
||||
} elseif(is_array($input)){
|
||||
foreach($input as &$value){
|
||||
Cache::utf8_encode_deep($value);
|
||||
}
|
||||
|
||||
unset($value);
|
||||
} else if (is_object($input)) {
|
||||
} elseif(is_object($input)){
|
||||
$vars = array_keys(get_object_vars($input));
|
||||
|
||||
foreach ($vars as $var) {
|
||||
foreach($vars as $var){
|
||||
Cache::utf8_encode_deep($input->$var);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static public function purge() {
|
||||
$cacheTimeLimit = time() - 60*60*24 ;
|
||||
static public function purge(){
|
||||
$cacheTimeLimit = time() - 86400; // 86400 -> 24h
|
||||
$cachePath = 'cache';
|
||||
if(file_exists($cachePath)) {
|
||||
if(file_exists($cachePath)){
|
||||
$cacheIterator = new RecursiveIteratorIterator(
|
||||
new RecursiveDirectoryIterator($cachePath),
|
||||
RecursiveIteratorIterator::CHILD_FIRST
|
||||
);
|
||||
foreach ($cacheIterator as $cacheFile) {
|
||||
if (in_array($cacheFile->getBasename(), array('.', '..')))
|
||||
|
||||
foreach($cacheIterator as $cacheFile){
|
||||
if(in_array($cacheFile->getBasename(), array('.', '..')))
|
||||
continue;
|
||||
elseif ($cacheFile->isFile()) {
|
||||
if( filemtime($cacheFile->getPathname()) < $cacheTimeLimit )
|
||||
unlink( $cacheFile->getPathname() );
|
||||
elseif($cacheFile->isFile()){
|
||||
if(filemtime($cacheFile->getPathname()) < $cacheTimeLimit)
|
||||
unlink($cacheFile->getPathname());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
require_once(__DIR__ . '/CacheInterface.php');
|
||||
abstract class CacheAbstract implements CacheInterface{
|
||||
abstract class CacheAbstract implements CacheInterface {
|
||||
protected $param;
|
||||
|
||||
public function prepare(array $param){
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
interface CacheInterface{
|
||||
interface CacheInterface {
|
||||
public function loadData();
|
||||
public function saveData($datas);
|
||||
public function getTime();
|
||||
|
|
|
@ -12,9 +12,8 @@ class Http{
|
|||
static public function getMessageForCode($code){
|
||||
$codes = self::getCodes();
|
||||
|
||||
if( isset($codes[$code]) ){
|
||||
if(isset($codes[$code]))
|
||||
return $codes[$code];
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
|
|
@ -50,7 +50,10 @@ abstract class FeedExpander extends BridgeAbstract {
|
|||
|
||||
protected function collect_RSS_2_0_data($rssContent, $maxItems){
|
||||
$rssContent = $rssContent->channel[0];
|
||||
$this->debugMessage('RSS content is ===========\n' . var_export($rssContent, true) . '===========');
|
||||
$this->debugMessage('RSS content is ===========\n'
|
||||
. var_export($rssContent, true)
|
||||
. '===========');
|
||||
|
||||
$this->load_RSS_2_0_feed_data($rssContent);
|
||||
foreach($rssContent->item as $item){
|
||||
$this->debugMessage('parsing item ' . var_export($item, true));
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
require_once(__DIR__ . '/FormatInterface.php');
|
||||
class Format{
|
||||
class Format {
|
||||
|
||||
static protected $dirFormat;
|
||||
|
||||
|
@ -9,14 +9,15 @@ class Format{
|
|||
}
|
||||
|
||||
static public function create($nameFormat){
|
||||
if( !preg_match('@^[A-Z][a-zA-Z]*$@', $nameFormat)){
|
||||
throw new \InvalidArgumentException('Name format must be at least one uppercase follow or not by alphabetic characters.');
|
||||
if(!preg_match('@^[A-Z][a-zA-Z]*$@', $nameFormat)){
|
||||
throw new \InvalidArgumentException('Name format must be at least
|
||||
one uppercase follow or not by alphabetic characters.');
|
||||
}
|
||||
|
||||
$nameFormat=$nameFormat.'Format';
|
||||
$nameFormat = $nameFormat . 'Format';
|
||||
$pathFormat = self::getDir() . $nameFormat . '.php';
|
||||
|
||||
if( !file_exists($pathFormat) ){
|
||||
if(!file_exists($pathFormat)){
|
||||
throw new \Exception('The format you looking for does not exist.');
|
||||
}
|
||||
|
||||
|
@ -26,11 +27,11 @@ class Format{
|
|||
}
|
||||
|
||||
static public function setDir($dirFormat){
|
||||
if( !is_string($dirFormat) ){
|
||||
if(!is_string($dirFormat)){
|
||||
throw new \InvalidArgumentException('Dir format must be a string.');
|
||||
}
|
||||
|
||||
if( !file_exists($dirFormat) ){
|
||||
if(!file_exists($dirFormat)){
|
||||
throw new \Exception('Dir format does not exist.');
|
||||
}
|
||||
|
||||
|
@ -40,7 +41,7 @@ class Format{
|
|||
static public function getDir(){
|
||||
$dirFormat = self::$dirFormat;
|
||||
|
||||
if( is_null($dirFormat) ){
|
||||
if(is_null($dirFormat)){
|
||||
throw new \LogicException(__CLASS__ . ' class need to know format path !');
|
||||
}
|
||||
|
||||
|
@ -59,9 +60,9 @@ class Format{
|
|||
$searchCommonPattern = array('name');
|
||||
|
||||
$dirFiles = scandir($pathDirFormat);
|
||||
if( $dirFiles !== false ){
|
||||
foreach( $dirFiles as $fileName ){
|
||||
if( preg_match('@^([^.]+)Format\.php$@U', $fileName, $out) ){ // Is PHP file ?
|
||||
if($dirFiles !== false){
|
||||
foreach($dirFiles as $fileName){
|
||||
if(preg_match('@^([^.]+)Format\.php$@U', $fileName, $out)){ // Is PHP file ?
|
||||
$listFormat[] = $out[1];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
<?php
|
||||
require_once(__DIR__ . '/FormatInterface.php');
|
||||
abstract class FormatAbstract implements FormatInterface{
|
||||
abstract class FormatAbstract implements FormatInterface {
|
||||
const DEFAULT_CHARSET = 'UTF-8';
|
||||
|
||||
protected
|
||||
$contentType,
|
||||
$charset,
|
||||
$items,
|
||||
$extraInfos
|
||||
;
|
||||
$extraInfos;
|
||||
|
||||
public function setCharset($charset){
|
||||
$this->charset = $charset;
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
<?php
|
||||
class HTMLUtils {
|
||||
|
||||
public static function displayBridgeCard($bridgeName, $formats, $isActive = true){
|
||||
$bridgeElement = Bridge::create($bridgeName);
|
||||
$bridgeClass=$bridgeName.'Bridge';
|
||||
$bridgeClass = $bridgeName . 'Bridge';
|
||||
|
||||
if($bridgeElement == false)
|
||||
return "";
|
||||
|
@ -22,15 +21,30 @@ class HTMLUtils {
|
|||
CARD;
|
||||
|
||||
// If we don't have any parameter for the bridge, we print a generic form to load it.
|
||||
if(count($bridgeClass::PARAMETERS) == 0) {
|
||||
if(count($bridgeClass::PARAMETERS) == 0){
|
||||
|
||||
$card .= HTMLUtils::getFormHeader($bridgeName);
|
||||
|
||||
if ($isActive){
|
||||
if($isActive){
|
||||
if(defined('PROXY_URL') && PROXY_BYBRIDGE){
|
||||
$idArg = 'arg-' . urlencode($bridgeName) . '-' . urlencode('proxyoff') . '-' . urlencode('_noproxy');
|
||||
$card .= '<input id="' . $idArg . '" type="checkbox" name="_noproxy" />' . PHP_EOL;
|
||||
$card .= '<label for="' .$idArg. '">Disable proxy ('.((defined('PROXY_NAME') && PROXY_NAME)?PROXY_NAME:PROXY_URL).')</label><br />' . PHP_EOL;
|
||||
$idArg = 'arg-'
|
||||
. urlencode($bridgeName)
|
||||
. '-'
|
||||
. urlencode('proxyoff')
|
||||
. '-'
|
||||
. urlencode('_noproxy');
|
||||
|
||||
$card .= '<input id="'
|
||||
. $idArg
|
||||
. '" type="checkbox" name="_noproxy" />'
|
||||
. PHP_EOL;
|
||||
|
||||
$card .= '<label for="'
|
||||
. $idArg
|
||||
. '">Disable proxy ('
|
||||
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
|
||||
. ')</label><br />'
|
||||
. PHP_EOL;
|
||||
}
|
||||
|
||||
$card .= HTMLUtils::getHelperButtonsFormat($formats);
|
||||
|
@ -59,7 +73,7 @@ CARD;
|
|||
|
||||
$card .= HTMLUtils::getFormHeader($bridgeName);
|
||||
|
||||
foreach($parameter as $id=>$inputEntry) {
|
||||
foreach($parameter as $id => $inputEntry){
|
||||
$additionalInfoString = '';
|
||||
|
||||
if(isset($inputEntry['required']) && $inputEntry['required'] === true)
|
||||
|
@ -77,55 +91,140 @@ CARD;
|
|||
if(!isset($inputEntry['defaultValue']))
|
||||
$inputEntry['defaultValue'] = '';
|
||||
|
||||
$idArg = 'arg-' . urlencode($bridgeName) . '-' . urlencode($parameterName) . '-' . urlencode($id);
|
||||
$card .= '<label for="' . $idArg . '">' . $inputEntry['name'] . ' : </label>' . PHP_EOL;
|
||||
$idArg = 'arg-'
|
||||
. urlencode($bridgeName)
|
||||
. '-'
|
||||
. urlencode($parameterName)
|
||||
. '-'
|
||||
. urlencode($id);
|
||||
|
||||
if(!isset($inputEntry['type']) || $inputEntry['type'] == 'text') {
|
||||
$card .= '<input ' . $additionalInfoString . ' id="' . $idArg . '" type="text" value="' . $inputEntry['defaultValue'] . '" placeholder="' . $inputEntry['exampleValue'] . '" name="' . $id . '" /><br />' . PHP_EOL;
|
||||
} else if($inputEntry['type'] == 'number') {
|
||||
$card .= '<input ' . $additionalInfoString . ' id="' . $idArg . '" type="number" value="' . $inputEntry['defaultValue'] . '" placeholder="' . $inputEntry['exampleValue'] . '" name="' . $id . '" /><br />' . PHP_EOL;
|
||||
} else if($inputEntry['type'] == 'list') {
|
||||
$card .= '<select ' . $additionalInfoString . ' id="' . $idArg . '" name="' . $id . '" >';
|
||||
$card .= '<label for="'
|
||||
. $idArg
|
||||
. '">'
|
||||
. $inputEntry['name']
|
||||
. ' : </label>'
|
||||
. PHP_EOL;
|
||||
|
||||
foreach($inputEntry['values'] as $name=>$value) {
|
||||
if(!isset($inputEntry['type']) || $inputEntry['type'] == 'text'){
|
||||
$card .= '<input '
|
||||
. $additionalInfoString
|
||||
. ' id="'
|
||||
. $idArg
|
||||
. '" type="text" value="'
|
||||
. $inputEntry['defaultValue']
|
||||
. '" placeholder="'
|
||||
. $inputEntry['exampleValue']
|
||||
. '" name="'
|
||||
. $id
|
||||
. '" /><br />'
|
||||
. PHP_EOL;
|
||||
} elseif($inputEntry['type'] == 'number'){
|
||||
$card .= '<input '
|
||||
. $additionalInfoString
|
||||
. ' id="'
|
||||
. $idArg
|
||||
. '" type="number" value="'
|
||||
. $inputEntry['defaultValue']
|
||||
. '" placeholder="'
|
||||
. $inputEntry['exampleValue']
|
||||
. '" name="'
|
||||
. $id
|
||||
. '" /><br />'
|
||||
. PHP_EOL;
|
||||
} else if($inputEntry['type'] == 'list'){
|
||||
$card .= '<select '
|
||||
. $additionalInfoString
|
||||
. ' id="'
|
||||
. $idArg
|
||||
. '" name="'
|
||||
. $id
|
||||
. '" >';
|
||||
|
||||
foreach($inputEntry['values'] as $name => $value){
|
||||
if(is_array($value)){
|
||||
$card.='<optgroup label="'.htmlentities($name).'">';
|
||||
foreach($value as $subname=>$subvalue){
|
||||
if($inputEntry['defaultValue'] === $subname || $inputEntry['defaultValue'] === $subvalue)
|
||||
$card .= '<option value="' . $subvalue . '" selected>' . $subname . '</option>';
|
||||
else
|
||||
$card .= '<option value="' . $subvalue . '">' . $subname . '</option>';
|
||||
}
|
||||
$card.='</optgroup>';
|
||||
}else{
|
||||
if($inputEntry['defaultValue'] === $name || $inputEntry['defaultValue'] === $value)
|
||||
$card .= '<option value="' . $value . '" selected>' . $name . '</option>';
|
||||
else
|
||||
$card .= '<option value="' . $value . '">' . $name . '</option>';
|
||||
$card .= '<optgroup label="' . htmlentities($name) . '">';
|
||||
foreach($value as $subname => $subvalue){
|
||||
if($inputEntry['defaultValue'] === $subname
|
||||
|| $inputEntry['defaultValue'] === $subvalue){
|
||||
$card .= '<option value="'
|
||||
. $subvalue
|
||||
. '" selected>'
|
||||
. $subname
|
||||
. '</option>';
|
||||
} else {
|
||||
$card .= '<option value="'
|
||||
. $subvalue
|
||||
. '">'
|
||||
. $subname
|
||||
. '</option>';
|
||||
}
|
||||
}
|
||||
$card .= '</optgroup>';
|
||||
} else {
|
||||
if($inputEntry['defaultValue'] === $name
|
||||
|| $inputEntry['defaultValue'] === $value){
|
||||
$card .= '<option value="'
|
||||
. $value
|
||||
. '" selected>'
|
||||
. $name
|
||||
. '</option>';
|
||||
} else {
|
||||
$card .= '<option value="'
|
||||
. $value
|
||||
. '">'
|
||||
. $name
|
||||
. '</option>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$card .= '</select><br >';
|
||||
} else if($inputEntry['type'] == 'checkbox') {
|
||||
} elseif($inputEntry['type'] == 'checkbox'){
|
||||
if($inputEntry['defaultValue'] === 'checked')
|
||||
$card .= '<input ' . $additionalInfoString . ' id="' . $idArg . '" type="checkbox" name="' . $id . '" checked /><br />' . PHP_EOL;
|
||||
$card .= '<input '
|
||||
. $additionalInfoString
|
||||
. ' id="'
|
||||
. $idArg
|
||||
. '" type="checkbox" name="'
|
||||
. $id
|
||||
. '" checked /><br />'
|
||||
. PHP_EOL;
|
||||
else
|
||||
$card .= '<input ' . $additionalInfoString . ' id="' . $idArg . '" type="checkbox" name="' . $id . '" /><br />' . PHP_EOL;
|
||||
$card .= '<input '
|
||||
. $additionalInfoString
|
||||
. ' id="'
|
||||
. $idArg
|
||||
. '" type="checkbox" name="'
|
||||
. $id
|
||||
. '" /><br />'
|
||||
. PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
if ($isActive){
|
||||
if($isActive){
|
||||
if(defined('PROXY_URL') && PROXY_BYBRIDGE){
|
||||
$idArg = 'arg-' . urlencode($bridgeName) . '-' . urlencode('proxyoff') . '-' . urlencode('_noproxy');
|
||||
$card .= '<input id="' . $idArg . '" type="checkbox" name="_noproxy" />' . PHP_EOL;
|
||||
$card .= '<label for="' .$idArg. '">Disable proxy ('.((defined('PROXY_NAME') && PROXY_NAME)?PROXY_NAME:PROXY_URL).')</label><br />' . PHP_EOL;
|
||||
}
|
||||
$idArg = 'arg-'
|
||||
. urlencode($bridgeName)
|
||||
. '-'
|
||||
. urlencode('proxyoff')
|
||||
. '-'
|
||||
. urlencode('_noproxy');
|
||||
|
||||
$card .= '<input id="'
|
||||
. $idArg
|
||||
. '" type="checkbox" name="_noproxy" />'
|
||||
. PHP_EOL;
|
||||
|
||||
$card .= '<label for="'
|
||||
. $idArg
|
||||
. '">Disable proxy ('
|
||||
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
|
||||
. ')</label><br />'
|
||||
. PHP_EOL;
|
||||
}
|
||||
$card .= HTMLUtils::getHelperButtonsFormat($formats);
|
||||
} else {
|
||||
$card .= '<span style="font-weight: bold;">Inactive</span>';
|
||||
}
|
||||
|
||||
$card .= '</form>' . PHP_EOL;
|
||||
}
|
||||
|
||||
|
@ -138,8 +237,13 @@ CARD;
|
|||
|
||||
private static function getHelperButtonsFormat($formats){
|
||||
$buttons = '';
|
||||
foreach( $formats as $name){
|
||||
$buttons .= '<button type="submit" name="format" value="' . $name . '">' . $name . '</button>' . PHP_EOL;
|
||||
foreach($formats as $name){
|
||||
$buttons .= '<button type="submit" name="format" value="'
|
||||
. $name
|
||||
. '">'
|
||||
. $name
|
||||
. '</button>'
|
||||
. PHP_EOL;
|
||||
}
|
||||
|
||||
return $buttons;
|
||||
|
@ -164,22 +268,24 @@ class HTMLSanitizer {
|
|||
public static $KEPT_ATTRIBUTES = ["title", "href", "src"];
|
||||
public static $ONLY_TEXT = [];
|
||||
|
||||
public function __construct($tags_to_remove = null, $kept_attributes = null, $only_keep_text = null) {
|
||||
$this->tagsToRemove = $tags_to_remove == null ? HTMLSanitizer::$DEFAULT_CLEAR_TAGS : $tags_to_remove;
|
||||
$this->keptAttributes = $kept_attributes == null ? HTMLSanitizer::$KEPT_ATTRIBUTES : $kept_attributes;
|
||||
$this->onlyKeepText = $only_keep_text == null ? HTMLSanitizer::$ONLY_TEXT : $only_keep_text;
|
||||
public function __construct($tags_to_remove = null
|
||||
, $kept_attributes = null
|
||||
, $only_keep_text = null){
|
||||
$this->tagsToRemove = is_null($tags_to_remove) ? HTMLSanitizer::$DEFAULT_CLEAR_TAGS : $tags_to_remove;
|
||||
$this->keptAttributes = is_null($kept_attributes) ? HTMLSanitizer::$KEPT_ATTRIBUTES : $kept_attributes;
|
||||
$this->onlyKeepText = is_null($only_keep_text) ? HTMLSanitizer::$ONLY_TEXT : $only_keep_text;
|
||||
}
|
||||
|
||||
public function sanitize($textToSanitize) {
|
||||
public function sanitize($textToSanitize){
|
||||
$htmlContent = str_get_html($textToSanitize);
|
||||
|
||||
foreach($htmlContent->find('*[!b38fd2b1fe7f4747d6b1c1254ccd055e]') as $element) {
|
||||
if(in_array($element->tag, $this->onlyKeepText)) {
|
||||
foreach($htmlContent->find('*[!b38fd2b1fe7f4747d6b1c1254ccd055e]') as $element){
|
||||
if(in_array($element->tag, $this->onlyKeepText)){
|
||||
$element->outertext = $element->plaintext;
|
||||
} else if(in_array($element->tag, $this->tagsToRemove)) {
|
||||
} elseif(in_array($element->tag, $this->tagsToRemove)){
|
||||
$element->outertext = '';
|
||||
} else {
|
||||
foreach($element->getAllAttributes() as $attributeName => $attribute) {
|
||||
foreach($element->getAllAttributes() as $attributeName => $attribute){
|
||||
if(!in_array($attributeName, $this->keptAttributes))
|
||||
$element->removeAttribute($attributeName);
|
||||
}
|
||||
|
@ -189,10 +295,12 @@ class HTMLSanitizer {
|
|||
return $htmlContent;
|
||||
}
|
||||
|
||||
public static function defaultImageSrcTo($content, $server) {
|
||||
foreach($content->find('img') as $image) {
|
||||
if(strpos($image->src, "http") == NULL && strpos($image->src, "//") == NULL && strpos($image->src, "data:") == NULL)
|
||||
$image->src = $server.$image->src;
|
||||
public static function defaultImageSrcTo($content, $server){
|
||||
foreach($content->find('img') as $image){
|
||||
if(is_null(strpos($image->src, "http"))
|
||||
&& is_null(strpos($image->src, "//"))
|
||||
&& is_null(strpos($image->src, "data:")))
|
||||
$image->src = $server . $image->src;
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,11 @@ require __DIR__ . '/HTMLUtils.php';
|
|||
|
||||
$vendorLibSimpleHtmlDom = __DIR__ . PATH_VENDOR . '/simplehtmldom/simple_html_dom.php';
|
||||
if( !file_exists($vendorLibSimpleHtmlDom) ){
|
||||
throw new \HttpException('"PHP Simple HTML DOM Parser" library is missing. Get it from http://simplehtmldom.sourceforge.net and place the script "simple_html_dom.php" in '.substr(PATH_VENDOR,4) . '/simplehtmldom/', 500);
|
||||
throw new \HttpException('"PHP Simple HTML DOM Parser" library is missing.
|
||||
Get it from http://simplehtmldom.sourceforge.net and place the script "simple_html_dom.php" in '
|
||||
. substr(PATH_VENDOR,4)
|
||||
. '/simplehtmldom/'
|
||||
, 500);
|
||||
}
|
||||
require_once $vendorLibSimpleHtmlDom;
|
||||
|
||||
|
|
28
phpcs.xml
28
phpcs.xml
|
@ -18,38 +18,12 @@
|
|||
<rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
|
||||
<rule ref="Generic.PHP.LowerCaseConstant"/>
|
||||
<rule ref="Generic.Strings.UnnecessaryStringConcat"/>
|
||||
<rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
|
||||
<rule ref="Generic.WhiteSpace.ScopeIndent">
|
||||
<properties>
|
||||
<property name="indent" value="2"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="PEAR.Functions.FunctionCallSignature">
|
||||
<properties>
|
||||
<property name="indent" value="2"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
|
||||
<rule ref="PEAR.Functions.ValidDefaultValue"/>
|
||||
<rule ref="PEAR.NamingConventions.ValidClassName"/>
|
||||
<rule ref="PEAR.WhiteSpace.ObjectOperatorIndent">
|
||||
<properties>
|
||||
<property name="indent" value="2"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="PEAR.WhiteSpace.ScopeClosingBrace">
|
||||
<properties>
|
||||
<property name="indent" value="2"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="PSR2.ControlStructures.ElseIfDeclaration"/>
|
||||
<rule ref="PSR2.ControlStructures.SwitchDeclaration">
|
||||
<properties>
|
||||
<property name="indent" value="2"/>
|
||||
</properties>
|
||||
</rule>
|
||||
<rule ref="PSR2.Files.EndFileNewline"/>
|
||||
<rule ref="Squiz.WhiteSpace.CastSpacing"/>
|
||||
<rule ref="Squiz.WhiteSpace.ObjectOperatorSpacing"/>
|
||||
<rule ref="Squiz.WhiteSpace.OperatorSpacing"/>
|
||||
<rule ref="Squiz.WhiteSpace.SemicolonSpacing"/>
|
||||
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace"/>
|
||||
|
|
Loading…
Reference in a new issue