#!/usr/bin/perl -w # # Gnatsweb - web front-end to gnats #----------------------------------------------------------------------------- # Site-specific customization - # # site_callback - # # arguments: # $reason - reason for the call. Each reason is unique. # @args - additional parameters may be provided in @args. # # returns: # undef - take no special action # string - string is used by gnatsweb according to $reason sub site_callback { my($reason, @args) = @_; if ($reason eq 'initialize') { return site_filter_categories(); } undef; } #----------------------------------------------------------------------------- # Filter the list of categories based on the current user and database. # # Written by Branko Cibej , March 2000. # # Don't do anything if: # - there's no entry for the database in %site_category_filter; or, # - the current user is in @site_admins; or, # - the current user is in the database's `admins' list. # Otherwise remove names in the database's `filter' list from @category. # site_admins - # List of site-wide administrators @site_admins = (); # site_category_filter - # Per-database list of admins and categories to hide from non-admins %site_category_filter = # => { admins => [ , ... ], # filter => [ , ... ] } ('gcc' => {admins => [], filter => ['gc', 'host', 'profiling', 'libgcc']} ); # site_list2hash - # Create a hash reference from a list sub site_list2hash { my $hash_ref = {}; foreach (@_) { $$hash_ref{$_} = 1; } return $hash_ref; } # site_filter_categories - # Filter hidden categories from the @category list sub site_filter_categories { # find the filter for the current database my $db_filter = $site_category_filter{$global_prefs{'database'}}; return 'Database filter not defined' unless defined $db_filter; # Filter only if the current user isn't in the admin users list my $admins = site_list2hash(@{$$db_filter{'admins'}}, @site_admins); return 'User is administrator' if exists $$admins{$db_prefs{'user'}}; # Remove filtered categories from @category my $filter = site_list2hash(@{$$db_filter{'filter'}}); my @lcat = (); foreach (@category) { push(@lcat, $_) unless exists $$filter{$_}; } @category = @lcat; return 'Filtered'; } # end category filter #----------------------------------------------------------------------------- # end customization #----------------------------------------------------------------------------- # Emacs stuff - # # Local Variables: # perl-indent-level:2 # perl-continued-brace-offset:-6 # perl-continued-statement-offset:6 # End: