/** * Remove all categories associated with a project * @param int $p_project_id Project ID * @param int $p_new_category_id new category id (to replace existing category) * @return bool * @access public */ function category_remove_all( $p_project_id, $p_new_category_id = 0 ) { project_ensure_exists( $p_project_id ); if( 0 != $p_new_category_id ) { category_ensure_exists( $p_new_category_id ); } # cache category names category_get_all_rows( $p_project_id ); $t_category_table = db_get_table( 'category' ); $t_bug_table = db_get_table( 'bug' ); # get a list of affected categories $t_query = "SELECT id FROM $t_category_table WHERE project_id=" . db_param(); $t_result = db_query_bound( $t_query, array( $p_project_id ) ); $t_category_ids = array(); while( $t_row = db_fetch_array( $t_result ) ) { $t_category_ids[] = $t_row['id']; } # Handle projects with no categories if( count( $t_category_ids ) < 1 ) { return true; } $t_category_ids = join( ',', $t_category_ids ); # update bug history entries $t_query = "SELECT id, category_id FROM $t_bug_table WHERE category_id IN ( $t_category_ids )"; $t_result = db_query_bound( $t_query ); while( $t_bug_row = db_fetch_array( $t_result ) ) { history_log_event_direct( $t_bug_row['id'], 'category', category_full_name( $t_bug_row['category_id'], false ), category_full_name( $p_new_category_id, false ) ); } # update bug data $t_query = "UPDATE $t_bug_table SET category_id=" . db_param() . " WHERE category_id IN ( $t_category_ids )"; db_query_bound( $t_query, array( $p_new_category_id ) ); # delete categories $t_query = "DELETE FROM $t_category_table WHERE project_id=" . db_param(); db_query_bound( $t_query, array( $p_project_id ) ); return true; }
function category_remove($p_project_id, $p_category, $p_new_category = '') { $c_project_id = db_prepare_int($p_project_id); $c_category = db_prepare_string($p_category); $c_new_category = db_prepare_string($p_new_category); category_ensure_exists($p_project_id, $p_category); if (!is_blank($p_new_category)) { category_ensure_exists($p_project_id, $p_new_category); } $t_project_category_table = config_get('mantis_project_category_table'); $t_bug_table = config_get('mantis_bug_table'); $query = "DELETE FROM {$t_project_category_table}\n\t\t\t\t WHERE project_id='{$c_project_id}' AND\n\t\t\t\t\t\tcategory='{$c_category}'"; db_query($query); $query = "UPDATE {$t_bug_table}\n\t\t\t\t SET category='{$c_new_category}'\n\t\t\t\t WHERE category='{$c_category}' AND\n\t\t\t\t \t\tproject_id='{$c_project_id}'"; db_query($query); # db_query() errors on failure so: return true; }
/** * validate current bug object for database insert/update * triggers error on failure * @param boolean $p_update_extended Whether to validate extended fields. * @return void */ function validate( $p_update_extended = true ) { # Summary cannot be blank if( is_blank( $this->summary ) ) { error_parameters( lang_get( 'summary' ) ); trigger_error( ERROR_EMPTY_FIELD, ERROR ); } if( $p_update_extended ) { # Description field cannot be empty if( is_blank( $this->description ) ) { error_parameters( lang_get( 'description' ) ); trigger_error( ERROR_EMPTY_FIELD, ERROR ); } } # Make sure a category is set if( 0 == $this->category_id && !config_get( 'allow_no_category' ) ) { error_parameters( lang_get( 'category' ) ); trigger_error( ERROR_EMPTY_FIELD, ERROR ); } # Ensure that category id is a valid category if( $this->category_id > 0 ) { category_ensure_exists( $this->category_id ); } if( !is_blank( $this->duplicate_id ) && ( $this->duplicate_id != 0 ) && ( $this->id == $this->duplicate_id ) ) { trigger_error( ERROR_BUG_DUPLICATE_SELF, ERROR ); # never returns } }
/** * Remove all categories associated with a project. * This will skip processing of categories that can't be deleted. * @param integer $p_project_id A Project identifier. * @param integer $p_new_category_id New category id (to replace existing category). * @return boolean * @access public */ function category_remove_all($p_project_id, $p_new_category_id = 0) { project_ensure_exists($p_project_id); if (0 != $p_new_category_id) { category_ensure_exists($p_new_category_id); } # cache category names category_get_all_rows($p_project_id); # get a list of affected categories db_param_push(); $t_query = 'SELECT id FROM {category} WHERE project_id=' . db_param(); $t_result = db_query($t_query, array($p_project_id)); $t_category_ids = array(); while ($t_row = db_fetch_array($t_result)) { # Don't add category to the list if it can't be deleted if (!category_can_remove($t_row['id'])) { continue; } $t_category_ids[] = $t_row['id']; } # Handle projects with no categories if (count($t_category_ids) < 1) { return true; } $t_category_ids = join(',', $t_category_ids); # update bug history entries $t_query = 'SELECT id, category_id FROM {bug} WHERE category_id IN ( ' . $t_category_ids . ' )'; $t_result = db_query($t_query); while ($t_bug_row = db_fetch_array($t_result)) { history_log_event_direct($t_bug_row['id'], 'category', category_full_name($t_bug_row['category_id'], false), category_full_name($p_new_category_id, false)); } # update bug data db_param_push(); $t_query = 'UPDATE {bug} SET category_id=' . db_param() . ' WHERE category_id IN ( ' . $t_category_ids . ' )'; db_query($t_query, array($p_new_category_id)); # delete categories db_param_push(); $t_query = 'DELETE FROM {category} WHERE project_id=' . db_param(); db_query($t_query, array($p_project_id)); return true; }