View Issue Details

IDProjectCategoryView StatusLast Update
0022104mantisbtuipublic2019-04-21 02:53
Reportergthomas Assigned Todregad  
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Product Version2.0.0 
Target Version2.21.0Fixed in Version2.21.0 
Summary0022104: My View Page layout misses some boxes
Description

The n/2th box and the last box is hidden.

The code in my_view_page.php is simply wrong: the if/elseif/else prints the box only in the else branch, and skips it in the if branch, when it ends the first column, starts the second, but does not print the n/2th box.

Tagspatch
Attached Files
my_view_page.php.patch (4,122 bytes)   
diff --git a/my_view_page.php b/my_view_page.php
index f3a479462..9893ac497 100644
--- a/my_view_page.php
+++ b/my_view_page.php
@@ -85,8 +85,6 @@ $t_page_count = null;
 
 $t_boxes = config_get( 'my_view_boxes' );
 asort( $t_boxes );
-reset( $t_boxes );
-#print_r ($t_boxes);
 
 $t_project_id = helper_get_current_project();
 $t_timeline_view_threshold_access = access_has_project_level( config_get( 'timeline_view_threshold' ) );
@@ -95,56 +93,59 @@ $t_timeline_view_class = ( $t_timeline_view_threshold_access ) ? "col-md-7" : "c
 <div class="col-xs-12 <?php echo $t_timeline_view_class ?>">
 
 <?php
-$t_number_of_boxes = count ( $t_boxes );
 $t_boxes_position = config_get( 'my_view_boxes_fixed_position' );
-$t_counter = 0;
 $t_two_columns_applied = false;
 
 define( 'MY_VIEW_INC_ALLOW', true );
 
