summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-12-05 22:12:08 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-12-05 22:12:08 +0100
commit0e4274fc006203d23b632f4a7a7593427729d649 (patch)
treea1fbf80826c39a8d6ba2b6a7f5bf01510bfa3156
parente4cf8a7396d5da06b44a803ce2843361b1077f91 (diff)
Permet de supprimer les articles d'un flux
Implémente https://github.com/marienfressinaud/FreshRSS/issues/311
-rwxr-xr-xapp/controllers/feedController.php83
-rw-r--r--app/i18n/en.php4
-rw-r--r--app/i18n/fr.php4
-rw-r--r--app/models/Feed.php28
-rw-r--r--app/views/configure/feed.phtml24
5 files changed, 99 insertions, 44 deletions
diff --git a/app/controllers/feedController.php b/app/controllers/feedController.php
index c978857b2..02647e10f 100755
--- a/app/controllers/feedController.php
+++ b/app/controllers/feedController.php
@@ -157,6 +157,21 @@ class feedController extends ActionController {
}
}
+ public function truncateAction () {
+ if (Request::isPost ()) {
+ $id = Request::param ('id');
+ $feedDAO = new FeedDAO ();
+ $n = $feedDAO->truncate($id);
+ $notif = array(
+ 'type' => $n === false ? 'bad' : 'good',
+ 'content' => Translate::t ('n_entries_deleted', $n)
+ );
+ Session::_param ('notification', $notif);
+ invalidateHttpCache();
+ Request::forward (array ('c' => 'configure', 'a' => 'feed', 'params' => array('id' => $id)), true);
+ }
+ }
+
public function actualizeAction () {
@set_time_limit(300);
@@ -356,44 +371,46 @@ class feedController extends ActionController {
}
public function deleteAction () {
- $type = Request::param ('type', 'feed');
- $id = Request::param ('id');
+ if (Request::isPost ()) {
+ $type = Request::param ('type', 'feed');
+ $id = Request::param ('id');
- $feedDAO = new FeedDAO ();
- if ($type == 'category') {
- if ($feedDAO->deleteFeedByCategory ($id)) {
- $notif = array (
- 'type' => 'good',
- 'content' => Translate::t ('category_emptied')
- );
- //TODO: Delete old favicons
- } else {
- $notif = array (
- 'type' => 'bad',
- 'content' => Translate::t ('error_occured')
- );
- }
- } else {
- if ($feedDAO->deleteFeed ($id)) {
- $notif = array (
- 'type' => 'good',
- 'content' => Translate::t ('feed_deleted')
- );
- Feed::faviconDelete($id);
+ $feedDAO = new FeedDAO ();
+ if ($type == 'category') {
+ if ($feedDAO->deleteFeedByCategory ($id)) {
+ $notif = array (
+ 'type' => 'good',
+ 'content' => Translate::t ('category_emptied')
+ );
+ //TODO: Delete old favicons
+ } else {
+ $notif = array (
+ 'type' => 'bad',
+ 'content' => Translate::t ('error_occured')
+ );
+ }
} else {
- $notif = array (
- 'type' => 'bad',
- 'content' => Translate::t ('error_occured')
- );
+ if ($feedDAO->deleteFeed ($id)) {
+ $notif = array (
+ 'type' => 'good',
+ 'content' => Translate::t ('feed_deleted')
+ );
+ Feed::faviconDelete($id);
+ } else {
+ $notif = array (
+ 'type' => 'bad',
+ 'content' => Translate::t ('error_occured')
+ );
+ }
}
- }
- Session::_param ('notification', $notif);
+ Session::_param ('notification', $notif);
- if ($type == 'category') {
- Request::forward (array ('c' => 'configure', 'a' => 'categorize'), true);
- } else {
- Request::forward (array ('c' => 'configure', 'a' => 'feed'), true);
+ if ($type == 'category') {
+ Request::forward (array ('c' => 'configure', 'a' => 'categorize'), true);
+ } else {
+ Request::forward (array ('c' => 'configure', 'a' => 'feed'), true);
+ }
}
}
diff --git a/app/i18n/en.php b/app/i18n/en.php
index da61623a3..1c17e8149 100644
--- a/app/i18n/en.php
+++ b/app/i18n/en.php
@@ -85,6 +85,7 @@ return array (
'n_feeds_actualized' => '%d feeds have been updated',
'feeds_actualized' => 'RSS feeds have been updated',
'no_feed_actualized' => 'No RSS feed has been updated',
+ 'n_entries_deleted' => '%d articles have been deleted',
'feeds_imported_with_errors' => 'Your feeds have been imported but some errors occurred',
'feeds_imported' => 'Your feeds have been imported and will now be updated',
'category_emptied' => 'Category has been emptied',
@@ -135,8 +136,9 @@ return array (
'feed_url' => 'Feed URL',
'articles' => 'articles',
'number_articles' => 'Number of articles',
- 'keep_history' => 'Keep history?',
+ 'keep_history' => 'Keep old articles?',
'categorize' => 'Store in a category',
+ 'truncate' => 'Delete all articles',
'advanced' => 'Advanced',
'show_in_all_flux' => 'Show in main stream',
'yes' => 'Yes',
diff --git a/app/i18n/fr.php b/app/i18n/fr.php
index 979a364cd..cd39637cb 100644
--- a/app/i18n/fr.php
+++ b/app/i18n/fr.php
@@ -85,6 +85,7 @@ return array (
'n_feeds_actualized' => '%d flux ont été mis à jour',
'feeds_actualized' => 'Les flux ont été mis à jour',
'no_feed_actualized' => 'Aucun flux n’a pu être mis à jour',
+ 'n_entries_deleted' => '%d articles ont été supprimés',
'feeds_imported_with_errors' => 'Vos flux ont été importés mais des erreurs sont survenues',
'feeds_imported' => 'Vos flux ont été importés et vont maintenant être actualisés',
'category_emptied' => 'La catégorie a été vidée',
@@ -135,8 +136,9 @@ return array (
'feed_url' => 'URL du flux',
'articles' => 'articles',
'number_articles' => 'Nombre d’articles',
- 'keep_history' => 'Garder l’historique ?',
+ 'keep_history' => 'Garder les vieux articles ?',
'categorize' => 'Ranger dans une catégorie',
+ 'truncate' => 'Supprimer tous les articles',
'advanced' => 'Avancé',
'show_in_all_flux' => 'Afficher dans le flux principal',
'yes' => 'Oui',
diff --git a/app/models/Feed.php b/app/models/Feed.php
index 1454f44d5..043956f71 100644
--- a/app/models/Feed.php
+++ b/app/models/Feed.php
@@ -570,6 +570,34 @@ class FeedDAO extends Model_pdo {
return false;
}
}
+
+ public function truncate ($id) {
+ $sql = 'DELETE e.* FROM `' . $this->prefix . 'entry` e WHERE e.id_feed=?';
+ $stm = $this->bd->prepare($sql);
+ $values = array($id);
+ $this->bd->beginTransaction ();
+ if (!($stm && $stm->execute ($values))) {
+ $info = $stm->errorInfo();
+ Minz_Log::record ('SQL error : ' . $info[2], Minz_Log::ERROR);
+ $this->bd->rollBack ();
+ return false;
+ }
+ $affected = $stm->rowCount();
+
+ $sql = 'UPDATE `' . $this->prefix . 'feed` f '
+ . 'SET f.cache_nbEntries=0, f.cache_nbUnreads=0 WHERE f.id=?';
+ $values = array ($id);
+ $stm = $this->bd->prepare ($sql);
+ if (!($stm && $stm->execute ($values))) {
+ $info = $stm->errorInfo();
+ Minz_Log::record ('SQL error : ' . $info[2], Minz_Log::ERROR);
+ $this->bd->rollBack ();
+ return false;
+ }
+
+ $this->bd->commit ();
+ return $affected;
+ }
}
class HelperFeed {
diff --git a/app/views/configure/feed.phtml b/app/views/configure/feed.phtml
index 1fb0368de..de019863e 100644
--- a/app/views/configure/feed.phtml
+++ b/app/views/configure/feed.phtml
@@ -40,6 +40,18 @@
</div>
</div>
<div class="form-group">
+ <label class="group-name" for="category"><?php echo Translate::t ('category'); ?></label>
+ <div class="group-controls">
+ <select name="category" id="category">
+ <?php foreach ($this->categories as $cat) { ?>
+ <option value="<?php echo $cat->id (); ?>"<?php echo $cat->id ()== $this->flux->category () ? ' selected="selected"' : ''; ?>>
+ <?php echo $cat->name (); ?>
+ </option>
+ <?php } ?>
+ </select>
+ </div>
+ </div>
+ <div class="form-group">
<label class="group-name"></label>
<div class="group-controls">
<a class="btn" href="<?php echo _url ('feed', 'actualize', 'id', $this->flux->id ()); ?>">
@@ -59,15 +71,9 @@
</div>
<div class="form-group">
- <label class="group-name" for="category"><?php echo Translate::t ('category'); ?></label>
+ <label class="group-name"></label>
<div class="group-controls">
- <select name="category" id="category">
- <?php foreach ($this->categories as $cat) { ?>
- <option value="<?php echo $cat->id (); ?>"<?php echo $cat->id ()== $this->flux->category () ? ' selected="selected"' : ''; ?>>
- <?php echo $cat->name (); ?>
- </option>
- <?php } ?>
- </select>
+ <button class="btn btn-attention confirm" formmethod="post" formaction="<?php echo Url::display (array ('c' => 'feed', 'a' => 'truncate', 'params' => array ('id' => $this->flux->id ()))); ?>"><?php echo Translate::t ('truncate'); ?></button>
</div>
</div>
@@ -107,7 +113,7 @@
<div class="form-group form-actions">
<div class="group-controls">
<button class="btn btn-important"><?php echo Translate::t ('save'); ?></button>
- <button class="btn btn-attention confirm" formaction="<?php echo Url::display (array ('c' => 'feed', 'a' => 'delete', 'params' => array ('id' => $this->flux->id ()))); ?>"><?php echo Translate::t ('delete'); ?></button>
+ <button class="btn btn-attention confirm" formmethod="post" formaction="<?php echo Url::display (array ('c' => 'feed', 'a' => 'delete', 'params' => array ('id' => $this->flux->id ()))); ?>"><?php echo Translate::t ('delete'); ?></button>
</div>
</div>
</form>