source: OWR/Model/Streams/Groups.php @ f0dadb

Revision f0dadb, 8.8 KB checked in by pierre-alain <pierre-alain@…>, 3 years ago (diff)

adding server side check to prevent marking news as unread when user interface is not up to date

  • Property mode set to 100644
Line 
1<?php
2/**
3 * Model for 'streams_groups' object
4 *
5 * PHP 5
6 *
7 * OWR - OpenWebReader
8 *
9 * Copyright (c) 2009, Pierre-Alain Mignot
10 *
11 * Home page: http://openwebreader.org
12 *
13 * E-Mail: contact@openwebreader.org
14 *
15 * All Rights Reserved
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
30 *
31 * @author Pierre-Alain Mignot <contact@openwebreader.org>
32 * @copyright Copyright (c) 2009, Pierre-Alain Mignot
33 * @license http://www.gnu.org/copyleft/gpl.html
34 * @package OWR
35 * @subpackage Model
36 */
37namespace OWR\Model\Streams;
38use OWR\Model,
39    OWR\Request,
40    OWR\Exception,
41    OWR\DAO,
42    OWR\Model\Response,
43    OWR\Config;
44/**
45 * This class is used to add/edit/delete groups
46 * @package OWR
47 * @subpackage Model
48 * @uses OWR\Model extends the base class
49 * @uses OWR\Request the request
50 * @uses OWR\Exception the exception handler
51 * @uses OWR\DAO the DAO
52 * @subpackage Model
53 */
54class Groups extends Model
55{
56    /**
57     * Adds/Edits a stream
58     *
59     * @access public
60     * @param mixed $request the Request instance
61     * @return $this
62     */
63    public function edit(Request $request)
64    {
65        if(empty($request->name))
66        {
67            $request->setResponse(new Response(array(
68                'do'        => 'error',
69                'error'     => 'Missing name',
70                'status'    => Exception::E_OWR_BAD_REQUEST
71            )));
72
73            return $this;
74        }
75
76        if(empty($request->id))
77        {
78            $group = $this->_dao->get(array('name' => $request->name), 'id');
79            if(empty($group))
80            {
81                $request->new = true;
82                $group = DAO::getDAO('streams_groups');
83            }
84        }
85        else
86        {
87            $group = $this->_dao->get($request->id, 'id'); // check
88            if(empty($group))
89            {
90                $request->setResponse(new Response(array(
91                    'do'        => 'error',
92                    'error'     => 'Invalid id',
93                    'status'    => Exception::E_OWR_BAD_REQUEST
94                )));
95                return $this;
96            }
97        }
98
99        $group->name = $request->name;
100        $request->id = $group->save();
101        unset($group);
102
103        $request->setResponse(new Response(array(
104            'status'    => $request->new ? 201 : 200,
105            'datas'     => array('id' => $request->id)
106        )));
107
108        return $this;
109    }
110
111    /**
112     * Deletes a group and all contained streams
113     *
114     * @access public
115     * @param int $id the id of the group to delete
116     * @return $this
117     */
118    public function delete(Request $request)
119    {
120        if(empty($request->id))
121        {
122            $request->setResponse(new Response(array(
123                'do'        => 'error',
124                'error'     => 'Missing id',
125                'status'    => Exception::E_OWR_BAD_REQUEST
126            )));
127            return $this;
128        }
129
130        $type = DAO::getType($request->id);
131        if('streams_groups' !== $type)
132        {
133            $request->setResponse(new Response(array(
134                'do'        => 'error',
135                'error'     => 'Invalid id',
136                'status'    => Exception::E_OWR_BAD_REQUEST
137            )));
138            return $this;
139        }
140
141        $this->_db->beginTransaction();
142        try
143        {
144            if($streamids = DAO::getCachedDAO('streams_relations')->get(array('gid' => $request->id), 'rssid'))
145            {
146                $r = clone($request);
147                if(is_array($streamids))
148                {
149                    $model = parent::getCachedModel('streams');
150                    foreach($streamids as $rss)
151                    {
152                        $r->id = $rss->rssid;
153                        $model->delete($r);
154                        $response = $r->getResponse();
155                        if('error' === $response->getNext())
156                            Logs::iGet()->log($response->getError(), $response->getStatus());
157                    }
158                }
159                else
160                {
161                    $r->id = $streamids->rssid;
162                    parent::getCachedModel('streams')->delete($r);
163                    $response = $r->getResponse();
164                    if('error' === $response->getNext())
165                        Logs::iGet()->log($response->getError(), $response->getStatus());
166                    DAO::getCachedDAO('news_relations')->delete(array('rssid' => $streamids->rssid));
167                }
168            }
169            unset($r);
170            DAO::getCachedDAO('objects')->delete($request->id);
171        }
172        catch(Exception $e)
173        {
174            $this->_db->rollback();
175            throw new Exception($e->getContent(), $e->getCode());
176        }
177
178        $this->_db->commit();
179
180        $request->setResponse(new Response);
181
182        return $this;
183    }
184
185    /**
186     * Gets datas to render a group
187     *
188     * @access public
189     * @author Pierre-Alain Mignot <contact@openwebreader.org>
190     * @param mixed $request the Request instance
191     * @param array $args additional arguments, optionnal
192     * @param string $order the order clause
193     * @param string $groupby the groupby clause
194     * @param string $limit the limit clause
195     * @return $this
196     */
197    public function view(Request $request, array $args = array(), $order = '', $groupby = '', $limit = '')
198    {
199        $args['FETCH_TYPE'] = 'assoc';
200
201        if(!empty($request->ids))
202        {
203            $args['id'] = $request->ids;
204            $limit = count($request->ids);
205        }
206        elseif(!empty($request->id))
207        {
208            $args['id'] = $request->id;
209            $limit = 1;
210        }
211
212        $datas = $this->_dao->get($args, 'id,name', $order, $groupby, $limit);
213        if(empty($datas))
214        {
215            $request->setResponse(new Response(array(
216                'status'    => 204
217            )));
218            return $this;
219        }
220
221        $this->_setUserTimestamp($datas);
222
223        $request->setResponse(new Response(array(
224            'datas'        => $datas,
225            'multiple'     => !isset($datas['id'])
226        )));
227        return $this;
228    }
229
230    /**
231     * Checks if a group exists relative to the id
232     * If no id is passed it will try to get the root group, and create it if it does not exist
233     *
234     * @author Pierre-Alain Mignot <contact@openwebreader.org>
235     * @param int &$gid the id to look for, optionnal
236     * @access public
237     * @return mixed the DAO object for table streams_groups for specified id
238     */
239    public function checkGroupById(Request $request)
240    {
241        if(!empty($request->gid))
242        {
243            $group = $this->_dao->get($request->gid, 'id,name');
244            if(!empty($group))
245            {
246                $request->gname = $group->name;
247                $request->setResponse(new Response);
248                return $this;
249            }
250        }
251
252        $group = $this->_dao->get(array('name' => 'Root'), 'id');
253        if(empty($group))
254        {
255            $group = DAO::getDAO('streams_groups');
256            $group->name = 'Root';
257            $group->save();
258        }
259
260        $request->gid = (int) $group->id;
261        $request->gname = $group->name;
262
263        unset($group);
264
265        $request->setResponse(new Response);
266
267        return $this;
268    }
269
270    /**
271     * Renames a group
272     *
273     * @author Pierre-Alain Mignot <contact@openwebreader.org>
274     * @access public
275     * @param mixed $request the Request instance
276     */
277    public function rename(Request $request)
278    {
279        if(empty($request->name))
280        {
281            $request->setResponse(new Response(array(
282                'do'        => 'error',
283                'error'     => 'Missing name',
284                'status'    => Exception::E_OWR_BAD_REQUEST
285            )));
286            return $this;
287        }
288
289        $group = $this->_dao->get(array('id'=>$request->id), 'id, uid');
290        if(empty($group))
291        {
292            $request->setResponse(new Response(array(
293                'do'        => 'error',
294                'error'     => 'Invalid id',
295                'status'    => Exception::E_OWR_BAD_REQUEST
296            )));
297            return $this;
298        }
299
300        $group->name = $request->name;
301        $group->save();
302
303        $request->setResponse(new Response);
304
305        return $this;
306    }
307}
Note: See TracBrowser for help on using the repository browser.