BasicVsAdvancedInterface

From Request Tracker Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This feature provides a simple way to offer privileged users a basic interface (i.e. the SelfService interface) or an advanced interface (the default RT at a Glance interface). Non-privileged users will still only ever see the SelfService screens. A cookie keeps track of the user's preference. This patch was created against 3.6.3 source.

There are two files to patch, Elements/Header and SelfService/Elements/Header, as well as two new files (Elements/UIPrefCookieCheck and Elements/UIPrefSwitchView). To install the feature:

  1. create the directory <rt-root>/local/html/Elements, if needed
  2. copy the file <rt-root>/share/html/Elements/Header to <rt-root>/local/html/Elements, if it does not already exist
  3. create the directory <rt-root>/local/html/SelfService/Elements, if needed
  4. copy the file <rt-root>/share/html/SelfService/Elements/Header] to <rt-root>/local/html/SelfService/Elements, if it does not already exist
  5. create the file <rt-root>/local/html/Elements/UIPrefCookieCheck, with the contents shown below
  6. create the file <rt-root>/local/html/Elements/UIPrefSwitchView, with the contents shown below
  7. create the file <rt-root>/UIPref.diff, with the contents shown below
  8. apply the patch (assuming <rt-root> == /opt/rt3):
$ cd /opt/rt3
$ patch -p0 <UIPref.diff

<rt-root>/local/html/Elements/UIPrefCookieCheck

<%INIT>
 #***** fetch the cookie *****
 my(%cookies) = CGI::Cookie->fetch();
 my($cookiename) = "RT_USER_UI_PREF_" . $RT::rtname . "." . $ENV{'SERVER_PORT'};
 my($cookie) = $cookies{$cookiename};
 
 #***** default to basic mode *****
 my($mode) = 'Basic';
 $mode = $cookie->value() if $cookie;
 
 #***** if I have no cookie, set a cookie to the default *****
 if (! $cookie) {
     my($newcookie) = new CGI::Cookie(
         -name  => $cookiename,
         -value => $mode,
         -path  => $RT::WebPath,
         -secure => ($RT::WebSecureCookies ? 1 :0)
         -expires =>  '+1M',
     );
     $r->headers_out->{'Set-Cookie'} = $newcookie->as_string;
 }
 
 if (($mode eq 'Basic') && (! $viaSelfService)) {
     #***** I want basic, but was called under advanced *****
     $m->comp("/SelfService/index.html", %ARGS, SkipUIPrefCookieCheck => !0);
     $m->abort();
 }
 elsif (($mode eq 'Advanced') && ($viaSelfService)) {
     #***** I want advanced, but was called under basic *****
     $m->comp("/index.html", %ARGS, SkipUIPrefCookieCheck => !0);
     $m->abort();
 }
 </%INIT>
 
 <%ARGS>
 $viaSelfService => undef
 </%ARGS>
 

<rt-root>/local/html/Elements/UIPrefSwitchView

<%INIT>
 #***** fetch the cookie *****
 my(%cookies) = CGI::Cookie->fetch();
 my($cookiename) = "RT_USER_UI_PREF_" . $RT::rtname . "." . $ENV{'SERVER_PORT'};
 my($cookie) = $cookies{$cookiename};
 
 #***** default to basic mode *****
 my($mode) = 'Basic';
 $mode = $cookie->value() if $cookie;
 
 my($newmode) = ($mode eq 'Basic' ? 'Advanced' : 'Basic');
 
 my($newcookie) = new CGI::Cookie(
     -name  => $cookiename,
     -value => $newmode,
     -path  => $RT::WebPath,
     -secure => ($RT::WebSecureCookies ? 1 :0),
     -expires =>  '+1M',
     );
 
 $r->headers_out->{'Set-Cookie'} = $newcookie->as_string;
 
 if ($newmode eq 'Basic') {
     RT::Interface::Web::Redirect($RT::WebURL . "SelfService/index.html");
 }
 else {
     RT::Interface::Web::Redirect($RT::WebURL . "index.html");
 }
 
 $m->abort();
 </%INIT>
 
 <%ARGS>
 </%ARGS>
 

<rt-root>/UIPref.diff

--- share/html/Elements/Header	2007-02-14 13:10:35.000000000 -0500
+++ local/html/Elements/Header	2007-02-14 13:12:43.000000000 -0500
@@ -92,6 +92,14 @@
 %     if ($session{'CurrentUser'}->HasRight( Right => 'ModifySelf', Object => $RT::System )) {
     | <a href="<%$RT::WebPath%><%$Prefs%>"><&|/l&>Preferences</&></a>
 %     }
+%     if ($session{'CurrentUser'}->Privileged) {
+%        if ($viaSelfService) {
+    | <a href="<%$RT::WebPath%>/Elements/UIPrefSwitchView"><&|/l&>Advanced</&></a>
+%        }
+%        else {
+    | <a href="<%$RT::WebPath%>/Elements/UIPrefSwitchView"><&|/l&>Basic</&></a>
+%        }
+%     }
 % } else {
     <&|/l&>Not logged in.</&>
% }
@@ -104,6 +112,11 @@
% }

 <%INIT>
+# check the UI Pref cookie unless we've done so already
+if (($session{'CurrentUser'}) && ($session{'CurrentUser'}->Privileged) && (! $SkipUIPrefCookieCheck)) {
+   $m->comp("/Elements/UIPrefCookieCheck", %ARGS);
+}
+
 $r->headers_out->{'Pragma'} = 'no-cache';
 $r->headers_out->{'Cache-control'} = 'no-cache';

@@ -128,4 +141,7 @@
 $URL => undef
 $RSSAutoDiscovery => undef
 $onload => undef
+$viaSelfService => undef
+$SkipUIPrefCookieCheck => undef
 </%ARGS>
--- share/html/SelfService/Elements/Header	2007-02-14 13:11:09.000000000 -0500
+++ local/html/SelfService/Elements/Header	2007-02-14 13:12:03.000000000 -0500
@@ -43,5 +43,5 @@
 %# those contributions and any derivatives thereof.
 %#
 %# END BPS TAGGED BLOCK }}}
-<& /Elements/Header, %ARGS, Prefs => '/SelfService/Prefs.html' &>
+<& /Elements/Header, %ARGS, Prefs => '/SelfService/Prefs.html', viaSelfService => !0 &>
 <& /SelfService/Elements/Tabs, %ARGS &>


If you find any problems with it, let me know -- JoeCasadonte