-while (list ($t_box_title, $t_box_display) = each ($t_boxes)) {
-		# don't display bugs that are set as 0
+# First, filter out the non-visible boxes
+$t_box_titles = array();
+foreach( $t_boxes as $t_box_title => $t_box_display ) {
+	# don't display bugs that are set as 0
 	if ($t_box_display == 0) {
-		$t_number_of_boxes = $t_number_of_boxes - 1;
+		continue;
 	}
-		# don't display "Assigned to Me" bugs to users that bugs can't be assigned to
-	else if(
-		$t_box_title == 'assigned'
-		&&  ( current_user_is_anonymous()
+	# don't display "Assigned to Me" bugs to users that bugs can't be assigned to
+	if( $t_box_title == 'assigned'
+		&& ( current_user_is_anonymous()
 			|| !access_has_project_level( config_get( 'handle_bug_threshold' ), $t_project_id, $t_current_user_id )
 		)
 	) {
-		$t_number_of_boxes = $t_number_of_boxes - 1;
+		continue;
 	}
-		# don't display "Monitored by Me" bugs to users that can't monitor bugs
-	else if( $t_box_title == 'monitored' && ( current_user_is_anonymous() OR !access_has_project_level( config_get( 'monitor_bug_threshold' ), $t_project_id, $t_current_user_id ) ) ) {
-		$t_number_of_boxes = $t_number_of_boxes - 1;
+	# don't display "Monitored by Me" bugs to users that can't monitor bugs
+	if( $t_box_title == 'monitored' && ( current_user_is_anonymous() || !access_has_project_level( config_get( 'monitor_bug_threshold' ), $t_project_id, $t_current_user_id ) ) ) {
+		continue;
 	}
-		# don't display "Reported by Me" bugs to users that can't report bugs
-	else if( in_array( $t_box_title, array( 'reported', 'feedback', 'verify' ) ) &&
+	# don't display "Reported by Me" bugs to users that can't report bugs
+	if( in_array( $t_box_title, array( 'reported', 'feedback', 'verify' ) ) &&
 		( current_user_is_anonymous() OR !access_has_project_level( config_get( 'report_bug_threshold' ), $t_project_id, $t_current_user_id ) ) ) {
-		$t_number_of_boxes = $t_number_of_boxes - 1;
-			}
-
-			# display the box
-	else {
-		if( !$t_timeline_view_threshold_access ) {
-			if ($t_counter >= $t_number_of_boxes / 2 && !$t_two_columns_applied) {
-				echo '</div>';
-				echo '<div class="col-xs-12 col-md-6">';
-				$t_two_columns_applied = true;
-			} elseif ($t_counter >= $t_number_of_boxes && $t_two_columns_applied) {
-				echo '</div>';
-			} else {
-				include( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'my_view_inc.php' );
-				echo '<div class="space-10"></div>';
-			}
-			$t_counter++;
-		} else {
-			include( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'my_view_inc.php' );
-			echo '<div class="space-10"></div>';
-		}
+		continue;
 	}
+
+	$t_box_titles[] = $t_box_title;
+}
+
+if( $t_timeline_view_threshold_access ) {
+	include( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'my_view_inc.php' );
+	echo '<div class="space-10"></div>';
+}
+
+$t_counter = 0;
+$t_number_of_boxes = count( $t_box_titles );
+foreach( $t_box_titles as $t_box_title) {
+	if ($t_counter >= $t_number_of_boxes / 2 && !$t_two_columns_applied) {
+		echo '</div>';
+		echo '<div class="col-xs-12 col-md-6">';
+		$t_two_columns_applied = true;
+	}
+	# display the box
+	include( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'my_view_inc.php' );
+	echo '<div class="space-10"></div>';
+	$t_counter++;
+}
+if ($t_two_columns_applied && $t_counter != 0) {
+	echo '</div>';
 }
 ?>
 </div>
my_view_page.php.patch (4,122 bytes)   

Relationships

related to 0019586 closeddregad Support disabling timeline feature based on access level 
related to 0025679 closeddregad Uneven distribution of boxes on My View page when Timeline is OFF 

Activities

dregad

dregad

2017-01-03 07:45

developer   ~0054902

I can confirm the problem, which only occurs when the Timeline is hidden.

The proposed patch is equally wrong however, because it does not work when the Timeline is enabled (see attached screenshot).

screenshot-my_view.png (29,908 bytes)   
screenshot-my_view.png (29,908 bytes)   
syncguru

syncguru

2017-01-26 02:05

developer   ~0055330

Hmm, I cannot reproduce this issue. Here is a snapshot of what I am getting:

sperraud

sperraud

2017-08-16 06:07

reporter   ~0057477

I had the same problem when the Timeline was hidden, this correction of the file my_view_page works for me.

my_view_page.php (5,971 bytes)   
<?php
# MantisBT - A PHP based bugtracking system

# MantisBT is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# MantisBT is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with MantisBT.  If not, see <http://www.gnu.org/licenses/>.

/**
 * My View Page
 *
 * @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 compress_api.php
 * @uses config_api.php
 * @uses constant_inc.php
 * @uses current_user_api.php
 * @uses gpc_api.php
 * @uses helper_api.php
 * @uses html_api.php
 * @uses lang_api.php
 * @uses print_api.php
 * @uses user_api.php
 */

require_once( 'core.php' );
require_api( 'access_api.php' );
require_api( 'authentication_api.php' );
require_api( 'category_api.php' );
require_api( 'compress_api.php' );
require_api( 'config_api.php' );
require_api( 'constant_inc.php' );
require_api( 'current_user_api.php' );
require_api( 'gpc_api.php' );
require_api( 'helper_api.php' );
require_api( 'html_api.php' );
require_api( 'lang_api.php' );
require_api( 'print_api.php' );
require_api( 'user_api.php' );
require_api( 'layout_api.php' );
require_css( 'status_config.php' );

auth_ensure_user_authenticated();

$t_current_user_id = auth_get_current_user_id();

# Improve performance by caching category data in one pass
category_get_all_rows( helper_get_current_project() );

compress_enable();

# don't index my view page
html_robots_noindex();

layout_page_header_begin( lang_get( 'my_view_link' ) );

if( current_user_get_pref( 'refresh_delay' ) > 0 ) {
	html_meta_redirect( 'my_view_page.php?refresh=true', current_user_get_pref( 'refresh_delay' ) * 60 );
}

layout_page_header_end();

layout_page_begin( __FILE__ );

$f_page_number		= gpc_get_int( 'page_number', 1 );

$t_per_page = config_get( 'my_view_bug_count' );
$t_bug_count = null;
$t_page_count = null;

$t_boxes = config_get( 'my_view_boxes' );
asort( $t_boxes );
reset( $t_boxes );
#print_r ($t_boxes);

// MODIFICATION ALTECA - START
// Display or not the moved box (on the fly: not cached)
$t_current_user_acces = user_get_access_level( $t_current_user_id, helper_get_current_project() );
if( $t_current_user_acces != PERFORM_DIRECTEUR) {
	$t_boxes['moved'] = "0"; // Hide (already shown by default)
}
// MODIFICATION ALTECA - END

$t_project_id = helper_get_current_project();
$t_timeline_view_threshold_access = access_has_project_level( config_get( 'timeline_view_threshold' ) );
$t_timeline_view_class = ( $t_timeline_view_threshold_access ) ? "col-md-7" : "col-md-6";
?>
<div class="col-xs-12 <?php echo $t_timeline_view_class ?>">

<?php
$t_number_of_boxes = count ( $t_boxes );
$t_boxes_position = config_get( 'my_view_boxes_fixed_position' );
$t_counter = 0;
$t_two_columns_applied = false;

define( 'MY_VIEW_INC_ALLOW', true );

while (list ($t_box_title, $t_box_display) = each ($t_boxes)) {
		# don't display bugs that are set as 0
	if ($t_box_display == 0) {
		$t_number_of_boxes = $t_number_of_boxes - 1;
	}
		# don't display "Assigned to Me" bugs to users that bugs can't be assigned to
	else if(
		$t_box_title == 'assigned'
		&&  ( current_user_is_anonymous()
			|| !access_has_project_level( config_get( 'handle_bug_threshold' ), $t_project_id, $t_current_user_id )
		)
	) {
		$t_number_of_boxes = $t_number_of_boxes - 1;
	}
		# don't display "Monitored by Me" bugs to users that can't monitor bugs
	else if( $t_box_title == 'monitored' && ( current_user_is_anonymous() OR !access_has_project_level( config_get( 'monitor_bug_threshold' ), $t_project_id, $t_current_user_id ) ) ) {
		$t_number_of_boxes = $t_number_of_boxes - 1;
	}
		# don't display "Reported by Me" bugs to users that can't report bugs
	else if( in_array( $t_box_title, array( 'reported', 'feedback', 'verify' ) ) &&
		( current_user_is_anonymous() OR !access_has_project_level( config_get( 'report_bug_threshold' ), $t_project_id, $t_current_user_id ) ) ) {
		$t_number_of_boxes = $t_number_of_boxes - 1;
			}

			# display the box
	else {
		if( !$t_timeline_view_threshold_access ) {
			if ($t_counter >= $t_number_of_boxes / 2 && !$t_two_columns_applied) {
				echo '</div>';
				echo '<div class="col-xs-12 col-md-6">';
				include( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'my_view_inc.php' );
				echo '<div class="space-10"></div>';
				$t_two_columns_applied = true;				
			} elseif ($t_counter >= $t_number_of_boxes && $t_two_columns_applied) {
				echo '</div>';
			} else {
				include( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'my_view_inc.php' );
				echo '<div class="space-10"></div>';
			}
			$t_counter++;
		} else {
			include( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'my_view_inc.php' );
			echo '<div class="space-10"></div>';
		}
	}
}
?>
</div>

<?php if( $t_timeline_view_threshold_access ) { ?>
<div class="col-md-5 col-xs-12">
	<?php
		# Build a simple filter that gets all bugs for current project
		$g_timeline_filter = array();
		$g_timeline_filter[FILTER_PROPERTY_HIDE_STATUS] = array( META_FILTER_NONE );
		$g_timeline_filter = filter_ensure_valid_filter( $g_timeline_filter );
		include( $g_core_path . 'timeline_inc.php' );
	?>
	<div class="space-10"></div>
</div>
<?php }
layout_page_end();
my_view_page.php (5,971 bytes)   
Zazzarim

Zazzarim

2018-07-27 07:35

reporter   ~0060328

Thank you sperraud for your workaround.
I just upgraded to 2.15.0 and noticed that the box "monitored" was missing.
I have
$g_my_view_boxes = array (
'unassigned' => '1',
'assigned' => '2',
'recent_mod' => '3',
'monitored' => '4',
'reported' => '5',
'resolved' => '0',
'feedback' => '0',
'verify' => '0',
'my_comments' => '0'
);

with
$g_timeline_view_threshold = NOBODY;
$g_my_view_boxes_fixed_position = OFF;

Your my_view_page.php worked for me.

Zazzarim

dregad

dregad

2019-04-03 08:18

developer   ~0061816

Last edited: 2019-04-03 08:19

@Kirill reported on Gitter [1] that he's facing the same issue in current master branch ( MantisBT master 6d288c64 as I write this)

dregad

dregad

2019-04-04 13:09

developer   ~0061828

PR https://github.com/mantisbt/mantisbt/pull/1497

Related Changesets

MantisBT: master a239f827

2019-04-04 08:00

dregad


Details Diff
Fix My View Page missing boxes

When displaying boxes on 2 columns (i.e. when Timeline is not shown),
the code handling the display of boxes failed to print the first box
after starting the 2nd column.

This commit simplifies the logic, only handling the closing of first
column's div and opening of 2nd column, and always printing the box
regardless of status.

It also removes dead code: the elseif to close the div at end of 2nd
column was never called, the div is actually closed after the foreach
loop ends.

Fixes 0022104
Affected Issues
0022104
mod - my_view_page.php Diff File

MantisBT: master 5ad064d8

2019-04-11 05:36

dregad


Details Diff
Fixes for "My View" boxes display

Addresses the following issues:

- 0022104 My View Page layout misses some boxes
- 0023418 Plugin tab in Summary section not highlighted when selected
- 0025679 Uneven distribution of boxes on My View page when Timeline is OFF

Plus some minor code cleanup.

Fixes 0022104, 0023418, 0025679
PR https://github.com/mantisbt/mantisbt/pull/1497
Affected Issues
0022104, 0023418, 0025679
mod - config_defaults_inc.php Diff File
mod - core/obsolete.php Diff File
mod - my_view_page.php Diff File