FeedApiController   A
last analyzed

Complexity

Total Complexity 18

Size/Duplication

Total Lines 198
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 18
lcom 1
cbo 4
dl 0
loc 198
rs 10
c 0
b 0
f 0

9 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 15 1
A index() 0 17 2
B create() 0 22 4
A delete() 0 9 2
A read() 0 3 1
A move() 0 11 2
A rename() 0 11 2
A fromAllUsers() 0 13 2
A update() 0 9 2
1
<?php
2
/**
3
 * ownCloud - News
4
 *
5
 * This file is licensed under the Affero General Public License version 3 or
6
 * later. See the COPYING file.
7
 *
8
 * @author Alessandro Cosentino <[email protected]>
9
 * @author Bernhard Posselt <[email protected]>
10
 * @copyright Alessandro Cosentino 2012
11
 * @copyright Bernhard Posselt 2012, 2014
12
 */
13
14
namespace OCA\News\Controller;
15
16
use \OCP\IRequest;
17
use \OCP\ILogger;
18
use \OCP\AppFramework\ApiController;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, OCA\News\Controller\ApiController.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
19
use \OCP\AppFramework\Http;
20
21
use \OCA\News\Service\FeedService;
22
use \OCA\News\Service\ItemService;
23
use \OCA\News\Service\ServiceNotFoundException;
24
use \OCA\News\Service\ServiceConflictException;
25
26
27
class FeedApiController extends ApiController {
28
29
    use JSONHttpError;
30
31
    private $itemService;
32
    private $feedService;
33
    private $userId;
34
    private $logger;
35
    private $loggerParams;
36
    private $serializer;
37
38
    public function __construct($AppName,
39
                                IRequest $request,
40
                                FeedService $feedService,
41
                                ItemService $itemService,
42
                                ILogger $logger,
43
                                $UserId,
44
                                $LoggerParameters){
45
        parent::__construct($AppName, $request);
46
        $this->feedService = $feedService;
47
        $this->itemService = $itemService;
48
        $this->userId = $UserId;
49
        $this->logger = $logger;
50
        $this->loggerParams = $LoggerParameters;
51
        $this->serializer = new EntityApiSerializer('feeds');
52
    }
53
54
55
    /**
56
     * @NoAdminRequired
57
     * @NoCSRFRequired
58
     * @CORS
59
     */
60
    public function index() {
61
62
        $result = [
63
            'starredCount' => $this->itemService->starredCount($this->userId),
64
            'feeds' => $this->feedService->findAll($this->userId)
65
        ];
66
67
68
        try {
69
            $result['newestItemId'] =
70
                $this->itemService->getNewestItemId($this->userId);
71
72
        // in case there are no items, ignore
73
        } catch(ServiceNotFoundException $ex) {}
74
75
        return $this->serializer->serialize($result);
76
    }
77
78
79
    /**
80
     * @NoAdminRequired
81
     * @NoCSRFRequired
82
     * @CORS
83
     *
84
     * @param string $url
85
     * @param int $folderId
86
     * @return array|mixed|\OCP\AppFramework\Http\JSONResponse
87
     */
88
    public function create($url, $folderId=0) {
89
        try {
90
            $this->feedService->purgeDeleted($this->userId, false);
91
92
            $feed = $this->feedService->create($url, $folderId, $this->userId);
93
            $result = ['feeds' => [$feed]];
94
95
            try {
96
                $result['newestItemId'] =
97
                    $this->itemService->getNewestItemId($this->userId);
98
99
            // in case there are no items, ignore
100
            } catch(ServiceNotFoundException $ex) {}
101
102
            return $this->serializer->serialize($result);
103
104
        } catch(ServiceConflictException $ex) {
105
            return $this->error($ex, Http::STATUS_CONFLICT);
106
        } catch(ServiceNotFoundException $ex) {
107
            return $this->error($ex, Http::STATUS_NOT_FOUND);
108
        }
109
    }
110
111
112
    /**
113
     * @NoAdminRequired
114
     * @NoCSRFRequired
115
     * @CORS
116
     *
117
     * @param int $feedId
118
     * @return array|\OCP\AppFramework\Http\JSONResponse
119
     */
120
    public function delete($feedId) {
121
        try {
122
            $this->feedService->delete($feedId, $this->userId);
123
        } catch(ServiceNotFoundException $ex) {
124
            return $this->error($ex, Http::STATUS_NOT_FOUND);
125
        }
126
127
        return [];
128
    }
129
130
131
    /**
132
     * @NoAdminRequired
133
     * @NoCSRFRequired
134
     * @CORS
135
     *
136
     * @param int $feedId
137
     * @param int $newestItemId
138
     */
139
    public function read($feedId, $newestItemId) {
140
        $this->itemService->readFeed($feedId, $newestItemId, $this->userId);
141
    }
142
143
144
    /**
145
     * @NoAdminRequired
146
     * @NoCSRFRequired
147
     * @CORS
148
     *
149
     * @param int $feedId
150
     * @param int $folderId
151
     * @return array|\OCP\AppFramework\Http\JSONResponse
152
     */
153
    public function move($feedId, $folderId) {
154
        try {
155
            $this->feedService->patch(
156
                $feedId, $this->userId, ['folderId' => $folderId]
157
            );
158
        } catch(ServiceNotFoundException $ex) {
159
            return $this->error($ex, Http::STATUS_NOT_FOUND);
160
        }
161
162
        return [];
163
    }
164
165
166
    /**
167
     * @NoAdminRequired
168
     * @NoCSRFRequired
169
     * @CORS
170
     *
171
     * @param int $feedId
172
     * @param string $feedTitle
173
     * @return array|\OCP\AppFramework\Http\JSONResponse
174
     */
175
    public function rename($feedId, $feedTitle) {
176
        try {
177
            $this->feedService->patch(
178
                $feedId, $this->userId, ['title' => $feedTitle]
179
            );
180
        } catch(ServiceNotFoundException $ex) {
181
            return $this->error($ex, Http::STATUS_NOT_FOUND);
182
        }
183
184
        return [];
185
    }
186
187
188
    /**
189
     * @NoCSRFRequired
190
     * @CORS
191
     */
192
    public function fromAllUsers() {
193
        $feeds = $this->feedService->findAllFromAllUsers();
194
        $result = ['feeds' => []];
195
196
        foreach ($feeds as $feed) {
197
            $result['feeds'][] = [
198
                'id' => $feed->getId(),
199
                'userId' => $feed->getUserId()
200
            ];
201
        }
202
203
        return $result;
204
    }
205
206
207
    /**
208
     * @NoCSRFRequired
209
     *
210
     * @param string $userId
211
     * @param int $feedId
212
     */
213
    public function update($userId, $feedId) {
214
        try {
215
            $this->feedService->update($feedId, $userId);
216
        // ignore update failure
217
        } catch(\Exception $ex) {
218
            $this->logger->debug('Could not update feed ' . $ex->getMessage(),
219
                    $this->loggerParams);
220
        }
221
    }
222
223
224
}
225