. /** * Copy Categories between projects * * @package MantisBT * @copyright Copyright 2000 - 2002 Kenzaburo Ito - kenito@300baud.org * @copyright Copyright 2002 MantisBT Team - mantisbt-dev@lists.sourceforge.net * @link http://www.mantisbt.org * * @uses core.php * @uses access_api.php * @uses authentication_api.php * @uses category_api.php * @uses config_api.php * @uses constant_inc.php * @uses form_api.php * @uses gpc_api.php * @uses print_api.php * * Unhandled exceptions will be caught by the default error handler * @noinspection PhpUnhandledExceptionInspection */ use Mantis\Exceptions\ClientException; require_once( 'core.php' ); require_api( 'access_api.php' ); require_api( 'authentication_api.php' ); require_api( 'category_api.php' ); require_api( 'config_api.php' ); require_api( 'constant_inc.php' ); require_api( 'form_api.php' ); require_api( 'gpc_api.php' ); require_api( 'print_api.php' ); form_security_validate( 'manage_proj_cat_copy' ); auth_reauthenticate(); $f_project_id = gpc_get_int( 'project_id' ); $f_other_project_id = gpc_get_int( 'other_project_id' ); $f_copy_from = gpc_get_bool( 'copy_from' ); $f_copy_to = gpc_get_bool( 'copy_to' ); $f_exclude_inherited = gpc_get_bool( 'exclude_inherited' ); if( $f_copy_from ) { $t_src_project_id = $f_other_project_id; $t_dst_project_id = $f_project_id; } else if( $f_copy_to ) { $t_src_project_id = $f_project_id; $t_dst_project_id = $f_other_project_id; } else { throw new ClientException( "Copy action to/from is required", ERROR_NO_COPY_ACTION ); } # The add command checks the destination. Preserve the previous requirement # that the source project also requires project-management access. $t_access_level = config_get( 'manage_project_threshold', null, null, $t_src_project_id ); access_ensure_project_level( $t_access_level, $t_src_project_id ); $t_rows = category_get_all_rows( $t_src_project_id, !$f_exclude_inherited ); foreach ( $t_rows as $t_row ) { $t_name = $t_row['name']; if( category_is_unique( $t_dst_project_id, $t_name ) ) { $t_data = [ 'query' => [ 'project_id' => $t_dst_project_id ], 'payload' => [ 'name' => $t_name ], ]; $t_command = new CategoryAddCommand( $t_data ); $t_command->execute(); } } form_security_purge( 'manage_proj_cat_copy' ); if( $f_project_id == ALL_PROJECTS ) { $t_redirect_url = 'manage_proj_page.php'; } else { $t_redirect_url = 'manage_proj_edit_page.php?project_id=' . $f_project_id . '#categories'; } print_header_redirect( $t_redirect_url );