source: OWR/Model/Objects.php @ 47c42d

Revision 47c42d, 5.4 KB checked in by pierre-alain <pierre-alain@…>, 4 years ago (diff)

adding support for plugin calls

  • Property mode set to 100644
Line 
1<?php
2/**
3 * Model for 'objects' 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;
38use OWR\Model,
39    OWR\Request,
40    OWR\Exception,
41    OWR\DAO,
42    OWR\Plugins;
43/**
44 * This class is used to add/delete objects
45 * @package OWR
46 * @subpackage Model
47 * @uses OWR\Model extends the base class
48 * @uses OWR\Request the request
49 * @uses OWR\Exception the exception handler
50 * @uses OWR\DAO the DAO
51 * @uses OWR\Request a request sent to the model
52 * @uses OWR\Plugins Plugins manager
53 * @subpackage Model
54 */
55class Objects extends Model
56{
57    /**
58     * Adds an object entry into the DB
59     *
60     * @access public
61     * @param mixed $request the Request instance
62     * @return $this
63     */
64    public function edit(Request $request)
65    {
66        Plugins::pretrigger($request);
67        if(empty($request->type))
68        {
69            $request->setResponse(new Response(array(
70                'do'        => 'error',
71                'error'     => 'Missing type',
72                'status'    => Exception::E_OWR_BAD_REQUEST
73            )));
74            return $this;
75        }
76
77        $request->id = $this->_dao->getUniqueId($request->type);
78
79         Plugins::trigger($request);
80
81        // we don't send 201 status because it is an internal call
82        // if we add news we don't want to send created status
83        // because it is NOT a user action
84        $request->setResponse(new Response);
85
86        Plugins::posttrigger($request);
87
88        return $this;
89    }
90
91    /**
92     * Deletes an object
93     *
94     * @access public
95     * @param mixed $request the Request instance
96     * @return $this
97     */
98    public function delete(Request $request)
99    {
100        Plugins::pretrigger($request);
101
102        if(empty($request->id))
103        {
104            $request->setResponse(new Response(array(
105                'do'        => 'error',
106                'error'     => 'Missing id',
107                'status'    => Exception::E_OWR_BAD_REQUEST
108            )));
109            return $this;
110        }
111
112        DAO::getType($request->id); // check user has the rights to do that
113        $this->_db->beginTransaction();
114        try
115        {
116            $this->_dao->delete($request->id);
117        }
118        catch(Exception $e)
119        {
120            $this->_db->rollback();
121            throw new Exception($e->getContent(), $e->getCode());
122        }
123        $this->_db->commit();
124
125        Plugins::trigger($request);
126
127        $request->setResponse(new Response);
128
129        Plugins::posttrigger($request);
130
131        return $this;
132    }
133
134    /**
135     * Gets datas to render an object
136     *
137     * @access public
138     * @author Pierre-Alain Mignot <contact@openwebreader.org>
139     * @param mixed $request the Request instance
140     * @param array $args additional arguments, optionnal
141     * @param string $order the order clause
142     * @param string $groupby the groupby clause
143     * @param string $limit the limit clause
144     * @return $this
145     */
146    public function view(Request $request, array $args = array(), $order = '', $groupby = '', $limit = '')
147    {
148        Plugins::pretrigger($request);
149
150        $args['FETCH_TYPE'] = 'assoc';
151
152        if(!empty($request->ids))
153        {
154            $args['id'] = $request->ids;
155            $limit = count($request->ids);
156        }
157        elseif(!empty($request->id))
158        {
159            $args['id'] = $request->id;
160            $limit = 1;
161        }
162
163        $types = $this->_dao->get($args, '*', $order, $groupby, $limit);
164        if(empty($types))
165        {
166            $request->setResponse(new Response(array(
167                'status'    => 204
168            )));
169            return $this;
170        }
171
172        $r = new Request(array('id' => null));
173        foreach($types as $type)
174        {
175            $r->id = $type['id'];
176            parent::getCachedModel($type['type'])->view($r, $args, $order, $groupby, 1);
177            $response = $r->getResponse();
178            if('error' !== $response->getNext())
179            {
180                $data = $response->getDatas();
181                empty($data) || $datas[] = $data;
182            }
183            else
184            {
185                $request->setResponse($response);
186                return $this;
187            }
188        }
189
190        Plugins::trigger($request);
191
192        $request->setResponse(new Response(array(
193            'datas'        => $datas,
194            'multiple'     => !isset($types['id'])
195        )));
196
197        Plugins::posttrigger($request);
198
199        return $this;
200    }
201}
Note: See TracBrowser for help on using the repository browser.