. /** * @package MantisBT * @copyright Copyright (C) 2000 - 2002 Kenzaburo Ito - kenito@300baud.org * @copyright Copyright (C) 2002 - 2011 MantisBT Team - mantisbt-dev@lists.sourceforge.net * @link http://www.mantisbt.org * * @uses access_api.php * @uses authentication_api.php * @uses config_api.php * @uses gpc_api.php * @uses helper_api.php * @uses lang_api.php * @uses print_api.php * @uses tag_api.php */ if ( !defined( 'BUG_ACTIONGROUP_ATTACH_TAGS_INC_ALLOW' ) ) { return; } require_api( 'access_api.php' ); require_api( 'authentication_api.php' ); require_api( 'config_api.php' ); require_api( 'gpc_api.php' ); require_api( 'helper_api.php' ); require_api( 'lang_api.php' ); require_api( 'print_api.php' ); require_api( 'tag_api.php' ); /** * Prints the title for the custom action page. */ function action_attach_tags_print_title() { echo ''; echo ''; echo lang_get( 'tag_attach_long' ); echo ''; } /** * Prints the table and form for the Attach Tags group action page. */ function action_attach_tags_print_fields() { echo '',lang_get('tag_attach_long'),''; print_tag_input(); echo ''; } /** * Validates the Attach Tags group action. * Checks if a user can attach the requested tags to a given bug. * @param integer Bug ID * @return string|null On failure: the reason for tags failing validation for the given bug. On success: null. */ function action_attach_tags_validate( $p_bug_id ) { global $g_action_attach_tags_tags; global $g_action_attach_tags_attach; global $g_action_attach_tags_create; $t_can_attach = access_has_bug_level( config_get( 'tag_attach_threshold' ), $p_bug_id ); if( !$t_can_attach ) { return lang_get( 'tag_attach_denied' ); } if( !isset( $g_action_attach_tags_tags ) ) { if( !isset( $g_action_attach_tags_attach ) ) { $g_action_attach_tags_attach = array(); $g_action_attach_tags_create = array(); } $g_action_attach_tags_tags = tag_parse_string( gpc_get_string( 'tag_string' ) ); foreach ( $g_action_attach_tags_tags as $t_tag_row ) { if ( $t_tag_row['id'] == -1 ) { $g_action_attach_tags_create[$t_tag_row['name']] = $t_tag_row; } else if( $t_tag_row['id'] >= 0 ) { $g_action_attach_tags_attach[$t_tag_row['name']] = $t_tag_row; } } } $t_can_create = access_has_bug_level( config_get( 'tag_create_threshold' ), $p_bug_id ); if( count( $g_action_attach_tags_create ) > 0 && !$t_can_create ) { return lang_get( 'tag_create_denied' ); } if( count( $g_action_attach_tags_create ) == 0 && count( $g_action_attach_tags_attach ) == 0 ) { return lang_get( 'tag_none_attached' ); } return null; } /** * Attaches all the tags to each bug in the group action. * @param integer Bug ID * @return null Previous validation ensures that this function doesn't fail. Therefore we can always return null to indicate no errors occurred. */ function action_attach_tags_process( $p_bug_id ) { global $g_action_attach_tags_attach, $g_action_attach_tags_create; $t_user_id = auth_get_current_user_id(); foreach( $g_action_attach_tags_create as $t_tag_row ) { $t_tag_row['id'] = tag_create( $t_tag_row['name'], $t_user_id ); $g_action_attach_tags_attach[] = $t_tag_row; } $g_action_attach_tags_create = array(); foreach( $g_action_attach_tags_attach as $t_tag_row ) { if ( !tag_bug_is_attached( $t_tag_row['id'], $p_bug_id ) ) { tag_bug_attach( $t_tag_row['id'], $p_bug_id, $t_user_id ); } } return null; }