aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2018-12-29 11:33:31 +0100
committerGravatar GitHub <noreply@github.com> 2018-12-29 11:33:31 +0100
commita0f1b76918e7ce038ab8ea490d9f5ed0e625831e (patch)
tree1bdd359b245ac3841b742ece6800de776dd66a4c /app
parent92de09bac41d320decb31e6caf2e9b78fab484f7 (diff)
parentf9555db678679d04fdc28bb2d31eb00135209a16 (diff)
Merge pull request #2199 from Alkarex/batch-scroll-as-read
Batch scroll as read + reducing jQuery
Diffstat (limited to 'app')
-rwxr-xr-xapp/Controllers/entryController.php13
-rw-r--r--app/Models/EntryDAO.php2
-rw-r--r--app/Models/TagDAO.php48
-rwxr-xr-xapp/views/entry/read.phtml10
-rw-r--r--app/views/helpers/javascript_vars.phtml5
5 files changed, 42 insertions, 36 deletions
diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php
index fc0af0639..9c5ee2616 100755
--- a/app/Controllers/entryController.php
+++ b/app/Controllers/entryController.php
@@ -97,14 +97,15 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
}
}
} else {
- $entryDAO->markRead($id, $is_read);
-
+ $ids = is_array($id) ? $id : array($id);
+ $entryDAO->markRead($ids, $is_read);
$tagDAO = FreshRSS_Factory::createTagDao();
- foreach ($tagDAO->getTagsForEntry($id) as $tag) {
- if (!empty($tag['checked'])) {
- $this->view->tags[] = $tag['id'];
- }
+ $tagsForEntries = $tagDAO->getTagsForEntries($ids);
+ $tags = array();
+ foreach ($tagsForEntries as $line) {
+ $tags['t_' . $line['id_tag']][] = $line['id_entry'];
}
+ $this->view->tags = $tags;
}
if (!$this->ajax) {
diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php
index 6d77a33cd..9ae1ed797 100644
--- a/app/Models/EntryDAO.php
+++ b/app/Models/EntryDAO.php
@@ -383,7 +383,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
*/
public function markRead($ids, $is_read = true) {
FreshRSS_UserDAO::touch();
- if (is_array($ids)) { //Many IDs at once (used by API)
+ if (is_array($ids)) { //Many IDs at once
if (count($ids) < 6) { //Speed heuristics
$affected = 0;
foreach ($ids as $id) {
diff --git a/app/Models/TagDAO.php b/app/Models/TagDAO.php
index b55d2b35d..0b4428f17 100644
--- a/app/Models/TagDAO.php
+++ b/app/Models/TagDAO.php
@@ -256,42 +256,56 @@ class FreshRSS_TagDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
}
}
- //For API
- public function getEntryIdsTagNames($entries) {
- $sql = 'SELECT et.id_entry, t.name '
+ public function getTagsForEntries($entries) {
+ $sql = 'SELECT et.id_entry, et.id_tag, t.name '
. 'FROM `' . $this->prefix . 'tag` t '
. 'INNER JOIN `' . $this->prefix . 'entrytag` et ON et.id_tag = t.id';
$values = array();
if (is_array($entries) && count($entries) > 0) {
$sql .= ' AND et.id_entry IN (' . str_repeat('?,', count($entries) - 1). '?)';
- foreach ($entries as $entry) {
- $values[] = is_array($entry) ? $entry['id'] : $entry->id();
+ if (is_array($entries[0])) {
+ foreach ($entries as $entry) {
+ $values[] = $entry['id'];
+ }
+ } elseif (is_object($entries[0])) {
+ foreach ($entries as $entry) {
+ $values[] = $entry->id();
+ }
+ } else {
+ foreach ($entries as $entry) {
+ $values[] = $entry;
+ }
}
}
$stm = $this->bd->prepare($sql);
if ($stm && $stm->execute($values)) {
- $result = array();
- foreach ($stm->fetchAll(PDO::FETCH_ASSOC) as $line) {
- $entryId = 'e_' . $line['id_entry'];
- $tagName = $line['name'];
- if (empty($result[$entryId])) {
- $result[$entryId] = array();
- }
- $result[$entryId][] = $tagName;
- }
- return $result;
+ return $stm->fetchAll(PDO::FETCH_ASSOC);
} else {
$info = $stm == null ? array(0 => '', 1 => '', 2 => 'syntax error') : $stm->errorInfo();
if ($this->autoUpdateDb($info)) {
- return $this->getTagNamesEntryIds($id_entry);
+ return $this->getTagsForEntries($entries);
}
- Minz_Log::error('SQL error getTagNamesEntryIds: ' . $info[2]);
+ Minz_Log::error('SQL error getTagsForEntries: ' . $info[2]);
return false;
}
}
+ //For API
+ public function getEntryIdsTagNames($entries) {
+ $result = array();
+ foreach ($this->getTagsForEntries($entries) as $line) {
+ $entryId = 'e_' . $line['id_entry'];
+ $tagName = $line['name'];
+ if (empty($result[$entryId])) {
+ $result[$entryId] = array();
+ }
+ $result[$entryId][] = $tagName;
+ }
+ return $result;
+ }
+
public static function daoToTag($listDAO) {
$list = array();
if (!is_array($listDAO)) {
diff --git a/app/views/entry/read.phtml b/app/views/entry/read.phtml
index fb9e129f2..44193da9c 100755
--- a/app/views/entry/read.phtml
+++ b/app/views/entry/read.phtml
@@ -1,17 +1,7 @@
<?php
header('Content-Type: application/json; charset=UTF-8');
-$url = array(
- 'c' => Minz_Request::controllerName(),
- 'a' => Minz_Request::actionName(),
- '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;', '&', Minz_Url::display($url)),
- 'icon' => _i($url['params']['is_read'] === '1' ? 'unread' : 'read'),
'tags' => $this->tags,
));
diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml
index a434a04a3..b62263ecf 100644
--- a/app/views/helpers/javascript_vars.phtml
+++ b/app/views/helpers/javascript_vars.phtml
@@ -42,7 +42,7 @@ echo htmlspecialchars(json_encode(array(
'reading_view' => @$s['reading_view'],
'rss_view' => @$s['rss_view'],
),
- 'url' => array(
+ 'urls' => array(
'index' => _url('index', 'index'),
'login' => Minz_Url::display(array('c' => 'auth', 'a' => 'login'), 'php'),
'logout' => Minz_Url::display(array('c' => 'auth', 'a' => 'logout'), 'php'),
@@ -56,6 +56,7 @@ echo htmlspecialchars(json_encode(array(
'category_empty' => _t('gen.js.category_empty'),
),
'icons' => array(
- 'close' => _i('close'),
+ 'read' => rawurlencode(_i('read')),
+ 'unread' => rawurlencode(_i('unread')),
),
), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES, 'UTF-8');