Skip to content

Commit 031ba0c

Browse files
When creating a feed or folder the it should purge the deleted
Edit fix owncloud-archive#176
1 parent 284d428 commit 031ba0c

16 files changed

+146
-33
lines changed

businesslayer/feedbusinesslayer.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,21 @@ public function unmarkDeleted($feedId, $userId) {
261261
}
262262

263263

264-
public function purgeDeleted($userId=null) {
265-
$now = $this->timeFactory->getTime();
266-
$deleteOlderThan = $now - $this->autoPurgeMinimumInterval;
264+
/**
265+
* Deletes all deleted feeds
266+
* @param string $userId if given it purges only feeds of that user
267+
* @param boolean $useInterval defaults to true, if true it only purges
268+
* entries in a given interval to give the user a chance to undo the
269+
* deletion
270+
*/
271+
public function purgeDeleted($userId=null, $useInterval=true) {
272+
$deleteOlderThan = null;
273+
274+
if ($useInterval) {
275+
$now = $this->timeFactory->getTime();
276+
$deleteOlderThan = $now - $this->autoPurgeMinimumInterval;
277+
}
278+
267279
$toDelete = $this->mapper->getToDelete($deleteOlderThan, $userId);
268280

269281
foreach ($toDelete as $feed) {

businesslayer/folderbusinesslayer.php

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,20 @@ public function unmarkDeleted($folderId, $userId) {
123123

124124

125125
/**
126-
* Purges marked as deleted folders
126+
* Deletes all deleted folders
127+
* @param string $userId if given it purges only folders of that user
128+
* @param boolean $useInterval defaults to true, if true it only purges
129+
* entries in a given interval to give the user a chance to undo the
130+
* deletion
127131
*/
128-
public function purgeDeleted($userId=null) {
129-
$now = $this->timeFactory->getTime();
130-
$deleteOlderThan = $now - $this->autoPurgeMinimumInterval;
132+
public function purgeDeleted($userId=null, $useInterval=true) {
133+
$deleteOlderThan = null;
134+
135+
if ($useInterval) {
136+
$now = $this->timeFactory->getTime();
137+
$deleteOlderThan = $now - $this->autoPurgeMinimumInterval;
138+
}
139+
131140
$toDelete = $this->mapper->getToDelete($deleteOlderThan, $userId);
132141

133142
foreach ($toDelete as $folder) {

controller/feedcontroller.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public function create(){
135135
try {
136136
// we need to purge deleted feeds if a feed is created to
137137
// prevent already exists exceptions
138-
$this->feedBusinessLayer->purgeDeleted($userId);
138+
$this->feedBusinessLayer->purgeDeleted($userId, false);
139139

140140
$feed = $this->feedBusinessLayer->create($url, $parentFolderId, $userId);
141141
$params = array(

controller/foldercontroller.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public function create(){
116116
try {
117117
// we need to purge deleted folders if a folder is created to
118118
// prevent already exists exceptions
119-
$this->folderBusinessLayer->purgeDeleted($userId);
119+
$this->folderBusinessLayer->purgeDeleted($userId, false);
120120

121121
$folder = $this->folderBusinessLayer->create($folderName, $userId);
122122

db/feedmapper.php

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,26 @@ public function delete(Entity $entity){
147147
}
148148

149149

150-
public function getToDelete($deleteOlderThan, $userId=null) {
150+
/**
151+
* @param int $deleteOlderThan if given gets all entries with a delete date
152+
* older than that timestamp
153+
* @param string $userId if given returns only entries from the given user
154+
* @return array with the database rows
155+
*/
156+
public function getToDelete($deleteOlderThan=null, $userId=null) {
151157
$sql = 'SELECT * FROM `*PREFIX*news_feeds` ' .
152-
'WHERE `deleted_at` > 0 ' .
153-
'AND `deleted_at` < ?';
154-
$params = array($deleteOlderThan);
158+
'WHERE `deleted_at` > 0 ';
159+
$params = array();
160+
161+
// sometimes we want to delete all entries
162+
if ($deleteOlderThan !== null) {
163+
$sql .= 'AND `deleted_at` < ? ';
164+
array_push($params, $deleteOlderThan);
165+
}
155166

156167
// we need to sometimes only delete feeds of a user
157168
if($userId !== null) {
158-
$sql .= ' AND `user_id` = ?';
169+
$sql .= 'AND `user_id` = ?';
159170
array_push($params, $userId);
160171
}
161172

db/foldermapper.php

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,26 @@ public function delete(Entity $entity){
9797
}
9898

9999

100-
public function getToDelete($deleteOlderThan, $userId=null) {
100+
/**
101+
* @param int $deleteOlderThan if given gets all entries with a delete date
102+
* older than that timestamp
103+
* @param string $userId if given returns only entries from the given user
104+
* @return array with the database rows
105+
*/
106+
public function getToDelete($deleteOlderThan=null, $userId=null) {
101107
$sql = 'SELECT * FROM `*PREFIX*news_folders` ' .
102-
'WHERE `deleted_at` > 0 ' .
103-
'AND `deleted_at` < ?';
104-
$params = array($deleteOlderThan);
108+
'WHERE `deleted_at` > 0 ';
109+
$params = array();
110+
111+
// sometimes we want to delete all entries
112+
if ($deleteOlderThan !== null) {
113+
$sql .= 'AND `deleted_at` < ? ';
114+
array_push($params, $deleteOlderThan);
115+
}
105116

106117
// we need to sometimes only delete feeds of a user
107118
if($userId !== null) {
108-
$sql .= ' AND `user_id` = ?';
119+
$sql .= 'AND `user_id` = ?';
109120
array_push($params, $userId);
110121
}
111122

external/feedapi.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public function create() {
8282
$folderId = (int) $this->params('folderId', 0);
8383

8484
try {
85-
$this->feedBusinessLayer->purgeDeleted($userId);
85+
$this->feedBusinessLayer->purgeDeleted($userId, false);
8686

8787
$feed = $this->feedBusinessLayer->create($feedUrl, $folderId, $userId);
8888
$result = array(

external/folderapi.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public function create() {
7272
);
7373

7474
try {
75-
$this->folderBusinessLayer->purgeDeleted($userId);
75+
$this->folderBusinessLayer->purgeDeleted($userId, false);
7676
$folder = $this->folderBusinessLayer->create($folderName, $userId);
7777
array_push($result['folders'], $folder->toAPI());
7878

tests/unit/businesslayer/FeedBusinessLayerTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,4 +740,24 @@ public function testPurgeDeleted(){
740740
}
741741

742742

743+
public function testPurgeDeletedWithoutInterval(){
744+
$feed1 = new Feed();
745+
$feed1->setId(3);
746+
$feed2 = new Feed();
747+
$feed2->setId(5);
748+
$feeds = array($feed1, $feed2);
749+
750+
$this->feedMapper->expects($this->once())
751+
->method('getToDelete')
752+
->with($this->equalTo(null), $this->equalTo($this->user))
753+
->will($this->returnValue($feeds));
754+
$this->feedMapper->expects($this->at(1))
755+
->method('delete')
756+
->with($this->equalTo($feed1));
757+
$this->feedMapper->expects($this->at(2))
758+
->method('delete')
759+
->with($this->equalTo($feed2));
760+
761+
$this->feedBusinessLayer->purgeDeleted($this->user, false);
762+
}
743763
}

tests/unit/businesslayer/FolderBusinessLayerTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,25 @@ public function testPurgeDeleted(){
232232
$this->folderBusinessLayer->purgeDeleted($this->user);
233233
}
234234

235+
236+
public function testPurgeDeletedNoInterval(){
237+
$folder1 = new Folder();
238+
$folder1->setId(3);
239+
$folder2 = new Folder();
240+
$folder2->setId(5);
241+
$feeds = array($folder1, $folder2);
242+
243+
$this->folderMapper->expects($this->once())
244+
->method('getToDelete')
245+
->with($this->equalTo(null), $this->equalTo($this->user))
246+
->will($this->returnValue($feeds));
247+
$this->folderMapper->expects($this->at(1))
248+
->method('delete')
249+
->with($this->equalTo($folder1));
250+
$this->folderMapper->expects($this->at(2))
251+
->method('delete')
252+
->with($this->equalTo($folder2));
253+
254+
$this->folderBusinessLayer->purgeDeleted($this->user, false);
255+
}
235256
}

0 commit comments

Comments
 (0)