r1392: Lots of work going into making the custom fields part of the bug table and...
[bugdar.git] / includes / api_bug.php
1 <?php
2 /*=====================================================================*\
3 || ###################################################################
4 || # Bugdar [#]version[#]
5 || # Copyright ©2002-[#]year[#] Blue Static
6 || #
7 || # This program is free software; you can redistribute it and/or modify
8 || # it under the terms of the GNU General Public License as published by
9 || # the Free Software Foundation; version [#]gpl[#] of the License.
10 || #
11 || # This program is distributed in the hope that it will be useful, but
12 || # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 || # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 || # more details.
15 || #
16 || # You should have received a copy of the GNU General Public License along
17 || # with this program; if not, write to the Free Software Foundation, Inc.,
18 || # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
19 || ###################################################################
20 \*=====================================================================*/
21
22 $GLOBALS['isso:callback']->load('api', null);
23
24 /**
25 * API: Bug
26 *
27 * Note: When priority, severity, status, and resolution should throw a
28 * verification error, they actually set it to the default value
29 *
30 * @author Blue Static
31 * @copyright Copyright ©2002 - [#]year[#], Blue Static
32 * @version $Revision$
33 * @package Bugdar
34 *
35 */
36 class BugAPI extends API
37 {
38 /**
39 * Database fields
40 * @var array
41 * @access private
42 */
43 var $fields = array(
44 'bugid' => array(TYPE_UINT, REQ_AUTO, 'verify_nozero'),
45 'userid' => array(TYPE_UINT, REQ_NO),
46 'username' => array(TYPE_STR, REQ_NO),
47 'dateline' => array(TYPE_UINT, REQ_SET),
48 'product' => array(TYPE_UINT, REQ_YES, ':self'),
49 'component' => array(TYPE_UINT, REQ_NO, ':self'),
50 'version' => array(TYPE_UINT, REQ_YES, ':self'),
51 'summary' => array(TYPE_STR, REQ_YES, 'verify_noempty'),
52 'priority' => array(TYPE_UINT, REQ_NO, ':self'),
53 'severity' => array(TYPE_UINT, REQ_NO, ':self'),
54 'status' => array(TYPE_UINT, REQ_NO, ':self'),
55 'resolution' => array(TYPE_UINT, REQ_NO, ':self'),
56 'assignedto' => array(TYPE_UINT, REQ_NO, ':self', array('includes/api_user.php', 'UserAPI')),
57 'duplicateof' => array(TYPE_STR, REQ_NO),
58 'dependency' => array(TYPE_STR, REQ_NO),
59 'hidden' => array(TYPE_BOOL, REQ_NO),
60 'initialreport' => array(TYPE_UINT, REQ_NO),
61 'lastposttime' => array(TYPE_UINT, REQ_NO),
62 'lastpostby' => array(TYPE_UINT, REQ_NO),
63 'lastpostbyname' => array(TYPE_STR, REQ_NO),
64 'hiddenlastposttime' => array(TYPE_UINT, REQ_NO),
65 'hiddenlastpostby' => array(TYPE_UINT, REQ_NO),
66 'hiddenlastpostbyname' => array(TYPE_STR, REQ_NO)
67 );
68
69 /**
70 * Database table
71 * @var string
72 * @access private
73 */
74 var $table = 'bug';
75
76 /**
77 * Table prefix
78 * @var string
79 * @access private
80 */
81 var $prefix = TABLE_PREFIX;
82
83 // ###################################################################
84 /**
85 * Subclassed set() that will intercept any custom fields and handle
86 * them appropriately, but everyting else will be passed to the parent.
87 */
88 function set()
89 {
90 $args = func_get_args();
91
92 // it's a custom field, so add it in
93 if (preg_match('#^custom#', $args[0]) == 1 AND !isset($this->fields["$args[0]"]))
94 {
95 $this->fields["$args[0]"] = array(TYPE_STR, REQ_NO);
96 print_r($args);
97 }
98
99 call_user_func_array(array($this, 'parent::set'), $args);
100 }
101
102 // ###################################################################
103 /**
104 * Set field: dateline
105 *
106 * @access private
107 */
108 function set_dateline()
109 {
110 $this->set('dateline', time());
111 }
112
113 // ###################################################################
114 /**
115 * Post-insert
116 *
117 * @access private
118 */
119 function post_insert()
120 {
121 $this->registry->db->query("INSERT INTO " . TABLE_PREFIX . "vote (bugid, votefor, voteagainst) VALUES (" . $this->insertid . ", 0, 0)");
122 }
123
124 // ###################################################################
125 /**
126 * Post-delete
127 *
128 * @access private
129 */
130 function post_delete()
131 {
132 $this->registry->db->query("DELETE FROM " . TABLE_PREFIX . "comment WHERE bugid = " . $this->values['bugid']);
133 $this->registry->db->query("DELETE FROM " . TABLE_PREFIX . "favorite WHERE bugid = " . $this->values['bugid']);
134 $this->registry->db->query("DELETE FROM " . TABLE_PREFIX . "history WHERE bugid = " . $this->values['bugid']);
135 $this->registry->db->query("DELETE FROM " . TABLE_PREFIX . "vote WHERE bugid = " . $this->values['bugid']);
136 }
137
138 // ###################################################################
139 /**
140 * Verify: product
141 *
142 * @access private
143 */
144 function verify_product()
145 {
146 if (!($nozero = $this->verify_nozero('product')))
147 {
148 return $nozero;
149 }
150
151 if (!$this->registry->datastore['product'][ $this->values['product'] ])
152 {
153 return false;
154 }
155 return true;
156 }
157
158 // ###################################################################
159 /**
160 * Verify: componentid
161 *
162 * @access private
163 */
164 function verify_component()
165 {
166 if ($this->values['component'] != 0)
167 {
168 $component = $this->registry->datastore['component'][ $this->values['component'] ];
169 $product = $this->registry->datastore['product'][ $this->values['product'] ];
170 $version = $this->registry->datastore['version'][ $this->values['version'] ];
171 if ($component['parentid'] != $product['productid'])
172 {
173 return false;
174 }
175 if (($version['productid'] != $component['productid'] AND $version['productid'] != $product['productid']) AND $version['productid'] != 0)
176 {
177 return false;
178 }
179 }
180 return true;
181 }
182
183 // ###################################################################
184 /**
185 * Verify: versionid
186 *
187 * @access private
188 */
189 function verify_version()
190 {
191 if (!($nozero = $this->verify_nozero('version')))
192 {
193 return $nozero;
194 }
195
196 if (!$this->registry->datastore['version'][ $this->values['version'] ])
197 {
198 return false;
199 }
200 return true;
201 }
202
203 // ###################################################################
204 /**
205 * Verify: priority
206 *
207 * @access private
208 */
209 function verify_priority()
210 {
211 if (!$this->registry->datastore['priority'][ $this->values['priority'] ])
212 {
213 $this->set('priority', $this->registry->options['defaultpriority']);
214 }
215 return true;
216 }
217
218 // ###################################################################
219 /**
220 * Verify: severity
221 *
222 * @access private
223 */
224 function verify_severity()
225 {
226 if (!$this->registry->datastore['severity'][ $this->values['severity'] ])
227 {
228 $this->set('severity', $this->registry->options['defaultseverity']);
229 }
230 return true;
231 }
232
233 // ###################################################################
234 /**
235 * Verify: status
236 *
237 * @access private
238 */
239 function verify_status()
240 {
241 if (!$this->registry->datastore['status'][ $this->values['status'] ])
242 {
243 $this->set('status', $this->registry->options['defaultstatus']);
244 }
245 return true;
246 }
247
248 // ###################################################################
249 /**
250 * Verify: resolution
251 *
252 * @access private
253 */
254 function verify_resolution()
255 {
256 if (!$this->registry->datastore['resolution'][ $this->values['resolution'] ])
257 {
258 $this->set('resolution', $this->registry->options['defaultresolve']);
259 }
260 return true;
261 }
262
263 // ###################################################################
264 /**
265 * Verify: assignedto
266 *
267 * @access private
268 */
269 function verify_assignedto()
270 {
271 if (!$this->registry->datastore['assignto'][ $this->values['assignedto'] ] AND $this->values['assignedto'] != 0)
272 {
273 $this->set('assignedto', $this->registry->options['defaultassign']);
274 }
275 return true;
276 }
277 }
278
279 /*=====================================================================*\
280 || ###################################################################
281 || # $HeadURL$
282 || # $Id$
283 || ###################################################################
284 \*=====================================================================*/
285 ?>