diff options
| author | 2013-12-27 14:52:56 +0100 | |
|---|---|---|
| committer | 2013-12-27 14:52:56 +0100 | |
| commit | f52ccf7038199f1eb2f82d7e1f26d2a10caa867b (patch) | |
| tree | 7c8235198b6b587574b41175a167103d31740a9a | |
| parent | 7b4451912e2a9008a49854a2496cf9bb99b7ed10 (diff) | |
| parent | b99979cef78f7cd0c1cb4ae81115d09881e85926 (diff) | |
Merge remote-tracking branch 'origin/dev' into beta
| -rw-r--r-- | CHANGELOG | 8 | ||||
| -rw-r--r-- | README.md | 6 | ||||
| -rw-r--r-- | app/.htaccess | 3 | ||||
| -rwxr-xr-x | app/Controllers/entryController.php | 2 | ||||
| -rwxr-xr-x | app/Controllers/feedController.php | 29 | ||||
| -rw-r--r-- | app/FreshRSS.php | 2 | ||||
| -rw-r--r-- | app/Models/CategoryDAO.php | 2 | ||||
| -rw-r--r-- | app/Models/Configuration.php | 16 | ||||
| -rw-r--r-- | app/Models/Entry.php | 7 | ||||
| -rw-r--r-- | app/Models/Feed.php | 39 | ||||
| -rw-r--r-- | app/Models/FeedDAO.php | 6 | ||||
| -rwxr-xr-x | app/actualize_script.php (renamed from actualize_script.php) | 2 | ||||
| -rw-r--r-- | app/i18n/en.php | 3 | ||||
| -rw-r--r-- | app/i18n/fr.php | 3 | ||||
| -rw-r--r-- | app/index.html | 13 | ||||
| -rw-r--r-- | app/layout/nav_menu.phtml | 6 | ||||
| -rw-r--r-- | app/views/helpers/javascript_vars.phtml | 7 | ||||
| -rw-r--r-- | app/views/index/about.phtml | 3 | ||||
| -rw-r--r-- | constants.php | 19 | ||||
| -rw-r--r-- | data/index.html | 2 | ||||
| -rw-r--r-- | index.html | 6 | ||||
| -rw-r--r-- | index.php | 3 | ||||
| -rw-r--r-- | lib/.htaccess | 3 | ||||
| -rw-r--r-- | lib/Minz/Configuration.php | 2 | ||||
| -rw-r--r-- | lib/Minz/Session.php | 31 | ||||
| -rw-r--r-- | lib/Minz/Url.php | 15 | ||||
| -rw-r--r-- | p/.htaccess (renamed from public/.htaccess) | 0 | ||||
| -rw-r--r-- | p/f.php (renamed from public/f.php) | 11 | ||||
| -rw-r--r-- | p/favicon.ico (renamed from public/favicon.ico) | bin | 1150 -> 1150 bytes | |||
| -rw-r--r-- | p/favicon.png (renamed from public/favicon.png) | bin | 694 -> 694 bytes | |||
| -rwxr-xr-x | p/i/index.php (renamed from public/index.php) | 2 | ||||
| -rw-r--r-- | p/i/install.php (renamed from public/install.php) | 42 | ||||
| -rw-r--r-- | p/index.html | 12 | ||||
| -rw-r--r-- | p/index.php | 3 | ||||
| -rw-r--r-- | p/robots.txt (renamed from public/robots.txt) | 0 | ||||
| -rw-r--r-- | p/scripts/global_view.js (renamed from public/scripts/global_view.js) | 0 | ||||
| -rw-r--r-- | p/scripts/jquery-2.0.3.min.map (renamed from public/scripts/jquery-2.0.3.min.map) | 0 | ||||
| -rw-r--r-- | p/scripts/jquery.lazyload.min.js (renamed from public/scripts/jquery.lazyload.min.js) | 0 | ||||
| -rw-r--r-- | p/scripts/jquery.min.js (renamed from public/scripts/jquery.min.js) | 0 | ||||
| -rw-r--r-- | p/scripts/main.js (renamed from public/scripts/main.js) | 0 | ||||
| -rw-r--r-- | p/scripts/shortcut.js (renamed from public/scripts/shortcut.js) | 0 | ||||
| -rw-r--r-- | p/themes/default/freshrss.css (renamed from public/themes/default/freshrss.css) | 2 | ||||
| -rw-r--r-- | p/themes/default/global.css (renamed from public/themes/default/global.css) | 0 | ||||
| -rw-r--r-- | p/themes/default/loader.gif (renamed from public/themes/default/loader.gif) | bin | 4167 -> 4167 bytes | |||
| -rw-r--r-- | p/themes/default/metadata.json (renamed from public/themes/default/metadata.json) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/freshrss.css (renamed from public/themes/flat-design/freshrss.css) | 2 | ||||
| -rw-r--r-- | p/themes/flat-design/global.css (renamed from public/themes/flat-design/global.css) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/add.svg (renamed from public/themes/flat-design/icons/add.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/all.svg (renamed from public/themes/flat-design/icons/all.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/close.svg (renamed from public/themes/flat-design/icons/close.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/configure.svg (renamed from public/themes/flat-design/icons/configure.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/down.svg (renamed from public/themes/flat-design/icons/down.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/next.svg (renamed from public/themes/flat-design/icons/next.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/prev.svg (renamed from public/themes/flat-design/icons/prev.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/refresh.svg (renamed from public/themes/flat-design/icons/refresh.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/search.svg (renamed from public/themes/flat-design/icons/search.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/icons/up.svg (renamed from public/themes/flat-design/icons/up.svg) | 0 | ||||
| -rw-r--r-- | p/themes/flat-design/loader.gif (renamed from public/themes/flat-design/loader.gif) | bin | 4251 -> 4251 bytes | |||
| -rw-r--r-- | p/themes/flat-design/metadata.json (renamed from public/themes/flat-design/metadata.json) | 0 | ||||
| -rw-r--r-- | p/themes/fonts/openSans.woff (renamed from public/themes/fonts/openSans.woff) | bin | 21956 -> 21956 bytes | |||
| -rw-r--r-- | p/themes/icons/add.svg (renamed from public/themes/icons/add.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/all.svg (renamed from public/themes/icons/all.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/bookmark.svg (renamed from public/themes/icons/bookmark.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/category-white.svg (renamed from public/themes/icons/category-white.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/category.svg (renamed from public/themes/icons/category.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/close.svg (renamed from public/themes/icons/close.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/configure.svg (renamed from public/themes/icons/configure.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/down.svg (renamed from public/themes/icons/down.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/grey.gif (renamed from public/themes/icons/grey.gif) | bin | 56 -> 56 bytes | |||
| -rw-r--r-- | p/themes/icons/help.svg (renamed from public/themes/icons/help.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/icon.svg (renamed from public/themes/icons/icon.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/link.svg (renamed from public/themes/icons/link.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/login.svg (renamed from public/themes/icons/login.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/logout.svg (renamed from public/themes/icons/logout.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/next.svg (renamed from public/themes/icons/next.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/non-starred.svg (renamed from public/themes/icons/non-starred.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/prev.svg (renamed from public/themes/icons/prev.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/read.svg (renamed from public/themes/icons/read.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/refresh.svg (renamed from public/themes/icons/refresh.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/rss.svg (renamed from public/themes/icons/rss.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/search.svg (renamed from public/themes/icons/search.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/share.svg (renamed from public/themes/icons/share.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/starred.svg (renamed from public/themes/icons/starred.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/tag.svg (renamed from public/themes/icons/tag.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/unread.svg (renamed from public/themes/icons/unread.svg) | 0 | ||||
| -rw-r--r-- | p/themes/icons/up.svg (renamed from public/themes/icons/up.svg) | 0 |
86 files changed, 190 insertions, 122 deletions
@@ -51,7 +51,15 @@ * Tous les fichiers utilisateur sont dans “./data/” (y compris “cache”, “favicons”, et “log”) * Déplacement de “./app/configuration/application.ini” vers “./data/config.php” * Déplacement de “./public/data/Configuration.array.php” vers “./data/*_user.php” + * Déplacement de “./public/index.php” vers “./p/i/index.php” (voir cookie ci-dessous) + * Déplacement de “./public/” vers “./p/” + * Déplacement de “./actualize_script.php” vers “./app/actualize_script.php” * Divers : + * Nouvelle politique de cookie de session (témoin de connexion) + * Utilise un nom poli “FreshRSS” + * Se limite au répertoire “./FreshRSS/p/i/” pour de meilleures performances HTTP + * Les images, CSS, scripts sont servis sans cookie + * utilise “HttpOnly” pour plus de sécurité * Nouvel “agent utilisateur” exposé lors du téléchargement des flux, par exemple : * “FreshRSS/0.7 (Linux; http://freshrss.org) SimplePie/1.3.1” @@ -31,7 +31,7 @@ Privilégiez pour cela des demandes sur GitHub # Installation 1. Récupérez l’application FreshRSS via la commande git ou [en téléchargeant l’archive](https://github.com/marienfressinaud/FreshRSS/archive/master.zip) -2. Placez l’application sur votre serveur (la partie à exposer au Web est le répertoire `./public/`) +2. Placez l’application sur votre serveur (la partie à exposer au Web est le répertoire `./p/`) 3. Le serveur Web doit avoir les droits d’écriture dans le répertoire `./data/` 4. Accédez à FreshRSS à travers votre navigateur Web et suivez les instructions d’installation 5. Tout devrait fonctionner :) En cas de problème, n’hésitez pas à me contacter. @@ -45,11 +45,11 @@ Il est recommandé de limiter l’accès à votre FreshRSS, soit : # Rafraîchissement automatique des flux * Vous pouvez ajouter une tâche CRON sur le script d’actualisation des flux. Par exemple, pour exécuter le script toutes les heures : ``` -7 * * * * php /chemin/vers/freshrss/actualize_script.php >/dev/null 2>&1 +7 * * * * php /chemin/vers/FreshRSS/app/actualize_script.php >/dev/null 2>&1 ``` # Conseils -* Pour une meilleure sécurité, faites en sorte que seul le répertoire `./public` soit accessible depuis le Web, par exemple en faisant pointer un sous-domaine sur le répertoire `./public`. +* Pour une meilleure sécurité, faites en sorte que seul le répertoire `./p/` soit accessible depuis le Web, par exemple en faisant pointer un sous-domaine sur le répertoire `./p/`. * Les données personnelles se trouvent dans le répertoire `./data/` (déjà protégé par un .htaccess pour Apache - vérifiez que cela fonctionne -, à protéger vous-même dans le cas d’autres serveurs Web). * Le fichier `./constants.php` définit les chemins d’accès aux répertoires clés de l’application. Si vous les bougez, tout se passe ici. * En cas de problème, les logs peuvent être utile à lire, soit depuis l’interface de FreshRSS, soit manuellement depuis `./data/log/*.log`. diff --git a/app/.htaccess b/app/.htaccess new file mode 100644 index 000000000..9e768397d --- /dev/null +++ b/app/.htaccess @@ -0,0 +1,3 @@ +Order Allow,Deny +Deny from all +Satisfy all diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php index 1c3c56c4d..26f3422ca 100755 --- a/app/Controllers/entryController.php +++ b/app/Controllers/entryController.php @@ -131,7 +131,7 @@ class FreshRSS_entry_Controller extends Minz_ActionController { $nb = $feedDAO->cleanOldEntries($feed->id(), $date_min, $feedHistory); if ($nb > 0) { $nbTotal += $nb; - Minz_Log::record($nb . ' old entries cleaned in feed ' . $feed->id(), Minz_Log::DEBUG); + Minz_Log::record($nb . ' old entries cleaned in feed [' . $feed->url() . ']', Minz_Log::DEBUG); $feedDAO->updateLastUpdate($feed->id()); } } diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 04d0aa98b..ca230232f 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -20,15 +20,6 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $this->catDAO->checkDefault (); } - private static function entryDateComparer($e1, $e2) { - $d1 = $e1->date(true); - $d2 = $e2->date(true); - if ($d1 === $d2) { - return 0; - } - return ($d1 < $d2) ? -1 : 1; - } - public function addAction () { @set_time_limit(300); @@ -55,7 +46,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { } $feed->_httpAuth ($httpAuth); - $feed->load (); + $feed->load(true); $feedDAO = new FreshRSS_FeedDAO (); $values = array ( @@ -91,8 +82,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $is_read = $this->view->conf->markUponReception() === 'yes' ? 1 : 0; $entryDAO = new FreshRSS_EntryDAO (); - $entries = $feed->entries (); - usort($entries, 'self::entryDateComparer'); + $entries = array_reverse($feed->entries()); //We want chronological order and SimplePie uses reverse order // on calcule la date des articles les plus anciens qu'on accepte $nb_month_old = $this->view->conf->oldEntries (); @@ -199,10 +189,9 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $flux_update = 0; foreach ($feeds as $feed) { try { - $feed->load (); - $feed->faviconPrepare(); - $entries = $feed->entries (); - usort($entries, 'self::entryDateComparer'); + $url = $feed->url(); + $feed->load(false); + $entries = array_reverse($feed->entries()); //We want chronological order and SimplePie uses reverse order $is_read = $this->view->conf->markUponReception() === 'yes' ? 1 : 0; @@ -231,7 +220,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { if (($feedHistory >= 0) && (rand(0, 30) === 1)) { $nb = $feedDAO->cleanOldEntries ($feed->id (), $date_min, max($feedHistory, count($entries) + 10)); if ($nb > 0) { - Minz_Log::record ($nb . ' old entries cleaned in feed ' . $feed->id (), Minz_Log::DEBUG); + Minz_Log::record ($nb . ' old entries cleaned in feed [' . $feed->url() . ']', Minz_Log::DEBUG); } } @@ -239,6 +228,10 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $feedDAO->updateLastUpdate ($feed->id ()); $feedDAO->commit (); $flux_update++; + if ($feed->url() !== $url) { //URL has changed (auto-discovery) + $feedDAO->updateFeed($feed->id(), array('url' => $feed->url())); + } + $feed->faviconPrepare(); } catch (FreshRSS_Feed_Exception $e) { Minz_Log::record ($e->getMessage (), Minz_Log::NOTICE); $feedDAO->updateLastUpdate ($feed->id (), 1); @@ -395,7 +388,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { 'type' => 'good', 'content' => Minz_Translate::t ('feed_deleted') ); - FreshRSS_Feed::faviconDelete($id); + //TODO: Delete old favicon } else { $notif = array ( 'type' => 'bad', diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 90548793d..60610e352 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -1,7 +1,7 @@ <?php class FreshRSS extends Minz_FrontController { public function init () { - Minz_Session::init (); + Minz_Session::init ('FreshRSS'); Minz_Translate::init (); $this->loadParamsView (); diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php index 6b07ab063..1cc616ac0 100644 --- a/app/Models/CategoryDAO.php +++ b/app/Models/CategoryDAO.php @@ -90,7 +90,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo { if ($prePopulateFeeds) { $sql = 'SELECT c.id AS c_id, c.name AS c_name, ' . ($details ? 'c.color AS c_color, ' : '') - . ($details ? 'f.* ' : 'f.id, f.name, f.website, f.priority, f.error, f.cache_nbEntries, f.cache_nbUnreads ') + . ($details ? 'f.* ' : 'f.id, f.name, f.url, f.website, f.priority, f.error, f.cache_nbEntries, f.cache_nbUnreads ') . 'FROM `' . $this->prefix . 'category` c ' . 'LEFT OUTER JOIN `' . $this->prefix . 'feed` f ON f.category = c.id ' . 'GROUP BY f.id ' diff --git a/app/Models/Configuration.php b/app/Models/Configuration.php index 47509636f..cb2f90655 100644 --- a/app/Models/Configuration.php +++ b/app/Models/Configuration.php @@ -220,19 +220,13 @@ class FreshRSS_Configuration extends Minz_Model { public function _sortOrder ($value) { $this->sort_order = $value === 'ASC' ? 'ASC' : 'DESC'; } - public function _oldEntries ($value) { - if (ctype_digit ($value) && $value > 0) { - $this->old_entries = intval($value); - } else { - $this->old_entries = 3; - } + public function _oldEntries($value) { + $value = intval($value); + $this->old_entries = $value > 0 ? $value : 3; } public function _keepHistoryDefault($value) { - if (ctype_digit($value) && $value >= -1) { - $this->keep_history_default = intval($value); - } else { - $this->keep_history_default = 0; - } + $value = intval($value); + $this->keep_history_default = $value >= -1 ? $value : 0; } public function _shortcuts ($values) { foreach ($values as $key => $value) { diff --git a/app/Models/Entry.php b/app/Models/Entry.php index ed31ef2b1..ab9605eb1 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -106,11 +106,8 @@ class FreshRSS_Entry extends Minz_Model { $this->link = $value; } public function _date ($value) { - if (ctype_digit ($value)) { - $this->date = intval ($value); - } else { - $this->date = time (); - } + $value = intval($value); + $this->date = $value > 1 ? $value : time(); } public function _isRead ($value) { $this->is_read = $value; diff --git a/app/Models/Feed.php b/app/Models/Feed.php index dcf97d4ec..32f8546dd 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -16,6 +16,7 @@ class FreshRSS_Feed extends Minz_Model { private $httpAuth = ''; private $error = false; private $keep_history = -2; + private $hash = null; public function __construct ($url, $validate=true) { if ($validate) { @@ -28,6 +29,14 @@ class FreshRSS_Feed extends Minz_Model { public function id () { return $this->id; } + + public function hash() { + if ($this->hash === null) { + $this->hash = hash('crc32b', Minz_Configuration::salt() . $this->url); + } + return $this->hash; + } + public function url () { return $this->url; } @@ -96,7 +105,7 @@ class FreshRSS_Feed extends Minz_Model { return $this->nbNotRead; } public function faviconPrepare() { - $file = DATA_PATH . '/favicons/' . $this->id () . '.txt'; + $file = DATA_PATH . '/favicons/' . $this->hash() . '.txt'; if (!file_exists ($file)) { $t = $this->website; if (empty($t)) { @@ -105,13 +114,13 @@ class FreshRSS_Feed extends Minz_Model { file_put_contents($file, $t); } } - public static function faviconDelete($id) { - $path = DATA_PATH . '/favicons/' . $id; + public static function faviconDelete($hash) { + $path = DATA_PATH . '/favicons/' . $hash; @unlink($path . '.ico'); @unlink($path . '.txt'); } public function favicon () { - return Minz_Url::display ('/f.php?' . $this->id ()); + return Minz_Url::display ('/f.php/' . $this->hash()); } public function _id ($value) { @@ -127,7 +136,8 @@ class FreshRSS_Feed extends Minz_Model { $this->url = $value; } public function _category ($value) { - $this->category = $value; + $value = intval($value); + $this->category = $value >= 0 ? $value : 0; } public function _name ($value) { if (is_null ($value)) { @@ -154,7 +164,8 @@ class FreshRSS_Feed extends Minz_Model { $this->lastUpdate = $value; } public function _priority ($value) { - $this->priority = ctype_digit ($value) ? intval ($value) : 10; + $value = intval($value); + $this->priority = $value >= 0 ? $value : 10; } public function _pathEntries ($value) { $this->pathEntries = $value; @@ -172,13 +183,13 @@ class FreshRSS_Feed extends Minz_Model { $this->keep_history = $value; } public function _nbNotRead ($value) { - $this->nbNotRead = ctype_digit ($value) ? intval ($value) : -1; + $this->nbNotRead = intval($value); } public function _nbEntries ($value) { - $this->nbEntries = ctype_digit ($value) ? intval ($value) : -1; + $this->nbEntries = intval($value); } - public function load () { + public function load ($loadDetails = false) { if (!is_null ($this->url)) { if (CACHE_PATH === false) { throw new Minz_FileNotExistException ( @@ -250,11 +261,13 @@ class FreshRSS_Feed extends Minz_Model { $this->_url ($subscribe_url); } - $title = htmlspecialchars(html_only_entity_decode($feed->get_title()), ENT_COMPAT, 'UTF-8'); - $this->_name (!is_null ($title) ? $title : $this->url); + if ($loadDetails) { + $title = htmlspecialchars(html_only_entity_decode($feed->get_title()), ENT_COMPAT, 'UTF-8'); + $this->_name (!is_null ($title) ? $title : $this->url); - $this->_website(html_only_entity_decode($feed->get_link())); - $this->_description(html_only_entity_decode($feed->get_description())); + $this->_website(html_only_entity_decode($feed->get_link())); + $this->_description(html_only_entity_decode($feed->get_description())); + } // et on charge les articles du flux $this->loadEntries ($feed); diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php index d517f9580..e102da4ec 100644 --- a/app/Models/FeedDAO.php +++ b/app/Models/FeedDAO.php @@ -316,11 +316,13 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo { $key = $dao['id']; } if ($catID === null) { - $catID = isset($dao['category']) ? $dao['category'] : 0; + $category = isset($dao['category']) ? $dao['category'] : 0; + } else { + $category = $catID ; } $myFeed = new FreshRSS_Feed(isset($dao['url']) ? $dao['url'] : '', false); - $myFeed->_category(intval($catID)); + $myFeed->_category($category); $myFeed->_name($dao['name']); $myFeed->_website(isset($dao['website']) ? $dao['website'] : '', false); $myFeed->_description(isset($dao['description']) ? $dao['description'] : ''); diff --git a/actualize_script.php b/app/actualize_script.php index 7986ba0b5..20438128a 100755 --- a/actualize_script.php +++ b/app/actualize_script.php @@ -1,5 +1,5 @@ <?php -require('constants.php'); +require(dirname(__FILE__) . '/../constants.php'); $_GET['c'] = 'feed'; $_GET['a'] = 'actualize'; diff --git a/app/i18n/en.php b/app/i18n/en.php index 498fccd14..f74a7f198 100644 --- a/app/i18n/en.php +++ b/app/i18n/en.php @@ -60,7 +60,7 @@ return array ( 'access_denied' => 'You don’t have permission to access this page', 'page_not_found' => 'You are looking for a page which doesn’t exist', 'error_occurred' => 'An error occurred', - 'error_occurred_update' => 'An error occurred during update', + 'error_occurred_update' => 'Nothing was changed', 'default_category' => 'Uncategorized', 'categories_updated' => 'Categories have been updated', @@ -239,6 +239,7 @@ return array ( 'freshrss_description' => 'FreshRSS is a RSS feeds aggregator to self-host like <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> or <a href="http://projet.idleman.fr/leed/">Leed</a>. It is light and easy to take in hand while being powerful and configurable tool.', 'credits' => 'Credits', 'credits_content' => 'Some design elements come from <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> although FreshRSS doesn’t use this framework. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Icons</a> come from <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> font police used has been created by <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Favicons are collected with <a href="https://getfavicon.appspot.com/">getFavicon API</a>. FreshRSS is based on <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, a PHP framework.', + 'version' => 'Version', 'logs' => 'Logs', 'logs_empty' => 'Log file is empty', diff --git a/app/i18n/fr.php b/app/i18n/fr.php index c918daa44..f9c4d00cc 100644 --- a/app/i18n/fr.php +++ b/app/i18n/fr.php @@ -60,7 +60,7 @@ return array ( 'access_denied' => 'Vous n’avez pas le droit d’accéder à cette page', 'page_not_found' => 'La page que vous cherchez n’existe pas', 'error_occurred' => 'Une erreur est survenue', - 'error_occurred_update' => 'Une erreur est survenue lors de la mise à jour', + 'error_occurred_update' => 'Rien n’a été modifié', 'default_category' => 'Sans catégorie', 'categories_updated' => 'Les catégories ont été mises à jour', @@ -240,6 +240,7 @@ return array ( 'freshrss_description' => 'FreshRSS est un agrégateur de flux RSS à auto-héberger à l’image de <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> ou <a href="http://projet.idleman.fr/leed/">Leed</a>. Il se veut léger et facile à prendre en main tout en étant un outil puissant et paramétrable.', 'credits' => 'Crédits', 'credits_content' => 'Des éléments de design sont issus du <a href="http://twitter.github.io/bootstrap/">projet Bootstrap</a> bien que FreshRSS n’utilise pas ce framework. Les <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icônes</a> sont issues du <a href="https://www.gnome.org/">projet GNOME</a>. La police <em>Open Sans</em> utilisée a été créée par <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Les favicons sont récupérés grâce au site <a href="https://getfavicon.appspot.com/">getFavicon</a>. FreshRSS repose sur <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.', + 'version' => 'Version', 'logs' => 'Logs', 'logs_empty' => 'Les logs sont vides', diff --git a/app/index.html b/app/index.html new file mode 100644 index 000000000..85faaa37e --- /dev/null +++ b/app/index.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB"> +<head> +<meta charset="UTF-8" /> +<meta http-equiv="Refresh" content="0; url=/" /> +<title>Redirection</title> +<meta name="robots" content="noindex" /> +</head> + +<body> +<p><a href="/">Redirection</a></p> +</body> +</html> diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 045f391f9..1f2a7b408 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -25,7 +25,7 @@ switch ($get[0]) { case 'c': foreach ($this->cat_aside as $cat) { - if ($cat->id () === $this->get_c) { + if ($cat->id () == $this->get_c) { $foundCurrent = true; continue; } @@ -37,9 +37,9 @@ break; case 'f': foreach ($this->cat_aside as $cat) { - if ($cat->id () === $this->get_c) { + if ($cat->id () == $this->get_c) { foreach ($cat->feeds () as $feed) { - if ($feed->id () === $this->get_f) { + if ($feed->id () == $this->get_f) { $foundCurrent = true; continue; } diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml index 0c1af45fc..d008e2e48 100644 --- a/app/views/helpers/javascript_vars.phtml +++ b/app/views/helpers/javascript_vars.phtml @@ -39,7 +39,8 @@ echo 'str_confirmation="', Minz_Translate::t('confirm_action'), '"', ",\n"; - echo 'auto_actualize_feeds=', Minz_Session::param('actualize_feeds', false) ? 'true' : 'false', ";\n"; - if (Minz_Session::param('actualize_feeds', false)) { - Minz_Session::_param('actualize_feeds'); + $autoActualise = Minz_Session::param('actualize_feeds', false); + echo 'auto_actualize_feeds=', $autoActualise ? 'true' : 'false', ";\n"; + if ($autoActualise) { + Minz_Session::_param('actualize_feeds', false); } diff --git a/app/views/index/about.phtml b/app/views/index/about.phtml index b5c00a1ed..ae64727d7 100644 --- a/app/views/index/about.phtml +++ b/app/views/index/about.phtml @@ -15,6 +15,9 @@ <dt><?php echo Minz_Translate::t ('license'); ?></dt> <dd><?php echo Minz_Translate::t ('agpl3'); ?></dd> + + <dt><?php echo Minz_Translate::t ('version'); ?></dt> + <dd><?php echo FRESHRSS_VERSION; ?></dd> </dl> <p><?php echo Minz_Translate::t ('freshrss_description'); ?></p> diff --git a/constants.php b/constants.php index 272647947..0c7adc57e 100644 --- a/constants.php +++ b/constants.php @@ -1,14 +1,17 @@ <?php -define('FRESHRSS_VERSION', '0.7-beta2'); +define('FRESHRSS_VERSION', '0.7-beta3'); define('FRESHRSS_WEBSITE', 'http://freshrss.org'); // Constantes de chemins -define ('FRESHRSS_PATH', dirname(__FILE__)); +define('FRESHRSS_PATH', dirname(__FILE__)); -define ('PUBLIC_PATH', FRESHRSS_PATH . '/public'); -define ('DATA_PATH', FRESHRSS_PATH . '/data'); -define ('LIB_PATH', FRESHRSS_PATH . '/lib'); -define ('APP_PATH', FRESHRSS_PATH . '/app'); + define('PUBLIC_PATH', FRESHRSS_PATH . '/p'); + define('INDEX_PATH', PUBLIC_PATH . '/i'); + define('PUBLIC_RELATIVE', '..'); -define ('LOG_PATH', DATA_PATH . '/log'); -define ('CACHE_PATH', DATA_PATH . '/cache'); + define('DATA_PATH', FRESHRSS_PATH . '/data'); + define('LOG_PATH', DATA_PATH . '/log'); + define('CACHE_PATH', DATA_PATH . '/cache'); + + define('LIB_PATH', FRESHRSS_PATH . '/lib'); + define('APP_PATH', FRESHRSS_PATH . '/app'); diff --git a/data/index.html b/data/index.html index 2f3b51848..85faaa37e 100644 --- a/data/index.html +++ b/data/index.html @@ -4,7 +4,7 @@ <meta charset="UTF-8" /> <meta http-equiv="Refresh" content="0; url=/" /> <title>Redirection</title> -<meta name="robots" content="noindex,follow" /> +<meta name="robots" content="noindex" /> </head> <body> diff --git a/index.html b/index.html index 937659d57..1bfdea859 100644 --- a/index.html +++ b/index.html @@ -2,12 +2,12 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB"> <head> <meta charset="UTF-8" /> -<meta http-equiv="Refresh" content="0; url=public/" /> +<meta http-equiv="Refresh" content="0; url=p/i/" /> <title>Redirection</title> -<meta name="robots" content="noindex,follow" /> +<meta name="robots" content="noindex" /> </head> <body> -<p><a href="./public/">FreshRSS</a></p> +<p><a href="p/i/">FreshRSS</a></p> </body> </html> diff --git a/index.php b/index.php new file mode 100644 index 000000000..3fdae4285 --- /dev/null +++ b/index.php @@ -0,0 +1,3 @@ +<?php +header('Location: p/i/', true, 301); +include('index.html'); diff --git a/lib/.htaccess b/lib/.htaccess new file mode 100644 index 000000000..9e768397d --- /dev/null +++ b/lib/.htaccess @@ -0,0 +1,3 @@ +Order Allow,Deny +Deny from all +Satisfy all diff --git a/lib/Minz/Configuration.php b/lib/Minz/Configuration.php index 1b108dcdf..6c7206988 100644 --- a/lib/Minz/Configuration.php +++ b/lib/Minz/Configuration.php @@ -63,7 +63,7 @@ class Minz_Configuration { /* * Getteurs */ - public static function selApplication () { + public static function salt () { return self::$sel_application; } public static function environment () { diff --git a/lib/Minz/Session.php b/lib/Minz/Session.php index 878caa556..f527322f5 100644 --- a/lib/Minz/Session.php +++ b/lib/Minz/Session.php @@ -9,21 +9,24 @@ class Minz_Session { * $session stocke les variables de session */ private static $session = array (); - + /** - * Initialise la session + * Initialise la session, avec un nom + * Le nom de session est utilisé comme nom pour les cookies et les URLs (i.e. PHPSESSID). + * Il ne doit contenir que des caractères alphanumériques ; il doit être court et descriptif */ - public static function init () { + public static function init ($name) { // démarre la session - session_name (md5 (Minz_Configuration::selApplication ())); + session_name ($name); + session_set_cookie_params (0, './', null, false, true); session_start (); - + if (isset ($_SESSION)) { self::$session = $_SESSION; } } - - + + /** * Permet de récupérer une variable de session * @param $p le paramètre à récupérer @@ -35,11 +38,11 @@ class Minz_Session { } else { $return = $default; } - + return $return; } - - + + /** * Permet de créer ou mettre à jour une variable de session * @param $p le paramètre à créer ou modifier @@ -59,18 +62,18 @@ class Minz_Session { } } } - - + + /** * Permet d'effacer une session * @param $force si à false, n'efface pas le paramètre de langue */ public static function unset_session ($force = false) { $language = self::param ('language'); - + session_unset (); self::$session = array (); - + if (!$force) { self::_param ('language', $language); } diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php index 30f7f6231..17f1ddece 100644 --- a/lib/Minz/Url.php +++ b/lib/Minz/Url.php @@ -17,12 +17,16 @@ class Minz_Url { * @return l'url formatée */ public static function display ($url = array (), $encodage = 'html', $absolute = false) { - $url = self::checkUrl ($url); + $isArray = is_array($url); + + if ($isArray) { + $url = self::checkUrl ($url); + } $url_string = ''; if ($absolute) { - if (is_array ($url) && isset ($url['protocol'])) { + if ($isArray && isset ($url['protocol'])) { $protocol = $url['protocol']; } elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { $protocol = 'https:'; @@ -30,12 +34,11 @@ class Minz_Url { $protocol = 'http:'; } $url_string = $protocol . '//' . Minz_Request::getDomainName () . Minz_Request::getBaseUrl (); - } - else { - $url_string = '.'; + } else { + $url_string = $isArray ? '.' : PUBLIC_RELATIVE; } - if (is_array ($url)) { + if ($isArray) { $router = new Minz_Router (); if (Minz_Configuration::useUrlRewriting ()) { diff --git a/public/.htaccess b/p/.htaccess index fefe8b226..fefe8b226 100644 --- a/public/.htaccess +++ b/p/.htaccess @@ -36,8 +36,15 @@ function download_favicon ($website, $dest) { return true; } -$id = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '0'; -if (!ctype_digit($id)) { +if (isset($_SERVER['PATH_INFO'])) { + $id = substr($_SERVER['PATH_INFO'], 1); +} elseif (isset($_SERVER['QUERY_STRING'])) { + $id = $_SERVER['QUERY_STRING']; +} else { + $id = '0'; +} + +if (!ctype_xdigit($id)) { $id = '0'; } diff --git a/public/favicon.ico b/p/favicon.ico Binary files differindex f7ae0a5b9..f7ae0a5b9 100644 --- a/public/favicon.ico +++ b/p/favicon.ico diff --git a/public/favicon.png b/p/favicon.png Binary files differindex 3038dc3d1..3038dc3d1 100644 --- a/public/favicon.png +++ b/p/favicon.png diff --git a/public/index.php b/p/i/index.php index c8b15b3d9..6c25b2c54 100755 --- a/public/index.php +++ b/p/i/index.php @@ -21,7 +21,7 @@ if (file_exists ('install.php')) { require('install.php'); } else { - require('../constants.php'); + require('../../constants.php'); session_cache_limiter(''); if (!file_exists(DATA_PATH . '/no-cache.txt')) { diff --git a/public/install.php b/p/i/install.php index 13abb010b..0e8a972c6 100644 --- a/public/install.php +++ b/p/i/install.php @@ -1,8 +1,10 @@ <?php -require('../constants.php'); +require('../../constants.php'); include(LIB_PATH . '/lib_rss.php'); -session_start (); +session_name('FreshRSS'); +session_set_cookie_params(0, './', null, false, true); +session_start(); if (isset ($_GET['step'])) { define ('STEP', $_GET['step']); @@ -115,7 +117,9 @@ WHERE e1.content_bin IS NULL'); define('SQL_CONVERT_UPDATEv006', 'UPDATE `%1$sentry` SET content_bin=COMPRESS(?) WHERE id=?;'); -define('SQL_UPDATE_CACHED_VALUESv006', ' +define('SQL_DROP_BACKUPv006', 'DROP TABLE IF EXISTS `%1$sentry006`, `%1$sfeed006`, `%1$scategory006`;'); + +define('SQL_UPDATE_CACHED_VALUES', ' UPDATE `%1$sfeed` f INNER JOIN ( SELECT e.id_feed, @@ -127,7 +131,7 @@ INNER JOIN ( SET f.cache_nbEntries=x.nbEntries, f.cache_nbUnreads=x.nbUnreads '); -define('SQL_DROP_BACKUPv006', 'DROP TABLE IF EXISTS `%1$sentry006`, `%1$sfeed006`, `%1$scategory006`;'); +define('SQL_UPDATE_HISTORYv007b', 'UPDATE `%1$sfeed` SET keep_history = CASE WHEN keep_history = 0 THEN -2 WHEN keep_history = 1 THEN -1 ELSE keep_history END;'); //</updates> function writeLine ($f, $line) { @@ -231,6 +235,7 @@ function saveStep2 () { $file_data = DATA_PATH . '/' . $_SESSION['default_user'] . '_user.php'; + @unlink($file_data); //To avoid access-rights problems $f = fopen ($file_data, 'w'); writeLine ($f, '<?php'); writeLine ($f, 'return array ('); @@ -282,6 +287,8 @@ function saveStep3 () { 'prefix' => $_SESSION['bd_prefix'], ), ); + + @unlink(DATA_PATH . '/config.php'); //To avoid access-rights problems file_put_contents(DATA_PATH . '/config.php', "<?php\n return " . var_export($ini_array, true) . ';'); if (file_exists(DATA_PATH . '/config.php') && file_exists(DATA_PATH . '/application.ini')) { @@ -347,7 +354,11 @@ function updateDatabase($perform = false) { $stm->execute(); } - $sql = sprintf(SQL_UPDATE_CACHED_VALUESv006, $_SESSION['bd_prefix_user']); + $sql = sprintf(SQL_UPDATE_HISTORYv007b, $_SESSION['bd_prefix_user']); + $stm = $c->prepare($sql); + $stm->execute(); + + $sql = sprintf(SQL_UPDATE_CACHED_VALUES, $_SESSION['bd_prefix_user']); $stm = $c->prepare($sql); $stm->execute(); @@ -380,7 +391,7 @@ function updateDatabase($perform = false) { } function deleteInstall () { - $res = unlink (PUBLIC_PATH . '/install.php'); + $res = unlink (INDEX_PATH . '/install.php'); if ($res) { header ('Location: index.php'); } @@ -454,16 +465,6 @@ function delTree($dir) { //http://php.net/rmdir#110489 return rmdir($dir); } -function removeOldFiles() { - $oldDirs = array('/app/configuration/', '/cache/', '/log/', '/public/data/', '/public/themes/printer/'); //v0.6 - - $ok = true; - foreach ($oldDirs as $oldDir) { - $ok &= delTree(FRESHRSS_PATH . $oldDir); - } - return $ok; -} - /*** VÉRIFICATIONS ***/ function checkStep () { $s0 = checkStep0 (); @@ -479,9 +480,10 @@ function checkStep () { } elseif (STEP > 3 && $s3['all'] != 'ok') { header ('Location: index.php?step=3'); } + $_SESSION['actualize_feeds'] = true; } function checkStep0 () { - moveOldFiles() && removeOldFiles(); + moveOldFiles(); if (file_exists(DATA_PATH . '/config.php')) { $ini_array = include(DATA_PATH . '/config.php'); @@ -932,7 +934,7 @@ function printStep5 () { function printStep6 () { ?> - <p class="alert alert-error"><span class="alert-head"><?php echo _t ('oops'); ?></span> <?php echo _t ('install_not_deleted', PUBLIC_PATH . '/install.php'); ?></p> + <p class="alert alert-error"><span class="alert-head"><?php echo _t ('oops'); ?></span> <?php echo _t ('install_not_deleted', INDEX_PATH . '/install.php'); ?></p> <?php } @@ -971,8 +973,8 @@ case 6: <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1.0"> <title><?php echo _t ('freshrss_installation'); ?></title> - <link rel="stylesheet" type="text/css" media="all" href="themes/default/global.css" /> - <link rel="stylesheet" type="text/css" media="all" href="themes/default/freshrss.css" /> + <link rel="stylesheet" type="text/css" media="all" href="../themes/default/global.css" /> + <link rel="stylesheet" type="text/css" media="all" href="../themes/default/freshrss.css" /> </head> <body> diff --git a/p/index.html b/p/index.html new file mode 100644 index 000000000..af91b717e --- /dev/null +++ b/p/index.html @@ -0,0 +1,12 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB"> +<head> +<meta charset="UTF-8" /> +<meta http-equiv="Refresh" content="0; url=i/" /> +<title>Redirection</title> +</head> + +<body> +<p><a href="i/">FreshRSS</a></p> +</body> +</html> diff --git a/p/index.php b/p/index.php new file mode 100644 index 000000000..e90662078 --- /dev/null +++ b/p/index.php @@ -0,0 +1,3 @@ +<?php +header('Location: i/', true, 301); +include('index.html'); diff --git a/public/robots.txt b/p/robots.txt index 1f53798bb..1f53798bb 100644 --- a/public/robots.txt +++ b/p/robots.txt diff --git a/public/scripts/global_view.js b/p/scripts/global_view.js index 0cdcdd3fa..0cdcdd3fa 100644 --- a/public/scripts/global_view.js +++ b/p/scripts/global_view.js diff --git a/public/scripts/jquery-2.0.3.min.map b/p/scripts/jquery-2.0.3.min.map index 472d71bb0..472d71bb0 100644 --- a/public/scripts/jquery-2.0.3.min.map +++ b/p/scripts/jquery-2.0.3.min.map diff --git a/public/scripts/jquery.lazyload.min.js b/p/scripts/jquery.lazyload.min.js index 8dd097dc3..8dd097dc3 100644 --- a/public/scripts/jquery.lazyload.min.js +++ b/p/scripts/jquery.lazyload.min.js diff --git a/public/scripts/jquery.min.js b/p/scripts/jquery.min.js index 2be209dd2..2be209dd2 100644 --- a/public/scripts/jquery.min.js +++ b/p/scripts/jquery.min.js diff --git a/public/scripts/main.js b/p/scripts/main.js index ef05eb2fb..ef05eb2fb 100644 --- a/public/scripts/main.js +++ b/p/scripts/main.js diff --git a/public/scripts/shortcut.js b/p/scripts/shortcut.js index debaffbaa..debaffbaa 100644 --- a/public/scripts/shortcut.js +++ b/p/scripts/shortcut.js diff --git a/public/themes/default/freshrss.css b/p/themes/default/freshrss.css index 2b157b27a..86925accc 100644 --- a/public/themes/default/freshrss.css +++ b/p/themes/default/freshrss.css @@ -567,7 +567,7 @@ /*** NOTIFICATION ***/ .notification { - position: fixed; + position: absolute; top: 10px; left: 25%; right: 25%; min-height: 30px; diff --git a/public/themes/default/global.css b/p/themes/default/global.css index 440fc6e41..440fc6e41 100644 --- a/public/themes/default/global.css +++ b/p/themes/default/global.css diff --git a/public/themes/default/loader.gif b/p/themes/default/loader.gif Binary files differindex 5ff26f0e3..5ff26f0e3 100644 --- a/public/themes/default/loader.gif +++ b/p/themes/default/loader.gif diff --git a/public/themes/default/metadata.json b/p/themes/default/metadata.json index d316ec517..d316ec517 100644 --- a/public/themes/default/metadata.json +++ b/p/themes/default/metadata.json diff --git a/public/themes/flat-design/freshrss.css b/p/themes/flat-design/freshrss.css index 7e3f4c81a..7a1682370 100644 --- a/public/themes/flat-design/freshrss.css +++ b/p/themes/flat-design/freshrss.css @@ -555,7 +555,7 @@ body { /*** NOTIFICATION ***/ .notification { - position: fixed; + position: absolute; top: 10px; left: 25%; right: 25%; min-height: 30px; diff --git a/public/themes/flat-design/global.css b/p/themes/flat-design/global.css index 90b59d002..90b59d002 100644 --- a/public/themes/flat-design/global.css +++ b/p/themes/flat-design/global.css diff --git a/public/themes/flat-design/icons/add.svg b/p/themes/flat-design/icons/add.svg index 15767a3ad..15767a3ad 100644 --- a/public/themes/flat-design/icons/add.svg +++ b/p/themes/flat-design/icons/add.svg diff --git a/public/themes/flat-design/icons/all.svg b/p/themes/flat-design/icons/all.svg index d20e0f5bf..d20e0f5bf 100644 --- a/public/themes/flat-design/icons/all.svg +++ b/p/themes/flat-design/icons/all.svg diff --git a/public/themes/flat-design/icons/close.svg b/p/themes/flat-design/icons/close.svg index 629fda7ff..629fda7ff 100644 --- a/public/themes/flat-design/icons/close.svg +++ b/p/themes/flat-design/icons/close.svg diff --git a/public/themes/flat-design/icons/configure.svg b/p/themes/flat-design/icons/configure.svg index 969c5719f..969c5719f 100644 --- a/public/themes/flat-design/icons/configure.svg +++ b/p/themes/flat-design/icons/configure.svg diff --git a/public/themes/flat-design/icons/down.svg b/p/themes/flat-design/icons/down.svg index 31730626f..31730626f 100644 --- a/public/themes/flat-design/icons/down.svg +++ b/p/themes/flat-design/icons/down.svg diff --git a/public/themes/flat-design/icons/next.svg b/p/themes/flat-design/icons/next.svg index d75cc40f5..d75cc40f5 100644 --- a/public/themes/flat-design/icons/next.svg +++ b/p/themes/flat-design/icons/next.svg diff --git a/public/themes/flat-design/icons/prev.svg b/p/themes/flat-design/icons/prev.svg index 9ba03ceb2..9ba03ceb2 100644 --- a/public/themes/flat-design/icons/prev.svg +++ b/p/themes/flat-design/icons/prev.svg diff --git a/public/themes/flat-design/icons/refresh.svg b/p/themes/flat-design/icons/refresh.svg index 8f95bf443..8f95bf443 100644 --- a/public/themes/flat-design/icons/refresh.svg +++ b/p/themes/flat-design/icons/refresh.svg diff --git a/public/themes/flat-design/icons/search.svg b/p/themes/flat-design/icons/search.svg index bca7571b4..bca7571b4 100644 --- a/public/themes/flat-design/icons/search.svg +++ b/p/themes/flat-design/icons/search.svg diff --git a/public/themes/flat-design/icons/up.svg b/p/themes/flat-design/icons/up.svg index 3ab11b168..3ab11b168 100644 --- a/public/themes/flat-design/icons/up.svg +++ b/p/themes/flat-design/icons/up.svg diff --git a/public/themes/flat-design/loader.gif b/p/themes/flat-design/loader.gif Binary files differindex ce36565b3..ce36565b3 100644 --- a/public/themes/flat-design/loader.gif +++ b/p/themes/flat-design/loader.gif diff --git a/public/themes/flat-design/metadata.json b/p/themes/flat-design/metadata.json index 6b94d11c2..6b94d11c2 100644 --- a/public/themes/flat-design/metadata.json +++ b/p/themes/flat-design/metadata.json diff --git a/public/themes/fonts/openSans.woff b/p/themes/fonts/openSans.woff Binary files differindex 55b25f867..55b25f867 100644 --- a/public/themes/fonts/openSans.woff +++ b/p/themes/fonts/openSans.woff diff --git a/public/themes/icons/add.svg b/p/themes/icons/add.svg index 425c9b4aa..425c9b4aa 100644 --- a/public/themes/icons/add.svg +++ b/p/themes/icons/add.svg diff --git a/public/themes/icons/all.svg b/p/themes/icons/all.svg index 2180f7a4b..2180f7a4b 100644 --- a/public/themes/icons/all.svg +++ b/p/themes/icons/all.svg diff --git a/public/themes/icons/bookmark.svg b/p/themes/icons/bookmark.svg index d6e2cebb5..d6e2cebb5 100644 --- a/public/themes/icons/bookmark.svg +++ b/p/themes/icons/bookmark.svg diff --git a/public/themes/icons/category-white.svg b/p/themes/icons/category-white.svg index 5e61aeea5..5e61aeea5 100644 --- a/public/themes/icons/category-white.svg +++ b/p/themes/icons/category-white.svg diff --git a/public/themes/icons/category.svg b/p/themes/icons/category.svg index 71f95490e..71f95490e 100644 --- a/public/themes/icons/category.svg +++ b/p/themes/icons/category.svg diff --git a/public/themes/icons/close.svg b/p/themes/icons/close.svg index c0c786fd6..c0c786fd6 100644 --- a/public/themes/icons/close.svg +++ b/p/themes/icons/close.svg diff --git a/public/themes/icons/configure.svg b/p/themes/icons/configure.svg index 52df8bca7..52df8bca7 100644 --- a/public/themes/icons/configure.svg +++ b/p/themes/icons/configure.svg diff --git a/public/themes/icons/down.svg b/p/themes/icons/down.svg index 06d031fae..06d031fae 100644 --- a/public/themes/icons/down.svg +++ b/p/themes/icons/down.svg diff --git a/public/themes/icons/grey.gif b/p/themes/icons/grey.gif Binary files differindex c7212bc1f..c7212bc1f 100644 --- a/public/themes/icons/grey.gif +++ b/p/themes/icons/grey.gif diff --git a/public/themes/icons/help.svg b/p/themes/icons/help.svg index b103ec46d..b103ec46d 100644 --- a/public/themes/icons/help.svg +++ b/p/themes/icons/help.svg diff --git a/public/themes/icons/icon.svg b/p/themes/icons/icon.svg index 8aefed2ad..8aefed2ad 100644 --- a/public/themes/icons/icon.svg +++ b/p/themes/icons/icon.svg diff --git a/public/themes/icons/link.svg b/p/themes/icons/link.svg index ddc8e0706..ddc8e0706 100644 --- a/public/themes/icons/link.svg +++ b/p/themes/icons/link.svg diff --git a/public/themes/icons/login.svg b/p/themes/icons/login.svg index 0a8af162f..0a8af162f 100644 --- a/public/themes/icons/login.svg +++ b/p/themes/icons/login.svg diff --git a/public/themes/icons/logout.svg b/p/themes/icons/logout.svg index 284a67578..284a67578 100644 --- a/public/themes/icons/logout.svg +++ b/p/themes/icons/logout.svg diff --git a/public/themes/icons/next.svg b/p/themes/icons/next.svg index 72637b4e6..72637b4e6 100644 --- a/public/themes/icons/next.svg +++ b/p/themes/icons/next.svg diff --git a/public/themes/icons/non-starred.svg b/p/themes/icons/non-starred.svg index 346717f78..346717f78 100644 --- a/public/themes/icons/non-starred.svg +++ b/p/themes/icons/non-starred.svg diff --git a/public/themes/icons/prev.svg b/p/themes/icons/prev.svg index 67685c50c..67685c50c 100644 --- a/public/themes/icons/prev.svg +++ b/p/themes/icons/prev.svg diff --git a/public/themes/icons/read.svg b/p/themes/icons/read.svg index 932bfd860..932bfd860 100644 --- a/public/themes/icons/read.svg +++ b/p/themes/icons/read.svg diff --git a/public/themes/icons/refresh.svg b/p/themes/icons/refresh.svg index 11728fc5d..11728fc5d 100644 --- a/public/themes/icons/refresh.svg +++ b/p/themes/icons/refresh.svg diff --git a/public/themes/icons/rss.svg b/p/themes/icons/rss.svg index ceaddceee..ceaddceee 100644 --- a/public/themes/icons/rss.svg +++ b/p/themes/icons/rss.svg diff --git a/public/themes/icons/search.svg b/p/themes/icons/search.svg index acfb364cc..acfb364cc 100644 --- a/public/themes/icons/search.svg +++ b/p/themes/icons/search.svg diff --git a/public/themes/icons/share.svg b/p/themes/icons/share.svg index 443321882..443321882 100644 --- a/public/themes/icons/share.svg +++ b/p/themes/icons/share.svg diff --git a/public/themes/icons/starred.svg b/p/themes/icons/starred.svg index d6e2cebb5..d6e2cebb5 100644 --- a/public/themes/icons/starred.svg +++ b/p/themes/icons/starred.svg diff --git a/public/themes/icons/tag.svg b/p/themes/icons/tag.svg index 688aca7a4..688aca7a4 100644 --- a/public/themes/icons/tag.svg +++ b/p/themes/icons/tag.svg diff --git a/public/themes/icons/unread.svg b/p/themes/icons/unread.svg index f541fb25b..f541fb25b 100644 --- a/public/themes/icons/unread.svg +++ b/p/themes/icons/unread.svg diff --git a/public/themes/icons/up.svg b/p/themes/icons/up.svg index dab31a20d..dab31a20d 100644 --- a/public/themes/icons/up.svg +++ b/p/themes/icons/up.svg |
