Relationship Graph

Relationship Graph
related to related to child of child of duplicate of duplicate of

View Issue Details

IDProjectCategoryView StatusLast Update
0002686mantisbtbugtrackerpublic2005-04-25 07:47
ReporterreporterAssigned Tothraxisp  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Fixed in Version1.0.0a2 
Summary0002686: switch project often goes back to the main page
Description

I'm in a project, in the "Users" section, doing management stuff.

I pull down the swtich thing, to switch to another project.

My expectation is to be switched to that other project, and still be in the "Users" section. But instead I am put to the top level, and have to click down to the "Users" subsection.

TagsNo tags attached.
Attached Files
set_project.php.txt (2,698 bytes)   
<?php
	# Mantis - a php based bugtracking system
	# Copyright (C) 2000 - 2002  Kenzaburo Ito - kenito@300baud.org
	# Copyright (C) 2002 - 2004  Mantis Team   - mantisbt-dev@lists.sourceforge.net
	# This program is distributed under the terms and conditions of the GPL
	# See the README and LICENSE files for details

	# --------------------------------------------------------
	# $Id: set_project.php,v 1.52 2005/02/14 10:21:44 vboctor Exp $
	# --------------------------------------------------------
?>
<?php
	require_once( 'core.php' );

	$t_core_path = config_get( 'core_path' );

	require_once( $t_core_path.'current_user_api.php' );
?>
<?php
	$f_project_id	= gpc_get_string( 'project_id' );
	$f_make_default	= gpc_get_bool  ( 'make_default' );
	$f_ref			= gpc_get_string( 'ref', '' );

	$t_project = split( ';', $f_project_id );
	$t_top     = $t_project[0];
	$t_bottom  = $t_project[ count( $t_project ) - 1 ];

	if ( ALL_PROJECTS != $t_bottom ) {
		project_ensure_exists( $t_bottom );
	}

	# Set default project
	if ( $f_make_default ) {
		current_user_set_default_project( $t_top );
	}

	helper_set_current_project( $f_project_id );

	# redirect to 'same page' when switching projects.
	# view_all_* pages, and summary
	# for proxies that clear out HTTP_REFERER
	if ( !is_blank( $f_ref ) ) {
		$t_redirect_url = $f_ref;
	} else if ( !isset( $_SERVER['HTTP_REFERER'] ) || is_blank( $_SERVER['HTTP_REFERER'] ) ) {
		$t_redirect_url = config_get( 'default_home_page' );
	} else {
		# Check that referrer matches our address
		$t_path = config_get( 'path' );
		if ( $t_path == substr( $_SERVER['HTTP_REFERER'], 0, strlen( $t_path ) ) ) {
			# if view_all_bug_page, pass on filter	
			if ( eregi( 'view_all_bug_page.php', $_SERVER['HTTP_REFERER'] ) ){
				$t_source_filter_id = filter_db_get_project_current( $f_project_id );
				$t_redirect_url = 'view_all_set.php?type=4';

				if ( $t_source_filter_id != null ) {
					$t_redirect_url = 'view_all_set.php?type=3&source_query_id=' . $t_source_filter_id;
				}
			} else if ( eregi( '_page.php', $_SERVER['HTTP_REFERER'] ) ){
				# if any other page, return to that page
				$t_redirect_url = substr( $_SERVER['HTTP_REFERER'], strlen( $t_path ) );
			} else {
				$t_redirect_url = config_get( 'default_home_page' );
			}
		} else {
			$t_redirect_url = config_get( 'default_home_page' );
		}
	}

	print_header_redirect( $t_redirect_url );
?>
<?php html_page_top1() ?>
<?php
	html_meta_redirect( $t_redirect_url );
?>
<?php html_page_top1() ?>

<br />
<div align="center">
<?php
	echo lang_get( 'operation_successful' ).'<br />';

	print_bracket_link( $t_redirect_url, lang_get( 'proceed' ) );
?>
</div>

<?php html_page_bottom1( __FILE__ ) ?>
set_project.php.txt (2,698 bytes)   

Relationships

has duplicate 0005481 closedthraxisp Selecting a different project shouldn't always change to My View 

Activities

jfitzell

jfitzell

2002-11-10 14:29

reporter   ~0003470

Set project sometimes remembers what page you came from (set_project.php) but it's hardcoded to a few pages. There's also support for passing f_ref into the page to be used for redirection (apparently some proxies clear the HTTP_REFERRER).

We definitely need to make this work better. My question is, why can't we always redirect directly to the full referrer URL? (maybe assuming it's within our domain at least)

thraxisp

thraxisp

2005-04-21 20:33

reporter   ~0009859

Here is the proposed patch. Comments from other developers welcome.

