]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 140435 - Templatise GetCommandMenu. Patch by gerv; r=bbaetz, justdave.
authorgerv%gerv.net <>
Wed, 8 May 2002 04:28:39 +0000 (04:28 +0000)
committergerv%gerv.net <>
Wed, 8 May 2002 04:28:39 +0000 (04:28 +0000)
12 files changed:
CGI.pl
buglist.cgi
checksetup.pl
globals.pl
relogin.cgi
t/004template.t
template/en/default/bug/votes/list-for-user.html.tmpl
template/en/default/global/footer.html.tmpl
template/en/default/global/useful-links.html.tmpl [new file with mode: 0644]
template/en/default/list/edit-multiple.html.tmpl
userprefs.cgi
votes.cgi

diff --git a/CGI.pl b/CGI.pl
index b62913d365ab567c4593b5ef82334745885b3da9..f5ce6fb3522684cc62c423b078d6813218ddcd8c 100644 (file)
--- a/CGI.pl
+++ b/CGI.pl
@@ -480,9 +480,52 @@ sub quietly_check_login() {
     if (!$loginok) {
         delete $::COOKIE{"Bugzilla_login"};
     }
+                    
+    $vars->{'user'} = GetUserInfo($::userid);
+    
     return $loginok;
 }
 
+# Populate a hash with information about this user. 
+sub GetUserInfo {
+    my ($userid) = (@_);
+    my %user;
+    my @queries;
+    my %groups;
+    
+    # No info if not logged in
+    return \%user if ($userid == 0);
+    
+    $user{'login'} = $::COOKIE{"Bugzilla_login"};
+    $user{'userid'} = $userid;
+    
+    SendSQL("SELECT mybugslink, realname, groupset FROM profiles " . 
+            "WHERE userid = $userid");
+    ($user{'showmybugslink'}, $user{'realname'}, $user{'groupset'}) =
+                                                                 FetchSQLData();
+
+    SendSQL("SELECT name, query, linkinfooter FROM namedqueries " .
+            "WHERE userid = $userid");
+    while (MoreSQLData()) {
+        my %query;
+        ($query{'name'}, $query{'query'}, $query{'linkinfooter'}) = 
+                                                                 FetchSQLData();
+        push(@queries, \%query);    
+    }
+
+    $user{'queries'} = \@queries;
+
+    SendSQL("select name, (bit & $user{'groupset'}) != 0 from groups");
+    while (MoreSQLData()) {
+        my ($name, $bit) = FetchSQLData();    
+        $groups{$name} = $bit;
+    }
+
+    $user{'groups'} = \%groups;
+
+    return \%user;
+}
+
 sub CheckEmailSyntax {
     my ($addr) = (@_);
     my $match = Param('emailregexp');
index 37baecc8640807e472a7bd876dfbd26f95f3bcf5..4c1719d999e11d99f4f7acea218f5da53a38c657 100755 (executable)
@@ -1119,8 +1119,22 @@ CMD: for ($::FORM{'cmdtype'}) {
             SendSQL("REPLACE INTO namedqueries (userid, name, query, linkinfooter)
                      VALUES ($userid, $qname, $qbuffer, $tofooter)");
         }
+        
+        my $new_in_footer = $tofooter;
+        
+        # Don't add it to the list if they are reusing an existing query name.
+        foreach my $query (@{$vars->{'user'}{'queries'}}) {
+            if ($query->{'name'} eq $name) {
+                $new_in_footer = 0;
+            }
+        }        
+        
         print "Content-Type: text/html\n\n";
-        # Generate and return the UI (HTML page) from the appropriate template.
+        # Generate and return the UI (HTML page) from the appropriate template.        
+        if ($new_in_footer) {
+            push(@{$vars->{'user'}{'queries'}}, {name => $name});
+        }
+        
         $vars->{'title'} = "OK, query saved.";
         $vars->{'message'} = "OK, you have a new query named <code>$name</code>";
         $vars->{'url'} = "query.cgi";
@@ -1453,7 +1467,7 @@ $vars->{'urlquerypart'} =~ s/[&?](order|cmdtype)=[^&]*//g;
 $vars->{'order'} = $order;
 
 # The user's login account name (i.e. email address).
-$vars->{'user'} = $::COOKIE{'Bugzilla_login'};
+my $login = $::COOKIE{'Bugzilla_login'};
 
 $vars->{'caneditbugs'} = UserInGroup('editbugs');
 $vars->{'usebuggroups'} = UserInGroup('usebuggroups');
@@ -1461,8 +1475,8 @@ $vars->{'usebuggroups'} = UserInGroup('usebuggroups');
 # Whether or not this user is authorized to move bugs to another installation.
 $vars->{'ismover'} = 1
   if Param('move-enabled')
-    && defined($vars->{'user'})
-      && Param('movers') =~ /^(\Q$vars->{'user'}\E[,\s])|([,\s]\Q$vars->{'user'}\E[,\s]+)/;
+    && defined($login)
+      && Param('movers') =~ /^(\Q$login\E[,\s])|([,\s]\Q$login\E[,\s]+)/;
 
 my @bugowners = keys %$bugowners;
 if (scalar(@bugowners) > 1 && UserInGroup('editbugs')) {
index 4f59e92e63c30e941e1b6d68f184f9c95784676b..e1a5515067c4dc9937283b04e633090478042d2d 100755 (executable)
@@ -842,6 +842,7 @@ END
          js => sub { return $_; },
          html => sub { return $_; },
          url_quote => sub { return $_; }
+         no_break => sub { return $_; }
         },
       }) || die ("Could not create Template: " . Template->error() . "\n");
 
