aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Minz/Configuration.php7
-rw-r--r--lib/Minz/Error.php39
-rw-r--r--lib/Minz/ExtensionManager.php5
-rw-r--r--lib/Minz/Session.php4
-rw-r--r--lib/Minz/Url.php34
-rw-r--r--lib/SimplePie/SimplePie.php4
-rw-r--r--lib/SimplePie/SimplePie/File.php2
-rw-r--r--lib/lib_opml.php128
-rw-r--r--lib/lib_rss.php14
9 files changed, 146 insertions, 91 deletions
diff --git a/lib/Minz/Configuration.php b/lib/Minz/Configuration.php
index fe415e22b..ab5bb4fc2 100644
--- a/lib/Minz/Configuration.php
+++ b/lib/Minz/Configuration.php
@@ -16,16 +16,9 @@ class Minz_Configuration {
* @param $config_filename the filename of the configuration
* @param $default_filename a filename containing default values for the configuration
* @param $configuration_setter an optional helper to set values in configuration
- * @throws Minz_ConfigurationNamespaceException if the namespace already exists.
*/
public static function register($namespace, $config_filename, $default_filename = null,
$configuration_setter = null) {
- if (isset(self::$config_list[$namespace])) {
- throw new Minz_ConfigurationNamespaceException(
- $namespace . ' namespace already exists'
- );
- }
-
self::$config_list[$namespace] = new Minz_Configuration(
$namespace, $config_filename, $default_filename, $configuration_setter
);
diff --git a/lib/Minz/Error.php b/lib/Minz/Error.php
index 3eadc6d98..3e4a3e8f3 100644
--- a/lib/Minz/Error.php
+++ b/lib/Minz/Error.php
@@ -23,42 +23,13 @@ class Minz_Error {
$logs = self::processLogs ($logs);
$error_filename = APP_PATH . '/Controllers/errorController.php';
- switch ($code) {
- case 200 :
- header('HTTP/1.1 200 OK');
- break;
- case 403 :
- header('HTTP/1.1 403 Forbidden');
- break;
- case 404 :
- header('HTTP/1.1 404 Not Found');
- break;
- case 500 :
- header('HTTP/1.1 500 Internal Server Error');
- break;
- case 503 :
- header('HTTP/1.1 503 Service Unavailable');
- break;
- default :
- header('HTTP/1.1 500 Internal Server Error');
- }
-
if (file_exists ($error_filename)) {
- $params = array (
- 'code' => $code,
- 'logs' => $logs
- );
+ Minz_Session::_param('error_code', $code);
+ Minz_Session::_param('error_logs', $logs);
- if ($redirect) {
- Minz_Request::forward (array (
- 'c' => 'error'
- ), true);
- } else {
- Minz_Request::forward (array (
- 'c' => 'error',
- 'params' => $params
- ), false);
- }
+ Minz_Request::forward (array (
+ 'c' => 'error'
+ ), $redirect);
} else {
echo '<h1>An error occured</h1>' . "\n";
diff --git a/lib/Minz/ExtensionManager.php b/lib/Minz/ExtensionManager.php
index 7edc7afaa..c5c68a8d4 100644
--- a/lib/Minz/ExtensionManager.php
+++ b/lib/Minz/ExtensionManager.php
@@ -56,6 +56,9 @@ class Minz_ExtensionManager {
foreach ($list_potential_extensions as $ext_dir) {
$ext_pathname = EXTENSIONS_PATH . '/' . $ext_dir;
+ if (!is_dir($ext_pathname)) {
+ continue;
+ }
$metadata_filename = $ext_pathname . '/' . self::$ext_metaname;
// Try to load metadata file.
@@ -111,7 +114,7 @@ class Minz_ExtensionManager {
$entry_point_filename = $info['path'] . '/' . self::$ext_entry_point;
$ext_class_name = $info['entrypoint'] . 'Extension';
- include($entry_point_filename);
+ include_once($entry_point_filename);
// Test if the given extension class exists.
if (!class_exists($ext_class_name)) {
diff --git a/lib/Minz/Session.php b/lib/Minz/Session.php
index cfe8debe9..058685ada 100644
--- a/lib/Minz/Session.php
+++ b/lib/Minz/Session.php
@@ -65,7 +65,9 @@ class Minz_Session {
* @param $l la durée de vie
*/
public static function keepCookie($l) {
- $cookie_dir = empty($_SERVER['REQUEST_URI']) ? '' : $_SERVER['REQUEST_URI'];
+ // Get the script_name (e.g. /p/i/index.php) and keep only the path.
+ $cookie_dir = empty($_SERVER['SCRIPT_NAME']) ? '' : $_SERVER['SCRIPT_NAME'];
+ $cookie_dir = dirname($cookie_dir);
session_set_cookie_params($l, $cookie_dir, '', false, true);
}
diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php
index e9f9a69ba..af555a277 100644
--- a/lib/Minz/Url.php
+++ b/lib/Minz/Url.php
@@ -45,45 +45,45 @@ class Minz_Url {
return $url_string;
}
-
+
/**
* Construit l'URI d'une URL
* @param l'url sous forme de tableau
* @param $encodage pour indiquer comment encoder les & (& ou &amp; pour html)
* @return l'uri sous la forme ?key=value&key2=value2
*/
- private static function printUri ($url, $encodage) {
+ private static function printUri($url, $encodage) {
$uri = '';
$separator = '?';
-
- if($encodage == 'html') {
+
+ if ($encodage === 'html') {
$and = '&amp;';
} else {
$and = '&';
}
-
- if (isset ($url['c'])
- && $url['c'] != Minz_Request::defaultControllerName ()) {
+
+ if (isset($url['c'])
+ && $url['c'] != Minz_Request::defaultControllerName()) {
$uri .= $separator . 'c=' . $url['c'];
$separator = $and;
}
-
- if (isset ($url['a'])
- && $url['a'] != Minz_Request::defaultActionName ()) {
+
+ if (isset($url['a'])
+ && $url['a'] != Minz_Request::defaultActionName()) {
$uri .= $separator . 'a=' . $url['a'];
$separator = $and;
}
-
- if (isset ($url['params'])) {
+
+ if (isset($url['params'])) {
foreach ($url['params'] as $key => $param) {
- $uri .= $separator . $key . '=' . $param;
+ $uri .= $separator . urlencode($key) . '=' . urlencode($param);
$separator = $and;
}
}
-
+
return $uri;
}
-
+
/**
* Vérifie que les éléments du tableau représentant une url soit ok
* @param l'url sous forme de tableau (sinon renverra directement $url)
@@ -91,7 +91,7 @@ class Minz_Url {
*/
public static function checkUrl ($url) {
$url_checked = $url;
-
+
if (is_array ($url)) {
if (!isset ($url['c'])) {
$url_checked['c'] = Minz_Request::defaultControllerName ();
@@ -103,7 +103,7 @@ class Minz_Url {
$url_checked['params'] = array ();
}
}
-
+
return $url_checked;
}
}
diff --git a/lib/SimplePie/SimplePie.php b/lib/SimplePie/SimplePie.php
index dc4bbb6cb..c4872b5be 100644
--- a/lib/SimplePie/SimplePie.php
+++ b/lib/SimplePie/SimplePie.php
@@ -1529,11 +1529,11 @@ class SimplePie
{ //FreshRSS
$md5 = $this->cleanMd5($file->body);
if ($this->data['md5'] === $md5) {
- syslog(LOG_DEBUG, 'SimplePie MD5 cache match for ' . $this->feed_url);
+ // syslog(LOG_DEBUG, 'SimplePie MD5 cache match for ' . $this->feed_url);
$cache->touch();
return true; //Content unchanged even though server did not send a 304
} else {
- syslog(LOG_DEBUG, 'SimplePie MD5 cache no match for ' . $this->feed_url);
+ // syslog(LOG_DEBUG, 'SimplePie MD5 cache no match for ' . $this->feed_url);
$this->data['md5'] = $md5;
}
}
diff --git a/lib/SimplePie/SimplePie/File.php b/lib/SimplePie/SimplePie/File.php
index b1bbe4420..9625af2a9 100644
--- a/lib/SimplePie/SimplePie/File.php
+++ b/lib/SimplePie/SimplePie/File.php
@@ -79,7 +79,7 @@ class SimplePie_File
$this->useragent = $useragent;
if (preg_match('/^http(s)?:\/\//i', $url))
{
- syslog(LOG_INFO, 'SimplePie GET ' . $url); //FreshRSS
+ // syslog(LOG_INFO, 'SimplePie GET ' . $url); //FreshRSS
if ($useragent === null)
{
$useragent = ini_get('user_agent');
diff --git a/lib/lib_opml.php b/lib/lib_opml.php
index f320335bb..02ae5f55c 100644
--- a/lib/lib_opml.php
+++ b/lib/lib_opml.php
@@ -1,11 +1,19 @@
<?php
-/* *
+/**
* lib_opml is a free library to manage OPML format in PHP.
- * It takes in consideration only version 2.0 (http://dev.opml.org/spec2.html).
- * Basically it means "text" attribute for outline elements is required.
*
- * lib_opml requires SimpleXML (http://php.net/manual/en/book.simplexml.php)
+ * By default, it takes in consideration version 2.0 but can be compatible with
+ * OPML 1.0. More information on http://dev.opml.org.
+ * Difference is "text" attribute is optional in version 1.0. It is highly
+ * recommended to use this attribute.
+ *
+ * lib_opml requires SimpleXML (php.net/simplexml) and DOMDocument (php.net/domdocument)
+ *
+ * @author Marien Fressinaud <dev@marienfressinaud.fr>
+ * @link https://github.com/marienfressinaud/lib_opml
+ * @version 0.2
+ * @license public domain
*
* Usages:
* > include('lib_opml.php');
@@ -23,21 +31,44 @@
* > echo $opml_string;
* > print_r($opml_object);
*
+ * You can set $strict argument to false if you want to bypass "text" attribute
+ * requirement.
+ *
* If parsing fails for any reason (e.g. not an XML string, does not match with
* the specifications), a LibOPML_Exception is raised.
*
- * Author: Marien Fressinaud <dev@marienfressinaud.fr>
- * Url: https://github.com/marienfressinaud/lib_opml
- * Version: 0.1
- * Date: 2014-03-29
- * License: public domain
+ * lib_opml array format is described here:
+ * $array = array(
+ * 'head' => array( // 'head' element is optional (but recommended)
+ * 'key' => 'value', // key must be a part of available OPML head elements
+ * ),
+ * 'body' => array( // body is required
+ * array( // this array represents an outline (at least one)
+ * 'text' => 'value', // 'text' element is required if $strict is true
+ * 'key' => 'value', // key and value are what you want (optional)
+ * '@outlines' = array( // @outlines is a special value and represents sub-outlines
+ * array(
+ * [...] // where [...] is a valid outline definition
+ * ),
+ * ),
+ * ),
+ * array( // other outline definitions
+ * [...]
+ * ),
+ * [...],
+ * )
+ * )
*
- * */
+ */
+/**
+ * A simple Exception class which represents any kind of OPML problem.
+ * Message should precise the current problem.
+ */
class LibOPML_Exception extends Exception {}
-// These elements are optional
+// Define the list of available head attributes. All of them are optional.
define('HEAD_ELEMENTS', serialize(array(
'title', 'dateCreated', 'dateModified', 'ownerName', 'ownerEmail',
'ownerId', 'docs', 'expansionState', 'vertScrollState', 'windowTop',
@@ -45,7 +76,16 @@ define('HEAD_ELEMENTS', serialize(array(
)));
-function libopml_parse_outline($outline_xml) {
+/**
+ * Parse an XML object as an outline object and return corresponding array
+ *
+ * @param SimpleXMLElement $outline_xml the XML object we want to parse
+ * @param bool $strict true if "text" attribute is required, false else
+ * @return array corresponding to an outline and following format described above
+ * @throws LibOPML_Exception
+ * @access private
+ */
+function libopml_parse_outline($outline_xml, $strict = true) {
$outline = array();
// An outline may contain any kind of attributes but "text" attribute is
@@ -59,7 +99,7 @@ function libopml_parse_outline($outline_xml) {
}
}
- if (!$text_is_present) {
+ if (!$text_is_present && $strict) {
throw new LibOPML_Exception(
'Outline does not contain any text attribute'
);
@@ -68,7 +108,7 @@ function libopml_parse_outline($outline_xml) {
foreach ($outline_xml->children() as $key => $value) {
// An outline may contain any number of outline children
if ($key === 'outline') {
- $outline['@outlines'][] = libopml_parse_outline($value);
+ $outline['@outlines'][] = libopml_parse_outline($value, $strict);
} else {
throw new LibOPML_Exception(
'Body can contain only outline elements'
@@ -80,7 +120,16 @@ function libopml_parse_outline($outline_xml) {
}
-function libopml_parse_string($xml) {
+/**
+ * Parse a string as a XML one and returns the corresponding array
+ *
+ * @param string $xml is the string we want to parse
+ * @param bool $strict true if "text" attribute is required, false else
+ * @return array corresponding to the XML string and following format described above
+ * @throws LibOPML_Exception
+ * @access public
+ */
+function libopml_parse_string($xml, $strict = true) {
$dom = new DOMDocument();
$dom->recover = true;
$dom->strictErrorChecking = false;
@@ -101,7 +150,6 @@ function libopml_parse_string($xml) {
// First, we get all "head" elements. Head is required but its sub-elements
// are optional.
- // TODO: test head exists!
foreach ($opml->head->children() as $key => $value) {
if (in_array($key, unserialize(HEAD_ELEMENTS), true)) {
$array['head'][$key] = (string)$value;
@@ -115,11 +163,10 @@ function libopml_parse_string($xml) {
// Then, we get body oulines. Body must contain at least one outline
// element.
$at_least_one_outline = false;
- // TODO: test body exists!
foreach ($opml->body->children() as $key => $value) {
if ($key === 'outline') {
$at_least_one_outline = true;
- $array['body'][] = libopml_parse_outline($value);
+ $array['body'][] = libopml_parse_outline($value, $strict);
} else {
throw new LibOPML_Exception(
'Body can contain only outline elements'
@@ -137,7 +184,16 @@ function libopml_parse_string($xml) {
}
-function libopml_parse_file($filename) {
+/**
+ * Parse a string contained into a file as a XML string and returns the corresponding array
+ *
+ * @param string $filename should indicates a valid XML file
+ * @param bool $strict true if "text" attribute is required, false else
+ * @return array corresponding to the file content and following format described above
+ * @throws LibOPML_Exception
+ * @access public
+ */
+function libopml_parse_file($filename, $strict = true) {
$file_content = file_get_contents($filename);
if ($file_content === false) {
@@ -146,11 +202,20 @@ function libopml_parse_file($filename) {
);
}
- return libopml_parse_string($file_content);
+ return libopml_parse_string($file_content, $strict);
}
-function libopml_render_outline($parent_elt, $outline) {
+/**
+ * Create a XML outline object in a parent object.
+ *
+ * @param SimpleXMLElement $parent_elt is the parent object of current outline
+ * @param array $outline array representing an outline object
+ * @param bool $strict true if "text" attribute is required, false else
+ * @throws LibOPML_Exception
+ * @access private
+ */
+function libopml_render_outline($parent_elt, $outline, $strict) {
// Outline MUST be an array!
if (!is_array($outline)) {
throw new LibOPML_Exception(
@@ -165,7 +230,7 @@ function libopml_render_outline($parent_elt, $outline) {
// outline elements.
if ($key === '@outlines' && is_array($value)) {
foreach ($value as $outline_child) {
- libopml_render_outline($outline_elt, $outline_child);
+ libopml_render_outline($outline_elt, $outline_child, $strict);
}
} elseif (is_array($value)) {
throw new LibOPML_Exception(
@@ -181,7 +246,7 @@ function libopml_render_outline($parent_elt, $outline) {
}
}
- if (!$text_is_present) {
+ if (!$text_is_present && $strict) {
throw new LibOPML_Exception(
'You must define at least a text element for all outlines'
);
@@ -189,8 +254,19 @@ function libopml_render_outline($parent_elt, $outline) {
}
-function libopml_render($array, $as_xml_object = false) {
- $opml = new SimpleXMLElement('<opml version="2.0"></opml>');
+/**
+ * Render an array as an OPML string or a XML object.
+ *
+ * @param array $array is the array we want to render and must follow structure defined above
+ * @param bool $as_xml_object false if function must return a string, true for a XML object
+ * @param bool $strict true if "text" attribute is required, false else
+ * @return string|SimpleXMLElement XML string corresponding to $array or XML object
+ * @throws LibOPML_Exception
+ * @access public
+ */
+function libopml_render($array, $as_xml_object = false, $strict = true) {
+ $opml = new SimpleXMLElement('<opml></opml>');
+ $opml->addAttribute('version', $strict ? '2.0' : '1.0');
// Create head element. $array['head'] is optional but head element will
// exist in the final XML object.
@@ -218,7 +294,7 @@ function libopml_render($array, $as_xml_object = false) {
// Create outline elements
$body = $opml->addChild('body');
foreach ($array['body'] as $outline) {
- libopml_render_outline($body, $outline);
+ libopml_render_outline($body, $outline, $strict);
}
// And return the final result
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 083e87745..e5fe73041 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -180,7 +180,7 @@ function sanitizeHTML($data, $base = '') {
function get_content_by_parsing ($url, $path) {
require_once (LIB_PATH . '/lib_phpQuery.php');
- syslog(LOG_INFO, 'FreshRSS GET ' . $url);
+ Minz_Log::notice('FreshRSS GET ' . url_remove_credentials($url));
$html = file_get_contents ($url);
if ($html) {
@@ -248,7 +248,7 @@ function listUsers() {
* @return a Minz_Configuration object, null if the configuration cannot be loaded.
*/
function get_user_configuration($username) {
- $namespace = time() . '_user_' . $username;
+ $namespace = 'user_' . $username;
try {
Minz_Configuration::register($namespace,
join_path(USERS_PATH, $username, 'config.php'),
@@ -429,3 +429,13 @@ function array_push_unique(&$array, $value) {
function array_remove(&$array, $value) {
$array = array_diff($array, array($value));
}
+
+
+/**
+ * Sanitize a URL by removing HTTP credentials.
+ * @param $url the URL to sanitize.
+ * @return the same URL without HTTP credentials.
+ */
+function url_remove_credentials($url) {
+ return preg_replace('/[^\/]*:[^:]*@/', '', $url);
+}