diff -u -r1.52 set_project.php
--- set_project.php 14 Feb 2005 10:21:44 -0000 1.52
+++ set_project.php 22 Apr 2005 00:29:16 -0000
@@ -36,11 +36,6 @@

    helper_set_current_project( $f_project_id );
  • #@@@ we really need to make this more general... it is never intuitive
  • to redirect to the main page as far as I can see. Is there a reason

  • we can't just redirect back to the referrer in all cases? See

  • issue 0002686 about this... -jf

  • # redirect to 'same page' when switching projects.
    # view_all_* pages, and summary
    # for proxies that clear out HTTP_REFERER

    @@ -48,42 +43,34 @@
    $t_redirect_url = $f_ref;
    } else if ( !isset( $_SERVER['HTTP_REFERER'] ) || is_blank( $_SERVER['HTTP_REFERER'] ) ) {
    $t_redirect_url = config_get( 'default_home_page' );

  • } else if ( eregi( 'view_all_bug_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_source_filter_id = filter_db_get_project_current( $f_project_id );
  • $t_redirect_url = 'view_all_set.php?type=4';
  • if ( $t_source_filter_id != null ) {
  • $t_redirect_url = 'view_all_set.php?type=3&source_query_id=' . $t_source_filter_id;
  • }
  • } else if ( eregi( 'changelog_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'changelog_page.php';
  • } else if ( eregi( 'summary_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'summary_page.php';
  • } else if ( eregi( 'proj_user_menu_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'proj_user_menu_page.php';
  • } else if ( eregi( 'manage_user_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'manage_user_page.php';
  • } else if ( eregi( 'bug_report_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'bug_report_page.php';
  • } else if ( eregi( 'bug_report_advanced_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'bug_report_advanced_page.php';
  • } else if ( eregi( 'summary_jpgraph_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'summary_jpgraph_page.php';
  • } else if ( eregi( 'view_filters_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'view_filters_page.php';
  • } else if ( eregi( 'my_view_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'my_view_page.php';
  • } else if ( eregi( 'main_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_redirect_url = 'main_page.php';
    } else {
  • $t_redirect_url = config_get( 'default_home_page' );
  • Check that referrer matches our address

  • $t_path = config_get( 'path' );
  • if ( $t_path == substr( $_SERVER['HTTP_REFERER'], 0, strlen( $t_path ) ) ) {
  • if view_all_bug_page, pass on filter

  • if ( eregi( 'view_all_bug_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • $t_source_filter_id = filter_db_get_project_current( $f_project_id );
  • $t_redirect_url = 'view_all_set.php?type=4';
  • if ( $t_source_filter_id != null ) {
  • $t_redirect_url = 'view_all_set.php?type=3&source_query_id=' . $t_source_filter_id;
  • }
  • } else if ( eregi( '_page.php', $_SERVER['HTTP_REFERER'] ) ){
  • if any other page, return to that page

  • $t_redirect_url = substr( $_SERVER['HTTP_REFERER'], strlen( $t_path ) );
  • } else {
  • $t_redirect_url = config_get( 'default_home_page' );
  • }
  • } else {
  • $t_redirect_url = config_get( 'default_home_page' );
  • }
    }
vboctor

vboctor

2005-04-24 09:14

manager   ~0009887

Review comments from IRC chat:

<Victor> $t_path == substr( $_SERVER['HTTP_REFERER'], 0, strlen( $t_path ) )
<Victor> what about case sensitivity?
<Victor> what about if one ends with / and the other doesn't
<Victor> eregi( 'view_all_bug_page.php', $_SERVER['HTTP_REFERER'] )
<Victor> shouldn't we look for $g_path + 'view_all_bugs_page.php'?
<thraxisp> doesn't $g_path always have to end in a /?
<thraxisp> The check is only done if the beginning only matches $g_path. I should only check the training page part anyways.
<Victor> yes, but does the referrer always end with /?
<Victor> get default home page once and store it in a variable ($t_default_home_page).
<thraxisp> referrer should always be a full file name.
<Victor> ok.
<Victor> the logic of the change looks fine.
<Victor> I am not very familiar with the filters part.
<thraxisp> The filters part is unchanged from before.
<thraxisp> Should there be an exception list of pages that don't return to the referrer when the project is changed?
<Victor> what happens if the user doesn't have access to the same page on the new project?
<thraxisp> The page will give an access denied, and you'll go to the mailpage for the project.
<thraxisp> ^mail^main
<Victor> ok
<Victor> sounds good then.
<thraxisp> I'll test the changes and submit it.
<Victor> ok.

thraxisp

thraxisp

2005-04-24 09:30

reporter   ~0009890

Fixed in CVS.

set_project.php -> 1.54

Related Changesets

MantisBT: master 64542fed

2002-11-10 17:31

Julian Fitzell


Details Diff
a little work on issue 0002686 (mantisbt.sourceforge.net/mantis/view_bug_advanced_page.php?f_id=0002686) but it isn't really fixed... this needs more work

git-svn-id: http://mantisbt.svn.sourceforge.net/svnroot/mantisbt/trunk@1607 <a class="text" href="/?p=mantisbt.git;a=object;h=f5dc347c">f5dc347c</a>-c33d-0410-90a0-b07cc1902cb9
Affected Issues
0002686
mod - set_project.php Diff File