index f6e651e3cb14d47aa6a9d6cc505bbabb185df220..d04133d10dc5e1ec0c9e1b9aa62e28e2f048b6bc 100644 (file)
@@ -486,7 +486,6 @@ sub GenerateVersionTable {
         }
     }
             
-
     my $cols = LearnAboutColumns("bugs");
     
     @::log_columns = @{$cols->{"-list-"}};
@@ -1574,6 +1573,15 @@ $::template ||= Template->new(
         # filter should be used for a full URL that may have
         # characters that need encoding.
         url_quote => \&url_quote ,
+        
+        # Returns the text with spaces converted to non-breaking space
+        # HTML entities.
+        no_break => sub
+        {
+            my ($var) = @_;            
+            $var =~ s/ /\&nbsp;/g;
+            return $var;
+       } ,
       } ,
   }
 ) || DisplayError("Template creation failed: " . Template->error())
@@ -1756,6 +1764,8 @@ $::vars =
     
     # User Agent - useful for detecting in templates
     'user_agent' => $ENV{'HTTP_USER_AGENT'} ,
+    
+    'use_votes' => $::anyvotesallowed,
   };
 
 1;
index d07de9ef64979adbfb56fb303ff38dc62a3fe514..0d64fb71f5f66bc08a57dec182f78c090600d8dc 100755 (executable)
@@ -66,6 +66,7 @@ delete $::COOKIE{"Bugzilla_login"};
                           next time it is required.";
     $vars->{'url'} = "query.cgi?GoAheadAndLogIn=1";
     $vars->{'link'} = "Log in again here";
+    $vars->{'user'} = {};
     
     print "Content-Type: text/html\n\n";
     $template->process("global/message.html.tmpl", $vars)
index 4332e2e822e4ffbddd0bc1791b61a78bd3298cf4..f9cd0fad9743e0a0fc29b60dd783d4e1298d1937 100644 (file)
@@ -70,6 +70,7 @@ my $template = Template->new(
         js        => sub { return $_ } ,
         strike    => sub { return $_ } ,
         url_quote => sub { return $_ } ,
+        no_break  => sub { return $_ } ,
     },
 }
 );
index 261e0f86438379692db1918dc66afcf1424a6d5f..4797d71b7592e45bf2e83b7e3e99f2d609375953 100644 (file)
 
 [% PROCESS global/header.html.tmpl
            title = "Show Votes"
-           h2 = user.name
+           h2 = voting_user.name
  %]
 
+[% canedit = 1 IF voting_user.login == user.login %]
+
 [% IF votes_recorded %]
   <p>
     <font color="red">
@@ -76,7 +78,7 @@
               </a>
             </td>
             <td align="right">
-              [% IF user.canedit %]
+              [% IF canedit %]
                 [% IF product.onevoteonly %]
                   <input type="checkbox" name="[% bug.id %]" value="1"
                     [% " checked" IF bug.count %]>
       [% END %]
     </table>
 
