array(TYPE_UINT, REQ_AUTO), 'userid' => array(TYPE_UINT, REQ_NO), 'username' => array(TYPE_STR, REQ_NO), 'dateline' => array(TYPE_UINT, REQ_SET), 'product' => array(TYPE_UINT, REQ_YES), 'component' => array(TYPE_UINT, REQ_NO), 'version' => array(TYPE_UINT, REQ_YES), 'summary' => array(TYPE_STR, REQ_YES), 'priority' => array(TYPE_UINT, REQ_NO), 'severity' => array(TYPE_UINT, REQ_NO), 'status' => array(TYPE_UINT, REQ_NO), 'resolution' => array(TYPE_UINT, REQ_NO), 'assignedto' => array(TYPE_UINT, REQ_NO), 'duplicateof' => array(TYPE_STR, REQ_NO), 'dependency' => array(TYPE_STR, REQ_NO), 'hidden' => array(TYPE_BOOL, REQ_NO), 'initialreport' => array(TYPE_UINT, REQ_NO), 'lastposttime' => array(TYPE_UINT, REQ_NO), 'lastpostby' => array(TYPE_UINT, REQ_NO), 'lastpostbyname' => array(TYPE_STR, REQ_NO), 'hiddenlastposttime' => array(TYPE_UINT, REQ_NO), 'hiddenlastpostby' => array(TYPE_UINT, REQ_NO), 'hiddenlastpostbyname' => array(TYPE_STR, REQ_NO) ); /** * Database table * @var string */ protected $table = 'bug'; /** * Table prefix * @var string */ protected $prefix = TABLE_PREFIX; /** * Subclassed set() that will intercept any custom fields and handle * them appropriately, but everyting else will be passed to the parent. */ function set($field, $value, $doclean = true, $doverify = true) { // it's a custom field, so add it in if (preg_match('/^custom/', $field) == 1 && !isset($this->fields["$field"])) { $this->fields["$field"] = array(TYPE_STR, REQ_NO); } // TODO - (r1524) one day we can change this back to call_user_func_array(array($this, 'parent::set'), func_get_args()) parent::set($field, $value, $doclean, $doverify); } /** * Set field: dateline */ protected function set_dateline() { $this->set('dateline', time()); } /** * Post-insert */ protected function post_insert() { BSApp::$db->query("INSERT INTO " . TABLE_PREFIX . "vote (bugid, votefor, voteagainst) VALUES (" . $this->insertid . ", 0, 0)"); } /** * Post-delete */ protected function post_delete() { BSApp::$db->query("DELETE FROM " . TABLE_PREFIX . "comment WHERE bugid = " . $this->values['bugid']); BSApp::$db->query("DELETE FROM " . TABLE_PREFIX . "favorite WHERE bugid = " . $this->values['bugid']); BSApp::$db->query("DELETE FROM " . TABLE_PREFIX . "history WHERE bugid = " . $this->values['bugid']); BSApp::$db->query("DELETE FROM " . TABLE_PREFIX . "vote WHERE bugid = " . $this->values['bugid']); } /** * Verify: product */ protected function validate_product($field) { if (!$this->_verifyIsNotZero('product')) { return false; } if (!bugdar::$datastore['product'][$this->values['product']]) { $this->_error(new FieldException(L_INVALID_ID, $field)); return false; } return true; } /** * Verify: componentid */ protected function validate_component($field) { if ($this->values['component'] != 0) { $component = bugdar::$datastore['component'][ $this->values['component'] ]; $product = bugdar::$datastore['product'][ $this->values['product'] ]; $version = bugdar::$datastore['version'][ $this->values['version'] ]; if ($component['parentid'] != $product['productid']) { $this->_error(new FieldException(L_INVALID_ID, $field)); return false; } if (($version['productid'] != $component['productid'] && $version['productid'] != $product['productid']) && $version['productid'] != 0) { $this->_error(new FieldException(L_INVALID_ID, $field)); return false; } } return true; } /** * Verify: versionid */ protected function validate_version() { if ($this->_verifyIsNotZero('version')) { return false; } if (!bugdar::$datastore['version'][ $this->values['version'] ]) { $this->_error(new FieldException(L_INVALID_ID, $field)); return false; } return true; } /** * Verify: priority */ protected function validate_priority() { if (!bugdar::$datastore['priority'][ $this->values['priority'] ]) { $this->set('priority', bugdar::$options['defaultpriority']); } return true; } /** * Verify: severity * * @access private */ protected function validate_severity() { if (!bugdar::$datastore['severity'][ $this->values['severity'] ]) { $this->set('severity', bugdar::$options['defaultseverity']); } return true; } /** * Verify: status */ protected function validate_status() { if (!bugdar::$datastore['status'][ $this->values['status'] ]) { $this->set('status', bugdar::$options['defaultstatus']); } return true; } /** * Verify: resolution */ protected function validate_resolution() { if (!bugdar::$datastore['resolution'][ $this->values['resolution'] ]) { $this->set('resolution', bugdar::$options['defaultresolve']); } return true; } /** * Verify: assignedto * * @access private */ protected function validate_assignedto() { if (!bugdar::$datastore['assignto'][ $this->values['assignedto'] ] && $this->values['assignedto'] != 0) { $this->set('assignedto', bugdar::$options['defaultassign']); } return true; } } ?>