aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2019-01-17 21:36:29 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2019-01-17 21:36:29 +0100
commit34fe41ac78b6bd465c12086edbbd856d9533065c (patch)
tree12e86c946a9a76aa83af0f1f8ff315368e08535c /app
parent6bc49e137e2f996f768770c3702d7d6552f556b3 (diff)
parent48c901bc5c090ff0ee8397d0b1ecfb337d774a86 (diff)
Merge branch 'FreshRSS/dev' into FreshRSS/dev-1.14.0
Diffstat (limited to 'app')
-rw-r--r--app/Controllers/importExportController.php36
-rw-r--r--app/Models/EntryDAO.php6
-rw-r--r--app/i18n/cz/sub.php1
-rw-r--r--app/i18n/de/sub.php1
-rw-r--r--app/i18n/en/sub.php1
-rwxr-xr-xapp/i18n/es/sub.php1
-rw-r--r--app/i18n/fr/sub.php1
-rw-r--r--app/i18n/he/sub.php1
-rw-r--r--app/i18n/it/sub.php1
-rw-r--r--app/i18n/kr/sub.php1
-rw-r--r--app/i18n/nl/sub.php1
-rw-r--r--app/i18n/oc/sub.php1
-rw-r--r--app/i18n/pt-br/sub.php1
-rw-r--r--app/i18n/ru/sub.php1
-rw-r--r--app/i18n/tr/sub.php1
-rw-r--r--app/i18n/zh-cn/sub.php1
-rw-r--r--app/layout/header.phtml2
-rw-r--r--app/views/helpers/export/articles.phtml10
-rw-r--r--app/views/importExport/index.phtml5
19 files changed, 51 insertions, 22 deletions
diff --git a/app/Controllers/importExportController.php b/app/Controllers/importExportController.php
index 2d8d4e01d..3f2947c7a 100644
--- a/app/Controllers/importExportController.php
+++ b/app/Controllers/importExportController.php
@@ -650,7 +650,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
return $return;
}
- public function exportFile($export_opml = true, $export_starred = false, $export_feeds = array(), $maxFeedEntries = 50, $username = null) {
+ public function exportFile($export_opml = true, $export_starred = false, $export_labelled = false, $export_feeds = array(), $maxFeedEntries = 50, $username = null) {
require_once(LIB_PATH . '/lib_opml.php');
$this->catDAO = new FreshRSS_CategoryDAO($username);
@@ -674,8 +674,11 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
$export_files["feeds_${day}.opml.xml"] = $this->generateOpml();
}
- if ($export_starred) {
- $export_files["starred_${day}.json"] = $this->generateEntries('starred');
+ if ($export_starred || $export_labelled) {
+ $export_files["starred_${day}.json"] = $this->generateEntries(
+ ($export_starred ? 'S' : '') .
+ ($export_labelled ? 'T' : '')
+ );
}
foreach ($export_feeds as $feed_id) {
@@ -683,7 +686,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
if ($feed) {
$filename = "feed_${day}_" . $feed->category() . '_'
. $feed->id() . '.json';
- $export_files[$filename] = $this->generateEntries('feed', $feed, $maxFeedEntries);
+ $export_files[$filename] = $this->generateEntries('f', $feed, $maxFeedEntries);
}
}
@@ -725,6 +728,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
$nb_files = $this->exportFile(
Minz_Request::param('export_opml', false),
Minz_Request::param('export_starred', false),
+ Minz_Request::param('export_labelled', false),
Minz_Request::param('export_feeds', array())
);
} catch (FreshRSS_ZipMissing_Exception $zme) {
@@ -758,27 +762,29 @@ class FreshRSS_importExport_Controller extends Minz_ActionController {
/**
* This method returns a JSON file content.
*
- * @param string $type must be "starred" or "feed"
+ * @param string $type must be one of:
+ * 'S' (starred/favourite), 'f' (feed), 'T' (taggued/labelled), 'ST' (starred or labelled)
* @param FreshRSS_Feed $feed feed of which we want to get entries.
* @return string the JSON file content.
*/
private function generateEntries($type, $feed = null, $maxFeedEntries = 50) {
$this->view->categories = $this->catDAO->listCategories();
+ $tagDAO = FreshRSS_Factory::createTagDao();
- if ($type == 'starred') {
+ if ($type === 's' || $type === 'S' || $type === 'T' || $type === 'ST') {
$this->view->list_title = _t('sub.import_export.starred_list');
$this->view->type = 'starred';
- $unread_fav = $this->entryDAO->countUnreadReadFavorites();
- $this->view->entriesRaw = $this->entryDAO->listWhereRaw(
- 's', '', FreshRSS_Entry::STATE_ALL, 'ASC', $unread_fav['all']
- );
- } elseif ($type === 'feed' && $feed != null) {
+ $this->view->entriesId = $this->entryDAO->listIdsWhere($type, '', FreshRSS_Entry::STATE_ALL, 'ASC', -1);
+ $this->view->entryIdsTagNames = $tagDAO->getEntryIdsTagNames($this->view->entriesId);
+ //The following is a streamable query, i.e. must be last
+ $this->view->entriesRaw = $this->entryDAO->listWhereRaw($type, '', FreshRSS_Entry::STATE_ALL, 'ASC', -1);
+ } elseif ($type === 'f' && $feed != null) {
$this->view->list_title = _t('sub.import_export.feed_list', $feed->name());
$this->view->type = 'feed/' . $feed->id();
- $this->view->entriesRaw = $this->entryDAO->listWhereRaw(
- 'f', $feed->id(), FreshRSS_Entry::STATE_ALL, 'ASC',
- $maxFeedEntries
- );
+ $this->view->entriesId = $this->entryDAO->listIdsWhere($type, $feed->id(), FreshRSS_Entry::STATE_ALL, 'ASC', $maxFeedEntries);
+ $this->view->entryIdsTagNames = $tagDAO->getEntryIdsTagNames($this->view->entriesId);
+ //The following is a streamable query, i.e. must be last
+ $this->view->entriesRaw = $this->entryDAO->listWhereRaw($type, $feed->id(), FreshRSS_Entry::STATE_ALL, 'ASC', $maxFeedEntries);
$this->view->feed = $feed;
}
diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php
index 9ae1ed797..21f17c097 100644
--- a/app/Models/EntryDAO.php
+++ b/app/Models/EntryDAO.php
@@ -839,6 +839,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_NORMAL . ' ';
$where .= 'AND e.is_favorite=1 ';
break;
+ case 'S': //Starred
+ $where .= 'e.is_favorite=1 ';
+ break;
case 'c': //Category
$where .= 'f.priority >= ' . FreshRSS_Feed::PRIORITY_NORMAL . ' ';
$where .= 'AND f.category=? ';
@@ -855,6 +858,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
case 'T': //Any tag
$where .= '1=1 ';
break;
+ case 'ST': //Starred or tagged
+ $where .= 'e.is_favorite=1 OR EXISTS (SELECT et2.id_tag FROM `' . $this->prefix . 'entrytag` et2 WHERE et2.id_entry = e.id) ';
+ break;
default:
throw new FreshRSS_EntriesGetter_Exception('Bad type in Entry->listByType: [' . $type . ']!');
}
diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php
index ad02f6f49..5b5634fed 100644
--- a/app/i18n/cz/sub.php
+++ b/app/i18n/cz/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Export',
'export_opml' => 'Exportovat seznam kanálů (OPML)',
'export_starred' => 'Exportovat oblíbené',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'Seznam %s článků',
'file_to_import' => 'Soubor k importu<br />(OPML, JSON nebo ZIP)',
'file_to_import_no_zip' => 'Soubor k importu<br />(OPML nebo JSON)',
diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php
index aa408e8c7..27e893177 100644
--- a/app/i18n/de/sub.php
+++ b/app/i18n/de/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Exportieren',
'export_opml' => 'Liste der Feeds exportieren (OPML)',
'export_starred' => 'Ihre Favoriten exportieren',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'Liste von %s Artikeln',
'file_to_import' => 'Zu importierende Datei<br />(OPML, JSON oder ZIP)',
'file_to_import_no_zip' => 'Zu importierende Datei<br />(OPML oder JSON)',
diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php
index 9acbcbf33..4efd81ba4 100644
--- a/app/i18n/en/sub.php
+++ b/app/i18n/en/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Export',
'export_opml' => 'Export list of feeds (OPML)',
'export_starred' => 'Export your favourites',
+ 'export_labelled' => 'Export your labelled articles',
'feed_list' => 'List of %s articles',
'file_to_import' => 'File to import<br />(OPML, JSON or ZIP)',
'file_to_import_no_zip' => 'File to import<br />(OPML or JSON)',
diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php
index 64e420dc1..854984891 100755
--- a/app/i18n/es/sub.php
+++ b/app/i18n/es/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Exportar',
'export_opml' => 'Exportar la lista de fuentes (OPML)',
'export_starred' => 'Exportar tus favoritos',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'Lista de %s artículos',
'file_to_import' => 'Archivo a importar<br />(OPML, JSON o ZIP)',
'file_to_import_no_zip' => 'Archivo a importar<br />(OPML o JSON)',
diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php
index 6cb31414d..d9964ac6e 100644
--- a/app/i18n/fr/sub.php
+++ b/app/i18n/fr/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Exporter',
'export_opml' => 'Exporter la liste des flux (OPML)',
'export_starred' => 'Exporter les favoris',
+ 'export_labelled' => 'Exporter les articles étiquetés',
'feed_list' => 'Liste des articles de %s',
'file_to_import' => 'Fichier à importer<br />(OPML, JSON ou ZIP)',
'file_to_import_no_zip' => 'Fichier à importer<br />(OPML ou JSON)',
diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php
index e4c487b84..6d824e349 100644
--- a/app/i18n/he/sub.php
+++ b/app/i18n/he/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'ייצוא',
'export_opml' => 'ייצוא רשימת הזנות (OPML)',
'export_starred' => 'ייצוא מועדפים',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'רשימה של %s מאמרים',
'file_to_import' => 'קובץ לייבוא<br />(OPML, Json or Zip)',
'file_to_import_no_zip' => 'קובץ לייבוא<br />(OPML or Json)',
diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php
index 6faa48d63..ff7fa6f1d 100644
--- a/app/i18n/it/sub.php
+++ b/app/i18n/it/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Esporta',
'export_opml' => 'Esporta tutta la lista dei feed (OPML)',
'export_starred' => 'Esporta i tuoi preferiti',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'Elenco di %s articoli',
'file_to_import' => 'File da importare<br />(OPML, JSON o ZIP)',
'file_to_import_no_zip' => 'File da importare<br />(OPML o JSON)',
diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php
index 463496c57..9f8967053 100644
--- a/app/i18n/kr/sub.php
+++ b/app/i18n/kr/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => '내보내기',
'export_opml' => '피드 목록 내보내기 (OPML)',
'export_starred' => '즐겨찾기 내보내기',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => '%s 개의 글 목록',
'file_to_import' => '불러올 파일<br />(OPML, JSON 또는 ZIP)',
'file_to_import_no_zip' => '불러올 파일<br />(OPML 또는 JSON)',
diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php
index 36c96b53f..0ab7ac44f 100644
--- a/app/i18n/nl/sub.php
+++ b/app/i18n/nl/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Exporteer',
'export_opml' => 'Exporteer lijst van feeds (OPML)',
'export_starred' => 'Exporteer je favorieten',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'Lijst van %s artikelen',
'file_to_import' => 'Bestand om te importeren<br />(OPML, JSON of ZIP)',
'file_to_import_no_zip' => 'Bestand om te importeren<br />(OPML of JSON)',
diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php
index f9ddf339a..3ca98d75e 100644
--- a/app/i18n/oc/sub.php
+++ b/app/i18n/oc/sub.php
@@ -71,6 +71,7 @@ return array(
'export' => 'Exportar',
'export_opml' => 'Exportar la lista de fluxes (OPML)',
'export_starred' => 'Exportar los favorits',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'Lista dels %s articles',
'file_to_import' => 'Fichièr d’importar<br />(OPML, JSON o ZIP)',
'file_to_import_no_zip' => 'Fichièr d’importar<br />(OPML o JSON)',
diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php
index 78684c14c..58b2fc1f9 100644
--- a/app/i18n/pt-br/sub.php
+++ b/app/i18n/pt-br/sub.php
@@ -68,6 +68,7 @@ return array(
'export' => 'Exportar',
'export_opml' => 'Exporta a lista dos feeds (OPML)',
'export_starred' => 'Exportar seus favoritos',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'Lista dos %s artigos',
'file_to_import' => 'Arquivo para importar<br />(OPML, JSON or ZIP)',
'file_to_import_no_zip' => 'Arquivo para importar<br />(OPML or JSON)',
diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php
index 7de80586b..62f8a8e3a 100644
--- a/app/i18n/ru/sub.php
+++ b/app/i18n/ru/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Export', //TODO - Translation
'export_opml' => 'Export list of feeds (OPML)', //TODO - Translation
'export_starred' => 'Export your favourites', //TODO - Translation
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => 'List of %s articles', //TODO - Translation
'file_to_import' => 'File to import<br />(OPML, JSON or ZIP)', //TODO - Translation
'file_to_import_no_zip' => 'File to import<br />(OPML or JSON)', //TODO - Translation
diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php
index b5b56f4b8..7f29633be 100644
--- a/app/i18n/tr/sub.php
+++ b/app/i18n/tr/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => 'Dışa aktar',
'export_opml' => 'Akış listesini dışarı aktar (OPML)',
'export_starred' => 'Favorileri dışarı aktar',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => '%s makalenin listesi',
'file_to_import' => 'Dosyadan içe aktar<br />(OPML, JSON or ZIP)',
'file_to_import_no_zip' => 'Dosyadan içe aktar<br />(OPML or JSON)',
diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php
index e1c176bc6..3a9623468 100644
--- a/app/i18n/zh-cn/sub.php
+++ b/app/i18n/zh-cn/sub.php
@@ -72,6 +72,7 @@ return array(
'export' => '导出',
'export_opml' => '导出 RSS 源列表 (OPML)',
'export_starred' => '导出你的收藏',
+ 'export_labelled' => 'Export your labelled articles', //TODO
'feed_list' => '%s 文章列表',
'file_to_import' => '需要导入的文件<br />(OPML, JSON 或 ZIP)',
'file_to_import_no_zip' => '需要导入的文件<br />(OPML 或 JSON)',
diff --git a/app/layout/header.phtml b/app/layout/header.phtml
index 6b538851b..410ac1ff0 100644
--- a/app/layout/header.phtml
+++ b/app/layout/header.phtml
@@ -16,7 +16,7 @@ if (FreshRSS_Auth::accessNeedsAction()) {
<div class="item title">
<h1>
<a href="<?php echo _url('index', 'index'); ?>">
- <img class="logo" src="<?php echo _i('icon', true); ?>" alt="⊚" />
+ <img class="logo" src="<?php echo _i('icon', true); ?>" alt="" />
<?php echo FreshRSS_Context::$system_conf->title; ?>
</a>
</h1>
diff --git a/app/views/helpers/export/articles.phtml b/app/views/helpers/export/articles.phtml
index 59a2c7ad7..eb2cb0924 100644
--- a/app/views/helpers/export/articles.phtml
+++ b/app/views/helpers/export/articles.phtml
@@ -16,14 +16,12 @@ $articles = array(
echo rtrim(json_encode($articles, $options), " ]}\n\r\t"), "\n";
$first = true;
-$tagDAO = FreshRSS_Factory::createTagDao();
-$entryIdsTagNames = $tagDAO->getEntryIdsTagNames($this->entriesRaw);
-if ($entryIdsTagNames == false) {
- $entryIdsTagNames = array();
+if (empty($this->entryIdsTagNames)) {
+ $this->entryIdsTagNames = array();
}
foreach ($this->entriesRaw as $entryRaw) {
- if (empty($entryRaw)) {
+ if ($entryRaw == null) {
continue;
}
$entry = FreshRSS_EntryDAO::daoToEntry($entryRaw);
@@ -61,7 +59,7 @@ foreach ($this->entriesRaw as $entryRaw) {
if ($entry->isFavorite()) {
$article['categories'][] = 'user/-/state/com.google/starred';
}
- $tagNames = isset($entryIdsTagNames['e_' . $entry->id()]) ? $entryIdsTagNames['e_' . $entry->id()] : array();
+ $tagNames = isset($this->entryIdsTagNames['e_' . $entry->id()]) ? $this->entryIdsTagNames['e_' . $entry->id()] : array();
foreach ($tagNames as $tagName) {
$article['categories'][] = 'user/-/label/' . $tagName;
}
diff --git a/app/views/importExport/index.phtml b/app/views/importExport/index.phtml
index c5049e3ea..139e715c5 100644
--- a/app/views/importExport/index.phtml
+++ b/app/views/importExport/index.phtml
@@ -33,6 +33,11 @@
<?php echo _t('sub.import_export.export_opml'); ?>
</label>
+ <label class="checkbox" for="export_labelled">
+ <input type="checkbox" name="export_labelled" id="export_labelled" value="1" <?php echo extension_loaded('zip') ? 'checked="checked"' : ''; ?> />
+ <?php echo _t('sub.import_export.export_labelled'); ?>
+ </label>
+
<label class="checkbox" for="export_starred">
<input type="checkbox" name="export_starred" id="export_starred" value="1" <?php echo extension_loaded('zip') ? 'checked="checked"' : ''; ?> />
<?php echo _t('sub.import_export.export_starred'); ?>