-    [% IF user.canedit %]
+    [% IF canedit %]
       <input type="submit" value="Change My Votes">
       <br>
       <br>
   </form>
 [% ELSE %]
   <p>
-    [% IF user.canedit %]
+    [% IF canedit %]
     You are
     [% ELSE %]
     This user is
index 8b3af59a4479f9a6c57229ea822d2f781c30e340..b611cb06c0fdb10a0a67697655b0bcbe452186f0 100644 (file)
   # Copyright (C) 1998 Netscape Communications Corporation. All
   # Rights Reserved.
   #
-  # Contributor(s):
+  # Contributor(s): Gervase Markham <gerv@gerv.net>
   #%]
 
-[% PerformSubsts(Param('footerhtml')) %]
+[%# INTERFACE:
+  # This template has no interface. However, you must fulfill the interface to
+  # global/useful-links.html.tmpl.
+  #%]
+  
+[%# Migration note: this whole file corresponds to the old Param 'footerhtml' %]
+  
+<table border="0">
+  <tr>
+    <td bgcolor="#000000" valign="top">
+      <table border="0" cellpadding="10" cellspacing="0" width="100%"
+             bgcolor="lightyellow">
+        <tr>
+          <td>
+          
+[%# Migration note: this section corresponds to the old Param 'blurbhtml' %]
+           This is <b>Bugzilla</b>: the Mozilla bug system.  For more 
+            information about what Bugzilla is and what it can do, see 
+            <a href="http://www.bugzilla.org/">bugzilla.org</a>.
+            
+[%# End section %]
+
+            <br>
+
+[% Migration note: useful-links.html.tmpl corresponds to %commandmenu% %]
+
+           [% PROCESS "global/useful-links.html.tmpl" %]
+
+          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
 
 </body>
 </html>
 
-[% CALL SyncAnyPendingShadowChanges() %]
+[% CALL SyncAnyPendingShadowChanges() IF SyncAnyPendingShadowChanges %]
diff --git a/template/en/default/global/useful-links.html.tmpl b/template/en/default/global/useful-links.html.tmpl
new file mode 100644 (file)
index 0000000..90704de
--- /dev/null
@@ -0,0 +1,125 @@
+<!-- 1.0@bugzilla.org -->
+[%# The contents of this file are subject to the Mozilla Public
+  # License Version 1.1 (the "License"); you may not use this file
+  # except in compliance with the License. You may obtain a copy of
+  # the License at http://www.mozilla.org/MPL/
+  #
+  # Software distributed under the License is distributed on an "AS
+  # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+  # implied. See the License for the specific language governing
+  # rights and limitations under the License.
+  #
+  # The Original Code is the Bugzilla Bug Tracking System.
+  #
+  # The Initial Developer of the Original Code is Netscape Communications
+  # Corporation. Portions created by Netscape are
+  # Copyright (C) 1998 Netscape Communications Corporation. All
+  # Rights Reserved.
+  #
+  # Contributor(s): Gervase Markham <gerv@gerv.net>
+  #%]
+
+[%# INTERFACE:
+  # user: hash. Information about the user. If the user is not logged in,
+  #       user.login is undefined.
+  #   login: string. The user's Bugzilla login email address.
+  #   showmybugslink: boolean. True if user wants My Bugs in the footer.
+  #   queries: list of strings. The names of those of the user's named
+  #     queries which should be displayed in the footer.
+  #   groups: hash. Keys are group names, values are true if user in that group.
+  #     The keys used in this template are
+  #     tweakparams, editcomponents, creategroups, editkeywords, confirm,
+  #     editbugs, editusers. 
+  # use_votes: boolean. True if we are using votes.
+  #%]
+
+[%# Migration note: this whole file corresponds to the old %commandmenu% 
+    substitution param in 'footerhtml' %]
+
+<form method="get" action="show_bug.cgi">
+  <table width="100%">
+    <tr>
+      <td>
+        Actions:
+      </td>
+      
+      <td valign="middle" nowrap>
+        <a href="enter_bug.cgi">New</a> | 
+        <a href="query.cgi">Query</a> |
+        
+        <input type="submit" value="Find"> bug # 
+        <input name="id" size="6"> | 
+        
+        <a href="reports.cgi">Reports</a> 
+       
+        [% IF user.login AND use_votes %]
+          | <a href="votes.cgi?action=show_user">My Votes</a>
+        [% END %]      
+      </td>
+
+      <td>&nbsp;</td>
+      
+    [% IF user.login %] 
+
+      <td valign="middle">
+        Edit <a href="userprefs.cgi">prefs</a>
+        [% ", <a href='editparams.cgi'>parameters</a>" 
+                                                   IF user.groups.tweakparams %]
+        [% ", <a href='editusers.cgi'>users</a>"     IF user.groups.editusers %]
+        [% ", <a href='editproducts.cgi'>products</a>" 
+                                                IF user.groups.editcomponents %]
+        [% ", <a href='editattachstatuses.cgi'> attachment&nbsp;statuses</a>" 
+                                                IF user.groups.editcomponents %]
+        [% ", <a href='editgroups.cgi'>groups</a>" 
+                                                  IF user.groups.creategroups %]
+        [% ", <a href='editkeywords.cgi'>keywords</a>" 
+                                                  IF user.groups.editkeywords %]
+        [% " | <a href='sanitycheck.cgi'>Sanity&nbsp;check</a>" 
+                                                   IF user.groups.tweakparams %]
+
+        | <a href="relogin.cgi">Log&nbsp;out</a>&nbsp;[% user.login %]
+      </td>
+    </tr> 
+
+    [%# Preset queries %]
+    
+    [% preset_queries = user.showmybugslink %]
+    [% FOREACH q = user.queries %]
+      [% preset_queries = 1 IF q.linkinfooter %]
+    [% END %]
+      
+    <tr>
+      [% IF preset_queries %]
+        <td>
+          Preset&nbsp;Queries:
+        </td>
+      [% END %]
+      
+      <td colspan="3">
+        [% IF user.showmybugslink %]
+          <a href="buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=[% user.name FILTER url_quote %]&emailtype1=exact&emailassigned_to1=1&emailreporter1=1">My&nbsp;Bugs
+          </a>
+          [% print_pipe = 1 %]
+        [% END %]
+
+        [% FOREACH q = user.queries %]
+          [% IF q.linkinfooter %]
+            [% " | " IF print_pipe %]
+            <a href="buglist.cgi?cmdtype=runnamed&amp;namedcmd=[% q FILTER url_quote %]">[% q.name FILTER no_break FILTER html %]
+            </a>
+            [% print_pipe = 1 %]
+          [% END %]        
+        [% END %]
+      </td>
+    </tr>
+      
+    [% ELSE %]    
+      <td valign="middle" align="right">
+        <a href="createaccount.cgi">New&nbsp;Account</a> | 
+        <a href="query.cgi?GoAheadAndLogIn=1">Log&nbsp;In</a>
+      </td>
+    </tr>
+    [% END %]
+    
+  </table>                
+</form>
index c7c8d00bf7eec4be90f740cb643580697d84bc6d..fb28845c519f5e3e8b5a17778fa1a9ea2436fb96 100644 (file)
   Reassign</A> bugs to
 </label>
 <input name="assigned_to" 
-       value="[% user FILTER html %]"
+       value="[% user.login FILTER html %]"
        onchange="document.forms.changeform.knob[[% knum %]].checked = true;"
        size="32"><br />
 
index 977dda7eef86450d81cfd9e76f8b5f50ef5d31ba..2205dd61a17da5b88e4600d984eb1d53fdf1ba79 100755 (executable)
@@ -323,6 +323,9 @@ sub SaveFooter {
     }
     SendSQL("UPDATE profiles SET mybugslink = " . 
             SqlQuote($::FORM{'mybugslink'}) . " WHERE userid = $userid");
+
+    # Regenerate cached info about queries in footer.            
+    $vars->{'user'} = GetUserInfo($::userid);
 }
     
     
index eee96b960fb374cc42ce1c03c7b8e1b29e080375..7a387e0e16d631f0d07d0a707ee8b4c355ce8a59 100755 (executable)
--- a/votes.cgi
+++ b/votes.cgi
@@ -213,7 +213,7 @@ sub show_user {
     SendSQL("DELETE FROM votes WHERE count <= 0");
     SendSQL("UNLOCK TABLES");
     
-    $vars->{'user'} = { canedit => $canedit, name => $name, id => $who };
+    $vars->{'voting_user'} = { "login" => $name };
     $vars->{'products'} = \@products;
 
     print "Content-type: text/html\n\n";