aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2016-08-29 19:52:52 +0200
committerGravatar GitHub <noreply@github.com> 2016-08-29 19:52:52 +0200
commit17c8c039df675b3b0f8d88d14f7316a240eabe76 (patch)
tree3dd3da3e8f21b5e82905f756098b86e0d15b3935 /app
parent92d4ad32c9eb165dee6dc6d4b8cf510428dde9ec (diff)
parentaea7cd78367ef867cdac7082ac1e9f61c4de7e19 (diff)
Merge pull request #1233 from FreshRSS/dev1.5.0
Release 1.5.0
Diffstat (limited to 'app')
-rw-r--r--app/Controllers/authController.php152
-rwxr-xr-xapp/Controllers/configureController.php4
-rwxr-xr-xapp/Controllers/entryController.php19
-rwxr-xr-xapp/Controllers/feedController.php14
-rwxr-xr-xapp/Controllers/indexController.php14
-rw-r--r--app/Controllers/userController.php25
-rw-r--r--app/FreshRSS.php10
-rw-r--r--app/Models/Auth.php39
-rw-r--r--app/Models/ConfigurationSetter.php14
-rw-r--r--app/Models/EntryDAO.php210
-rw-r--r--app/Models/EntryDAOSQLite.php23
-rw-r--r--app/Models/Feed.php4
-rw-r--r--app/Models/StatsDAO.php1
-rw-r--r--app/SQL/install.sql.mysql.php31
-rw-r--r--app/i18n/cz/admin.php6
-rw-r--r--app/i18n/cz/conf.php1
-rw-r--r--app/i18n/cz/feedback.php1
-rw-r--r--app/i18n/cz/gen.php3
-rw-r--r--app/i18n/cz/index.php2
-rw-r--r--app/i18n/cz/install.php6
-rw-r--r--app/i18n/de/admin.php6
-rw-r--r--app/i18n/de/conf.php1
-rw-r--r--app/i18n/de/feedback.php1
-rw-r--r--app/i18n/de/gen.php3
-rw-r--r--app/i18n/de/index.php2
-rw-r--r--app/i18n/de/install.php6
-rw-r--r--app/i18n/en/admin.php6
-rw-r--r--app/i18n/en/conf.php1
-rw-r--r--app/i18n/en/feedback.php1
-rw-r--r--app/i18n/en/gen.php3
-rw-r--r--app/i18n/en/index.php2
-rw-r--r--app/i18n/en/install.php6
-rw-r--r--app/i18n/fr/admin.php6
-rw-r--r--app/i18n/fr/conf.php1
-rw-r--r--app/i18n/fr/feedback.php1
-rw-r--r--app/i18n/fr/gen.php3
-rw-r--r--app/i18n/fr/index.php2
-rw-r--r--app/i18n/fr/install.php6
-rw-r--r--app/i18n/it/admin.php6
-rw-r--r--app/i18n/it/conf.php1
-rw-r--r--app/i18n/it/feedback.php1
-rw-r--r--app/i18n/it/gen.php3
-rw-r--r--app/i18n/it/index.php2
-rw-r--r--app/i18n/it/install.php6
-rw-r--r--app/i18n/nl/admin.php6
-rw-r--r--app/i18n/nl/conf.php1
-rw-r--r--app/i18n/nl/feedback.php1
-rw-r--r--app/i18n/nl/gen.php3
-rw-r--r--app/i18n/nl/index.php2
-rw-r--r--app/i18n/nl/install.php6
-rw-r--r--app/i18n/ru/admin.php6
-rw-r--r--app/i18n/ru/conf.php1
-rw-r--r--app/i18n/ru/feedback.php1
-rw-r--r--app/i18n/ru/gen.php3
-rw-r--r--app/i18n/ru/index.php2
-rw-r--r--app/i18n/ru/install.php6
-rw-r--r--app/i18n/tr/admin.php6
-rw-r--r--app/i18n/tr/conf.php1
-rw-r--r--app/i18n/tr/feedback.php1
-rw-r--r--app/i18n/tr/gen.php3
-rw-r--r--app/i18n/tr/index.php2
-rw-r--r--app/i18n/tr/install.php6
-rw-r--r--app/install.php55
-rw-r--r--app/layout/aside_feed.phtml5
-rw-r--r--app/layout/layout.phtml15
-rw-r--r--app/layout/nav_menu.phtml9
-rw-r--r--app/views/auth/formLogin.phtml1
-rw-r--r--app/views/auth/index.phtml4
-rw-r--r--app/views/auth/personaLogin.phtml28
-rw-r--r--app/views/auth/register.phtml60
-rw-r--r--app/views/auth/reset.phtml33
-rw-r--r--app/views/configure/archiving.phtml2
-rw-r--r--app/views/configure/display.phtml1
-rw-r--r--app/views/configure/queries.phtml1
-rw-r--r--app/views/configure/reading.phtml1
-rw-r--r--app/views/configure/sharing.phtml1
-rw-r--r--app/views/configure/shortcut.phtml1
-rw-r--r--app/views/configure/system.phtml1
-rwxr-xr-xapp/views/entry/bookmark.phtml19
-rwxr-xr-xapp/views/entry/read.phtml19
-rw-r--r--app/views/extension/index.phtml4
-rw-r--r--app/views/feed/add.phtml1
-rw-r--r--app/views/helpers/feed/update.phtml1
-rw-r--r--app/views/helpers/javascript_vars.phtml3
-rwxr-xr-xapp/views/helpers/logs_pagination.phtml2
-rwxr-xr-xapp/views/helpers/pagination.phtml7
-rw-r--r--app/views/importExport/index.phtml2
-rw-r--r--app/views/index/global.phtml2
-rw-r--r--app/views/index/logs.phtml3
-rw-r--r--app/views/stats/idle.phtml5
-rw-r--r--app/views/subscription/index.phtml7
-rw-r--r--app/views/update/checkInstall.phtml2
-rw-r--r--app/views/user/manage.phtml10
-rw-r--r--app/views/user/profile.phtml12
94 files changed, 360 insertions, 669 deletions
diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php
index f58b008de..9decba431 100644
--- a/app/Controllers/authController.php
+++ b/app/Controllers/authController.php
@@ -70,7 +70,7 @@ class FreshRSS_auth_Controller extends Minz_ActionController {
/**
* This action handles the login page.
*
- * It forwards to the correct login page (form or Persona) or main page if
+ * It forwards to the correct login page (form) or main page if
* the user is already connected.
*/
public function loginAction() {
@@ -83,9 +83,6 @@ class FreshRSS_auth_Controller extends Minz_ActionController {
case 'form':
Minz_Request::forward(array('c' => 'auth', 'a' => 'formLogin'));
break;
- case 'persona':
- Minz_Request::forward(array('c' => 'auth', 'a' => 'personaLogin'));
- break;
case 'http_auth':
case 'none':
// It should not happened!
@@ -189,81 +186,6 @@ class FreshRSS_auth_Controller extends Minz_ActionController {
}
/**
- * This action handles Persona login page.
- *
- * If this action is reached through a POST request, assertion from Persona
- * is verificated and user connected if all is ok.
- *
- * Parameter is:
- * - assertion (default: false)
- *
- * @todo: Persona system should be moved to a plugin
- */
- public function personaLoginAction() {
- $this->view->res = false;
-
- if (Minz_Request::isPost()) {
- $this->view->_useLayout(false);
-
- $assert = Minz_Request::param('assertion');
- $url = 'https://verifier.login.persona.org/verify';
- $params = 'assertion=' . $assert . '&audience=' .
- urlencode(Minz_Url::display(null, 'php', true));
- $ch = curl_init();
- $options = array(
- CURLOPT_URL => $url,
- CURLOPT_RETURNTRANSFER => TRUE,
- CURLOPT_POST => 2,
- CURLOPT_POSTFIELDS => $params
- );
- curl_setopt_array($ch, $options);
- $result = curl_exec($ch);
- curl_close($ch);
-
- $res = json_decode($result, true);
-
- $login_ok = false;
- $reason = '';
- if ($res['status'] === 'okay') {
- $email = filter_var($res['email'], FILTER_VALIDATE_EMAIL);
- if ($email != '') {
- $persona_file = DATA_PATH . '/persona/' . $email . '.txt';
- if (($current_user = @file_get_contents($persona_file)) !== false) {
- $current_user = trim($current_user);
- $conf = get_user_configuration($current_user);
- if (!is_null($conf)) {
- $login_ok = strcasecmp($email, $conf->mail_login) === 0;
- } else {
- $reason = 'Invalid configuration for user ' .
- '[' . $current_user . ']';
- }
- }
- } else {
- $reason = 'Invalid email format [' . $res['email'] . ']';
- }
- } else {
- $reason = $res['reason'];
- }
-
- if ($login_ok) {
- Minz_Session::_param('currentUser', $current_user);
- Minz_Session::_param('mail', $email);
- FreshRSS_Auth::giveAccess();
- invalidateHttpCache();
- } else {
- Minz_Log::warning($reason);
-
- $res = array();
- $res['status'] = 'failure';
- $res['reason'] = _t('feedback.auth.login.invalid');
- }
-
- header('Content-Type: application/json; charset=UTF-8');
- $this->view->res = $res;
- }
- }
-
- /**
* This action removes all accesses of the current user.
*/
public function logoutAction() {
@@ -274,78 +196,6 @@ class FreshRSS_auth_Controller extends Minz_ActionController {
}
/**
- * This action resets the authentication system.
- *
- * After reseting, form auth is set by default.
- */
- public function resetAction() {
- Minz_View::prependTitle(_t('admin.auth.title_reset') . ' ยท ');
-
- Minz_View::appendScript(Minz_Url::display(
- '/scripts/bcrypt.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/bcrypt.min.js')
- ));
-
- $this->view->no_form = false;
- // Enable changement of auth only if Persona!
- if (FreshRSS_Context::$system_conf->auth_type != 'persona') {
- $this->view->message = array(
- 'status' => 'bad',
- 'title' => _t('gen.short.damn'),
- 'body' => _t('feedback.auth.not_persona')
- );
- $this->view->no_form = true;
- return;
- }
-
- $conf = get_user_configuration(FreshRSS_Context::$system_conf->default_user);
- if (is_null($conf)) {
- return;
- }
-
- // Admin user must have set its master password.
- if (!$conf->passwordHash) {
- $this->view->message = array(
- 'status' => 'bad',
- 'title' => _t('gen.short.damn'),
- 'body' => _t('feedback.auth.no_password_set')
- );
- $this->view->no_form = true;
- return;
- }
-
- invalidateHttpCache();
-
- if (Minz_Request::isPost()) {
- $nonce = Minz_Session::param('nonce');
- $username = Minz_Request::param('username', '');
- $challenge = Minz_Request::param('challenge', '');
-
- $ok = FreshRSS_FormAuth::checkCredentials(
- $username, $conf->passwordHash, $nonce, $challenge
- );
-
- if ($ok) {
- FreshRSS_Context::$system_conf->auth_type = 'form';
- $ok = FreshRSS_Context::$system_conf->save();
-
- if ($ok) {
- Minz_Request::good(_t('feedback.auth.form.set'));
- } else {
- Minz_Request::bad(_t('feedback.auth.form.not_set'),
- array('c' => 'auth', 'a' => 'reset'));
- }
- } else {
- Minz_Log::warning('Password mismatch for' .
- ' user=' . $username .
- ', nonce=' . $nonce .
- ', c=' . $challenge);
- Minz_Request::bad(_t('feedback.auth.login.invalid'),
- array('c' => 'auth', 'a' => 'reset'));
- }
- }
- }
-
- /**
* This action gives possibility to a user to create an account.
*/
public function registerAction() {
diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php
index d0f0bd68b..147a2fe06 100755
--- a/app/Controllers/configureController.php
+++ b/app/Controllers/configureController.php
@@ -139,7 +139,7 @@ class FreshRSS_configure_Controller extends Minz_ActionController {
*/
public function sharingAction() {
if (Minz_Request::isPost()) {
- $params = Minz_Request::params();
+ $params = Minz_Request::fetchGET();
FreshRSS_Context::$user_conf->sharing = $params['share'];
FreshRSS_Context::$user_conf->save();
invalidateHttpCache();
@@ -282,7 +282,7 @@ class FreshRSS_configure_Controller extends Minz_ActionController {
foreach (FreshRSS_Context::$user_conf->queries as $key => $query) {
$queries[$key] = new FreshRSS_UserQuery($query, $feed_dao, $category_dao);
}
- $params = Minz_Request::params();
+ $params = Minz_Request::fetchGET();
$params['url'] = Minz_Url::display(array('params' => $params));
$params['name'] = _t('conf.query.number', count($queries) + 1);
$queries[] = new FreshRSS_UserQuery($params, $feed_dao, $category_dao);
diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php
index bff1073ef..c40588105 100755
--- a/app/Controllers/entryController.php
+++ b/app/Controllers/entryController.php
@@ -40,6 +40,17 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
$get = Minz_Request::param('get');
$next_get = Minz_Request::param('nextGet', $get);
$id_max = Minz_Request::param('idMax', 0);
+ FreshRSS_Context::$search = new FreshRSS_Search(Minz_Request::param('search', ''));
+
+ FreshRSS_Context::$state = Minz_Request::param('state', 0);
+ if (FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_FAVORITE)) {
+ FreshRSS_Context::$state = FreshRSS_Entry::STATE_FAVORITE;
+ } elseif (FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_NOT_FAVORITE)) {
+ FreshRSS_Context::$state = FreshRSS_Entry::STATE_NOT_FAVORITE;
+ } else {
+ FreshRSS_Context::$state = 0;
+ }
+
$params = array();
$entryDAO = FreshRSS_Factory::createEntryDao();
@@ -58,16 +69,16 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
$get = substr($get, 2);
switch($type_get) {
case 'c':
- $entryDAO->markReadCat($get, $id_max);
+ $entryDAO->markReadCat($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state);
break;
case 'f':
- $entryDAO->markReadFeed($get, $id_max);
+ $entryDAO->markReadFeed($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state);
break;
case 's':
- $entryDAO->markReadEntries($id_max, true);
+ $entryDAO->markReadEntries($id_max, true, 0, FreshRSS_Context::$search);
break;
case 'a':
- $entryDAO->markReadEntries($id_max);
+ $entryDAO->markReadEntries($id_max, false, 0, FreshRSS_Context::$search, FreshRSS_Context::$state);
break;
}
diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php
index 6a8aa01cf..ffda1450d 100755
--- a/app/Controllers/feedController.php
+++ b/app/Controllers/feedController.php
@@ -200,7 +200,9 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
$entryDAO->addEntry($values);
}
$feedDAO->updateLastUpdate($feed->id());
- $feedDAO->commit();
+ if ($feedDAO->inTransaction()) {
+ $feedDAO->commit();
+ }
// Entries are in DB, we redirect to feed configuration page.
$url_redirect['params']['id'] = $feed->id();
@@ -364,7 +366,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
//', old hash ' . $existingHash . ', new hash ' . $entry->hash());
//TODO: Make an updated/is_read policy by feed, in addition to the global one.
$entry->_isRead(FreshRSS_Context::$user_conf->mark_updated_article_unread ? false : null); //Change is_read according to policy.
- if (!$entryDAO->hasTransaction()) {
+ if (!$entryDAO->inTransaction()) {
$entryDAO->beginTransaction();
}
$entryDAO->updateEntry($entry->toArray());
@@ -396,7 +398,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
$feed->pubSubHubbubError(true);
}
- if (!$entryDAO->hasTransaction()) {
+ if (!$entryDAO->inTransaction()) {
$entryDAO->beginTransaction();
}
$entryDAO->addEntry($entry->toArray());
@@ -408,7 +410,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
if ($feed_history >= 0 && rand(0, 30) === 1) {
// TODO: move this function in web cron when available (see entry::purge)
// Remove old entries once in 30.
- if (!$entryDAO->hasTransaction()) {
+ if (!$entryDAO->inTransaction()) {
$entryDAO->beginTransaction();
}
@@ -421,8 +423,8 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
}
}
- $feedDAO->updateLastUpdate($feed->id(), 0, $entryDAO->hasTransaction());
- if ($entryDAO->hasTransaction()) {
+ $feedDAO->updateLastUpdate($feed->id(), 0, $entryDAO->inTransaction());
+ if ($entryDAO->inTransaction()) {
$entryDAO->commit();
}
diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php
index 7e626720e..2332d225d 100755
--- a/app/Controllers/indexController.php
+++ b/app/Controllers/indexController.php
@@ -32,9 +32,9 @@ class FreshRSS_index_Controller extends Minz_ActionController {
Minz_Error::error(404);
}
- $this->view->callbackBeforeContent = function() {
+ $this->view->callbackBeforeContent = function($view) {
try {
- $entries = $this->listEntriesByContext();
+ $entries = FreshRSS_index_Controller::listEntriesByContext();
$nb_entries = count($entries);
if ($nb_entries > FreshRSS_Context::$number) {
@@ -55,15 +55,15 @@ class FreshRSS_index_Controller extends Minz_ActionController {
}
}
- $this->view->entries = $entries;
+ $view->entries = $entries;
} catch (FreshRSS_EntriesGetter_Exception $e) {
Minz_Log::notice($e->getMessage());
Minz_Error::error(404);
}
- $this->view->categories = FreshRSS_Context::$categories;
+ $view->categories = FreshRSS_Context::$categories;
- $this->view->rss_title = FreshRSS_Context::$name . ' | ' . Minz_View::title();
+ $view->rss_title = FreshRSS_Context::$name . ' | ' . Minz_View::title();
$title = FreshRSS_Context::$name;
if (FreshRSS_Context::$get_unread > 0) {
$title = '(' . FreshRSS_Context::$get_unread . ') ' . $title;
@@ -132,7 +132,7 @@ class FreshRSS_index_Controller extends Minz_ActionController {
}
try {
- $this->view->entries = $this->listEntriesByContext();
+ $this->view->entries = FreshRSS_index_Controller::listEntriesByContext();
} catch (FreshRSS_EntriesGetter_Exception $e) {
Minz_Log::notice($e->getMessage());
Minz_Error::error(404);
@@ -189,7 +189,7 @@ class FreshRSS_index_Controller extends Minz_ActionController {
/**
* This method returns a list of entries based on the Context object.
*/
- private function listEntriesByContext() {
+ public static function listEntriesByContext() {
$entryDAO = FreshRSS_Factory::createEntryDao();
$get = FreshRSS_Context::currentGet(true);
diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php
index 1c7d621f1..0521bc008 100644
--- a/app/Controllers/userController.php
+++ b/app/Controllers/userController.php
@@ -64,21 +64,8 @@ class FreshRSS_user_Controller extends Minz_ActionController {
FreshRSS_Context::$user_conf->apiPasswordHash = $passwordHash;
}
- // TODO: why do we need of hasAccess here?
- if (FreshRSS_Auth::hasAccess('admin')) {
- FreshRSS_Context::$user_conf->mail_login = Minz_Request::param('mail_login', '', true);
- }
- $email = FreshRSS_Context::$user_conf->mail_login;
- Minz_Session::_param('mail', $email);
-
$ok &= FreshRSS_Context::$user_conf->save();
- if ($email != '') {
- $personaFile = DATA_PATH . '/persona/' . $email . '.txt';
- @unlink($personaFile);
- $ok &= (file_put_contents($personaFile, Minz_Session::param('currentUser', '_')) !== false);
- }
-
if ($ok) {
Minz_Request::good(_t('feedback.profile.updated'),
array('c' => 'user', 'a' => 'profile'));
@@ -119,7 +106,6 @@ class FreshRSS_user_Controller extends Minz_ActionController {
* - new_user_language
* - new_user_name
* - new_user_passwordPlain
- * - new_user_email
* - r (i.e. a redirection url, optional)
*
* @todo clean up this method. Idea: write a method to init a user with basic information.
@@ -168,22 +154,12 @@ class FreshRSS_user_Controller extends Minz_ActionController {
if (empty($passwordHash)) {
$passwordHash = '';
}
-
- $new_user_email = filter_var($_POST['new_user_email'], FILTER_VALIDATE_EMAIL);
- if (empty($new_user_email)) {
- $new_user_email = '';
- } else {
- $personaFile = join_path(DATA_PATH, 'persona', $new_user_email . '.txt');
- @unlink($personaFile);
- $ok &= (file_put_contents($personaFile, $new_user_name) !== false);
- }
}
if ($ok) {
mkdir(join_path(DATA_PATH, 'users', $new_user_name));
$config_array = array(
'language' => $new_user_language,
'passwordHash' => $passwordHash,
- 'mail_login' => $new_user_email,
);
$ok &= (file_put_contents($configPath, "<?php\n return " . var_export($config_array, true) . ';') !== false);
}
@@ -255,7 +231,6 @@ class FreshRSS_user_Controller extends Minz_ActionController {
$userDAO = new FreshRSS_UserDAO();
$ok &= $userDAO->deleteUser($username);
$ok &= recursive_unlink($user_data);
- //TODO: delete Persona file
}
if ($ok && $self_deletion) {
FreshRSS_Auth::removeAccess();
diff --git a/app/FreshRSS.php b/app/FreshRSS.php
index 4933892bc..f9c371d27 100644
--- a/app/FreshRSS.php
+++ b/app/FreshRSS.php
@@ -57,7 +57,7 @@ class FreshRSS extends Minz_FrontController {
private static function initAuth() {
FreshRSS_Auth::init();
- if (Minz_Request::isPost() && !is_referer_from_same_domain()) {
+ if (Minz_Request::isPost() && !(is_referer_from_same_domain() && FreshRSS_Auth::isCsrfOk())) {
// Basic protection against XSRF attacks
FreshRSS_Auth::removeAccess();
$http_referer = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER'];
@@ -98,14 +98,6 @@ class FreshRSS extends Minz_FrontController {
Minz_View::appendScript(Minz_Url::display('/scripts/jquery.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/jquery.min.js')));
Minz_View::appendScript(Minz_Url::display('/scripts/shortcut.js?' . @filemtime(PUBLIC_PATH . '/scripts/shortcut.js')));
Minz_View::appendScript(Minz_Url::display('/scripts/main.js?' . @filemtime(PUBLIC_PATH . '/scripts/main.js')));
-
- if (FreshRSS_Context::$system_conf->auth_type === 'persona') {
- // TODO move it in a plugin
- // Needed for login AND logout with Persona.
- Minz_View::appendScript('https://login.persona.org/include.js');
- $file_mtime = @filemtime(PUBLIC_PATH . '/scripts/persona.js');
- Minz_View::appendScript(Minz_Url::display('/scripts/persona.js?' . $file_mtime));
- }
}
private static function loadNotifications() {
diff --git a/app/Models/Auth.php b/app/Models/Auth.php
index 4e7a71947..b93942e19 100644
--- a/app/Models/Auth.php
+++ b/app/Models/Auth.php
@@ -60,16 +60,6 @@ class FreshRSS_Auth {
Minz_Session::_param('currentUser', $current_user);
}
return $login_ok;
- case 'persona':
- $email = filter_var(Minz_Session::param('mail'), FILTER_VALIDATE_EMAIL);
- $persona_file = DATA_PATH . '/persona/' . $email . '.txt';
- if (($current_user = @file_get_contents($persona_file)) !== false) {
- $current_user = trim($current_user);
- Minz_Session::_param('currentUser', $current_user);
- Minz_Session::_param('mail', $email);
- return true;
- }
- return false;
case 'none':
return true;
default:
@@ -93,9 +83,6 @@ class FreshRSS_Auth {
case 'http_auth':
self::$login_ok = strcasecmp($current_user, httpAuthUser()) === 0;
break;
- case 'persona':
- self::$login_ok = strcasecmp(Minz_Session::param('mail'), $user_conf->mail_login) === 0;
- break;
case 'none':
self::$login_ok = true;
break;
@@ -137,15 +124,13 @@ class FreshRSS_Auth {
self::$login_ok = false;
$conf = Minz_Configuration::get('system');
Minz_Session::_param('currentUser', $conf->default_user);
+ Minz_Session::_param('csrf');
switch ($conf->auth_type) {
case 'form':
Minz_Session::_param('passwordHash');
FreshRSS_FormAuth::deleteCookie();
break;
- case 'persona':
- Minz_Session::_param('mail');
- break;
case 'http_auth':
case 'none':
// Nothing to do...
@@ -170,7 +155,27 @@ class FreshRSS_Auth {
public static function accessNeedsAction() {
$conf = Minz_Configuration::get('system');
$auth_type = $conf->auth_type;
- return $auth_type === 'form' || $auth_type === 'persona';
+ return $auth_type === 'form';
+ }
+
+ public static function csrfToken() {
+ $csrf = Minz_Session::param('csrf');
+ if ($csrf == '') {
+ $salt = FreshRSS_Context::$system_conf->salt;
+ $csrf = sha1($salt . uniqid(mt_rand(), true));
+ Minz_Session::_param('csrf', $csrf);
+ }
+ return $csrf;
+ }
+ public static function isCsrfOk($token = null) {
+ $csrf = Minz_Session::param('csrf');
+ if ($csrf == '') {
+ return true; //Not logged in yet
+ }
+ if ($token === null) {
+ $token = Minz_Request::fetchPOST('_csrf');
+ }
+ return $token === $csrf;
}
}
diff --git a/app/Models/ConfigurationSetter.php b/app/Models/ConfigurationSetter.php
index 250c14c39..79bd0170b 100644
--- a/app/Models/ConfigurationSetter.php
+++ b/app/Models/ConfigurationSetter.php
@@ -95,11 +95,6 @@ class FreshRSS_ConfigurationSetter {
$data['language'] = $value;
}
- private function _mail_login(&$data, $value) {
- $value = filter_var($value, FILTER_VALIDATE_EMAIL);
- $data['mail_login'] = $value ? $value : '';
- }
-
private function _old_entries(&$data, $value) {
$value = intval($value);
$data['old_entries'] = $value > 0 ? $value : 3;
@@ -134,12 +129,7 @@ class FreshRSS_ConfigurationSetter {
// Verify URL and add default value when needed
if (isset($value['url'])) {
- $is_url = (
- filter_var($value['url'], FILTER_VALIDATE_URL) ||
- (version_compare(PHP_VERSION, '5.3.3', '<') &&
- (strpos($value, '-') > 0) &&
- ($value === filter_var($value, FILTER_SANITIZE_URL)))
- ); //PHP bug #51192
+ $is_url = filter_var($value['url'], FILTER_VALIDATE_URL);
if (!$is_url) {
continue;
}
@@ -278,7 +268,7 @@ class FreshRSS_ConfigurationSetter {
private function _auth_type(&$data, $value) {
$value = strtolower($value);
- if (!in_array($value, array('form', 'http_auth', 'persona', 'none'))) {
+ if (!in_array($value, array('form', 'http_auth', 'none'))) {
$value = 'none';
}
$data['auth_type'] = $value;
diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php
index f74055835..8f64098e5 100644
--- a/app/Models/EntryDAO.php
+++ b/app/Models/EntryDAO.php
@@ -11,7 +11,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
}
protected function addColumn($name) {
- Minz_Log::debug('FreshRSS_EntryDAO::autoAddColumn: ' . $name);
+ Minz_Log::warning('FreshRSS_EntryDAO::addColumn: ' . $name);
$hasTransaction = false;
try {
$stm = null;
@@ -38,7 +38,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
return $stm && $stm->execute();
}
} catch (Exception $e) {
- Minz_Log::debug('FreshRSS_EntryDAO::autoAddColumn error: ' . $e->getMessage());
+ Minz_Log::error('FreshRSS_EntryDAO::addColumn error: ' . $e->getMessage());
if ($hasTransaction) {
$this->bd->rollBack();
}
@@ -46,9 +46,44 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
return false;
}
- protected function autoAddColumn($errorInfo) {
+ private $triedUpdateToUtf8mb4 = false;
+
+ protected function updateToUtf8mb4() {
+ if ($this->triedUpdateToUtf8mb4) {
+ return false;
+ }
+ $this->triedUpdateToUtf8mb4 = true;
+ $db = FreshRSS_Context::$system_conf->db;
+ if ($db['type'] === 'mysql') {
+ include_once(APP_PATH . '/SQL/install.sql.mysql.php');
+ if (defined('SQL_UPDATE_UTF8MB4')) {
+ Minz_Log::warning('Updating MySQL to UTF8MB4...');
+ $hadTransaction = $this->bd->inTransaction();
+ if ($hadTransaction) {
+ $this->bd->commit();
+ }
+ $ok = false;
+ try {
+ $sql = sprintf(SQL_UPDATE_UTF8MB4, $this->prefix, $db['base']);
+ $stm = $this->bd->prepare($sql);
+ $ok = $stm->execute();
+ } catch (Exception $e) {
+ Minz_Log::error('FreshRSS_EntryDAO::updateToUtf8mb4 error: ' . $e->getMessage());
+ }
+ if ($hadTransaction) {
+ $this->bd->beginTransaction();
+ //NB: Transaction not starting. Why? (tested on PHP 7.0.8-0ubuntu and MySQL 5.7.13-0ubuntu)
+ }
+ return $ok;
+ }
+ }
+ return false;
+ }
+
+ protected function autoUpdateDb($errorInfo) {
if (isset($errorInfo[0])) {
- if ($errorInfo[0] == '42S22') { //ER_BAD_FIELD_ERROR
+ if ($errorInfo[0] === '42S22') { //ER_BAD_FIELD_ERROR
+ //autoAddColumn
foreach (array('lastSeen', 'hash') as $column) {
if (stripos($errorInfo[2], $column) !== false) {
return $this->addColumn($column);
@@ -56,6 +91,11 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
}
}
}
+ if (isset($errorInfo[1])) {
+ if ($errorInfo[1] == '1366') { //ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
+ return $this->updateToUtf8mb4();
+ }
+ }
return false;
}
@@ -94,7 +134,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
return $this->bd->lastInsertId();
} else {
$info = $this->addEntryPrepared == null ? array(0 => '', 1 => '', 2 => 'syntax error') : $this->addEntryPrepared->errorInfo();
- if ($this->autoAddColumn($info)) {
+ if ($this->autoUpdateDb($info)) {
return $this->addEntry($valuesTmp);
} elseif ((int)($info[0] / 1000) !== 23) { //Filter out "SQLSTATE Class code 23: Constraint Violation" because of expected duplicate entries
Minz_Log::error('SQL error addEntry: ' . $info[0] . ': ' . $info[1] . ' ' . $info[2]
@@ -145,7 +185,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
return $this->bd->lastInsertId();
} else {
$info = $this->updateEntryPrepared == null ? array(0 => '', 1 => '', 2 => 'syntax error') : $this->updateEntryPrepared->errorInfo();
- if ($this->autoAddColumn($info)) {
+ if ($this->autoUpdateDb($info)) {
return $this->updateEntry($valuesTmp);
}
Minz_Log::error('SQL error updateEntry: ' . $info[0] . ': ' . $info[1] . ' ' . $info[2]
@@ -304,7 +344,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
* @param integer $priorityMin
* @return integer affected rows
*/
- public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0) {
+ public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0, $filter = null, $state = 0) {
if ($idMax == 0) {
$idMax = time() . '000000';
Minz_Log::debug('Calling markReadEntries(0) is deprecated!');
@@ -319,8 +359,11 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$sql .= ' AND f.priority > ' . intval($priorityMin);
}
$values = array($idMax);
- $stm = $this->bd->prepare($sql);
- if (!($stm && $stm->execute($values))) {
+
+ list($searchValues, $search) = $this->sqlListEntriesWhere('e.', $filter, $state);
+
+ $stm = $this->bd->prepare($sql . $search);
+ if (!($stm && $stm->execute(array_merge($values, $searchValues)))) {
$info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
Minz_Log::error('SQL error markReadEntries: ' . $info[2]);
return false;
@@ -343,7 +386,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
* @param integer $idMax fail safe article ID
* @return integer affected rows
*/
- public function markReadCat($id, $idMax = 0) {
+ public function markReadCat($id, $idMax = 0, $filter = null, $state = 0) {
if ($idMax == 0) {
$idMax = time() . '000000';
Minz_Log::debug('Calling markReadCat(0) is deprecated!');
@@ -353,8 +396,11 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
. 'SET e.is_read=1 '
. 'WHERE f.category=? AND e.is_read=0 AND e.id <= ?';
$values = array($id, $idMax);
- $stm = $this->bd->prepare($sql);
- if (!($stm && $stm->execute($values))) {
+
+ list($searchValues, $search) = $this->sqlListEntriesWhere('e.', $filter, $state);
+
+ $stm = $this->bd->prepare($sql . $search);
+ if (!($stm && $stm->execute(array_merge($values, $searchValues)))) {
$info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
Minz_Log::error('SQL error markReadCat: ' . $info[2]);
return false;
@@ -377,19 +423,22 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
* @param integer $idMax fail safe article ID
* @return integer affected rows
*/
- public function markReadFeed($id_feed, $idMax = 0) {
+ public function markReadFeed($id_feed, $idMax = 0, $filter = null, $state = 0) {
if ($idMax == 0) {
$idMax = time() . '000000';
Minz_Log::debug('Calling markReadFeed(0) is deprecated!');
}
$this->bd->beginTransaction();
- $sql = 'UPDATE `' . $this->prefix . 'entry` '
- . 'SET is_read=1 '
- . 'WHERE id_feed=? AND is_read=0 AND id <= ?';
+ $sql = 'UPDATE `' . $this->prefix . 'entry` e '
+ . 'SET e.is_read=1 '
+ . 'WHERE e.id_feed=? AND e.is_read=0 AND e.id <= ?';
$values = array($id_feed, $idMax);
- $stm = $this->bd->prepare($sql);
- if (!($stm && $stm->execute($values))) {
+
+ list($searchValues, $search) = $this->sqlListEntriesWhere('e.', $filter, $state);
+
+ $stm = $this->bd->prepare($sql . $search);
+ if (!($stm && $stm->execute(array_merge($values, $searchValues)))) {
$info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
Minz_Log::error('SQL error markReadFeed: ' . $info[2]);
$this->bd->rollBack();
@@ -453,52 +502,24 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
return 'CONCAT(' . $s1 . ',' . $s2 . ')'; //MySQL
}
- private function sqlListWhere($type = 'a', $id = '', $state = FreshRSS_Entry::STATE_ALL, $order = 'DESC', $limit = 1, $firstId = '', $filter = '', $date_min = 0) {
- if (!$state) {
- $state = FreshRSS_Entry::STATE_ALL;
- }
- $where = '';
- $joinFeed = false;
+ protected function sqlListEntriesWhere($alias = '', $filter = null, $state = FreshRSS_Entry::STATE_ALL, $order = 'DESC', $firstId = '', $date_min = 0) {
+ $search = ' ';
$values = array();
- switch ($type) {
- case 'a':
- $where .= 'f.priority > 0 ';
- $joinFeed = true;
- break;
- case 's': //Deprecated: use $state instead
- $where .= 'e1.is_favorite=1 ';
- break;
- case 'c':
- $where .= 'f.category=? ';
- $values[] = intval($id);
- $joinFeed = true;
- break;
- case 'f':
- $where .= 'e1.id_feed=? ';
- $values[] = intval($id);
- break;
- case 'A':
- $where .= '1 ';
- break;
- default:
- throw new FreshRSS_EntriesGetter_Exception('Bad type in Entry->listByType: [' . $type . ']!');
- }
-
if ($state & FreshRSS_Entry::STATE_NOT_READ) {
if (!($state & FreshRSS_Entry::STATE_READ)) {
- $where .= 'AND e1.is_read=0 ';
+ $search .= 'AND ' . $alias . 'is_read=0 ';
}
}
elseif ($state & FreshRSS_Entry::STATE_READ) {
- $where .= 'AND e1.is_read=1 ';
+ $search .= 'AND ' . $alias . 'is_read=1 ';
}
if ($state & FreshRSS_Entry::STATE_FAVORITE) {
if (!($state & FreshRSS_Entry::STATE_NOT_FAVORITE)) {
- $where .= 'AND e1.is_favorite=1 ';
+ $search .= 'AND ' . $alias . 'is_favorite=1 ';
}
}
elseif ($state & FreshRSS_Entry::STATE_NOT_FAVORITE) {
- $where .= 'AND e1.is_favorite=0 ';
+ $search .= 'AND ' . $alias . 'is_favorite=0 ';
}
switch ($order) {
@@ -512,76 +533,111 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$firstId = $order === 'DESC' ? '9000000000'. '000000' : '0'; //MySQL optimization. TODO: check if this is needed again, after the filtering for old articles has been removed in 0.9-dev
}*/
if ($firstId !== '') {
- $where .= 'AND e1.id ' . ($order === 'DESC' ? '<=' : '>=') . $firstId . ' ';
+ $search .= 'AND ' . $alias . 'id ' . ($order === 'DESC' ? '<=' : '>=') . $firstId . ' ';
}
if ($date_min > 0) {
- $where .= 'AND e1.id >= ' . $date_min . '000000 ';
+ $search .= 'AND ' . $alias . 'id >= ' . $date_min . '000000 ';
}
- $search = '';
if ($filter) {
if ($filter->getIntitle()) {
- $search .= 'AND e1.title LIKE ? ';
+ $search .= 'AND ' . $alias . 'title LIKE ? ';
$values[] = "%{$filter->getIntitle()}%";
}
if ($filter->getInurl()) {
- $search .= 'AND CONCAT(e1.link, e1.guid) LIKE ? ';
+ $search .= 'AND CONCAT(' . $alias . 'link, ' . $alias . 'guid) LIKE ? ';
$values[] = "%{$filter->getInurl()}%";
}
if ($filter->getAuthor()) {
- $search .= 'AND e1.author LIKE ? ';
+ $search .= 'AND ' . $alias . 'author LIKE ? ';
$values[] = "%{$filter->getAuthor()}%";
}
if ($filter->getMinDate()) {
- $search .= 'AND e1.id >= ? ';
+ $search .= 'AND ' . $alias . 'id >= ? ';
$values[] = "{$filter->getMinDate()}000000";
}
if ($filter->getMaxDate()) {
- $search .= 'AND e1.id <= ? ';
+ $search .= 'AND ' . $alias . 'id <= ? ';
$values[] = "{$filter->getMaxDate()}000000";
}
if ($filter->getMinPubdate()) {
- $search .= 'AND e1.date >= ? ';
+ $search .= 'AND ' . $alias . 'date >= ? ';
$values[] = $filter->getMinPubdate();
}
if ($filter->getMaxPubdate()) {
- $search .= 'AND e1.date <= ? ';
+ $search .= 'AND ' . $alias . 'date <= ? ';
$values[] = $filter->getMaxPubdate();
}
if ($filter->getTags()) {
$tags = $filter->getTags();
foreach ($tags as $tag) {
- $search .= 'AND e1.tags LIKE ? ';
+ $search .= 'AND ' . $alias . 'tags LIKE ? ';
$values[] = "%{$tag}%";
}
}
if ($filter->getSearch()) {
$search_values = $filter->getSearch();
foreach ($search_values as $search_value) {
- $search .= 'AND ' . $this->sqlconcat('e1.title', $this->isCompressed() ? 'UNCOMPRESS(content_bin)' : 'content') . ' LIKE ? ';
+ $search .= 'AND ' . $this->sqlconcat($alias . 'title', $this->isCompressed() ? 'UNCOMPRESS(' . $alias . 'content_bin)' : '' . $alias . 'content') . ' LIKE ? ';
$values[] = "%{$search_value}%";
}
}
}
- return array($values,
- 'SELECT e1.id FROM `' . $this->prefix . 'entry` e1 '
- . ($joinFeed ? 'INNER JOIN `' . $this->prefix . 'feed` f ON e1.id_feed=f.id ' : '')
+ return array($values, $search);
+ }
+
+ private function sqlListWhere($type = 'a', $id = '', $state = FreshRSS_Entry::STATE_ALL, $order = 'DESC', $limit = 1, $firstId = '', $filter = '', $date_min = 0) {
+ if (!$state) {
+ $state = FreshRSS_Entry::STATE_ALL;
+ }
+ $where = '';
+ $joinFeed = false;
+ $values = array();
+ switch ($type) {
+ case 'a':
+ $where .= 'f.priority > 0 ';
+ $joinFeed = true;
+ break;
+ case 's': //Deprecated: use $state instead
+ $where .= 'e.is_favorite=1 ';
+ break;
+ case 'c':
+ $where .= 'f.category=? ';
+ $values[] = intval($id);
+ $joinFeed = true;
+ break;
+ case 'f':
+ $where .= 'e.id_feed=? ';
+ $values[] = intval($id);
+ break;
+ case 'A':
+ $where .= '1 ';
+ break;
+ default:
+ throw new FreshRSS_EntriesGetter_Exception('Bad type in Entry->listByType: [' . $type . ']!');
+ }
+
+ list($searchValues, $search) = $this->sqlListEntriesWhere('e.', $filter, $state, $order, $firstId, $date_min);
+
+ return array(array_merge($values, $searchValues),
+ 'SELECT e.id FROM `' . $this->prefix . 'entry` e '
+ . ($joinFeed ? 'INNER JOIN `' . $this->prefix . 'feed` f ON e.id_feed=f.id ' : '')
. 'WHERE ' . $where
. $search
- . 'ORDER BY e1.id ' . $order
+ . 'ORDER BY e.id ' . $order
. ($limit > 0 ? ' LIMIT ' . $limit : '')); //TODO: See http://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/
}
public function listWhere($type = 'a', $id = '', $state = FreshRSS_Entry::STATE_ALL, $order = 'DESC', $limit = 1, $firstId = '', $filter = '', $date_min = 0) {
list($values, $sql) = $this->sqlListWhere($type, $id, $state, $order, $limit, $firstId, $filter, $date_min);
- $sql = 'SELECT e.id, e.guid, e.title, e.author, '
+ $sql = 'SELECT e0.id, e0.guid, e0.title, e0.author, '
. ($this->isCompressed() ? 'UNCOMPRESS(content_bin) AS content' : 'content')
- . ', e.link, e.date, e.is_read, e.is_favorite, e.id_feed, e.tags '
- . 'FROM `' . $this->prefix . 'entry` e '
+ . ', e0.link, e0.date, e0.is_read, e0.is_favorite, e0.id_feed, e0.tags '
+ . 'FROM `' . $this->prefix . 'entry` e0 '
. 'INNER JOIN ('
. $sql
- . ') e2 ON e2.id=e.id '
- . 'ORDER BY e.id ' . $order;
+ . ') e2 ON e2.id=e0.id '
+ . 'ORDER BY e0.id ' . $order;
$stm = $this->bd->prepare($sql);
$stm->execute($values);
@@ -615,7 +671,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
return $result;
} else {
$info = $stm == null ? array(0 => '', 1 => '', 2 => 'syntax error') : $stm->errorInfo();
- if ($this->autoAddColumn($info)) {
+ if ($this->autoUpdateDb($info)) {
return $this->listHashForFeedGuids($id_feed, $guids);
}
Minz_Log::error('SQL error listHashForFeedGuids: ' . $info[0] . ': ' . $info[1] . ' ' . $info[2]
@@ -636,7 +692,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
return $stm->rowCount();
} else {
$info = $stm == null ? array(0 => '', 1 => '', 2 => 'syntax error') : $stm->errorInfo();
- if ($this->autoAddColumn($info)) {
+ if ($this->autoUpdateDb($info)) {
return $this->updateLastSeen($id_feed, $guids);
}
Minz_Log::error('SQL error updateLastSeen: ' . $info[0] . ': ' . $info[1] . ' ' . $info[2]
@@ -692,7 +748,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
public function optimizeTable() {
$sql = 'OPTIMIZE TABLE `' . $this->prefix . 'entry`'; //MySQL
$stm = $this->bd->prepare($sql);
- $stm->execute();
+ if ($stm) {
+ return $stm->execute();
+ }
}
public function size($all = false) {
diff --git a/app/Models/EntryDAOSQLite.php b/app/Models/EntryDAOSQLite.php
index ff049d813..dad34a93d 100644
--- a/app/Models/EntryDAOSQLite.php
+++ b/app/Models/EntryDAOSQLite.php
@@ -2,11 +2,12 @@
class FreshRSS_EntryDAOSQLite extends FreshRSS_EntryDAO {
- protected function autoAddColumn($errorInfo) {
+ protected function autoUpdateDb($errorInfo) {
if (empty($errorInfo[0]) || $errorInfo[0] == '42S22') { //ER_BAD_FIELD_ERROR
+ //autoAddColumn
if ($tableInfo = $this->bd->query("SELECT sql FROM sqlite_master where name='entry'")) {
$showCreate = $tableInfo->fetchColumn();
- Minz_Log::debug('FreshRSS_EntryDAOSQLite::autoAddColumn: ' . $showCreate);
+ Minz_Log::debug('FreshRSS_EntryDAOSQLite::autoUpdateDb: ' . $showCreate);
foreach (array('lastSeen', 'hash') as $column) {
if (stripos($showCreate, $column) === false) {
return $this->addColumn($column);
@@ -118,7 +119,7 @@ class FreshRSS_EntryDAOSQLite extends FreshRSS_EntryDAO {
* @param integer $priorityMin
* @return integer affected rows
*/
- public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0) {
+ public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0, $filter = null, $state = 0) {
if ($idMax == 0) {
$idMax = time() . '000000';
Minz_Log::debug('Calling markReadEntries(0) is deprecated!');
@@ -131,8 +132,11 @@ class FreshRSS_EntryDAOSQLite extends FreshRSS_EntryDAO {
$sql .= ' AND id_feed IN (SELECT f.id FROM `' . $this->prefix . 'feed` f WHERE f.priority > ' . intval($priorityMin) . ')';
}
$values = array($idMax);
- $stm = $this->bd->prepare($sql);
- if (!($stm && $stm->execute($values))) {
+
+ list($searchValues, $search) = $this->sqlListEntriesWhere('', $filter, $state);
+
+ $stm = $this->bd->prepare($sql . $search);
+ if (!($stm && $stm->execute(array_merge($values, $searchValues)))) {
$info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
Minz_Log::error('SQL error markReadEntries: ' . $info[2]);
return false;
@@ -155,7 +159,7 @@ class FreshRSS_EntryDAOSQLite extends FreshRSS_EntryDAO {
* @param integer $idMax fail safe article ID
* @return integer affected rows
*/
- public function markReadCat($id, $idMax = 0) {
+ public function markReadCat($id, $idMax = 0, $filter = null, $state = 0) {
if ($idMax == 0) {
$idMax = time() . '000000';
Minz_Log::debug('Calling markReadCat(0) is deprecated!');
@@ -166,8 +170,11 @@ class FreshRSS_EntryDAOSQLite extends FreshRSS_EntryDAO {
. 'WHERE is_read=0 AND id <= ? AND '
. 'id_feed IN (SELECT f.id FROM `' . $this->prefix . 'feed` f WHERE f.category=?)';
$values = array($idMax, $id);
- $stm = $this->bd->prepare($sql);
- if (!($stm && $stm->execute($values))) {
+
+ list($searchValues, $search) = $this->sqlListEntriesWhere('', $filter, $state);
+
+ $stm = $this->bd->prepare($sql . $search);
+ if (!($stm && $stm->execute(array_merge($values, $searchValues)))) {
$info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
Minz_Log::error('SQL error markReadCat: ' . $info[2]);
return false;
diff --git a/app/Models/Feed.php b/app/Models/Feed.php
index 986cc5015..6104b1e31 100644
--- a/app/Models/Feed.php
+++ b/app/Models/Feed.php
@@ -241,7 +241,7 @@ class FreshRSS_Feed extends Minz_Model {
if ((!$mtime) || $feed->error()) {
$errorMessage = $feed->error();
- throw new FreshRSS_Feed_Exception(($errorMessage == '' ? 'Feed error' : $errorMessage) . ' [' . $url . ']');
+ throw new FreshRSS_Feed_Exception(($errorMessage == '' ? 'Unknown error for feed' : $errorMessage) . ' [' . $url . ']');
}
$links = $feed->get_links('self');
@@ -446,7 +446,7 @@ class FreshRSS_Feed extends Minz_Model {
Minz_Log::warning('Invalid JSON for PubSubHubbub: ' . $this->url);
return false;
}
- $callbackUrl = checkUrl(FreshRSS_Context::$system_conf->base_url . 'api/pshb.php?k=' . $hubJson['key']);
+ $callbackUrl = checkUrl(Minz_Request::getBaseUrl() . '/api/pshb.php?k=' . $hubJson['key']);
if ($callbackUrl == '') {
Minz_Log::warning('Invalid callback for PubSubHubbub: ' . $this->url);
return false;
diff --git a/app/Models/StatsDAO.php b/app/Models/StatsDAO.php
index 5ca333396..4f83ff577 100644
--- a/app/Models/StatsDAO.php
+++ b/app/Models/StatsDAO.php
@@ -168,6 +168,7 @@ SQL;
$stm->execute();
$res = $stm->fetchAll(PDO::FETCH_NAMED);
+ $repartition = array();
foreach ($res as $value) {
$repartition[(int) $value['period']] = (int) $value['count'];
}
diff --git a/app/SQL/install.sql.mysql.php b/app/SQL/install.sql.mysql.php
index 0f4e04620..c78839ef7 100644
--- a/app/SQL/install.sql.mysql.php
+++ b/app/SQL/install.sql.mysql.php
@@ -2,17 +2,17 @@
define('SQL_CREATE_TABLES', '
CREATE TABLE IF NOT EXISTS `%1$scategory` (
`id` SMALLINT NOT NULL AUTO_INCREMENT, -- v0.7
- `name` varchar(255) NOT NULL,
+ `name` varchar(191) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY (`name`) -- v0.7
-) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
+) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
ENGINE = INNODB;
CREATE TABLE IF NOT EXISTS `%1$sfeed` (
`id` SMALLINT NOT NULL AUTO_INCREMENT, -- v0.7
`url` varchar(511) CHARACTER SET latin1 NOT NULL,
`category` SMALLINT DEFAULT 0, -- v0.7
- `name` varchar(255) NOT NULL,
+ `name` varchar(191) NOT NULL,
`website` varchar(255) CHARACTER SET latin1,
`description` text,
`lastUpdate` int(11) DEFAULT 0, -- Until year 2038
@@ -30,7 +30,7 @@ CREATE TABLE IF NOT EXISTS `%1$sfeed` (
INDEX (`name`), -- v0.7
INDEX (`priority`), -- v0.7
INDEX (`keep_history`) -- v0.7
-) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
+) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
ENGINE = INNODB;
CREATE TABLE IF NOT EXISTS `%1$sentry` (
@@ -53,7 +53,7 @@ CREATE TABLE IF NOT EXISTS `%1$sentry` (
INDEX (`is_favorite`), -- v0.7
INDEX (`is_read`), -- v0.7
INDEX `entry_lastSeen_index` (`lastSeen`) -- v1.1.1
-) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
+) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
ENGINE = INNODB;
INSERT IGNORE INTO `%1$scategory` (id, name) VALUES(1, "%2$s");
@@ -62,3 +62,24 @@ INSERT IGNORE INTO `%1$sfeed` (url, category, name, website, description, ttl) V
');
define('SQL_DROP_TABLES', 'DROP TABLES %1$sentry, %1$sfeed, %1$scategory');
+
+define('SQL_UPDATE_UTF8MB4', '
+ALTER DATABASE `%2$s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+ALTER TABLE `%1$scategory` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+UPDATE `%1$scategory` SET name=SUBSTRING(name,1,190) WHERE LENGTH(name) > 191;
+ALTER TABLE `%1$scategory` MODIFY `name` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
+OPTIMIZE TABLE `%1$scategory`;
+
+ALTER TABLE `%1$sfeed` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+UPDATE `%1$sfeed` SET name=SUBSTRING(name,1,190) WHERE LENGTH(name) > 191;
+ALTER TABLE `%1$sfeed` MODIFY `name` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
+ALTER TABLE `%1$sfeed` MODIFY `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+OPTIMIZE TABLE `%1$sfeed`;
+
+ALTER TABLE `%1$sentry` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `%1$sentry` MODIFY `title` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
+ALTER TABLE `%1$sentry` MODIFY `author` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+ALTER TABLE `%1$sentry` MODIFY `tags` VARCHAR(1023) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+OPTIMIZE TABLE `%1$sentry`;
+');
diff --git a/app/i18n/cz/admin.php b/app/i18n/cz/admin.php
index 342ac7ccd..881c02fc6 100644
--- a/app/i18n/cz/admin.php
+++ b/app/i18n/cz/admin.php
@@ -8,7 +8,6 @@ return array(
'form' => 'Webovรฝ formulรกล™ (tradiฤnรญ, vyลพaduje JavaScript)',
'http' => 'HTTP (pro pokroฤilรฉ uลพivatele s HTTPS)',
'none' => 'ลฝรกdnรฝ (nebezpeฤnรฉ)',
- 'persona' => 'Mozilla Persona (modernรญ, vyลพaduje JavaScript)',
'title' => 'Pล™ihlรกลกenรญ',
'title_reset' => 'Reset pล™ihlรกลกenรญ',
'token' => 'Authentizaฤnรญ token',
@@ -75,10 +74,6 @@ return array(
'nok' => 'Nemรกte PDO nebo nฤ›kterรฝ z podporovanรฝch ovladaฤลฏ (pdo_mysql, pdo_sqlite).',
'ok' => 'Mรกte PDO a alespoลˆ jeden z podporovanรฝch ovladaฤลฏ (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Zkontrolujte oprรกvnฤ›nรญ adresรกล™e <em>./data/persona</em>. HTTP server musรญ mรญt do tohoto adresรกล™e prรกva zรกpisu',
- 'ok' => 'Oprรกvnฤ›nรญ adresรกล™e Mozilla Persona jsou v poล™รกdku.',
- ),
'php' => array(
'_' => 'PHP instalace',
'nok' => 'Vaลกe verze PHP je %s, ale FreshRSS vyลพaduje alespoลˆ verzi %s.',
@@ -169,7 +164,6 @@ return array(
'user' => array(
'articles_and_size' => '%s ฤlรกnkลฏ (%s)',
'create' => 'Vytvoล™it novรฉho uลพivatele',
- 'email_persona' => 'Email pro pล™ihlรกลกenรญ<br /><small>(pro <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'language' => 'Jazyk',
'number' => 'Zatรญm je vytvoล™en %d รบฤet',
'numbers' => 'Zatรญm je vytvoล™eno %d รบฤtลฏ',
diff --git a/app/i18n/cz/conf.php b/app/i18n/cz/conf.php
index 823ab1ea3..ec25f988c 100644
--- a/app/i18n/cz/conf.php
+++ b/app/i18n/cz/conf.php
@@ -76,7 +76,6 @@ return array(
'_' => 'Smazรกnรญ รบฤtu',
'warn' => 'Vรกลก รบฤet bude smazรกn spolu se vลกemi souvisejรญcรญmi daty',
),
- 'email_persona' => 'Email pro pล™ihlรกลกenรญ<br /><small>(pro <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'Password API<br /><small>(tzn. pro mobilnรญ aplikace)</small>',
'password_form' => 'Heslo<br /><small>(pro pล™ihlรกลกenรญ webovรฝm formulรกล™em)</small>',
'password_format' => 'Alespoลˆ 7 znakลฏ',
diff --git a/app/i18n/cz/feedback.php b/app/i18n/cz/feedback.php
index b75a4a15a..81302afca 100644
--- a/app/i18n/cz/feedback.php
+++ b/app/i18n/cz/feedback.php
@@ -21,7 +21,6 @@ return array(
'success' => 'Jste odhlรกลกen',
),
'no_password_set' => 'Heslo administrรกtora nebylo nastaveno. Tato funkce nenรญ k dispozici.',
- 'not_persona' => 'Resetovat lze pouze systรฉm Persona.',
),
'conf' => array(
'error' => 'Bฤ›hem uklรกdรกnรญ nastavenรญ doลกlo k chybฤ›',
diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php
index 5e15ae6f9..e73325c55 100644
--- a/app/i18n/cz/gen.php
+++ b/app/i18n/cz/gen.php
@@ -24,8 +24,6 @@ return array(
'email' => 'Email',
'keep_logged_in' => 'Zapamatovat pล™ihlรกลกenรญ <small>(1 mฤ›sรญc)</small>',
'login' => 'Login',
- 'login_persona' => 'Pล™ihlรกลกenรญ pomocรญ Persona',
- 'login_persona_problem' => 'Problรฉm s pล™ipojenรญm k Persona?',
'logout' => 'Odhlรกลกenรญ',
'password' => array(
'_' => 'Heslo',
@@ -42,7 +40,6 @@ return array(
'admin' => 'Nรกzev administrรกtorskรฉho รบฤtu',
'format' => '<small>maximรกlnฤ› 16 alfanumerickรฝch znakลฏ</small>',
),
- 'will_reset' => 'Pล™ihlaลกovacรญ systรฉm bude vyresetovรกn: mรญsto sytรฉmu Persona bude pouลพito pล™ihlรกลกenรญ formulรกล™em.',
),
'date' => array(
'Apr' => '\\D\\u\\b\\e\\n',
diff --git a/app/i18n/cz/index.php b/app/i18n/cz/index.php
index 5691d12af..cb0e5955d 100644
--- a/app/i18n/cz/index.php
+++ b/app/i18n/cz/index.php
@@ -6,7 +6,7 @@ return array(
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
'bugs_reports' => 'Hlรกลกenรญ chyb',
'credits' => 'Podฤ›kovรกnรญ',
- 'credits_content' => 'Nฤ›kterรฉ designovรฉ prvky pochรกzejรญ z <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, FreshRSS ale tuto platformu nevyuลพรญvรก. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ikony</a> pochรกzejรญ z <a href="https://www.gnome.org/">GNOME projektu</a>. Font <em>Open Sans</em> vytvoล™il <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Favicony jsou shromaลพฤovรกny pomocรญ <a href="https://getfavicon.appspot.com/">getFavicon API</a>. FreshRSS je zaloลพen na PHP framework <a href="https://github.com/marienfressinaud/MINZ">Minz</a>.',
+ 'credits_content' => 'Nฤ›kterรฉ designovรฉ prvky pochรกzejรญ z <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, FreshRSS ale tuto platformu nevyuลพรญvรก. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Ikony</a> pochรกzejรญ z <a href="https://www.gnome.org/">GNOME projektu</a>. Font <em>Open Sans</em> vytvoล™il <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS je zaloลพen na PHP framework <a href="https://github.com/marienfressinaud/MINZ">Minz</a>.',
'freshrss_description' => 'FreshRSS je ฤteฤka RSS kanรกlลฏ urฤenรก k provozu na vlastnรญm serveru, podobnรก <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> nebo <a href="http://projet.idleman.fr/leed/">Leed</a>. Je to nenรกroฤnรฝ a jednoduchรฝ, zรกroveลˆ ale mocnรฝ a konfigurovatelnรฝ nรกstroj.',
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">na Github</a>',
'license' => 'Licence',
diff --git a/app/i18n/cz/install.php b/app/i18n/cz/install.php
index bc3e01992..6b94c0d4b 100644
--- a/app/i18n/cz/install.php
+++ b/app/i18n/cz/install.php
@@ -9,13 +9,11 @@ return array(
'reinstall' => 'Reinstalovat FreshRSS',
),
'auth' => array(
- 'email_persona' => 'Email pro pล™ihlรกลกenรญ<br /><small>(pro <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'form' => 'Webovรฝ formulรกล™ (tradiฤnรญ, vyลพaduje JavaScript)',
'http' => 'HTTP (pro pokroฤilรฉ uลพivatele s HTTPS)',
'none' => 'ลฝรกdnรฝ (nebezpeฤnรฉ)',
'password_form' => 'Heslo<br /><small>(pro pล™ihlรกลกenรญ webovรฝm formulรกล™em)</small>',
'password_format' => 'Alespoลˆ 7 znakลฏ',
- 'persona' => 'Mozilla Persona (modernรญ, vyลพaduje JavaScript)',
'type' => 'Zpลฏsob pล™ihlรกลกenรญ',
),
'bdd' => array(
@@ -78,10 +76,6 @@ return array(
'nok' => 'Nemรกte PDO nebo nฤ›kterรฝ z podporovanรฝch ovladaฤลฏ (pdo_mysql, pdo_sqlite).',
'ok' => 'Mรกte PDO a alespoลˆ jeden z podporovanรฝch ovladaฤลฏ (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Zkontrolujte oprรกvnฤ›nรญ adresรกล™e <em>./data/persona</em>. HTTP server musรญ mรญt do tohoto adresรกล™e prรกva zรกpisu',
- 'ok' => 'Oprรกvnฤ›nรญ adresรกล™e Mozilla Persona jsou v poล™รกdku.',
- ),
'php' => array(
'nok' => 'Vaลกe verze PHP je %s, ale FreshRSS vyลพaduje alespoลˆ verzi %s.',
'ok' => 'Vaลกe verze PHP je %s a je kompatibilnรญ s FreshRSS.',
diff --git a/app/i18n/de/admin.php b/app/i18n/de/admin.php
index 6e6cc0956..7b75fe5f4 100644
--- a/app/i18n/de/admin.php
+++ b/app/i18n/de/admin.php
@@ -8,7 +8,6 @@ return array(
'form' => 'Webformular (traditionell, benรถtigt JavaScript)',
'http' => 'HTTP (HTTPS fรผr erfahrene Benutzer)',
'none' => 'Keine (gefรคhrlich)',
- 'persona' => 'Mozilla Persona (modern, benรถtigt JavaScript)',
'title' => 'Authentifizierung',
'title_reset' => 'Zurรผcksetzen der Authentifizierung',
'token' => 'Authentifizierungs-Token',
@@ -75,10 +74,6 @@ return array(
'nok' => 'Ihnen fehlt PDO oder einer der unterstรผtzten Treiber (pdo_mysql, pdo_sqlite).',
'ok' => 'Sie haben PDO und mindestens einen der unterstรผtzten Treiber (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'รœberprรผfen Sie die Berechtigungen des Verzeichnisses <em>./data/persona</em>. Der HTTP-Server muss Schreibrechte besitzen.',
- 'ok' => 'Die Berechtigungen des Verzeichnisses <em>./data/persona</em> sind in Ordnung.',
- ),
'php' => array(
'_' => 'PHP-Installation',
'nok' => 'Ihre PHP-Version ist %s aber FreshRSS benรถtigt mindestens Version %s.',
@@ -169,7 +164,6 @@ return array(
'user' => array(
'articles_and_size' => '%s Artikel (%s)',
'create' => 'Neuen Benutzer erstellen',
- 'email_persona' => 'Anmelde-E-Mail-Adresse<br /><small>(fรผr <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'language' => 'Sprache',
'number' => 'Es wurde bis jetzt %d Account erstellt',
'numbers' => 'Es wurden bis jetzt %d Accounts erstellt',
diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php
index c1a762f12..7c57d5655 100644
--- a/app/i18n/de/conf.php
+++ b/app/i18n/de/conf.php
@@ -76,7 +76,6 @@ return array(
'_' => 'Accountlรถschung',
'warn' => 'Dein Account und alle damit bezogenen Daten werden gelรถscht.',
),
- 'email_persona' => 'Anmelde-E-Mail-Adresse<br /><small>(fรผr <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'Passwort-API<br /><small>(z. B. fรผr mobile Anwendungen)</small>',
'password_form' => 'Passwort<br /><small>(fรผr die Anmeldemethode per Webformular)</small>',
'password_format' => 'mindestens 7 Zeichen',
diff --git a/app/i18n/de/feedback.php b/app/i18n/de/feedback.php
index 4c15aadc3..f93992982 100644
--- a/app/i18n/de/feedback.php
+++ b/app/i18n/de/feedback.php
@@ -21,7 +21,6 @@ return array(
'success' => 'Sie sind abgemeldet',
),
'no_password_set' => 'Administrator-Passwort ist nicht gesetzt worden. Dieses Feature ist nicht verfรผgbar.',
- 'not_persona' => 'Nur das Persona-System kann zurรผckgesetzt werden.',
),
'conf' => array(
'error' => 'Wรคhrend der Speicherung der Konfiguration trat ein Fehler auf',
diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php
index 4b85c722a..c6e7f1ef3 100644
--- a/app/i18n/de/gen.php
+++ b/app/i18n/de/gen.php
@@ -24,8 +24,6 @@ return array(
'email' => 'E-Mail-Adresse',
'keep_logged_in' => 'Eingeloggt bleiben <small>(1 Monat)</small>',
'login' => 'Anmelden',
- 'login_persona' => 'Anmelden mit Persona',
- 'login_persona_problem' => 'Verbindungsproblem mit Persona?',
'logout' => 'Abmelden',
'password' => array(
'_' => 'Passwort',
@@ -42,7 +40,6 @@ return array(
'admin' => 'Administrator-Nutzername',
'format' => '<small>maximal 16 alphanumerische Zeichen</small>',
),
- 'will_reset' => 'Authentifikationssystem wird zurรผckgesetzt: ein Formular wird anstelle von Persona benutzt.',
),
'date' => array(
'Apr' => '\\A\\p\\r\\i\\l',
diff --git a/app/i18n/de/index.php b/app/i18n/de/index.php
index 04798cdce..df92d8085 100644
--- a/app/i18n/de/index.php
+++ b/app/i18n/de/index.php
@@ -6,7 +6,7 @@ return array(
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
'bugs_reports' => 'Fehlerberichte',
'credits' => 'Credits',
- 'credits_content' => 'Einige Designelemente stammen von <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, obwohl FreshRSS dieses Framework nicht nutzt. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Icons</a> stammen vom <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> Font wurde von <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a> erstellt. Favicons werden mit <a href="https://getfavicon.appspot.com/">getFavicon API</a> gesammelt. FreshRSS basiert auf <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, einem PHP-Framework.',
+ 'credits_content' => 'Einige Designelemente stammen von <a href="http://twitter.github.io/bootstrap/">Bootstrap</a>, obwohl FreshRSS dieses Framework nicht nutzt. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Icons</a> stammen vom <a href="https://www.gnome.org/">GNOME project</a>. <em>Open Sans</em> Font wurde von <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a> erstellt. FreshRSS basiert auf <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, einem PHP-Framework.',
'freshrss_description' => 'FreshRSS ist ein RSS-Feedsaggregator zum selbst hosten wie zum Beispiel <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> oder <a href="http://projet.idleman.fr/leed/">Leed</a>. Er ist leicht und einfach zu handhaben und gleichzeitig ein leistungsstarkes und konfigurierbares Werkzeug.',
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>',
'license' => 'Lizenz',
diff --git a/app/i18n/de/install.php b/app/i18n/de/install.php
index d16496818..a77822e7b 100644
--- a/app/i18n/de/install.php
+++ b/app/i18n/de/install.php
@@ -9,13 +9,11 @@ return array(
'reinstall' => 'Neuinstallation von FreshRSS',
),
'auth' => array(
- 'email_persona' => 'Anmelde-E-Mail-Adresse<br /><small>(fรผr <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'form' => 'Webformular (traditionell, benรถtigt JavaScript)',
'http' => 'HTTP (HTTPS fรผr erfahrene Benutzer)',
'none' => 'Keine (gefรคhrlich)',
'password_form' => 'Passwort<br /><small>(fรผr die Anmeldemethode per Webformular)</small>',
'password_format' => 'mindestens 7 Zeichen',
- 'persona' => 'Mozilla Persona (modern, benรถtigt JavaScript)',
'type' => 'Authentifizierungsmethode',
),
'bdd' => array(
@@ -78,10 +76,6 @@ return array(
'nok' => 'Ihnen fehlt PDO oder einer der unterstรผtzten Treiber (pdo_mysql, pdo_sqlite).',
'ok' => 'Sie haben PDO und mindestens einen der unterstรผtzten Treiber (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'รœberprรผfen Sie die Berechtigungen des Verzeichnisses <em>./data/persona</em>. Der HTTP-Server muss Schreibrechte besitzen.',
- 'ok' => 'Die Berechtigungen des Verzeichnisses <em>./data/persona</em> sind in Ordnung.',
- ),
'php' => array(
'nok' => 'Ihre PHP-Version ist %s aber FreshRSS benรถtigt mindestens Version %s.',
'ok' => 'Ihre PHP-Version ist %s, welche kompatibel mit FreshRSS ist.',
diff --git a/app/i18n/en/admin.php b/app/i18n/en/admin.php
index a58771edf..a88552087 100644
--- a/app/i18n/en/admin.php
+++ b/app/i18n/en/admin.php
@@ -8,7 +8,6 @@ return array(
'form' => 'Web form (traditional, requires JavaScript)',
'http' => 'HTTP (for advanced users with HTTPS)',
'none' => 'None (dangerous)',
- 'persona' => 'Mozilla Persona (modern, requires JavaScript)',
'title' => 'Authentication',
'title_reset' => 'Authentication reset',
'token' => 'Authentication token',
@@ -75,10 +74,6 @@ return array(
'nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite).',
'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Check permissions on <em>./data/persona</em> directory. HTTP server must have rights to write into',
- 'ok' => 'Permissions on Mozilla Persona directory are good.',
- ),
'php' => array(
'_' => 'PHP installation',
'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.',
@@ -169,7 +164,6 @@ return array(
'user' => array(
'articles_and_size' => '%s articles (%s)',
'create' => 'Create new user',
- 'email_persona' => 'Login mail address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'language' => 'Language',
'number' => 'There is %d account created yet',
'numbers' => 'There are %d accounts created yet',
diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php
index 38e9197e9..b5ab73510 100644
--- a/app/i18n/en/conf.php
+++ b/app/i18n/en/conf.php
@@ -76,7 +76,6 @@ return array(
'_' => 'Account deletion',
'warn' => 'Your account and all the related data will be deleted.',
),
- 'email_persona' => 'Login email address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'API password<br /><small>(e.g., for mobile apps)</small>',
'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
'password_format' => 'At least 7 characters',
diff --git a/app/i18n/en/feedback.php b/app/i18n/en/feedback.php
index c9189c0d0..7ce2ae9cf 100644
--- a/app/i18n/en/feedback.php
+++ b/app/i18n/en/feedback.php
@@ -21,7 +21,6 @@ return array(
'success' => 'You are disconnected',
),
'no_password_set' => 'Administrator password hasnโ€™t been set. This feature isnโ€™t available.',
- 'not_persona' => 'Only Persona system can be reset.',
),
'conf' => array(
'error' => 'An error occurred during configuration saving',
diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php
index ba4e2f86c..17b47ba2f 100644
--- a/app/i18n/en/gen.php
+++ b/app/i18n/en/gen.php
@@ -24,8 +24,6 @@ return array(
'email' => 'Email address',
'keep_logged_in' => 'Keep me logged in <small>(1 month)</small>',
'login' => 'Login',
- 'login_persona' => 'Login with Persona',
- 'login_persona_problem' => 'Connection problem with Persona?',
'logout' => 'Logout',
'password' => array(
'_' => 'Password',
@@ -42,7 +40,6 @@ return array(
'admin' => 'Administrator username',
'format' => '<small>maximum 16 alphanumeric characters</small>',
),
- 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.',
),
'date' => array(
'Apr' => '\\A\\p\\r\\i\\l',
diff --git a/app/i18n/en/index.php b/app/i18n/en/index.php
index 80fa3d950..eb6413e3c 100644
--- a/app/i18n/en/index.php
+++ b/app/i18n/en/index.php
@@ -6,7 +6,7 @@ return array(
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
'bugs_reports' => 'Bugs reports',
'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 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.',
+ '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 has been created by <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS is based on <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, a PHP framework.',
'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.',
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>',
'license' => 'License',
diff --git a/app/i18n/en/install.php b/app/i18n/en/install.php
index 4b5bbc62e..d1c5f37c8 100644
--- a/app/i18n/en/install.php
+++ b/app/i18n/en/install.php
@@ -9,13 +9,11 @@ return array(
'reinstall' => 'Reinstall FreshRSS',
),
'auth' => array(
- 'email_persona' => 'Login email address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'form' => 'Web form (traditional, requires JavaScript)',
'http' => 'HTTP (for advanced users with HTTPS)',
'none' => 'None (dangerous)',
'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
'password_format' => 'At least 7 characters',
- 'persona' => 'Mozilla Persona (modern, requires JavaScript)',
'type' => 'Authentication method',
),
'bdd' => array(
@@ -78,10 +76,6 @@ return array(
'nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite).',
'ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Check permissions on <em>./data/persona</em> directory. HTTP server must have rights to write into',
- 'ok' => 'Permissions on Mozilla Persona directory are good.',
- ),
'php' => array(
'nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.',
'ok' => 'Your PHP version is %s, which is compatible with FreshRSS.',
diff --git a/app/i18n/fr/admin.php b/app/i18n/fr/admin.php
index f4f267306..c359e9d24 100644
--- a/app/i18n/fr/admin.php
+++ b/app/i18n/fr/admin.php
@@ -8,7 +8,6 @@ return array(
'form' => 'Formulaire (traditionnel, requiert JavaScript)',
'http' => 'HTTP (pour utilisateurs avancรฉs avec HTTPS)',
'none' => 'Aucune (dangereux)',
- 'persona' => 'Mozilla Persona (moderne, requiert JavaScript)',
'title' => 'Authentification',
'title_reset' => 'Rรฉinitialisation de lโ€™authentification',
'token' => 'Jeton dโ€™identification',
@@ -75,10 +74,6 @@ return array(
'nok' => 'Vous ne disposez pas de PDO ou dโ€™un des drivers supportรฉs (pdo_mysql, pdo_sqlite).',
'ok' => 'Vous disposez de PDO et dโ€™au moins un des drivers supportรฉs (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Veuillez vรฉrifier les droits sur le rรฉpertoire <em>./data/persona</em>. Le serveur HTTP doit รชtre capable dโ€™รฉcrire dedans',
- 'ok' => 'Les droits sur le rรฉpertoire de Mozilla Persona sont bons.',
- ),
'php' => array(
'_' => 'Installation de PHP',
'nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s.',
@@ -169,7 +164,6 @@ return array(
'user' => array(
'articles_and_size' => '%s articles (%s)',
'create' => 'Crรฉer un nouvel utilisateur',
- 'email_persona' => 'Adresse courriel de connexion<br /><small>(pour <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'language' => 'Langue',
'number' => '%d compte a dรฉjร  รฉtรฉ crรฉรฉ',
'numbers' => '%d comptes ont dรฉjร  รฉtรฉ crรฉรฉs',
diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php
index 6193b7a01..7a6d12e17 100644
--- a/app/i18n/fr/conf.php
+++ b/app/i18n/fr/conf.php
@@ -76,7 +76,6 @@ return array(
'_' => 'Suppression du compte',
'warn' => 'Le compte et toutes les donnรฉes associรฉes vont รชtre supprimรฉes.',
),
- 'email_persona' => 'Adresse courriel de connexion<br /><small>(pour <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'Mot de passe API<br /><small>(ex. : pour applis mobiles)</small>',
'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
'password_format' => '7 caractรจres minimum',
diff --git a/app/i18n/fr/feedback.php b/app/i18n/fr/feedback.php
index e2364a251..15f3ab859 100644
--- a/app/i18n/fr/feedback.php
+++ b/app/i18n/fr/feedback.php
@@ -21,7 +21,6 @@ return array(
'success' => 'Vous avez รฉtรฉ dรฉconnectรฉ',
),
'no_password_set' => 'Aucun mot de passe administrateur nโ€™a รฉtรฉ prรฉcisรฉ. Cette fonctionnalitรฉ nโ€™est pas disponible.',
- 'not_persona' => 'Seul le systรจme dโ€™authentification Persona peut รชtre rรฉinitialisรฉ.',
),
'conf' => array(
'error' => 'Une erreur est survenue durant la sauvegarde de la configuration',
diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php
index 031098aa2..d61a716a7 100644
--- a/app/i18n/fr/gen.php
+++ b/app/i18n/fr/gen.php
@@ -24,8 +24,6 @@ return array(
'email' => 'Adresse courriel',
'keep_logged_in' => 'Rester connectรฉ <small>(1 mois)</small>',
'login' => 'Connexion',
- 'login_persona' => 'Connexion avec Persona',
- 'login_persona_problem' => 'Problรจme de connexion ร  Persona ?',
'logout' => 'Dรฉconnexion',
'password' => array(
'_' => 'Mot de passe',
@@ -42,7 +40,6 @@ return array(
'admin' => 'Nom dโ€™utilisateur administrateur',
'format' => '<small>16 caractรจres alphanumรฉriques maximum</small>',
),
- 'will_reset' => 'Le systรจme dโ€™authentification va รชtre rรฉinitialisรฉ : un formulaire sera utilisรฉ ร  la place de Persona.',
),
'date' => array(
'Apr' => '\\a\\v\\r\\i\\l',
diff --git a/app/i18n/fr/index.php b/app/i18n/fr/index.php
index 7e028ab92..62eedc280 100644
--- a/app/i18n/fr/index.php
+++ b/app/i18n/fr/index.php
@@ -6,7 +6,7 @@ return array(
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
'bugs_reports' => 'Rapports de bugs',
'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.',
+ '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://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS repose sur <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
'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.',
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">sur Github</a>',
'license' => 'Licence',
diff --git a/app/i18n/fr/install.php b/app/i18n/fr/install.php
index 91dfbbb09..946a210ee 100644
--- a/app/i18n/fr/install.php
+++ b/app/i18n/fr/install.php
@@ -9,13 +9,11 @@ return array(
'reinstall' => 'Rรฉinstaller FreshRSS',
),
'auth' => array(
- 'email_persona' => 'Adresse courriel de connexion<br /><small>(pour <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'form' => 'Formulaire (traditionnel, requiert JavaScript)',
'http' => 'HTTP (pour utilisateurs avancรฉs avec HTTPS)',
'none' => 'Aucune (dangereux)',
'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
'password_format' => '7 caractรจres minimum',
- 'persona' => 'Mozilla Persona (moderne, requiert JavaScript)',
'type' => 'Mรฉthode dโ€™authentification',
),
'bdd' => array(
@@ -78,10 +76,6 @@ return array(
'nok' => 'Vous ne disposez pas de PDO ou dโ€™un des drivers supportรฉs (pdo_mysql, pdo_sqlite).',
'ok' => 'Vous disposez de PDO et dโ€™au moins un des drivers supportรฉs (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Veuillez vรฉrifier les droits sur le rรฉpertoire <em>./data/persona</em>. Le serveur HTTP doit รชtre capable dโ€™รฉcrire dedans',
- 'ok' => 'Les droits sur le rรฉpertoire de Mozilla Persona sont bons.',
- ),
'php' => array(
'nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s.',
'ok' => 'Votre version de PHP est la %s, qui est compatible avec FreshRSS.',
diff --git a/app/i18n/it/admin.php b/app/i18n/it/admin.php
index 94b2d6762..4eea158f6 100644
--- a/app/i18n/it/admin.php
+++ b/app/i18n/it/admin.php
@@ -8,7 +8,6 @@ return array(
'form' => 'Web form (tradizionale, richiede JavaScript)',
'http' => 'HTTP (per gli utenti avanzati con HTTPS)',
'none' => 'Nessuno (pericoloso)',
- 'persona' => 'Mozilla Persona (moderno, richiede JavaScript)',
'title' => 'Autenticazione',
'title_reset' => 'Reset autenticazione',
'token' => 'Token di autenticazione',
@@ -75,10 +74,6 @@ return array(
'nok' => 'Manca PDO o uno degli altri driver supportati (pdo_mysql, pdo_sqlite).',
'ok' => 'PDO e altri driver supportati (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Verifica i permessi sulla cartella <em>./data/persona</em>. Il server HTTP deve avere i permessi per scriverci dentro',
- 'ok' => 'I permessi sulla cartella Mozilla Persona sono corretti.',
- ),
'php' => array(
'_' => 'Installazione PHP',
'nok' => 'Versione PHP %s FreshRSS richiede almeno la versione %s.',
@@ -169,7 +164,6 @@ return array(
'user' => array(
'articles_and_size' => '%s articoli (%s)',
'create' => 'Crea nuovo utente',
- 'email_persona' => 'Indirizzo mail<br /><small>(Login <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'language' => 'Lingua',
'number' => ' %d profilo utente creato',
'numbers' => 'Sono presenti %d profili utente',
diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php
index b757b3210..19b62c9a7 100644
--- a/app/i18n/it/conf.php
+++ b/app/i18n/it/conf.php
@@ -76,7 +76,6 @@ return array(
'_' => 'Cancellazione account',
'warn' => 'Il tuo account e tutti i dati associati saranno cancellati.',
),
- 'email_persona' => 'Indirizzo email<br /><small>(Login <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'Password API<br /><small>(e.g., per applicazioni mobili)</small>',
'password_form' => 'Password<br /><small>(per il login classico)</small>',
'password_format' => 'Almeno 7 caratteri',
diff --git a/app/i18n/it/feedback.php b/app/i18n/it/feedback.php
index caf1cd2b4..f217586b0 100644
--- a/app/i18n/it/feedback.php
+++ b/app/i18n/it/feedback.php
@@ -21,7 +21,6 @@ return array(
'success' => 'Disconnessione effettuata',
),
'no_password_set' => 'Password di amministrazione non impostata. Opzione non disponibile.',
- 'not_persona' => 'Solo il sistema Mozilla Persona puรฒ essere resettato.',
),
'conf' => array(
'error' => 'Si รจ verificato un errore durante il salvataggio della configurazione',
diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php
index d24377593..c02ddd13a 100644
--- a/app/i18n/it/gen.php
+++ b/app/i18n/it/gen.php
@@ -24,8 +24,6 @@ return array(
'email' => 'Indirizzo email',
'keep_logged_in' => 'Ricorda i dati <small>(1 mese)</small>',
'login' => 'Accedi',
- 'login_persona' => 'Accedi con Mozilla Persona',
- 'login_persona_problem' => 'Problemi di connessione con Mozilla Persona?',
'logout' => 'Esci',
'password' => array(
'_' => 'Password',
@@ -42,7 +40,6 @@ return array(
'admin' => 'Username amministratore',
'format' => '<small>massimo 16 caratteri alfanumerici</small>',
),
- 'will_reset' => 'Il sistema di autenticazione verrร  resettato: un form verrร  usato per Mozilla Persona.',
),
'date' => array(
'Apr' => '\\A\\p\\r\\i\\l\\e',
diff --git a/app/i18n/it/index.php b/app/i18n/it/index.php
index 584b044b1..d79502c79 100644
--- a/app/i18n/it/index.php
+++ b/app/i18n/it/index.php
@@ -6,7 +6,7 @@ return array(
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
'bugs_reports' => 'Bugs',
'credits' => 'Crediti',
- 'credits_content' => 'Alcuni elementi di design provengono da <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> sebbene FreshRSS non usi questo framework. Le <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icone</a> provengono dal progetto <a href="https://www.gnome.org/">GNOME</a>. Il carattere <em>Open Sans</em> รจ stato creato da <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Le Favicons vengono estratte con le API <a href="https://getfavicon.appspot.com/">getFavicon</a>. FreshRSS รจ basato su <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
+ 'credits_content' => 'Alcuni elementi di design provengono da <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> sebbene FreshRSS non usi questo framework. Le <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icone</a> provengono dal progetto <a href="https://www.gnome.org/">GNOME</a>. Il carattere <em>Open Sans</em> รจ stato creato da <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS รจ basato su <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.',
'freshrss_description' => 'FreshRSS รจ un aggregatore di feeds RSS da installare sul proprio host come <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> o <a href="http://projet.idleman.fr/leed/">Leed</a>. Leggero e facile da mantenere pur essendo molto configurabile e potente.',
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">su Github</a>',
'license' => 'Licenza',
diff --git a/app/i18n/it/install.php b/app/i18n/it/install.php
index 8f5300bd5..a60dd4523 100644
--- a/app/i18n/it/install.php
+++ b/app/i18n/it/install.php
@@ -9,13 +9,11 @@ return array(
'reinstall' => 'Reinstalla FreshRSS',
),
'auth' => array(
- 'email_persona' => 'Indirizzo mail<br /><small>(per <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'form' => 'Web form (tradizionale, richiede JavaScript)',
'http' => 'HTTP (per gli utenti avanzati con HTTPS)',
'none' => 'Nessuno (pericoloso)',
'password_form' => 'Password<br /><small>(per il login tramite Web-form tradizionale)</small>',
'password_format' => 'Almeno 7 caratteri',
- 'persona' => 'Mozilla Persona (moderno, richiede JavaScript)',
'type' => 'Metodo di autenticazione',
),
'bdd' => array(
@@ -78,10 +76,6 @@ return array(
'nok' => 'Manca PDO o uno degli altri driver supportati (pdo_mysql, pdo_sqlite).',
'ok' => 'PDO e altri driver supportati (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Verifica i permessi sulla cartella <em>./data/persona</em>. Il server HTTP deve avere i permessi per scriverci dentro',
- 'ok' => 'I permessi sulla cartella Mozilla Persona sono corretti.',
- ),
'php' => array(
'_' => 'Installazione PHP',
'nok' => 'Versione di PHP %s FreshRSS richiede almeno la versione %s.',
diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php
index bd7d63b6a..9f05d69b1 100644
--- a/app/i18n/nl/admin.php
+++ b/app/i18n/nl/admin.php
@@ -8,7 +8,6 @@ return array(
'form' => 'Web formulier (traditioneel, benodigd JavaScript)',
'http' => 'HTTP (voor geavanceerde gebruikers met HTTPS)',
'none' => 'Geen (gevaarlijk)',
- 'persona' => 'Mozilla Persona (modern, benodigd JavaScript)',
'title' => 'Authenticatie',
'title_reset' => 'Authenticatie terugzetten',
'token' => 'Authenticatie teken',
@@ -75,10 +74,6 @@ return array(
'nok' => 'U mist PDO of een van de ondersteunde drivers (pdo_mysql, pdo_sqlite).',
'ok' => 'U hebt PDO en ten minste รฉรฉn van de ondersteunde drivers (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Controleer de permissies op de <em>./data/persona</em> map. HTTP server moet rechten hebben om hierin te schrijven',
- 'ok' => 'Permissies op de Mozilla Persona map zijn goed.',
- ),
'php' => array(
'_' => 'PHP installatie',
'nok' => 'Uw PHP versie is %s maar FreshRSS benodigd tenminste versie %s.',
@@ -169,7 +164,6 @@ return array(
'user' => array(
'articles_and_size' => '%s artikelen (%s)',
'create' => 'Creรซer nieuwe gebruiker',
- 'email_persona' => 'Log in mail adres<br /><small>(voor <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'language' => 'Taal',
'number' => 'Er is %d accounts gemaakt',
'numbers' => 'Er zijn %d accounts gemaakt',
diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php
index 9b0aff793..573dabf45 100644
--- a/app/i18n/nl/conf.php
+++ b/app/i18n/nl/conf.php
@@ -76,7 +76,6 @@ return array(
'_' => 'Account verwijderen',
'warn' => 'Uw account en alle gerelateerde gegvens worden verwijderd.',
),
- 'email_persona' => 'Log in mail adres<br /><small>(voor <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'Wachtwoord API<br /><small>(e.g., voor mobiele apps)</small>',
'password_form' => 'Wachtwoord<br /><small>(voor de Web-formulier log in methode)</small>',
'password_format' => 'Ten minste 7 tekens',
diff --git a/app/i18n/nl/feedback.php b/app/i18n/nl/feedback.php
index 54d84f7d6..b703c43cf 100644
--- a/app/i18n/nl/feedback.php
+++ b/app/i18n/nl/feedback.php
@@ -21,7 +21,6 @@ return array(
'success' => 'U bent uitgelogd',
),
'no_password_set' => 'Administrateur wachtwoord is niet ingesteld. Deze mogelijkheid is niet beschikbaar.',
- 'not_persona' => 'Alleen Persona systeem kan worden gereset.',
),
'conf' => array(
'error' => 'Er is een fout opgetreden tijdens het opslaan van de configuratie',
diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php
index 24cba574e..7e03229c9 100644
--- a/app/i18n/nl/gen.php
+++ b/app/i18n/nl/gen.php
@@ -24,8 +24,6 @@ return array(
'email' => 'Email adres',
'keep_logged_in' => 'Ingelogd blijven voor <small>(1 maand)</small>',
'login' => 'Log in',
- 'login_persona' => 'Login met Persona',
- 'login_persona_problem' => 'Connectiviteits problemen met Persona',
'logout' => 'Log uit',
'password' => array(
'_' => 'Wachtwoord',
@@ -42,7 +40,6 @@ return array(
'admin' => 'Administrator gebruikersnaam',
'format' => '<small>maximaal 16 alphanumerieke tekens</small>',
),
- 'will_reset' => 'Het authenticatie system zal worden gereset: een formulier zal worden gebruikt in plaats van Persona.',
),
'date' => array(
'Apr' => '\\A\\p\\r\\i\\l',
diff --git a/app/i18n/nl/index.php b/app/i18n/nl/index.php
index df6a064e4..751806bfa 100644
--- a/app/i18n/nl/index.php
+++ b/app/i18n/nl/index.php
@@ -6,7 +6,7 @@ return array(
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
'bugs_reports' => 'Rapporteer fouten',
'credits' => 'Waarderingen',
- 'credits_content' => 'Sommige ontwerp elementen komen van <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> alhoewel FreshRSS dit raamwerk niet gebruikt. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Pictogrammen</a> komen van het <a href="https://www.gnome.org/">GNOME project</a>. <em>De Open Sans</em> font police is gemaakt door <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a>. Favicons zijn verzameld met de <a href="https://getfavicon.appspot.com/">getFavicon API</a>. FreshRSS is gebaseerd op <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, een PHP raamwerk. Nederlandse vertaling door Wanabo, <a href="http://www.nieuwskop.be" title="NieuwsKop">NieuwsKop.be</a>. Link naar de Nederlandse vertaling, <a href="https://github.com/Wanabo/FreshRSS-Dutch-translation/tree/master">FreshRSS-Dutch-translation</a>.',
+ 'credits_content' => 'Sommige ontwerp elementen komen van <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> alhoewel FreshRSS dit raamwerk niet gebruikt. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">Pictogrammen</a> komen van het <a href="https://www.gnome.org/">GNOME project</a>. <em>De Open Sans</em> font police is gemaakt door <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS is gebaseerd op <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, een PHP raamwerk. Nederlandse vertaling door Wanabo, <a href="http://www.nieuwskop.be" title="NieuwsKop">NieuwsKop.be</a>. Link naar de Nederlandse vertaling, <a href="https://github.com/Wanabo/FreshRSS-Dutch-translation/tree/master">FreshRSS-Dutch-translation</a>.',
'freshrss_description' => 'FreshRSS is een RSS feed aggregator om zelf te hosten zoals <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> of <a href="http://projet.idleman.fr/leed/">Leed</a>. Het gebruikt weinig systeembronnen en is makkelijk te administreren terwijl het een krachtig en makkelijk te configureren programma is.',
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">op Github</a>',
'license' => 'License',
diff --git a/app/i18n/nl/install.php b/app/i18n/nl/install.php
index d16dda4ca..77783cd48 100644
--- a/app/i18n/nl/install.php
+++ b/app/i18n/nl/install.php
@@ -9,13 +9,11 @@ return array(
'reinstall' => 'Installeer FreshRSS opnieuw',
),
'auth' => array(
- 'email_persona' => 'Log in mail adres<br /><small>(voor <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'form' => 'Web formulier (traditioneel, benodigd JavaScript)',
'http' => 'HTTP (voor geavanceerde gebruikers met HTTPS)',
'none' => 'Geen (gevaarlijk)',
'password_form' => 'Wachtwoord<br /><small>(voor de Web-formulier log in methode)</small>',
'password_format' => 'Tenminste 7 tekens',
- 'persona' => 'Mozilla Persona (modern, benodigd JavaScript)',
'type' => 'Authenticatie methode',
),
'bdd' => array(
@@ -78,10 +76,6 @@ return array(
'nok' => 'U mist PDO of รฉรฉn van de ondersteunde (pdo_mysql, pdo_sqlite).',
'ok' => 'U hebt PDO en ten minste รฉรฉn van de ondersteunde drivers (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'Controleer permissies van de <em>./data/persona</em> map. HTTP server moet rechten hebben om er in te kunnen schrijven',
- 'ok' => 'Permissies van de Mozilla Persona map zijn goed.',
- ),
'php' => array(
'nok' => 'Uw PHP versie is %s maar FreshRSS benodigd tenminste versie %s.',
'ok' => 'Uw PHP versie is %s, welke compatibel is met FreshRSS.',
diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php
index dfea5b3cb..caea627f3 100644
--- a/app/i18n/ru/admin.php
+++ b/app/i18n/ru/admin.php
@@ -8,7 +8,6 @@ return array(
'form' => 'ะะฐ ะพัะฝะพะฒะต ะฒะตะฑ-ั„ะพั€ะผั‹ (ั‚ั€ะฐะดะธั†ะธะพะฝะฝั‹ะน, ะฝะตะพะฑั…ะพะดะธะผ JavaScript)',
'http' => 'HTTP (ะดะปั ะฟั€ะพะดะฒะธะฝัƒั‚ั‹ั… ะฟะพะปัŒะทะพะฒะฐั‚ะตะปะตะน - ะฟะพ HTTPS)',
'none' => 'ะ‘ะตะท ะฐัƒั‚ะตะฝั‚ะธั„ะธะบะฐั†ะธะธ (ะฝะตะฑะตะทะพะฟะฐัะฝั‹ะน)',
- 'persona' => 'Mozilla Persona (ะฝะพะฒั‹ะน, ะฝะตะพะฑั…ะพะดะธะผ JavaScript)',
'title' => 'ะัƒั‚ะตะฝั‚ะธั„ะธะบะฐั†ะธะธ',
'title_reset' => 'ะกะฑั€ะพั ะฐัƒั‚ะตะฝั‚ะธั†ะธะบะฐั†ะธะธ',
'token' => 'ะขะพะบะตะฝ ะฐัƒั‚ะตะฝั‚ะธั„ะธะบะฐั†ะธะธ',
@@ -75,10 +74,6 @@ return array(
'nok' => 'ะฃ ะฒะฐั ะฝะต ัƒัั‚ะฐะฝะพะฒะปะตะฝ PDO ะธะปะธ ะพะดะธะฝ ะธะท ะฝะตะพะฑั…ะพะดะธะผั‹ั… ะดั€ะฐะนะฒะตั€ะพะฒ (pdo_mysql, pdo_sqlite).',
'ok' => 'ะฃ ะฒะฐั ัƒัั‚ะฐะฝะพะฒะปะตะฝ PDO ะธ ะบะฐะบ ะผะธะฝะธะผัƒะผ ะพะดะธะฝ ะธะท ะฟะพะดะดะตั€ะถะธะฒะฐะตะผั‹ั… ะดั€ะฐะนะฒะตั€ะพะฒ (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'ะŸั€ะพะฒะตั€ัŒั‚ะต ะฟั€ะฐะฒะฐ ะดะพัั‚ัƒะฟะฐ ะบ ะฟะฐะฟะบะต <em>./data/persona</em> . ะกะตั€ะฒะตั€ HTTP ะดะพะปะถะตะฝ ะธะผะตั‚ัŒ ะฟั€ะฐะฒะฐ ะฝะฐ ะทะฐะฟะธััŒ ะฒ ัั‚ัƒ ะฟะฐะฟะบัƒ.',
- 'ok' => 'ะŸั€ะฐะฒะฐ ะฝะฐ ะฟะฐะฟะบัƒ Mozilla Persona ะฒ ะฟะพั€ัะดะบะต.',
- ),
'php' => array(
'_' => 'PHP installation',
'nok' => 'ะฃ ะฒะฐั ัƒัั‚ะฐะฝะพะฒะปะตะฝ PHP ะฒะตั€ัะธะธ %s, ะฝะพ FreshRSS ะฝะตะพะฑั…ะพะดะธะผะฐ ะฒะตั€ัะธั ะฝะต ะฝะธะถะต %s.',
@@ -169,7 +164,6 @@ return array(
'user' => array(
'articles_and_size' => '%s ัั‚ะฐั‚ะตะน (%s)',
'create' => 'ะกะพะทะดะฐั‚ัŒ ะฝะพะฒะพะณะพ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั',
- 'email_persona' => 'ะะดั€ะตั ัะปะตะบั‚ั€ะพะฝะฝะพะน ะฟะพั‡ั‚ั‹ ะดะปั ะฒั…ะพะดะฐ<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'language' => 'ะฏะทั‹ะบ',
'number' => 'ะะฐ ะดะฐะฝะฝั‹ะน ะผะพะผะตะฝั‚ ัะพะทะดะฐะฝ %d ะฐะบะบะฐัƒะฝั‚',
'numbers' => 'ะะฐ ะดะฐะฝะฝั‹ะน ะผะพะผะตะฝั‚ ะฐะบะบะฐัƒะฝั‚ะพะฒ ัะพะทะดะฐะฝะพ: %d',
diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php
index e502e9a43..557fbe369 100644
--- a/app/i18n/ru/conf.php
+++ b/app/i18n/ru/conf.php
@@ -76,7 +76,6 @@ return array(
'_' => 'Account deletion',
'warn' => 'Your account and all the related data will be deleted.',
),
- 'email_persona' => 'Login email address<br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'password_api' => 'Password API<br /><small>(e.g., for mobile apps)</small>',
'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
'password_format' => 'At least 7 characters',
diff --git a/app/i18n/ru/feedback.php b/app/i18n/ru/feedback.php
index c9189c0d0..7ce2ae9cf 100644
--- a/app/i18n/ru/feedback.php
+++ b/app/i18n/ru/feedback.php
@@ -21,7 +21,6 @@ return array(
'success' => 'You are disconnected',
),
'no_password_set' => 'Administrator password hasnโ€™t been set. This feature isnโ€™t available.',
- 'not_persona' => 'Only Persona system can be reset.',
),
'conf' => array(
'error' => 'An error occurred during configuration saving',
diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php
index b8e8511d9..eecd72749 100644
--- a/app/i18n/ru/gen.php
+++ b/app/i18n/ru/gen.php
@@ -24,8 +24,6 @@ return array(
'email' => 'Email address',
'keep_logged_in' => 'Keep me logged in <small>(1 month)</small>',
'login' => 'Login',
- 'login_persona' => 'Login with Persona',
- 'login_persona_problem' => 'Connection problem with Persona?',
'logout' => 'Logout',
'password' => array(
'_' => 'Password',
@@ -42,7 +40,6 @@ return array(
'admin' => 'Administrator username',
'format' => '<small>maximum 16 alphanumeric characters</small>',
),
- 'will_reset' => 'Authentication system will be reset: a form will be used instead of Persona.',
),
'date' => array(
'Apr' => '\\A\\p\\r\\i\\l',
diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php
index 80fa3d950..eb6413e3c 100644
--- a/app/i18n/ru/index.php
+++ b/app/i18n/ru/index.php
@@ -6,7 +6,7 @@ return array(
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
'bugs_reports' => 'Bugs reports',
'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 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.',
+ '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 has been created by <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS is based on <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, a PHP framework.',
'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.',
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>',
'license' => 'License',
diff --git a/app/i18n/ru/install.php b/app/i18n/ru/install.php
index c838b2eba..a52e2959b 100644
--- a/app/i18n/ru/install.php
+++ b/app/i18n/ru/install.php
@@ -9,13 +9,11 @@ return array(
'reinstall' => 'ะŸะตั€ะตัƒัั‚ะฐะฝะพะฒะธั‚ัŒ FreshRSS',
),
'auth' => array(
- 'email_persona' => 'ะŸะพั‡ั‚ะฐ (ะปะพะณะธะฝ) ะดะปั <br /><small>(for <a href="https://persona.org/" rel="external">Mozilla Persona</a>)</small>',
'form' => 'ะ’ัะฑ-ั„ะพั€ะผะฐ (ั‚ั€ะฐะดะธั†ะธะพะฝะฝั‹ะน, ะฝะตะพะฑั…ะพะดะธะผ JavaScript)',
'http' => 'HTTP (ะดะปั ะฟั€ะพะดะฒะธะฝัƒั‚ั‹ั… ะฟะพะปัŒะทะพะฒะฐั‚ะตะปะตะน ั HTTPS)',
'none' => 'ะะธะบะฐะบะพะณะพ (ะพะฟะฐัะฝะพ)',
'password_form' => 'ะŸะฐั€ะพะปัŒ<br /><small>(ะดะปั ะผะตั‚ะพะดะฐ ะฐัƒั‚ะตะฝั‚ะธั„ะธะบะฐั†ะธะธ ะฝะฐ ะ’ัะฑ-ั„ะพั€ะผะฐั…)</small>',
'password_format' => 'ะšะฐะบ ะผะธะฝะธะผัƒะผ 7 ะฑัƒะบะฒ',
- 'persona' => 'Mozilla Persona (ัะพะฒั€ะตะผะตะฝะฝั‹ะน, ะฝะตะพะฑั…ะพะดะธะผ JavaScript)',
'type' => 'ะœะตั‚ะพะด ะฐัƒั‚ะตะฝั‚ะธั„ะธะบะฐั†ะธะธ',
),
'bdd' => array(
@@ -74,10 +72,6 @@ return array(
'nok' => 'ะฃ ะฒะฐั ะฝะต ัƒัั‚ะฐะฝะพะฒะปะตะฝ PDO ะธะปะธ ะพะดะธะฝ ะธะท ะฝะตะพะฑั…ะพะดะธะผั‹ั… ะดั€ะฐะนะฒะตั€ะพะฒ (pdo_mysql, pdo_sqlite).',
'ok' => 'ะฃ ะฒะฐั ัƒัั‚ะฐะฝะพะฒะปะตะฝ PDO ะธ ะบะฐะบ ะผะธะฝะธะผัƒะผ ะพะดะธะฝ ะธะท ะฟะพะดะดะตั€ะถะธะฒะฐะตะผั‹ั… ะดั€ะฐะนะฒะตั€ะพะฒ (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => 'ะŸั€ะพะฒะตั€ัŒั‚ะต ะฟั€ะฐะฒะฐ ะดะพัั‚ัƒะฟะฐ ะบ ะฟะฐะฟะบะต <em>./data/persona</em> . ะกะตั€ะฒะตั€ HTTP ะดะพะปะถะตะฝ ะธะผะตั‚ัŒ ะฟั€ะฐะฒะฐ ะฝะฐ ะทะฐะฟะธััŒ ะฒ ัั‚ัƒ ะฟะฐะฟะบัƒ.',
- 'ok' => 'ะŸั€ะฐะฒะฐ ะฝะฐ ะฟะฐะฟะบัƒ Mozilla Persona ะฒ ะฟะพั€ัะดะบะต.',
- ),
'php' => array(
'nok' => 'ะฃ ะฒะฐั ัƒัั‚ะฐะฝะพะฒะปะตะฝ PHP ะฒะตั€ัะธะธ %s, ะฝะพ FreshRSS ะฝะตะพะฑั…ะพะดะธะผะฐ ะฒะตั€ัะธั ะฝะต ะฝะธะถะต %s.',
'ok' => 'ะฃ ะฒะฐั ัƒัั‚ะฐะฝะพะฒะปะตะฝ PHP ะฒะตั€ัะธะธ %s, ะบะพั‚ะพั€ั‹ะน ัะพะฒะผะตัั‚ะธะผ ั FreshRSS.',
diff --git a/app/i18n/tr/admin.php b/app/i18n/tr/admin.php
index 3a6f8118e..43f8e23c5 100644
--- a/app/i18n/tr/admin.php
+++ b/app/i18n/tr/admin.php
@@ -8,7 +8,6 @@ return array(
'form' => 'Web formu (geleneksel, JavaScript gerektirir)',
'http' => 'HTTP (ileri kullanฤฑcฤฑlar iรงin, HTTPS)',
'none' => 'Hiรงbiri (tehlikeli)',
- 'persona' => 'Mozilla Persona (modern, JavaScript gerektirir)',
'title' => 'Kimlik doฤŸrulama',
'title_reset' => 'Kimlik doฤŸrulama sฤฑfฤฑrla',
'token' => 'Kimlik doฤŸrulama iลŸareti',
@@ -75,10 +74,6 @@ return array(
'nok' => 'PDO veya PDO destekli bir sรผrรผcรผ eksik (pdo_mysql, pdo_sqlite).',
'ok' => 'PDO sorunsuz (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => '<em>./data/persona</em> klasรถr yetkisini kontrol edin. HTTP yazma yetkisi olmalฤฑ',
- 'ok' => 'Mozilla Persona klasรถrรผ yetkileri sorunsuz.',
- ),
'php' => array(
'_' => 'PHP kurulumu',
'nok' => 'PHP versiyonunuz %s fakat FreshRSS iรงin gerekli olan en dรผลŸรผk sรผrรผm %s.',
@@ -169,7 +164,6 @@ return array(
'user' => array(
'articles_and_size' => '%s makale (%s)',
'create' => 'Yeni kullanฤฑcฤฑ oluลŸtur',
- 'email_persona' => 'GiriลŸ email adresi<br /><small>(<a href="https://persona.org/" rel="external">Mozilla Persona</a> iรงin)</small>',
'language' => 'Dil',
'number' => 'OluลŸturulmuลŸ %d hesap var',
'numbers' => 'OluลŸturulmuลŸ %d hesap var',
diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php
index d9e275b21..2fdc248e4 100644
--- a/app/i18n/tr/conf.php
+++ b/app/i18n/tr/conf.php
@@ -76,7 +76,6 @@ return array(
'_' => 'Hesap silme',
'warn' => 'Hesabฤฑnฤฑz ve tรผm verileriniz silinecek.',
),
- 'email_persona' => 'GiriลŸ email adresi<br /><small>(<a href="https://persona.org/" rel="external">Mozilla Persona</a> iรงin)</small>',
'password_api' => 'API ลžifresi<br /><small>(รถr. mobil uygulamalar iรงin)</small>',
'password_form' => 'ลžifre<br /><small>(Tarayฤฑcฤฑ giriลŸi iรงin)</small>',
'password_format' => 'En az 7 karakter',
diff --git a/app/i18n/tr/feedback.php b/app/i18n/tr/feedback.php
index 0572c6da1..a53316206 100644
--- a/app/i18n/tr/feedback.php
+++ b/app/i18n/tr/feedback.php
@@ -21,7 +21,6 @@ return array(
'success' => 'BaฤŸlantฤฑ koptu',
),
'no_password_set' => 'Yรถnetici ลŸifresi ayarlanmadฤฑ. Bu รถzellik kullanฤฑma uygun deฤŸil.',
- 'not_persona' => 'Sadece Persona sistem sฤฑfฤฑrlanabilir.',
),
'conf' => array(
'error' => 'Yapฤฑlandฤฑrma ayarlarฤฑ kaydedilirken hata oluลŸtu',
diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php
index 492e2cb9b..865dbd4e2 100644
--- a/app/i18n/tr/gen.php
+++ b/app/i18n/tr/gen.php
@@ -24,8 +24,6 @@ return array(
'email' => 'Email adresleri',
'keep_logged_in' => '<small>(1 ay)</small> oturumu aรงฤฑk tut',
'login' => 'GiriลŸ',
- 'login_persona' => 'Persona ile giriลŸ yap',
- 'login_persona_problem' => 'Persona ile baฤŸlantฤฑ sorununuz mu var ?',
'logout' => 'ร‡ฤฑkฤฑลŸ',
'password' => array(
'_' => 'ลžifre',
@@ -42,7 +40,6 @@ return array(
'admin' => 'Yรถnetici kullanฤฑcฤฑ adฤฑ',
'format' => '<small>en fazla 16 alfanรผmerik karakter</small>',
),
- 'will_reset' => 'Kimlik doฤŸrulama sistemi sฤฑfฤฑrlanacak: Persone yerine bir form kullanฤฑlacak.',
),
'date' => array(
'Apr' => '\\N\\i\\s\\a\\n',
diff --git a/app/i18n/tr/index.php b/app/i18n/tr/index.php
index 9912203c8..cb36d6717 100644
--- a/app/i18n/tr/index.php
+++ b/app/i18n/tr/index.php
@@ -6,7 +6,7 @@ return array(
'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>',
'bugs_reports' => 'Hata raporu',
'credits' => 'Tanฤฑtฤฑm',
- 'credits_content' => 'Bu frameworkรผ kullanmamasฤฑna raฤŸmen FreshRSS bazฤฑ tasarฤฑm รถgelerini <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> dan almฤฑลŸtฤฑr. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">ฤฐkonlar</a> <a href="https://www.gnome.org/">GNOME projesinden</a> alฤฑnmฤฑลŸtฤฑr. <em>Open Sans</em> yazฤฑ tipi <a href="https://www.google.com/webfonts/specimen/Open+Sans">Steve Matteson</a> tarafฤฑndan oluลŸturulmuลŸtur. Site ikonlarฤฑ <a href="https://getfavicon.appspot.com/">getFavicon API</a> ile oluลŸturuldu. FreshRSS bir PHP framework olan <a href="https://github.com/marienfressinaud/MINZ">Minz</a> i temel alฤฑr.',
+ 'credits_content' => 'Bu frameworkรผ kullanmamasฤฑna raฤŸmen FreshRSS bazฤฑ tasarฤฑm รถgelerini <a href="http://twitter.github.io/bootstrap/">Bootstrap</a> dan almฤฑลŸtฤฑr. <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">ฤฐkonlar</a> <a href="https://www.gnome.org/">GNOME projesinden</a> alฤฑnmฤฑลŸtฤฑr. <em>Open Sans</em> yazฤฑ tipi <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a> tarafฤฑndan oluลŸturulmuลŸtur. FreshRSS bir PHP framework olan <a href="https://github.com/marienfressinaud/MINZ">Minz</a> i temel alฤฑr.',
'freshrss_description' => 'FreshRSS <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> veya <a href="http://projet.idleman.fr/leed/">Leed</a> gibi kendi hostunuzda รงalฤฑลŸan bir RSS akฤฑลŸ toplayฤฑcฤฑsฤฑdฤฑr. Gรผรงlรผ ve yapฤฑlandฤฑrฤฑlabilir araรงlarฤฑyla basit ve kullanฤฑmฤฑ kolay bir uygulamadฤฑr.',
'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">Github sayfasฤฑ</a>',
'license' => 'Lisans',
diff --git a/app/i18n/tr/install.php b/app/i18n/tr/install.php
index 85134845b..951a7c5fd 100644
--- a/app/i18n/tr/install.php
+++ b/app/i18n/tr/install.php
@@ -9,13 +9,11 @@ return array(
'reinstall' => 'FreshRSS i yeniden yรผkle',
),
'auth' => array(
- 'email_persona' => 'GiriลŸ email adresi<br /><small>(<a href="https://persona.org/" rel="external">Mozilla Persona</a> iรงin)</small>',
'form' => 'Web formu (geleneksel, JavaScript gerektirir)',
'http' => 'HTTP (ileri kullanฤฑcฤฑlar iรงin, HTTPS)',
'none' => 'Hiรงbiri (tehlikeli)',
'password_form' => 'ลžifre<br /><small>(Tarayฤฑcฤฑ giriลŸi iรงin)</small>',
'password_format' => 'En az 7 karakter',
- 'persona' => 'Mozilla Persona (modern, JavaScript gerektirir)',
'type' => 'Kimlik doฤŸrulama yรถntemi',
),
'bdd' => array(
@@ -78,10 +76,6 @@ return array(
'nok' => 'PDO veya PDO destekli bir sรผrรผcรผ eksik (pdo_mysql, pdo_sqlite).',
'ok' => 'PDO sorunsuz (pdo_mysql, pdo_sqlite).',
),
- 'persona' => array(
- 'nok' => '<em>./data/persona</em> klasรถr yetkisini kontrol edin. HTTP yazma yetkisi olmalฤฑ',
- 'ok' => 'Mozilla Persona klasรถrรผ yetkileri sorunsuz.',
- ),
'php' => array(
'nok' => 'PHP versiyonunuz %s fakat FreshRSS iรงin gerekli olan en dรผลŸรผk sรผrรผm %s.',
'ok' => 'PHP versiyonunuz %s, FreshRSS ile tam uyumlu.',
diff --git a/app/install.php b/app/install.php
index 062f66814..62695ceb6 100644
--- a/app/install.php
+++ b/app/install.php
@@ -19,7 +19,7 @@ if (isset($_GET['step'])) {
define('STEP', 0);
}
-define('SQL_CREATE_DB', 'CREATE DATABASE IF NOT EXISTS %1$s DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;');
+define('SQL_CREATE_DB', 'CREATE DATABASE IF NOT EXISTS %1$s DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
if (STEP === 3 && isset($_POST['type'])) {
$_SESSION['bd_type'] = $_POST['type'];
@@ -103,7 +103,6 @@ function saveStep1() {
$_SESSION['title'] = $system_conf->title;
$_SESSION['auth_type'] = $system_conf->auth_type;
$_SESSION['old_entries'] = $user_conf->old_entries;
- $_SESSION['mail_login'] = $user_conf->mail_login;
$_SESSION['default_user'] = $current_user;
$_SESSION['passwordHash'] = $user_conf->passwordHash;
@@ -128,7 +127,6 @@ function saveStep2() {
$_SESSION['old_entries'] = param('old_entries', $user_default_config->old_entries);
$_SESSION['auth_type'] = param('auth_type', 'form');
$_SESSION['default_user'] = substr(preg_replace('/[^a-zA-Z0-9]/', '', param('default_user', '')), 0, 16);
- $_SESSION['mail_login'] = filter_var(param('mail_login', ''), FILTER_VALIDATE_EMAIL);
$password_plain = param('passwordPlain', false);
if ($password_plain !== false && cryptAvailable()) {
@@ -146,8 +144,7 @@ function saveStep2() {
return false;
}
- if (($_SESSION['auth_type'] === 'form' && empty($_SESSION['passwordHash'])) ||
- ($_SESSION['auth_type'] === 'persona' && empty($_SESSION['mail_login']))) {
+ if ($_SESSION['auth_type'] === 'form' && empty($_SESSION['passwordHash'])) {
return false;
}
@@ -157,15 +154,11 @@ function saveStep2() {
}
$token = '';
- if ($_SESSION['mail_login']) {
- $token = sha1($_SESSION['salt'] . $_SESSION['mail_login']);
- }
$config_array = array(
'language' => $_SESSION['language'],
'theme' => $user_default_config->theme,
'old_entries' => $_SESSION['old_entries'],
- 'mail_login' => $_SESSION['mail_login'],
'passwordHash' => $_SESSION['passwordHash'],
'token' => $token,
);
@@ -179,12 +172,6 @@ function saveStep2() {
mkdir($user_dir);
file_put_contents($user_config_path, "<?php\n return " . var_export($config_array, true) . ';');
- if ($_SESSION['mail_login'] != '') {
- $personaFile = join_path(DATA_PATH, 'persona', $_SESSION['mail_login'] . '.txt');
- @unlink($personaFile);
- file_put_contents($personaFile, $_SESSION['default_user']);
- }
-
header('Location: index.php?step=3');
}
}
@@ -253,7 +240,7 @@ function newPdo() {
case 'mysql':
$str = 'mysql:host=' . $_SESSION['bd_host'] . ';dbname=' . $_SESSION['bd_base'];
$driver_options = array(
- PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
+ PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
);
break;
case 'sqlite':
@@ -309,7 +296,7 @@ function checkStep0() {
}
function checkStep1() {
- $php = version_compare(PHP_VERSION, '5.3.0') >= 0;
+ $php = version_compare(PHP_VERSION, '5.3.3') >= 0;
$minz = file_exists(join_path(LIB_PATH, 'Minz'));
$curl = extension_loaded('curl');
$pdo_mysql = extension_loaded('pdo_mysql');
@@ -324,7 +311,6 @@ function checkStep1() {
$cache = CACHE_PATH && is_writable(CACHE_PATH);
$users = USERS_PATH && is_writable(USERS_PATH);
$favicons = is_writable(join_path(DATA_PATH, 'favicons'));
- $persona = is_writable(join_path(DATA_PATH, 'persona'));
$http_referer = is_referer_from_same_domain();
return array(
@@ -343,10 +329,9 @@ function checkStep1() {
'cache' => $cache ? 'ok' : 'ko',
'users' => $users ? 'ok' : 'ko',
'favicons' => $favicons ? 'ok' : 'ko',
- 'persona' => $persona ? 'ok' : 'ko',
'http_referer' => $http_referer ? 'ok' : 'ko',
'all' => $php && $minz && $curl && $pdo && $pcre && $ctype && $dom && $xml &&
- $data && $cache && $users && $favicons && $persona && $http_referer ?
+ $data && $cache && $users && $favicons && $http_referer ?
'ok' : 'ko'
);
}
@@ -380,7 +365,6 @@ function freshrss_already_installed() {
function checkStep2() {
$conf = !empty($_SESSION['old_entries']) &&
- isset($_SESSION['mail_login']) &&
!empty($_SESSION['default_user']);
$form = (
@@ -388,11 +372,6 @@ function checkStep2() {
($_SESSION['auth_type'] != 'form' || !empty($_SESSION['passwordHash']))
);
- $persona = (
- isset($_SESSION['auth_type']) &&
- ($_SESSION['auth_type'] != 'persona' || !empty($_SESSION['mail_login']))
- );
-
$defaultUser = empty($_POST['default_user']) ? null : $_POST['default_user'];
if ($defaultUser === null) {
$defaultUser = empty($_SESSION['default_user']) ? '' : $_SESSION['default_user'];
@@ -402,9 +381,8 @@ function checkStep2() {
return array(
'conf' => $conf ? 'ok' : 'ko',
'form' => $form ? 'ok' : 'ko',
- 'persona' => $persona ? 'ok' : 'ko',
'data' => $data ? 'ok' : 'ko',
- 'all' => $conf && $form && $persona && $data ? 'ok' : 'ko'
+ 'all' => $conf && $form && $data ? 'ok' : 'ko'
);
}
@@ -437,7 +415,7 @@ function checkBD() {
switch ($_SESSION['bd_type']) {
case 'mysql':
$driver_options = array(
- PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
+ PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4'
);
try { // on ouvre une connexion juste pour crรฉer la base si elle n'existe pas
@@ -536,7 +514,7 @@ function printStep1() {
<?php if ($res['php'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t('gen.short.ok'); ?></span> <?php echo _t('install.check.php.ok', PHP_VERSION); ?></p>
<?php } else { ?>
- <p class="alert alert-error"><span class="alert-head"><?php echo _t('gen.short.damn'); ?></span> <?php echo _t('install.check.php.nok', PHP_VERSION, '5.3.0'); ?></p>
+ <p class="alert alert-error"><span class="alert-head"><?php echo _t('gen.short.damn'); ?></span> <?php echo _t('install.check.php.nok', PHP_VERSION, '5.3.3'); ?></p>
<?php } ?>
<?php if ($res['minz'] == 'ok') { ?>
@@ -612,12 +590,6 @@ function printStep1() {
<p class="alert alert-error"><span class="alert-head"><?php echo _t('gen.short.damn'); ?></span> <?php echo _t('install.check.favicons.nok', DATA_PATH . '/favicons'); ?></p>
<?php } ?>
- <?php if ($res['persona'] == 'ok') { ?>
- <p class="alert alert-success"><span class="alert-head"><?php echo _t('gen.short.ok'); ?></span> <?php echo _t('install.check.persona.ok'); ?></p>
- <?php } else { ?>
- <p class="alert alert-error"><span class="alert-head"><?php echo _t('gen.short.damn'); ?></span> <?php echo _t('install.check.persona.nok', DATA_PATH . '/persona'); ?></p>
- <?php } ?>
-
<?php if ($res['http_referer'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t('gen.short.ok'); ?></span> <?php echo _t('install.check.http_referer.ok'); ?></p>
<?php } else { ?>
@@ -673,12 +645,11 @@ function printStep2() {
<select id="auth_type" name="auth_type" required="required" tabindex="4">
<?php
function no_auth($auth_type) {
- return !in_array($auth_type, array('form', 'persona', 'http_auth', 'none'));
+ return !in_array($auth_type, array('form', 'http_auth', 'none'));
}
$auth_type = isset($_SESSION['auth_type']) ? $_SESSION['auth_type'] : '';
?>
<option value="form"<?php echo $auth_type === 'form' || (no_auth($auth_type) && cryptAvailable()) ? ' selected="selected"' : '', cryptAvailable() ? '' : ' disabled="disabled"'; ?>><?php echo _t('install.auth.form'); ?></option>
- <option value="persona"<?php echo $auth_type === 'persona' ? ' selected="selected"' : ''; ?>><?php echo _t('install.auth.persona'); ?></option>
<option value="http_auth"<?php echo $auth_type === 'http_auth' ? ' selected="selected"' : '', httpAuthUser() == '' ? ' disabled="disabled"' : ''; ?>><?php echo _t('install.auth.http'); ?>(REMOTE_USER = '<?php echo httpAuthUser(); ?>')</option>
<option value="none"<?php echo $auth_type === 'none' || (no_auth($auth_type) && !cryptAvailable()) ? ' selected="selected"' : ''; ?>><?php echo _t('install.auth.none'); ?></option>
</select>
@@ -697,14 +668,6 @@ function printStep2() {
</div>
</div>
- <div class="form-group">
- <label class="group-name" for="mail_login"><?php echo _t('install.auth.email_persona'); ?></label>
- <div class="group-controls">
- <input type="email" id="mail_login" name="mail_login" value="<?php echo isset($_SESSION['mail_login']) ? $_SESSION['mail_login'] : ''; ?>" placeholder="alice@example.net" <?php echo $auth_type === 'persona' ? ' required="required"' : ''; ?> tabindex="6"/>
- <noscript><b><?php echo _t('gen.js.should_be_activated'); ?></b></noscript>
- </div>
- </div>
-
<div class="form-group form-actions">
<div class="group-controls">
<button type="submit" class="btn btn-important" tabindex="7" ><?php echo _t('gen.action.submit'); ?></button>
diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml
index 4e1903a7a..e8fdbf842 100644
--- a/app/layout/aside_feed.phtml
+++ b/app/layout/aside_feed.phtml
@@ -19,8 +19,8 @@
<a href="<?php echo _url('index', 'about'); ?>"><?php echo _t('index.menu.about'); ?></a>
<?php } ?>
- <form id="mark-read-aside" method="post" aria-hidden="true"></form>
-
+ <form id="mark-read-aside" method="post">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<ul class="tree">
<li class="tree-folder category all<?php echo FreshRSS_Context::isCurrentGet('a') ? ' active' : ''; ?>">
<div class="tree-folder-title">
@@ -69,6 +69,7 @@
}
?>
</ul>
+ </form>
</div>
<script id="feed_config_template" type="text/html">
diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml
index 6906fa05f..4d9ad5458 100644
--- a/app/layout/layout.phtml
+++ b/app/layout/layout.phtml
@@ -11,19 +11,22 @@
<?php echo self::headScript(); ?>
<link rel="shortcut icon" id="favicon" type="image/x-icon" sizes="16x16 64x64" href="<?php echo Minz_Url::display('/favicon.ico'); ?>" />
<link rel="icon msapplication-TileImage apple-touch-icon" type="image/png" sizes="256x256" href="<?php echo Minz_Url::display('/themes/icons/favicon-256.png'); ?>" />
- <link rel="prefetch" href="<?php echo FreshRSS_Themes::icon('starred', true); ?>">
- <link rel="prefetch" href="<?php echo FreshRSS_Themes::icon('non-starred', true); ?>">
- <link rel="prefetch" href="<?php echo FreshRSS_Themes::icon('read', true); ?>">
- <link rel="prefetch" href="<?php echo FreshRSS_Themes::icon('unread', true); ?>">
- <link rel="apple-touch-icon" href="<?php echo Minz_Url::display('/themes/icons/apple-touch-icon.png'); ?>">
+ <link rel="prefetch" href="<?php echo FreshRSS_Themes::icon('starred', true); ?>" />
+ <link rel="prefetch" href="<?php echo FreshRSS_Themes::icon('non-starred', true); ?>" />
+ <link rel="prefetch" href="<?php echo FreshRSS_Themes::icon('read', true); ?>" />
+ <link rel="prefetch" href="<?php echo FreshRSS_Themes::icon('unread', true); ?>" />
+ <link rel="apple-touch-icon" href="<?php echo Minz_Url::display('/themes/icons/apple-touch-icon.png'); ?>" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="apple-mobile-web-app-title" content="<?php echo FreshRSS_Context::$system_conf->title; ?>">
<meta name="msapplication-TileColor" content="#FFF" />
+<?php if (!FreshRSS_Context::$system_conf->allow_referrer) { ?>
+ <meta name="referrer" content="never" />
<?php
+ }
flush();
if (isset($this->callbackBeforeContent)) {
- call_user_func($this->callbackBeforeContent);
+ call_user_func($this->callbackBeforeContent, $this);
}
?>
<?php echo self::headTitle(); ?>
diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml
index 0f303beb8..23255f04f 100644
--- a/app/layout/nav_menu.phtml
+++ b/app/layout/nav_menu.phtml
@@ -22,7 +22,7 @@
?>
<a id="toggle-<?php echo $state_str; ?>"
class="btn <?php echo $state_enabled ? 'active' : ''; ?>"
- aria-checked="<?php echo $state_enabled ? 'true' : 'false'; ?>"
+ role="checkbox" aria-checked="<?php echo $state_enabled ? 'true' : 'false'; ?>"
title="<?php echo _t('index.menu.' . $state_str); ?>"
href="<?php echo Minz_Url::display($url_state); ?>"><?php echo _i($state_str); ?></a>
<?php } ?>
@@ -75,13 +75,14 @@
'get' => $get,
'nextGet' => FreshRSS_Context::$next_get,
'idMax' => FreshRSS_Context::$id_max,
+ 'search' => FreshRSS_Context::$search,
+ 'state' => FreshRSS_Context::$state,
)
);
?>
- <form id="mark-read-menu" method="post" aria-hidden="true"></form>
-
<div class="stick" id="nav_menu_read_all">
+ <form id="mark-read-menu" method="post">
<?php $confirm = FreshRSS_Context::$user_conf->reading_confirm ? 'confirm' : ''; ?>
<button class="read_all btn <?php echo $confirm; ?>"
form="mark-read-menu"
@@ -89,6 +90,7 @@
type="submit"><?php echo _t('gen.action.mark_read'); ?></button>
<div class="dropdown">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<div id="dropdown-read" class="dropdown-target"></div>
<a class="dropdown-toggle btn" href="#dropdown-read"><?php echo _i('down'); ?></a>
@@ -123,6 +125,7 @@
</li>
</ul>
</div>
+ </form>
</div>
<?php } ?>
diff --git a/app/views/auth/formLogin.phtml b/app/views/auth/formLogin.phtml
index b0083944f..4bbc8ed55 100644
--- a/app/views/auth/formLogin.phtml
+++ b/app/views/auth/formLogin.phtml
@@ -6,6 +6,7 @@
<?php } ?>
<form id="crypto-form" method="post" action="<?php echo _url('auth', 'login'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<div>
<label for="username"><?php echo _t('gen.auth.username'); ?></label>
<input type="text" id="username" name="username" size="16" required="required" maxlength="16" pattern="[0-9a-zA-Z]{1,16}" autofocus="autofocus" />
diff --git a/app/views/auth/index.phtml b/app/views/auth/index.phtml
index 8e4df8c2c..74e692ec5 100644
--- a/app/views/auth/index.phtml
+++ b/app/views/auth/index.phtml
@@ -4,17 +4,17 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('auth', 'index'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('admin.auth.type'); ?></legend>
<div class="form-group">
<label class="group-name" for="auth_type"><?php echo _t('admin.auth.type'); ?></label>
<div class="group-controls">
<select id="auth_type" name="auth_type" required="required" data-leave-validation="<?php echo FreshRSS_Context::$system_conf->auth_type; ?>">
- <?php if (!in_array(FreshRSS_Context::$system_conf->auth_type, array('form', 'persona', 'http_auth', 'none'))) { ?>
+ <?php if (!in_array(FreshRSS_Context::$system_conf->auth_type, array('form', 'http_auth', 'none'))) { ?>
<option selected="selected"></option>
<?php } ?>
<option value="form"<?php echo FreshRSS_Context::$system_conf->auth_type === 'form' ? ' selected="selected"' : '', cryptAvailable() ? '' : ' disabled="disabled"'; ?>><?php echo _t('admin.auth.form'); ?></option>
- <option value="persona"<?php echo FreshRSS_Context::$system_conf->auth_type === 'persona' ? ' selected="selected"' : '', FreshRSS_Context::$user_conf->mail_login == '' ? ' disabled="disabled"' : ''; ?>><?php echo _t('admin.auth.persona'); ?></option>
<option value="http_auth"<?php echo FreshRSS_Context::$system_conf->auth_type === 'http_auth' ? ' selected="selected"' : '', httpAuthUser() == '' ? ' disabled="disabled"' : ''; ?>><?php echo _t('admin.auth.http'); ?> (REMOTE_USER = '<?php echo httpAuthUser(); ?>')</option>
<option value="none"<?php echo FreshRSS_Context::$system_conf->auth_type === 'none' ? ' selected="selected"' : ''; ?>><?php echo _t('admin.auth.none'); ?></option>
</select>
diff --git a/app/views/auth/personaLogin.phtml b/app/views/auth/personaLogin.phtml
deleted file mode 100644
index c6d738bf6..000000000
--- a/app/views/auth/personaLogin.phtml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php if ($this->res === false) { ?>
-<div class="prompt">
- <h1><?php echo _t('gen.auth.login'); ?></h1>
-
- <?php if (!max_registrations_reached()) { ?>
- <a href="<?php echo _url('auth', 'register'); ?>"><?php echo _t('gen.auth.registration.ask'); ?></a>
- <?php } ?>
-
- <p>
- <a class="signin btn btn-important" href="<?php echo _url('auth', 'login'); ?>">
- <?php echo _i('login'); ?> <?php echo _t('gen.auth.login_persona'); ?>
- </a>
-
- <br /><br />
-
- <?php echo _i('help'); ?>
- <small>
- <a href="<?php echo _url('auth', 'reset'); ?>"><?php echo _t('gen.auth.login_persona_problem'); ?></a>
- </small>
- </p>
-
- <p><a href="<?php echo _url('index', 'about'); ?>"><?php echo _t('gen.freshrss.about'); ?></a></p>
-</div>
-<?php
-} else {
- echo json_encode($this->res);
-}
-?>
diff --git a/app/views/auth/register.phtml b/app/views/auth/register.phtml
index 306679601..1f9976391 100644
--- a/app/views/auth/register.phtml
+++ b/app/views/auth/register.phtml
@@ -1,38 +1,34 @@
<div class="prompt">
- <h1><?php echo _t('gen.auth.registration'); ?></h1>
+ <h1><?php echo _t('gen.auth.registration'); ?></h1>
- <form method="post" action="<?php echo _url('user', 'create'); ?>">
- <div>
- <label class="group-name" for="new_user_name"><?php echo _t('gen.auth.username'), '<br />', _i('help'), ' ', _t('gen.auth.username.format'); ?></label>
- <input id="new_user_name" name="new_user_name" type="text" size="16" required="required" maxlength="16" autocomplete="off" pattern="[0-9a-zA-Z]{1,16}" />
- </div>
+ <form method="post" action="<?php echo _url('user', 'create'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
+ <div>
+ <label class="group-name" for="new_user_name"><?php echo _t('gen.auth.username'), '<br />', _i('help'), ' ', _t('gen.auth.username.format'); ?></label>
+ <input id="new_user_name" name="new_user_name" type="text" size="16" required="required" maxlength="16" autocomplete="off" pattern="[0-9a-zA-Z]{1,16}" />
+ </div>
- <div>
- <label class="group-name" for="new_user_passwordPlain"><?php echo _t('gen.auth.password'), '<br />', _i('help'), ' ', _t('gen.auth.password.format'); ?></label>
- <div class="stick">
- <input type="password" id="new_user_passwordPlain" name="new_user_passwordPlain" required="required" autocomplete="off" pattern=".{7,}" />
- <a class="btn toggle-password" data-toggle="new_user_passwordPlain"><?php echo _i('key'); ?></a>
- </div>
- <noscript><b><?php echo _t('gen.js.should_be_activated'); ?></b></noscript>
- </div>
+ <div>
+ <label class="group-name" for="new_user_passwordPlain"><?php echo _t('gen.auth.password'), '<br />', _i('help'), ' ', _t('gen.auth.password.format'); ?></label>
+ <div class="stick">
+ <input type="password" id="new_user_passwordPlain" name="new_user_passwordPlain" required="required" autocomplete="off" pattern=".{7,}" />
+ <a class="btn toggle-password" data-toggle="new_user_passwordPlain"><?php echo _i('key'); ?></a>
+ </div>
+ <noscript><b><?php echo _t('gen.js.should_be_activated'); ?></b></noscript>
+ </div>
- <div>
- <label class="group-name" for="new_user_email"><?php echo _t('gen.auth.email'); ?></label>
- <input type="email" id="new_user_email" name="new_user_email" class="extend" required="required" autocomplete="off" />
- </div>
+ <div>
+ <?php
+ $redirect_url = urlencode(Minz_Url::display(
+ array('c' => 'index', 'a' => 'index'),
+ 'php', true
+ ));
+ ?>
+ <input type="hidden" name="r" value="<?php echo $redirect_url; ?>" />
+ <button type="submit" class="btn btn-important"><?php echo _t('gen.action.create'); ?></button>
+ <a class="btn" href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.cancel'); ?></a>
+ </div>
+ </form>
- <div>
- <?php
- $redirect_url = urlencode(Minz_Url::display(
- array('c' => 'index', 'a' => 'index'),
- 'php', true
- ));
- ?>
- <input type="hidden" name="r" value="<?php echo $redirect_url; ?>" />
- <button type="submit" class="btn btn-important"><?php echo _t('gen.action.create'); ?></button>
- <a class="btn" href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.cancel'); ?></a>
- </div>
- </form>
-
- <p><a href="<?php echo _url('index', 'about'); ?>"><?php echo _t('gen.freshrss.about'); ?></a></p>
+ <p><a href="<?php echo _url('index', 'about'); ?>"><?php echo _t('gen.freshrss.about'); ?></a></p>
</div>
diff --git a/app/views/auth/reset.phtml b/app/views/auth/reset.phtml
deleted file mode 100644
index 9c820c7c8..000000000
--- a/app/views/auth/reset.phtml
+++ /dev/null
@@ -1,33 +0,0 @@
-<div class="prompt">
- <h1><?php echo _t('gen.auth.reset'); ?></h1>
-
- <?php if (!empty($this->message)) { ?>
- <p class="alert <?php echo $this->message['status'] === 'bad' ? 'alert-error' : 'alert-warn'; ?>">
- <span class="alert-head"><?php echo $this->message['title']; ?></span><br />
- <?php echo $this->message['body']; ?>
- </p>
- <?php } ?>
-
- <?php if (!$this->no_form) { ?>
- <form id="crypto-form" method="post" action="<?php echo _url('auth', 'reset'); ?>">
- <p class="alert alert-warn">
- <span class="alert-head"><?php echo _t('gen.short.attention'); ?></span><br />
- <?php echo _t('gen.auth.will_reset'); ?>
- </p>
-
- <div>
- <label for="username"><?php echo _t('gen.auth.username.admin'); ?></label>
- <input type="text" id="username" name="username" size="16" required="required" maxlength="16" pattern="[0-9a-zA-Z]{1,16}" autofocus="autofocus" />
- </div>
- <div>
- <label for="passwordPlain"><?php echo _t('gen.auth.password'); ?></label>
- <input type="password" id="passwordPlain" required="required" />
- <input type="hidden" id="challenge" name="challenge" /><br />
- <noscript><strong><?php echo _t('gen.js.should_be_activated'); ?></strong></noscript>
- </div>
- <div>
- <button id="loginButton" type="submit" class="btn btn-important"><?php echo _t('gen.action.submit'); ?></button>
- </div>
- </form>
- <?php } ?>
-</div>
diff --git a/app/views/configure/archiving.phtml b/app/views/configure/archiving.phtml
index 52ee98a48..2254f5dba 100644
--- a/app/views/configure/archiving.phtml
+++ b/app/views/configure/archiving.phtml
@@ -4,6 +4,7 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('configure', 'archiving'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.archiving'); ?></legend>
<p><?php echo _i('help'); ?> <?php echo _t('conf.archiving.help'); ?></p>
@@ -55,6 +56,7 @@
</form>
<form method="post" action="<?php echo _url('entry', 'optimize'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.archiving.advanced'); ?></legend>
<div class="form-group">
diff --git a/app/views/configure/display.phtml b/app/views/configure/display.phtml
index db6d7951c..62ecc1080 100644
--- a/app/views/configure/display.phtml
+++ b/app/views/configure/display.phtml
@@ -4,6 +4,7 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('configure', 'display'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.display'); ?></legend>
<div class="form-group">
diff --git a/app/views/configure/queries.phtml b/app/views/configure/queries.phtml
index 50df4cfea..0dffa268d 100644
--- a/app/views/configure/queries.phtml
+++ b/app/views/configure/queries.phtml
@@ -4,6 +4,7 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('configure', 'queries'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.query'); ?></legend>
<?php foreach ($this->queries as $key => $query) { ?>
diff --git a/app/views/configure/reading.phtml b/app/views/configure/reading.phtml
index 9c54b6bd5..07dabf15f 100644
--- a/app/views/configure/reading.phtml
+++ b/app/views/configure/reading.phtml
@@ -4,6 +4,7 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('configure', 'reading'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.reading'); ?></legend>
<div class="form-group">
diff --git a/app/views/configure/sharing.phtml b/app/views/configure/sharing.phtml
index 7bf435777..0dad5bf6d 100644
--- a/app/views/configure/sharing.phtml
+++ b/app/views/configure/sharing.phtml
@@ -15,6 +15,7 @@
<a href="#" class="remove btn btn-attention" data-remove="group-share-##key##"><?php echo _i('close'); ?></a></div>
<a target="_blank" class="btn" title="<?php echo _t('conf.sharing.more_information'); ?>" href="##help##"><?php echo _i('help'); ?></a>
</div></div>'>
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.sharing'); ?></legend>
<?php
foreach (FreshRSS_Context::$user_conf->sharing as $key => $share_options) {
diff --git a/app/views/configure/shortcut.phtml b/app/views/configure/shortcut.phtml
index 264a5f805..dceeb17de 100644
--- a/app/views/configure/shortcut.phtml
+++ b/app/views/configure/shortcut.phtml
@@ -12,6 +12,7 @@
<?php $s = FreshRSS_Context::$user_conf->shortcuts; ?>
<form method="post" action="<?php echo _url('configure', 'shortcut'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.shortcut'); ?></legend>
<noscript><p class="alert alert-error"><?php echo _t('conf.shortcut.javascript'); ?></p></noscript>
diff --git a/app/views/configure/system.phtml b/app/views/configure/system.phtml
index 4af669eb0..935b49fda 100644
--- a/app/views/configure/system.phtml
+++ b/app/views/configure/system.phtml
@@ -4,6 +4,7 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('configure', 'system'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('admin.system'); ?></legend>
<div class="form-group">
diff --git a/app/views/entry/bookmark.phtml b/app/views/entry/bookmark.phtml
index 6b5a4ed03..d85706669 100755
--- a/app/views/entry/bookmark.phtml
+++ b/app/views/entry/bookmark.phtml
@@ -1,17 +1,16 @@
<?php
header('Content-Type: application/json; charset=UTF-8');
-if (Minz_Request::param('is_favorite', true)) {
- Minz_Request::_param('is_favorite', 0);
-} else {
- Minz_Request::_param('is_favorite', 1);
-}
-
-$url = Minz_Url::display(array(
+$url = array(
'c' => Minz_Request::controllerName(),
'a' => Minz_Request::actionName(),
- 'params' => Minz_Request::params(),
-));
+ 'params' => Minz_Request::fetchGET(),
+);
+
+$url['params']['is_favorite'] = Minz_Request::param('is_favorite', true) ? '0' : '1';
FreshRSS::loadStylesAndScripts();
-echo json_encode(array('url' => str_ireplace('&amp;', '&', $url), 'icon' => _i(Minz_Request::param('is_favorite') ? 'non-starred' : 'starred')));
+echo json_encode(array(
+ 'url' => str_ireplace('&amp;', '&', Minz_Url::display($url)),
+ 'icon' => _i($url['params']['is_favorite'] === '1' ? 'non-starred' : 'starred')
+ ));
diff --git a/app/views/entry/read.phtml b/app/views/entry/read.phtml
index 7d0e3de82..73977d94b 100755
--- a/app/views/entry/read.phtml
+++ b/app/views/entry/read.phtml
@@ -1,17 +1,16 @@
<?php
header('Content-Type: application/json; charset=UTF-8');
-if (Minz_Request::param('is_read', true)) {
- Minz_Request::_param('is_read', 0);
-} else {
- Minz_Request::_param('is_read', 1);
-}
-
-$url = Minz_Url::display(array(
+$url = array(
'c' => Minz_Request::controllerName(),
'a' => Minz_Request::actionName(),
- 'params' => Minz_Request::params(),
-));
+ 'params' => Minz_Request::fetchGET(),
+);
+
+$url['params']['is_read'] = Minz_Request::param('is_read', true) ? '0' : '1';
FreshRSS::loadStylesAndScripts();
-echo json_encode(array('url' => str_ireplace('&amp;', '&', $url), 'icon' => _i(Minz_Request::param('is_read') ? 'unread' : 'read')));
+echo json_encode(array(
+ 'url' => str_ireplace('&amp;', '&', Minz_Url::display($url)),
+ 'icon' => _i($url['params']['is_read'] === '1' ? 'unread' : 'read')
+ ));
diff --git a/app/views/extension/index.phtml b/app/views/extension/index.phtml
index 4b0d5ebeb..7cb16bfff 100644
--- a/app/views/extension/index.phtml
+++ b/app/views/extension/index.phtml
@@ -5,7 +5,8 @@
<h1><?php echo _t('admin.extensions.title'); ?></h1>
- <form id="form-extension" method="post" aria-hidden="true"></form>
+ <form id="form-extension" method="post">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<?php if (!empty($this->extension_list['system'])) { ?>
<h2><?php echo _t('admin.extensions.system'); ?></h2>
<?php
@@ -31,6 +32,7 @@
?>
<p class="alert alert-warn"><?php echo _t('admin.extensions.empty_list'); ?></p>
<?php } ?>
+ </form>
</div>
<?php $class = isset($this->extension) ? ' class="active"' : ''; ?>
diff --git a/app/views/feed/add.phtml b/app/views/feed/add.phtml
index fd6d41b1d..caf685d79 100644
--- a/app/views/feed/add.phtml
+++ b/app/views/feed/add.phtml
@@ -7,6 +7,7 @@
<?php } ?>
<form method="post" action="<?php echo _url('feed', 'add'); ?>" autocomplete="off">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('sub.feed.informations'); ?></legend>
<?php if ($this->load_ok) { ?>
<div class="form-group">
diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml
index 72084d8fa..b7e8f68cd 100644
--- a/app/views/helpers/feed/update.phtml
+++ b/app/views/helpers/feed/update.phtml
@@ -18,6 +18,7 @@
<?php } ?>
<form method="post" action="<?php echo _url('subscription', 'feed', 'id', $this->feed->id()); ?>" autocomplete="off">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('sub.feed.informations'); ?></legend>
<div class="form-group">
<label class="group-name" for="name"><?php echo _t('sub.feed.title'); ?></label>
diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml
index 6178cacf2..745baa195 100644
--- a/app/views/helpers/javascript_vars.phtml
+++ b/app/views/helpers/javascript_vars.phtml
@@ -1,6 +1,5 @@
<?php
$mark = FreshRSS_Context::$user_conf->mark_when;
-$mail = Minz_Session::param('mail', false);
$s = FreshRSS_Context::$user_conf->shortcuts;
echo htmlspecialchars(json_encode(array(
'context' => array(
@@ -16,8 +15,8 @@ echo htmlspecialchars(json_encode(array(
'sticky_post' => !!FreshRSS_Context::isStickyPostEnabled(),
'html5_notif_timeout' => FreshRSS_Context::$user_conf->html5_notif_timeout,
'auth_type' => FreshRSS_Context::$system_conf->auth_type,
- 'current_user_mail' => $mail ? ('"' . $mail . '"') : null,
'current_view' => Minz_Request::actionName(),
+ 'csrf' => FreshRSS_Auth::csrfToken(),
),
'shortcuts' => array(
'mark_read' => @$s['mark_read'],
diff --git a/app/views/helpers/logs_pagination.phtml b/app/views/helpers/logs_pagination.phtml
index 58b3c68f4..bf9d91f04 100755
--- a/app/views/helpers/logs_pagination.phtml
+++ b/app/views/helpers/logs_pagination.phtml
@@ -1,7 +1,7 @@
<?php
$c = Minz_Request::controllerName();
$a = Minz_Request::actionName();
- $params = Minz_Request::params();
+ $params = Minz_Request::fetchGET();
?>
<?php if ($this->nbPage > 1) { ?>
diff --git a/app/views/helpers/pagination.phtml b/app/views/helpers/pagination.phtml
index 7eca8c525..20957fc67 100755
--- a/app/views/helpers/pagination.phtml
+++ b/app/views/helpers/pagination.phtml
@@ -10,12 +10,14 @@
'get' => FreshRSS_Context::currentGet(),
'nextGet' => FreshRSS_Context::$next_get,
'idMax' => FreshRSS_Context::$id_max,
+ 'search' => FreshRSS_Context::$search,
+ 'state' => FreshRSS_Context::$state,
)
);
?>
-<form id="mark-read-pagination" method="post" aria-hidden="true"></form>
-
+<form id="mark-read-pagination" method="post">
+<input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<ul class="pagination">
<li class="item pager-next">
<?php if (FreshRSS_Context::$next_id) { ?>
@@ -39,3 +41,4 @@
<?php } ?>
</li>
</ul>
+</form>
diff --git a/app/views/importExport/index.phtml b/app/views/importExport/index.phtml
index a64524bf1..c0bc412c3 100644
--- a/app/views/importExport/index.phtml
+++ b/app/views/importExport/index.phtml
@@ -4,6 +4,7 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('importExport', 'import'); ?>" enctype="multipart/form-data">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('sub.import_export.import'); ?></legend>
<div class="form-group">
<label class="group-name" for="file">
@@ -23,6 +24,7 @@
<?php if (count($this->feeds) > 0) { ?>
<form method="post" action="<?php echo _url('importExport', 'export'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('sub.import_export.export'); ?></legend>
<div class="form-group">
<div class="group-controls">
diff --git a/app/views/index/global.phtml b/app/views/index/global.phtml
index 0ffa3bc54..1e53e4f8c 100644
--- a/app/views/index/global.phtml
+++ b/app/views/index/global.phtml
@@ -14,7 +14,7 @@
$url_base = array(
'c' => 'index',
'a' => 'normal',
- 'params' => Minz_Request::params()
+ 'params' => Minz_Request::fetchGET(),
);
foreach ($this->categories as $cat) {
diff --git a/app/views/index/logs.phtml b/app/views/index/logs.phtml
index 02256bd98..a88f89278 100644
--- a/app/views/index/logs.phtml
+++ b/app/views/index/logs.phtml
@@ -3,6 +3,7 @@
<h1><?php echo _t('index.log'); ?></h1>
<form method="post" action="<?php echo _url('index', 'logs'); ?>"><p>
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<input type="hidden" name="clearLogs" />
<button type="submit" class="btn"><?php echo _t('index.log.clear'); ?></button>
</p></form>
@@ -10,7 +11,7 @@
<?php $items = $this->logsPaginator->items(); ?>
<?php if (!empty($items)) { ?>
- <div class="logs">
+ <div class="loglist">
<?php $this->logsPaginator->render('logs_pagination.phtml', 'page'); ?>
<?php foreach ($items as $log) { ?>
diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml
index ba88b679f..88c78d465 100644
--- a/app/views/stats/idle.phtml
+++ b/app/views/stats/idle.phtml
@@ -18,8 +18,8 @@
<div class="stat">
<h2><?php echo _t('gen.date.' . $period); ?></h2>
- <form id="form-delete" method="post" aria-hidden="true"></form>
-
+ <form id="form-delete" method="post">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<?php foreach ($feeds as $feed) { ?>
<ul class="horizontal-list">
<li class="item">
@@ -34,6 +34,7 @@
</li>
</ul>
<?php } ?>
+ </form>
</div>
<?php
}
diff --git a/app/views/subscription/index.phtml b/app/views/subscription/index.phtml
index 07cebf817..48f760d3e 100644
--- a/app/views/subscription/index.phtml
+++ b/app/views/subscription/index.phtml
@@ -6,6 +6,7 @@
<h2><?php echo _t('sub.title'); ?></h2>
<form id="add_rss" method="post" action="<?php echo _url('feed', 'add'); ?>" autocomplete="off">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<div class="stick">
<input type="url" name="url_rss" class="long" placeholder="<?php echo _t('sub.feed.add'); ?>" />
<div class="dropdown">
@@ -56,13 +57,16 @@
<ul class="box-content box-content-centered">
<form action="<?php echo _url('category', 'create'); ?>" method="post">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<li class="item"><input type="text" id="new-category" name="new-category" placeholder="<?php echo _t('sub.category.new'); ?>" /></li>
<li class="item"><button class="btn btn-important" type="submit"><?php echo _t('gen.action.submit'); ?></button></li>
</form>
</ul>
</div>
- <form id="controller-category" method="post" aria-hidden="true"></form>
+ <form id="controller-category" method="post" aria-hidden="true">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
+ </form>
<?php
foreach ($this->categories as $cat) {
@@ -71,6 +75,7 @@
<div class="box">
<div class="box-title">
<form action="<?php echo _url('category', 'update', 'id', $cat->id()); ?>" method="post">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<input type="text" name="name" value="<?php echo $cat->name(); ?>" />
<div class="dropdown">
diff --git a/app/views/update/checkInstall.phtml b/app/views/update/checkInstall.phtml
index ed3858b56..543ab43de 100644
--- a/app/views/update/checkInstall.phtml
+++ b/app/views/update/checkInstall.phtml
@@ -9,7 +9,7 @@
<p class="alert <?php echo $status ? 'alert-success' : 'alert-error'; ?>">
<?php
if ($key === 'php') {
- echo _t('admin.check_install.' . $key . '.' . ($status ? 'ok' : 'nok'), PHP_VERSION, '5.3.0');
+ echo _t('admin.check_install.' . $key . '.' . ($status ? 'ok' : 'nok'), PHP_VERSION, '5.3.3');
} else {
echo _t('admin.check_install.' . $key . '.' . ($status ? 'ok' : 'nok'));
}
diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml
index fe1b6618b..aab3aa4c4 100644
--- a/app/views/user/manage.phtml
+++ b/app/views/user/manage.phtml
@@ -4,6 +4,7 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('user', 'create'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('admin.user.create'); ?></legend>
<div class="form-group">
@@ -37,14 +38,6 @@
</div>
</div>
- <div class="form-group">
- <label class="group-name" for="new_user_email"><?php echo _t('admin.user.email_persona'); ?></label>
- <?php $mail = FreshRSS_Context::$user_conf->mail_login; ?>
- <div class="group-controls">
- <input type="email" id="new_user_email" name="new_user_email" class="extend" autocomplete="off" placeholder="alice@example.net" />
- </div>
- </div>
-
<div class="form-group form-actions">
<div class="group-controls">
<button type="submit" class="btn btn-important"><?php echo _t('gen.action.create'); ?></button>
@@ -54,6 +47,7 @@
</form>
<form method="post" action="<?php echo _url('user', 'delete'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('admin.user.users'); ?></legend>
<div class="form-group">
diff --git a/app/views/user/profile.phtml b/app/views/user/profile.phtml
index 7ae2c7ede..429375e44 100644
--- a/app/views/user/profile.phtml
+++ b/app/views/user/profile.phtml
@@ -4,6 +4,7 @@
<a href="<?php echo _url('index', 'index'); ?>"><?php echo _t('gen.action.back_to_rss_feeds'); ?></a>
<form method="post" action="<?php echo _url('user', 'profile'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.profile'); ?></legend>
<div class="form-group">
@@ -37,19 +38,11 @@
<input type="password" id="apiPasswordPlain" name="apiPasswordPlain" autocomplete="off" pattern=".{7,}" <?php echo cryptAvailable() ? '' : 'disabled="disabled" '; ?>/>
<a class="btn toggle-password" data-toggle="apiPasswordPlain"><?php echo _i('key'); ?></a>
</div>
+ <?php echo _i('help'); ?> <kbd><a href="../api/"><?php echo Minz_Url::display('/api/greader.php', 'html', true); ?></a></kbd>
</div>
</div>
<?php } ?>
- <div class="form-group">
- <label class="group-name" for="mail_login"><?php echo _t('conf.profile.email_persona'); ?></label>
- <?php $mail = FreshRSS_Context::$user_conf->mail_login; ?>
- <div class="group-controls">
- <input type="email" id="mail_login" name="mail_login" class="extend" autocomplete="off" value="<?php echo $mail; ?>" <?php echo FreshRSS_Auth::hasAccess('admin') ? '' : 'disabled="disabled"'; ?> placeholder="alice@example.net" />
- <noscript><b><?php echo _t('gen.js.should_be_activated'); ?></b></noscript>
- </div>
- </div>
-
<div class="form-group form-actions">
<div class="group-controls">
<button type="submit" class="btn btn-important"><?php echo _t('gen.action.submit'); ?></button>
@@ -60,6 +53,7 @@
<?php if (!FreshRSS_Auth::hasAccess('admin')) { ?>
<form id="crypto-form" method="post" action="<?php echo _url('user', 'delete'); ?>">
+ <input type="hidden" name="_csrf" value="<?php echo FreshRSS_Auth::csrfToken(); ?>" />
<legend><?php echo _t('conf.profile.delete'); ?></legend>
<p class="alert alert-warn"><span class="alert-head"><?php echo _t('gen.short.attention'); ?></span> <?php echo _t('conf.profile.delete.warn'); ?></p>