[Rt-commit] r7899 - in rt/branches/3.7-EXPERIMENTAL-TUNIS: . bin
docs etc html/Admin/Elements html/Admin/Global
html/Admin/Queues html/Admin/Users html/Elements
html/Elements/CollectionAsTable html/Elements/RT__Template
html/Elements/RT__Ticket html/Elements/RT__User
html/NoAuth/css html/NoAuth/css/3.4-compat
html/NoAuth/css/3.5-default html/NoAuth/css/web2
html/NoAuth/images html/NoAuth/js html/Search
html/Search/Elements html/Ticket html/Ticket/Elements lib/RT
lib/RT/Action lib/RT/Crypt lib/RT/Interface t/mail t/web
jesse at bestpractical.com
jesse at bestpractical.com
Sun May 20 23:21:18 EDT 2007
Author: jesse
Date: Sun May 20 23:21:14 2007
New Revision: 7899
Added:
rt/branches/3.7-EXPERIMENTAL-TUNIS/docs/gnupg_integration.pod
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/ColumnMap
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__Template/
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__Template/ColumnMap
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__User/
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__User/ColumnMap
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/approvals.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/body.css (contents, props changed)
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/footer.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/forms.css (contents, props changed)
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/header.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/login.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/logo.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/main.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/misc.css (contents, props changed)
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/nav-left.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/nav.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/quickbar.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/ticket.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/titlebox.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/transactions.css (contents, props changed)
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/yui.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email/Auth/GnuPG.pm
- copied, changed from r7710, /rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email/Auth/GnuPGNG.pm
Removed:
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email/Auth/GnuPGNG.pm
Modified:
rt/branches/3.7-EXPERIMENTAL-TUNIS/ (props changed)
rt/branches/3.7-EXPERIMENTAL-TUNIS/bin/rt-mailgate.in
rt/branches/3.7-EXPERIMENTAL-TUNIS/etc/RT_Config.pm.in
rt/branches/3.7-EXPERIMENTAL-TUNIS/etc/initialdata
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Elements/EditTemplates
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Global/MyRT.html
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Queues/Modify.html
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Users/MyRT.html
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Users/index.html
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/CollectionAsTable/Header
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/CollectionAsTable/Row
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/PageLayout
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__Ticket/ColumnMap
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/3.4-compat/misc.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/3.5-default/misc.css
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/autohandler
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/images/autohandler
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/js/autohandler
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Build.html
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Elements/EditSearches
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Elements/PickCriteria
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Create.html
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Display.html
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Elements/ShowHistory
rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Update.html
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Action/SendEmail.pm
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Crypt/GnuPG.pm
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/CurrentUser.pm
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Date.pm
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email.pm
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Web.pm
rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/User_Overlay.pm
rt/branches/3.7-EXPERIMENTAL-TUNIS/t/mail/sendmail.t
rt/branches/3.7-EXPERIMENTAL-TUNIS/t/web/rights.t
Log:
r56126 at pinglin (orig r7711): ruz | 2007-04-27 19:57:30 -0400
r5165 at cubic-pc: cubic | 2007-04-28 03:40:21 +0400
* make number of tests not conditional
r56127 at pinglin (orig r7712): ruz | 2007-04-27 19:57:38 -0400
r5166 at cubic-pc: cubic | 2007-04-28 03:40:45 +0400
* add tests descriptions
r56128 at pinglin (orig r7713): ruz | 2007-04-27 19:57:46 -0400
r5167 at cubic-pc: cubic | 2007-04-28 03:57:31 +0400
* return back rights we revoke in the beginning, so we left system in the same state
r56129 at pinglin (orig r7714): ruz | 2007-04-27 20:50:25 -0400
r5171 at cubic-pc: cubic | 2007-04-28 04:50:30 +0400
* $entity->open not always returns true
r56130 at pinglin (orig r7715): ruz | 2007-04-28 15:24:31 -0400
r5173 at cubic-pc: cubic | 2007-04-28 20:21:33 +0400
* add diag output to the test
r56131 at pinglin (orig r7716): ruz | 2007-04-28 15:24:48 -0400
r5174 at cubic-pc: cubic | 2007-04-28 23:21:44 +0400
* pass Signer into GetPassphrase
r56132 at pinglin (orig r7717): ruz | 2007-04-28 15:25:18 -0400
r5175 at cubic-pc: cubic | 2007-04-28 23:22:18 +0400
* add docs about GnuPG
r56133 at pinglin (orig r7718): ruz | 2007-04-28 17:52:30 -0400
r5179 at cubic-pc: cubic | 2007-04-29 01:51:26 +0400
* add description of errors handling
r56134 at pinglin (orig r7719): ruz | 2007-04-28 19:59:56 -0400
r5181 at cubic-pc: cubic | 2007-04-29 03:51:37 +0400
* show crypto interfaces only if GnuPG is enabled
r56135 at pinglin (orig r7720): ruz | 2007-04-28 20:00:05 -0400
r5182 at cubic-pc: cubic | 2007-04-29 03:57:39 +0400
* do crypto only if ti's enabled
r56136 at pinglin (orig r7721): ruz | 2007-04-28 20:00:14 -0400
r5183 at cubic-pc: cubic | 2007-04-29 03:58:07 +0400
* add description of option
r56138 at pinglin (orig r7723): ruz | 2007-04-28 22:44:20 -0400
r5187 at cubic-pc: cubic | 2007-04-29 06:34:14 +0400
* update docs
r56141 at pinglin (orig r7724): jesse | 2007-04-29 15:27:28 -0400
r56069 at pinglin: jesse | 2007-04-25 12:41:34 -0400
* Respect the LogoURL variable
r56142 at pinglin (orig r7725): jesse | 2007-04-29 15:27:36 -0400
r56070 at pinglin: jesse | 2007-04-25 12:41:44 -0400
* Silence some warnings
r56143 at pinglin (orig r7726): jesse | 2007-04-29 15:27:53 -0400
r56140 at pinglin: jesse | 2007-04-29 15:18:04 -0400
* Added a pointer to the GnuPG crypt directory
r56149 at pinglin (orig r7727): jesse | 2007-04-29 16:47:02 -0400
r56148 at pinglin: jesse | 2007-04-29 16:46:52 -0400
* Crypt::GnuPG doc updates
r56158 at pinglin (orig r7728): ruz | 2007-04-29 16:53:31 -0400
r5189 at cubic-pc: cubic | 2007-04-30 00:21:33 +0400
* add pointer to GnuPG docs
r56159 at pinglin (orig r7729): ruz | 2007-04-29 17:14:26 -0400
r5190 at cubic-pc: cubic | 2007-04-30 00:52:13 +0400
* replace old Auth/GnuPG.pm with Auth/GnuPGNG.pm
r56280 at pinglin (orig r7742): ruz | 2007-05-02 11:12:54 -0400
r5202 at cubic-pc: cubic | 2007-05-02 17:51:20 +0400
* minor
** use warnings
** use 'print STDERR' instead of 'warn'
r56281 at pinglin (orig r7743): ruz | 2007-05-02 11:58:45 -0400
r5204 at cubic-pc: cubic | 2007-05-02 19:57:10 +0400
* mailgate with fixed memory footprint
r56295 at pinglin (orig r7744): ruz | 2007-05-02 17:32:21 -0400
r5206 at cubic-pc: cubic | 2007-05-02 23:43:47 +0400
* flush 'must_redo_search' flag after callback
r56296 at pinglin (orig r7745): ruz | 2007-05-02 17:32:37 -0400
r5207 at cubic-pc: cubic | 2007-05-02 23:46:29 +0400
* check that we've loaded a template before delete
r56297 at pinglin (orig r7746): ruz | 2007-05-02 17:32:51 -0400
r5208 at cubic-pc: cubic | 2007-05-02 23:46:58 +0400
* delete arguments we don't use
r56298 at pinglin (orig r7747): ruz | 2007-05-02 17:33:09 -0400
r5209 at cubic-pc: cubic | 2007-05-02 23:47:44 +0400
* minor, no functional changes
r56299 at pinglin (orig r7748): ruz | 2007-05-02 17:33:25 -0400
r5210 at cubic-pc: cubic | 2007-05-03 01:23:36 +0400
* add generic ColumnMap with __CheckBox__ and __RadioButton__
r56300 at pinglin (orig r7749): ruz | 2007-05-02 17:33:42 -0400
r5211 at cubic-pc: cubic | 2007-05-03 01:24:14 +0400
* switch to generic ColumnMap
r56301 at pinglin (orig r7750): ruz | 2007-05-02 17:33:52 -0400
r5212 at cubic-pc: cubic | 2007-05-03 01:26:11 +0400
* add ColumnMap for templates
r56302 at pinglin (orig r7751): ruz | 2007-05-02 17:34:00 -0400
r5213 at cubic-pc: cubic | 2007-05-03 01:29:51 +0400
* switch EditTemplates interfac to ColumnMaps
** backward compatible
** add DeleteTemplates argument (list of IDs) as replacement for 'DeleteTemplate-X'
r56306 at pinglin (orig r7755): ruz | 2007-05-02 22:48:22 -0400
r5222 at cubic-pc: cubic | 2007-05-03 06:46:41 +0400
* simple draft of column map for users
r56307 at pinglin (orig r7756): ruz | 2007-05-02 23:02:04 -0400
r5224 at cubic-pc: cubic | 2007-05-03 07:00:23 +0400
* update list of fields
r56308 at pinglin (orig r7757): ruz | 2007-05-02 23:09:06 -0400
r5226 at cubic-pc: cubic | 2007-05-03 07:07:28 +0400
* move things from ticket's column map into generic
r56313 at pinglin (orig r7762): ruz | 2007-05-03 22:38:35 -0400
r5229 at cubic-pc: cubic | 2007-05-04 06:36:22 +0400
* switch to CollectionList for users in admin UI
** paging
** sorting
** more info on one page
** save a state of the form between reloads
r56721 at pinglin (orig r7771): ruz | 2007-05-04 22:22:03 -0400
r5234 at cubic-pc: cubic | 2007-05-05 06:02:20 +0400
* minor
r56722 at pinglin (orig r7772): ruz | 2007-05-04 22:22:17 -0400
r5235 at cubic-pc: cubic | 2007-05-05 06:03:28 +0400
* log error when somebody tries to change things via CurrentUser
r56723 at pinglin (orig r7773): ruz | 2007-05-04 22:22:27 -0400
r5236 at cubic-pc: cubic | 2007-05-05 06:20:04 +0400
* update docs
r56730 at pinglin (orig r7776): jesse | 2007-05-06 02:38:19 -0400
r56069 at pinglin: jesse | 2007-04-25 12:41:34 -0400
* Respect the LogoURL variable
r56731 at pinglin (orig r7777): jesse | 2007-05-06 02:38:33 -0400
r56070 at pinglin: jesse | 2007-04-25 12:41:44 -0400
* Silence some warnings
r56732 at pinglin (orig r7778): jesse | 2007-05-06 03:18:39 -0400
r56140 at pinglin: jesse | 2007-04-29 15:18:04 -0400
* Added a pointer to the GnuPG crypt directory
r56148 at pinglin: jesse | 2007-04-29 16:46:52 -0400
* Crypt::GnuPG doc updates
r56729 at pinglin: jesse | 2007-05-06 02:37:57 -0400
* style hacking
r56871 at pinglin (orig r7836): clkao | 2007-05-12 06:18:32 -0400
Merge from 3.6-RELEASE:
r5571: jesse | 2006-07-18 00:40:48 +0800
r14052 at pinglin: jesse | 2006-07-17 11:23:30 -0400
* Started generating better caching headers for css, image and js files
r56872 at pinglin (orig r7837): clkao | 2007-05-12 06:30:06 -0400
The use line was missing from the merge.
r56873 at pinglin (orig r7838): clkao | 2007-05-12 09:52:23 -0400
Another missed use line.
r56874 at pinglin (orig r7839): ruz | 2007-05-12 11:05:10 -0400
* implement RFC2616 formatter
* update docs
r56875 at pinglin (orig r7840): ruz | 2007-05-12 11:06:32 -0400
* get rid of HTTP::Date requirement, replace it with our own date module
r56878 at pinglin (orig r7843): clkao | 2007-05-13 02:04:03 -0400
Fix MyRT homepage components configuration.
r56883 at pinglin (orig r7848): clkao | 2007-05-13 10:56:18 -0400
Make the (uniused) User->ResetPassword API actually work.
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/bin/rt-mailgate.in
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/bin/rt-mailgate.in (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/bin/rt-mailgate.in Sun May 20 23:21:14 2007
@@ -52,17 +52,21 @@
=cut
-
use strict;
+use warnings;
+
use Getopt::Long;
use LWP::UserAgent;
+use HTTP::Request::Common qw($DYNAMIC_FILE_UPLOAD);
+$DYNAMIC_FILE_UPLOAD = 1;
use constant EX_TEMPFAIL => 75;
+use constant BUFFER_SIZE => 8192;
my %opts;
GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "help", "debug", "extension=s", "timeout=i" );
-if ( $opts{help} ) {
+if ( $opts{'help'} ) {
require Pod::Usage;
import Pod::Usage;
pod2usage("RT Mail Gateway\n");
@@ -74,61 +78,63 @@
exit 1;
}
-my $ua = LWP::UserAgent->new();
-$ua->cookie_jar( { file => $opts{jar} } );
+my $ua = new LWP::UserAgent;
+$ua->cookie_jar( { file => $opts{'jar'} } ) if $opts{'jar'};
my %args = (
- queue => $opts{queue},
- action => $opts{action},
+ queue => $opts{'queue'},
+ action => ($opts{'action'} || 'correspond'),
SessionType => 'REST', # Surpress login box
);
-# Read the message in from STDIN
-$args{'message'} = do { local (@ARGV, $/); <> };
-unless ( $args{message} =~ /\S/ ) {
- print STDERR "$0: no message passed on STDIN!\n";
- exit 0;
-}
-
if ( ($opts{'extension'} || '') =~ /^(?:action|queue|ticket)$/i ) {
$args{ lc $opts{'extension'} } = $ENV{'EXTENSION'};
} elsif ( $opts{'extension'} && $ENV{'EXTENSION'} ) {
print STDERR "Value of the --extension argument is not action, queue or ticket"
- .", but environment variable EXTENSION is also defined. The former is ignored.";
+ .", but environment variable EXTENSION is also defined. The former is ignored.\n";
}
# add ENV{'EXTENSION'} as X-RT-MailExtension to the message header
if ( my $value = ( $ENV{'EXTENSION'} || $opts{'extension'} ) ) {
- # prepare value to avoid MIME format brakage
+ # prepare value to avoid MIME format breakage
# strip trailing newline symbols
$value =~ s/(\r*\n)+$//;
# make a correct multiline header field,
# with tabs in the beginning of each line
$value =~ s/(\r*\n)/$1\t/g;
- $args{'message'} = "X-RT-Mail-Extension: $value\n"
- . $args{'message'};
- print $args{'message'};
+ $opts{'headers'} .= "X-RT-Mail-Extension: $value\n";
}
-# Set up cookie here.
+# Read the message in from STDIN
+my %message = write_down_message();
+unless( $message{'filename'} ) {
+ $args{'message'} = [
+ undef, '',
+ 'Content-Type' => 'application/octet-stream',
+ Content => ${ $message{'content'} },
+ ];
+} else {
+ $args{'message'} = [
+ $message{'filename'}, '',
+ 'Content-Type' => 'application/octet-stream',
+ ];
+}
my $full_url = $opts{'url'}. "/REST/1.0/NoAuth/mail-gateway";
-warn "Connecting to $full_url" if $opts{'debug'};
-
-
+print STDERR "$0: connecting to $full_url\n" if $opts{'debug'};
-$ua->timeout(exists($opts{'timeout'}) ? $opts{'timeout'} : 180);
-my $r = $ua->post( $full_url, {%args} );
+$ua->timeout( exists( $opts{'timeout'} )? $opts{'timeout'}: 180 );
+my $r = $ua->post( $full_url, \%args, Content_Type => 'form-data' );
check_failure($r);
my $content = $r->content;
-warn $content if ($opts{debug});
+print STDERR $content ."\n" if $opts{'debug'};
if ( $content !~ /^(ok|not ok)/ ) {
# It's not the server's fault if the mail is bogus. We just want to know that
# *something* came out of the server.
- warn <<EOF;
+ print STDERR <<EOF;
RT server error.
The RT server which handled your email did not behave as expected. It
@@ -137,16 +143,19 @@
$content
EOF
-exit EX_TEMPFAIL;
-
+ exit EX_TEMPFAIL;
}
exit;
+END {
+ unlink $message{'filename'} if $message{'filename'};
+}
+
sub check_failure {
my $r = shift;
- return if $r->is_success();
+ return if $r->is_success;
# This ordinarily oughtn't to be able to happen, suggests a bug in RT.
# So only load these heavy modules when they're needed.
@@ -154,17 +163,62 @@
require HTML::FormatText;
my $error = $r->error_as_HTML;
- my $tree = HTML::TreeBuilder->new->parse($error);
+ my $tree = HTML::TreeBuilder->new->parse( $error );
$tree->eof;
# It'll be a cold day in hell before RT sends out bounces in HTML
- my $formatter = HTML::FormatText->new( leftmargin => 0,
- rightmargin => 50 );
- warn $formatter->format($tree);
- warn "This is $0 exiting because of an undefined server error" if ($opts{debug});
+ my $formatter = HTML::FormatText->new(
+ leftmargin => 0,
+ rightmargin => 50,
+ );
+ print STDERR $formatter->format( $tree );
+ print STDERR "\n$0: undefined server error\n" if $opts{'debug'};
exit EX_TEMPFAIL;
}
+sub write_down_message {
+ use File::Temp qw(tempfile);
+
+ my ($fh, $filename) = tempfile('rt-mailgate-XXXX', SUFIX => '.bin');
+ unless( $fh ) {
+ print STDERR "$0: couldn't create temp file, using memory\n";
+
+ my $message = \do { local (@ARGV, $/); <> };
+ unless ( $$message =~ /\S/ ) {
+ print STDERR "$0: no message passed on STDIN\n";
+ exit 0;
+ }
+ $$message = $opts{'headers'} . $$message if $opts{'headers'};
+ return ( content => $message );
+ }
+
+ binmode $fh;
+ binmode \*STDIN;
+
+ print $fh $opts{'headers'} if $opts{'headers'};
+
+ my $buf; my $empty = 1;
+ while(1) {
+ my $status = read \*STDIN, $buf, BUFFER_SIZE;
+ unless ( defined $status ) {
+ print STDERR "$0: couldn't read message: $!\n";
+ exit EX_TEMPFAIL;
+ } elsif ( !$status ) {
+ last;
+ }
+ $empty = 0 if $buf =~ /\S/;
+ print $fh $buf;
+ };
+ close $fh;
+
+ if ( $empty ) {
+ print STDERR "$0: no message passed on STDIN\n";
+ exit 0;
+ }
+ print STDERR "$0: temp file is '$filename'\n" if $opts{'debug'};
+ return (filename => $filename);
+}
+
=head1 SYNOPSIS
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/docs/gnupg_integration.pod
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/docs/gnupg_integration.pod Sun May 20 23:21:14 2007
@@ -0,0 +1 @@
+This topic described better in `perldoc lib/RT/Crypt/GnuPG.pm`.
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/etc/RT_Config.pm.in
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/etc/RT_Config.pm.in (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/etc/RT_Config.pm.in Sun May 20 23:21:14 2007
@@ -285,9 +285,17 @@
# }}}
# {{{ GnuPG
+# A full description of the (somewhat extensive) GnuPG integration can be found by
+# running the command
+#
+# perldoc RT::Crypt::GnuPG (or perldoc lib/RT/Crypt/GnuPG.pm from your RT install directory).
+
Set( %GnuPG,
Enable => 0,
+
+# Set OutgoingMessagesFormat to 'inline' to use inline encryption and
+# signatures instead of 'RFC' (GPG/MIME: RFC3156 and RFC1847) format.
OutgoingMessagesFormat => 'RFC', # Inline
);
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/etc/initialdata
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/etc/initialdata (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/etc/initialdata Sun May 20 23:21:14 2007
@@ -438,6 +438,20 @@
}
}}
},
+ { Queue => 0,
+ Name => "PasswordChange", # loc
+ Description =>
+ "Inform user that his password has been reset", # loc
+ Content => q{Subject: [{RT->Config->Get('rtname')}] Password reset
+
+Greetings,
+
+Someone at {$ENV{'REMOTE_ADDR'}} requested a password reset for you on {RT->Config->Get('WebURL')}
+
+Your new password is:
+ {$NewPassword}
+}
+ },
);
# }}}
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Elements/EditTemplates
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Elements/EditTemplates (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Elements/EditTemplates Sun May 20 23:21:14 2007
@@ -1,128 +1,80 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
-%# <jesse at bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work 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 this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/copyleft/gpl.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
<& /Elements/ListActions, actions => \@actions &>
<form method="get" action="Templates.html">
-<input type="hidden" class="hidden" name="id" value="<%$id%>" />
+<input type="hidden" class="hidden" name="id" value="<% $id %>" />
-% if ($Templates->Count == 0 ) {
+% unless ( $Templates->Count ) {
<p><i><&|/l&>(No templates)</&></i></p>
% } else {
-<table>
-<tr>
-<th>
+
<i><&|/l&>(Check box to delete)</&></i>
-</th>
-<th>
-</th>
-</tr>
-% my $count;
-% while (my $TemplateObj = $Templates->Next) {
-<tr>
-<td>
-<input type="checkbox" class="checkbox" name="DeleteTemplate-<%$TemplateObj->Id%>" value="1" />
-</td>
-<td>
-<a href="Template.html?Queue=<%$id%>&Template=<%$TemplateObj->id()%>">
-<strong><% loc($TemplateObj->Name) %></strong></a>
-<br /><% loc($TemplateObj->Description) %>
-</td>
-</tr>
-% }
-</table>
+<& /Elements/CollectionList,
+ OrderBy => 'id',
+ Order => 'ASC',
+ BaseURL => 'Templates.html?',
+ %ARGS,
+ DisplayFormat => '__CheckBox.{DeleteTemplates}__,'. $Format,
+ Format => $Format,
+ Collection => $Templates,
+ AllowSorting => 1,
+ PassArguments => [qw(Format Rows Page Order OrderBy FindDisabledQueues)],
+&>
% }
<& /Elements/Submit, Label => loc('Delete Template') &>
</form>
<%INIT>
-my $Templates = RT::Templates->new($session{'CurrentUser'});
-my $QueueObj = RT::Queue->new($session{'CurrentUser'});
-my @actions;
+my $dir_path = $m->request_comp->dir_path;
+$Format ||= qq{'<a href="__WebPath__$dir_path/Template.html?Queue=$id&Template=__id__">__id__</a>/TITLE:#'}
+ .qq{,'<a href="__WebPath__$dir_path/Template.html?Queue=$id&Template=__id__">__Name__</a>/TITLE:Name'}
+ .qq{,'__Description__'};
-if ($id) {
- $QueueObj->Load($id);
-}
+my $QueueObj = RT::Queue->new( $session{'CurrentUser'} );
+$QueueObj->Load( $id ) if $id;
-if ($QueueObj->id) {
- $Templates->LimitToQueue($id);
-}
-else {
- $Templates->LimitToGlobal();
-}
+my $Templates = RT::Templates->new($session{'CurrentUser'});
+if ( $QueueObj->id ) {
+ $Templates->LimitToQueue( $id );
+}
+else {
+ $Templates->LimitToGlobal;
+}
# Now let callbacks add their extra limits
$m->callback( %ARGS, Templates => $Templates );
+$Templates->RedoSearch;
-# {{{ deal with deleting existing templates
+# deal with deleting existing templates
+my @actions;
+# backwards compatibility, use DeleteTemplates array for this
foreach my $key (keys %ARGS) {
- # {{{ if we're trying to delete the template
- if ($key =~ /^DeleteTemplate-(\d+)/) {
- my $id = $1;
- my $TemplateObj = RT::Template->new($session{'CurrentUser'});
- $TemplateObj->Load($id);
+ next unless $key =~ /^DeleteTemplate-(\d+)/;
+ push @DeleteTemplates, $1;
+}
+
+foreach my $id( @DeleteTemplates ) {
+ my $TemplateObj = RT::Template->new( $session{'CurrentUser'} );
+ $TemplateObj->Load( $id );
+ unless ( $TemplateObj->id ) {
+ push @actions, loc("Couldn't load template #[_1]", $id);
+ next;
+ }
+
my ($retval, $msg) = $TemplateObj->Delete;
- if ($retval) {
- push @actions, loc("Template deleted");
+ if ( $retval ) {
+ push @actions, loc("Template #[_1] deleted", $id);
}
else {
- push @actions, $msg;
+ push @actions, $msg;
}
- }
- # }}}
}
-# }}}
</%INIT>
<%ARGS>
$id => 0
-$title => undef
-$Move => undef
-$Source => undef
-$Template => undef
+
+$Format => undef
+
+ at DeleteTemplates => ()
</%ARGS>
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Global/MyRT.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Global/MyRT.html (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Global/MyRT.html Sun May 20 23:21:14 2007
@@ -63,7 +63,7 @@
<%init>
my @actions;
-my @items = map { [ "component-$_", $_ ] } sort RT->Config->Get('HomepageComponents');
+my @items = map { [ "component-$_", $_ ] } sort @{ RT->Config->Get('HomepageComponents') };
my $sys = RT::System->new( $session{'CurrentUser'} );
# XXX: put this in savedsearches_to_portlet_items
for ( $m->comp( "/Search/Elements/SearchesForObject",
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Queues/Modify.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Queues/Modify.html (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Queues/Modify.html Sun May 20 23:21:14 2007
@@ -85,23 +85,27 @@
<td colspan="3"><input name="DefaultDueIn" value="<% ($Create) ? "" : $QueueObj->DefaultDueIn%>" /> <&|/l&>days</&>.</td>
</tr>
+% if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
<tr><td align="right"><input type="checkbox" class="checkbox" name="Sign" value="1" <% $QueueObj->Sign? 'checked': '' %> /></td>
<td><&|/l&>Sign by default</&></td>
<td align="right"><input type="checkbox" class="checkbox" name="Encrypt" value="1" <% $QueueObj->Encrypt? 'checked': '' %> /></td>
<td><&|/l&>Encrypt by default</&></td>
</tr>
+% }
<tr><td align="right"><input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> /></td>
<td colspan="3"><&|/l&>Enabled (Unchecking this box disables this queue)</&><br />
% $m->callback( %ARGS, QueueObj => $QueueObj, results => \@results );
</td></tr>
+% if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
% if ( my $email = $QueueObj->CorrespondAddress || RT->Config->Get('CorrespondAddress') ) {
<tr><td colspan="4"><& /Admin/Elements/ShowKeyInfo, Type => 'private', EmailAddress => $email &></td></tr>
% }
% if ( my $email = $QueueObj->CommentAddress || RT->Config->Get('CommentAddress') ) {
<tr><td colspan="4"><& /Admin/Elements/ShowKeyInfo, Type => 'private', EmailAddress => $email &></td></tr>
% }
+% }
</table>
<& /Elements/Submit, Label => loc('Save Changes') &>
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Users/MyRT.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Users/MyRT.html (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Users/MyRT.html Sun May 20 23:21:14 2007
@@ -83,7 +83,7 @@
my ($default_portlets) = RT::System->new($session{'CurrentUser'})->Attributes->Named('HomepageSettings');
my $portlets = $UserObj->Preferences('HomepageSettings', $default_portlets ? $default_portlets->Content : {});
-my %allowed_components = map {$_ => 1} RT->Config->Get('HomepageComponents');
+my %allowed_components = map {$_ => 1} @{RT->Config->Get('HomepageComponents')};
my @items;
push @items, map {["component-$_", $_]} sort keys %allowed_components;
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Users/index.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Users/index.html (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Admin/Users/index.html Sun May 20 23:21:14 2007
@@ -50,67 +50,87 @@
current_subtab => 'Admin/Users/',
Title => loc('Select a user') &>
-<h1><%$caption%></h1>
+<h1><% $caption %></h1>
<p><&|/l&>Select a user</&>:</p>
-<ul>
% unless ( $users->Count ) {
<li><em><&|/l&>No users matching search criteria found.</&></em></li>
-% }
+% } else {
-% my @ids;
-% while ( $user = $users->Next ) {
-% push @ids, $user->Id;
-<li><a href="Modify.html?id=<% $user->id %>"><& /Elements/ShowUser, User => $user &></a></li>
-%}
-</ul>
-% if ( my $ids = join(',', @ids) ) {
-<em>(<a href="<%RT->Config->Get('WebPath')%>/Download/Tabular/User/<% $ids %>/Users.tsv"><&|/l&>Download as a tab-delimited file</&></a>)</em><br />
+<& /Elements/CollectionList,
+ OrderBy => 'Name',
+ Order => 'ASC',
+ Rows => 100,
+ BaseURL => RT->Config->Get('WebPath') .'/Admin/Users/index.html?',
+ %ARGS,
+ Format => $Format,
+ Collection => $users,
+ AllowSorting => 1,
+ PassArguments => [qw(Format Rows Page Order OrderBy UserString UserOp UserField IdLike EmailLike FindDisabledUsers)],
+&>
+
+% my $ids = join ',', map $_->id, @{ $users->ItemsArrayRef };
+% if ( $ids ) {
+<div align="right"><em>
+(<a href="<%RT->Config->Get('WebPath')%>/Download/Tabular/User/<% $ids %>/Users.tsv">
+<&|/l&>Download as a tab-delimited file</&>
+</a>)</em></div>
% }
<br /><br />
-<form method="post" action="<% RT->Config->Get('WebPath') %>/Admin/Users/index.html">
+% }
+<form method="post" action="<% RT->Config->Get('WebPath') %>/Admin/Users/index.html">
+% foreach my $field( qw(Format Rows Page Order OrderBy) ) {
+% next unless defined $ARGS{ $field } && length $ARGS{ $field };
+<input type="hidden" name="<% $field %>" value="<% $ARGS{ $field } %>" />
+% }
<&|/l&>Find people whose</&> <& /Elements/SelectUsers &><br />
-<input type="checkbox" class="checkbox" name="FindDisabledUsers" value="1" /> <&|/l&>Include disabled users in search.</&>
+<input type="checkbox" class="checkbox" name="FindDisabledUsers" value="1" <% $FindDisabledUsers? 'checked="checked"': '' %> />
+<&|/l&>Include disabled users in search.</&>
<br />
<div align="right"><input type="submit" class="button" value="<&|/l&>Go!</&>" /></div>
</form>
<%INIT>
-my ($user, $caption);
-my $users = new RT::Users($session{'CurrentUser'});
+my $caption;
+my $users = RT::Users->new( $session{'CurrentUser'} );
+$users->{'find_disabled_rows'} = 1 if $FindDisabledUsers;
-if ($FindDisabledUsers) {
- $users->{'find_disabled_rows'} = 1;
-}
-
-if (length $UserString) {
+if ( length $UserString ) {
$caption = loc("Users matching search criteria");
- if ($UserField =~ /^CustomField-(\d+)/) {
- $users->LimitCustomField(
- CUSTOMFIELD => $1,
- OPERATOR => $UserOp,
- VALUE => $UserString,
- );
+ if ( $UserField =~ /^CustomField-(\d+)/ ) {
+ $users->LimitCustomField(
+ CUSTOMFIELD => $1,
+ OPERATOR => $UserOp,
+ VALUE => $UserString,
+ );
}
else {
- $users->Limit(
- FIELD => $UserField,
- OPERATOR => $UserOp,
- VALUE => $UserString,
- );
+ $users->Limit(
+ FIELD => $UserField,
+ OPERATOR => $UserOp,
+ VALUE => $UserString,
+ );
}
}
else {
$caption = loc("Privileged users");
$users->LimitToPrivileged;
}
+
+$Format ||= q{'<a href="__WebPath__/Admin/Users/Modify.html?id=__id__">__id__</a>/TITLE:#'}
+ .q{,'<a href="__WebPath__/Admin/Users/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
+ .q{,__RealName__, __EmailAddress__};
+
</%INIT>
<%ARGS>
+$Format => undef,
+
$UserString => undef
$UserOp => '='
$UserField => 'Name'
$IdLike => undef
$EmailLike => undef
+
$FindDisabledUsers => 0
</%ARGS>
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/CollectionAsTable/Header
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/CollectionAsTable/Header (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/CollectionAsTable/Header Sun May 20 23:21:14 2007
@@ -92,10 +92,10 @@
$m->out('<th class="collection-as-table">');
$title =~ s/^__(.*)__$/$1/o;
- my $tmp = $m->comp(
- "/Elements/$Class/ColumnMap",
- Name => $title,
- Attr => 'title',
+ my $tmp = $m->comp( '/Elements/ColumnMap',
+ Class => $Class,
+ Name => $title,
+ Attr => 'title',
);
unless( $tmp ) {
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/CollectionAsTable/Row
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/CollectionAsTable/Row (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/CollectionAsTable/Row Sun May 20 23:21:14 2007
@@ -88,9 +88,10 @@
my $col = $1;
unless ( exists $ColumnMap->{ $col } ) {
$ColumnMap->{ $col } = $m->comp(
- "/Elements/$Class/ColumnMap",
- Name => $col,
- Attr => 'value'
+ "/Elements/ColumnMap",
+ Class => $Class,
+ Name => $col,
+ Attr => 'value'
);
}
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/ColumnMap
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/ColumnMap Sun May 20 23:21:14 2007
@@ -0,0 +1,109 @@
+<%ARGS>
+$Class => 'RT__Ticket'
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+
+# This is scary and should totally be refactored -- jesse
+my $COLUMN_MAP = {
+ id => {
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id }
+ },
+
+ Created => {
+ attribute => 'Created',
+ title => 'Created',
+ value => sub { return $_[0]->CreatedObj->AsString }
+ },
+ CreatedRelative => {
+ attribute => 'Created',
+ title => 'Created',
+ value => sub { return $_[0]->CreatedObj->AgeAsString }
+ },
+ CreatedBy => {
+ attribute => 'CreatedBy',
+ title => 'Created By',
+ value => sub { return $_[0]->CreatorObj->Name }
+ },
+ LastUpdated => {
+ attribute => 'LastUpdated',
+ title => 'Last Updated',
+ value => sub { return $_[0]->LastUpdatedObj->AsString }
+ },
+ LastUpdatedRelative => {
+ attribute => 'LastUpdated',
+ title => 'Last Updated',
+ value => sub { return $_[0]->LastUpdatedObj->AgeAsString }
+ },
+ LastUpdatedBy => {
+ attribute => 'LastUpdatedBy',
+ title => 'Last Updated By',
+ value => sub { return $_[0]->LastUpdatedByObj->Name }
+ },
+
+
+ CheckBox => {
+ title => sub {
+ my $name = $_[1] || 'SelectedTickets';
+ my $checked = $m->request_args->{ $name .'All' }? 'checked="checked"': '';
+
+ return \qq{<input type="checkbox" name="${name}All" value="1" $checked
+ onclick="setCheckbox(this.form, '$name', this.checked)" />};
+ },
+ value => sub {
+ my $id = $_[0]->id;
+
+ my $name = $_[2] || 'SelectedTickets';
+ return \qq{<input type="checkbox" name="$name" value="$id" checked />}
+ if $m->request_args->{ $name . 'All'};
+
+ my $arg = $m->request_args->{ $name };
+ my $checked = '';
+ if ( $arg && ref $arg ) {
+ $checked = 'checked="checked"' if grep $_ == $id, @$arg;
+ }
+ elsif ( $arg ) {
+ $checked = 'checked="checked"' if $arg == $id;
+ }
+ return \qq{<input type="checkbox" name="$name" value="$id" $checked />}
+ },
+ },
+ RadioButton => {
+ title => \' ',
+ value => sub {
+ my $id = $_[0]->id;
+
+ my $name = $_[2] || 'SelectedTicket';
+ my $arg = $m->request_args->{ $name };
+ my $checked = '';
+ $checked = 'checked="checked"' if $arg && $arg == $id;
+ return \qq{<input type="radio" name="SelectedTicket" value="$id" $checked />};
+ },
+ },
+};
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => 1 );
+$m->callback( COLUMN_MAP => $COLUMN_MAP );
+
+# first deal with class specific things
+my $class_map = $m->comp("/Elements/$Class/ColumnMap", Attr => $Attr, Name => $Name );
+return $class_map if $class_map;
+
+# deal with the simple things from the generic map
+if ( $COLUMN_MAP->{$Name} ) {
+ return ( $COLUMN_MAP->{$Name}->{$Attr} );
+}
+# complex things
+elsif ( (my ($mainkey, $subkey) = $Name =~ /^(.*?)\.{(.+)}$/) && $COLUMN_MAP->{$1} ) {
+ return $COLUMN_MAP->{$mainkey}->{$Attr}
+ unless ref $COLUMN_MAP->{$mainkey}->{$Attr} eq 'CODE';
+
+ return sub { $COLUMN_MAP->{$mainkey}->{$Attr}->( @_, $subkey ) };
+}
+
+</%INIT>
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/PageLayout
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/PageLayout (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/PageLayout Sun May 20 23:21:14 2007
@@ -60,7 +60,7 @@
<div id="header">
<h1><% $title %></h1>
-
+<div id="page-navigation">
% my $sep = 0;
% my $postsep = 0;
% my $count = 0;
@@ -155,7 +155,7 @@
</ul>
% }
</div>
-
+</div>
<div id="body">
% $m->callback( %ARGS, CallbackName => 'BeforeBody' );
% $m->flush_buffer(); # we've got the page laid out, let's flush the buffer;
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__Template/ColumnMap
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__Template/ColumnMap Sun May 20 23:21:14 2007
@@ -0,0 +1,71 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+our $TEMPLATE_COLUMN_MAP = {
+ id => {
+ title => '#',
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+};
+
+foreach my $col(qw(Name Description)) {
+ $TEMPLATE_COLUMN_MAP->{ $col } = { attribute => $col, value => sub { return $_[0]->$col() } };
+}
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $TEMPLATE_COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return undef unless $TEMPLATE_COLUMN_MAP->{ $Name };
+return $TEMPLATE_COLUMN_MAP->{ $Name }->{ $Attr };
+</%INIT>
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__Ticket/ColumnMap
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__Ticket/ColumnMap (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__Ticket/ColumnMap Sun May 20 23:21:14 2007
@@ -102,11 +102,6 @@
attribute => 'Owner',
value => sub { return $_[0]->OwnerObj->Name }
},
- id => {
- attribute => 'id',
- align => 'right',
- value => sub { return $_[0]->id }
- },
Status => {
attribute => 'Status',
value => sub { return loc($_[0]->Status) }
@@ -196,16 +191,6 @@
attribute => 'Started',
value => sub { return $_[0]->StartedObj->AgeAsString }
},
- CreatedRelative => {
- title => 'Created',
- attribute => 'Created',
- value => sub { return $_[0]->CreatedObj->AgeAsString }
- },
- LastUpdatedRelative => {
- title => 'Last Updated',
- attribute => 'LastUpdated',
- value => sub { return $_[0]->LastUpdatedObj->AgeAsString }
- },
ToldRelative => {
title => 'Told',
attribute => 'Told',
@@ -236,25 +221,6 @@
attribute => 'Started',
value => sub { return $_[0]->StartedObj->AsString }
},
- Created => {
- attribute => 'Created',
- value => sub { return $_[0]->CreatedObj->AsString }
- },
- CreatedBy => {
- attribute => 'CreatedBy',
- title => 'Created By',
- value => sub { return $_[0]->CreatorObj->Name }
- },
- LastUpdated => {
- attribute => 'LastUpdated',
- title => 'Last Updated',
- value => sub { return $_[0]->LastUpdatedObj->AsString }
- },
- LastUpdatedBy => {
- attribute => 'LastUpdatedBy',
- title => 'Last Updated By',
- value => sub { return $_[0]->LastUpdatedByObj->Name }
- },
Told => {
attribute => 'Told',
value => sub { return $_[0]->ToldObj->AsString }
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__User/ColumnMap
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Elements/RT__User/ColumnMap Sun May 20 23:21:14 2007
@@ -0,0 +1,73 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+<%ARGS>
+$Name
+$Attr => undef
+</%ARGS>
+<%ONCE>
+our $USER_COLUMN_MAP = {
+ id => {
+ title => '#',
+ attribute => 'id',
+ align => 'right',
+ value => sub { return $_[0]->id },
+ },
+};
+
+foreach my $col(qw(Name RealName NickName EmailAddress Organization
+ HomePhone WorkPhone MobilePhone PagerPhone Address1 Address2 City State Zip Country))
+{
+ $USER_COLUMN_MAP->{ $col } = { attribute => $col, value => sub { return $_[0]->$col() } };
+}
+
+</%ONCE>
+<%INIT>
+$m->callback( COLUMN_MAP => $USER_COLUMN_MAP, CallbackName => 'ColumnMap', CallbackOnce => 1 );
+return undef unless $USER_COLUMN_MAP->{ $Name };
+return $USER_COLUMN_MAP->{ $Name }->{ $Attr };
+</%INIT>
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/3.4-compat/misc.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/3.4-compat/misc.css (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/3.4-compat/misc.css Sun May 20 23:21:14 2007
@@ -47,3 +47,32 @@
%# END BPS TAGGED BLOCK }}}
.oddline { background: white; }
.evenline { background: #cecfef; }
+
+
+#comp-Search-Build .titlebox-content {
+ padding-left: 0.7em;
+ padding-right: 0.3em;
+}
+
+#editsearches {
+ width: 55%;
+ float:right;
+ text-align: left;
+ padding-right: 1em;
+}
+
+#editsearches .titlebox-content {
+ padding: 1em;
+}
+
+
+#editquery {
+ width: 40%;
+ float: left;
+ padding-left: 1em;
+}
+
+#pick-criteria {
+ clear: both;
+}
+
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/3.5-default/misc.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/3.5-default/misc.css (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/3.5-default/misc.css Sun May 20 23:21:14 2007
@@ -117,6 +117,30 @@
padding-right: 0.3em;
}
+
+
+#editsearches {
+ width: 55%;
+ float:right;
+ text-align: left;
+ padding-right: 1em;
+}
+
+#editsearches .titlebox-content {
+ padding: 1em;
+}
+
+
+#editquery {
+ width: 40%;
+ float: left;
+ padding-left: 1em;
+}
+
+#pick-criteria {
+ clear: both;
+}
+
.shredder-form { line-height: 3em }
.shredder-form span { margin-left: 1em; margin-right: 1em }
.shredder-help {
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/autohandler
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/autohandler (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/autohandler Sun May 20 23:21:14 2007
@@ -46,6 +46,7 @@
%#
%# END BPS TAGGED BLOCK }}}
<%init>
+RT::Interface::Web::StaticFileHeaders();
$r->content_type('text/css');
$m->call_next();
return();
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/approvals.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/approvals.css Sun May 20 23:21:14 2007
@@ -0,0 +1,97 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.approval {
+ margin-bottom: 3em;
+ padding: 0 0 1em 0;
+ border: 1px solid #069;
+}
+
+.approval .name {
+ background: #069;
+ color: white;
+ font-size: 1.1em;
+ padding: 0.2em 0 0.4em 0.2em;
+}
+
+#body .approval .name :link, #body .approval .name :visited {
+ color: white;
+}
+
+.approval .originating-ticket {
+ margin: 0.5em;
+ border: 1px solid #aaa;
+}
+
+.approval .originating-ticket .link {
+ display: block;
+ background: #aaa;
+ padding: 0.2em 0 0.4em 0.2em;
+}
+
+.approval .originating-ticket .info {
+ padding: 0.5em;
+}
+
+#body .approval .originating-ticket .link :link,
+#body .approval .originating-ticket .link :visited {
+ color: black;
+}
+
+.approval .form {
+ margin: 1em 0.5em 0.5em 0.5em;
+}
+
+.approval .form .action, .approval .form .notes {
+ float: left;
+ margin-left: 1em;
+}
+
+.approval .form .action { padding-top: 1em; }
+
+.approval .form .action label { font-weight: normal; }
+.approval .form .notes label { display: block; }
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/body.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/body.css Sun May 20 23:21:14 2007
@@ -0,0 +1,78 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#body {
+ border-left: 10px solid #ccc;
+ border-right: 10px solid #ccc;
+
+}
+
+#body {
+ clear: both;
+}
+
+#body h1 {
+ border-bottom: 1px dotted #069;
+ padding-left: 0.5em;
+}
+
+#body h1, #body h2, #body h3, #body h4, #body h5, #body h6 {
+ color: #930;
+ font-weight: bold;
+}
+
+#body :link { color: #069; }
+
+#body :link, #body :visited {
+ font-weight: bold;
+ text-decoration: none;
+}
+
+#body :link:hover, #body :visited:hover {
+ text-decoration: underline;
+}
+
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/footer.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/footer.css Sun May 20 23:21:14 2007
@@ -0,0 +1,66 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+
+
+#footer {
+ border-top: 1px solid black;
+ font-size: 1em;
+ text-align: right;
+ padding: 1em;
+ margin-top: 3em;
+ color: #000;
+}
+
+#footer a {
+ color: #000;
+
+}
+
+p#time {
+ display: none;
+}
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/forms.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/forms.css Sun May 20 23:21:14 2007
@@ -0,0 +1,129 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+form input, form select, form .combobox {
+ border-top: 1px solid #ddd;
+ border-left: 1px solid #ddd;
+ border-bottom: 2px solid #999;
+ border-right: 2px solid #999;
+ padding: 0.25em;
+ background: #eee;
+ font-weight: bold;
+ font-size: 1em;
+ margin: 0.5em 0.5em 0 0.5em;
+}
+
+
+form input.checkbox, form input.radio {
+ border: none;
+ padding: 0;
+}
+
+/* form .entry input, form .value input */
+
+.label, form label, .labeltop {
+ font-weight: bold;
+}
+
+.label-comment {
+ font-weight: normal;
+ font-size: 0.9em;
+}
+
+.labeltop {
+ vertical-align: top;
+}
+
+.submit {
+ font-weight: bold;
+ color: #a00;
+ font-size: 1.1em;
+ padding: 0.3em 1.5em 0 1.5em;
+ border-top: 1px solid #930;
+ margin: 1.5em 0 2.5em 0;
+}
+
+.submit .buttons { float: right; }
+.submit .extra-buttons { float: left; }
+.submit .button { font-size: 0.9em; }
+.submit .submit-clear { display: none; }
+
+.input-row {
+ clear: both;
+ padding: 0.25em;
+}
+
+%# ComboBox styles... some properties like height and width must be dynamically
+%# set in the JS (at least for now).
+.comibobox {
+ border: 2px inset #069;
+ padding-left: 0.5em;
+ padding-bottom: 0.1em;
+}
+
+.combobox .combo-button {
+ padding: 0 2px 0 2px;
+ margin: 0;
+ background: ButtonFace;
+ color: ButtonText;
+ border: 2px outset ButtonHighlight;
+ cursor: default;
+ font-size: 8pt;
+}
+
+.combobox .combo-text {
+ border: none;
+ margin: 0;
+ padding: 0;
+}
+
+.combobox .combo-list {
+ z-index: 200;
+ border: 10px solid red;
+ background: red;
+}
+
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/header.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/header.css Sun May 20 23:21:14 2007
@@ -0,0 +1,112 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+
+
+body {
+ background: #ccc;
+ text-align: left;
+ padding:0;
+}
+
+div#logo {
+ width: 100%;
+ height: 4em;
+ background-color:#999;
+
+}
+
+div#logo img {
+ float: left;
+ padding: 0em;
+ border: 0;
+}
+
+div#logo span {
+ clear: both;
+ float: left;
+}
+
+
+#header h1 {
+ color: #930;
+ padding-top: 1em;
+ padding-left: .25em;
+ font-weight: bold;
+ text-align: left;
+ font-size: 2em;
+}
+
+#header ul {
+ margin: 0;
+ padding: 0;
+ color: #eee;
+ float: left;
+}
+
+#header :link,
+#header :visited
+{
+ color: white;
+ text-decoration: none;
+}
+
+#header :link.selected,
+#header :visited.selected,
+#header :link:hover,
+#header :visited:hover
+{
+ color: #fc6; /*#ff6;*/
+}
+
+#header :link.selected,
+#header :visited.selected
+{
+ font-weight: bold;
+ text-decoration: underline;
+}
+
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/login.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/login.css Sun May 20 23:21:14 2007
@@ -0,0 +1,99 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#login-box {
+ width: 50%;
+ margin: 0 auto 4em auto;
+}
+
+%# More rules only IE will recognize (but are still valid!) to correct for
+%# IE's incorrect handling of auto margins and the W3C defined behavior.
+%# text-align will affect a block element in IE, therefore centering it, like
+%# left and right auto margins *should*
+
+
+#login-box {
+
+ padding-top: 4em;
+
+}
+
+/*
+
+* html #login-box {
+ text-align: center;
+}
+
+
+
+%# ... and align the text back the way it should be
+* html #login-box .titlebox {
+ text-align: left;
+}
+
+#login-box .input-row {
+ padding: 0.5em;
+}
+
+#login-box .input-row .label {
+ width: 8em;
+ float: left;
+ text-align: right;
+ padding: 0.2em 1em 0 0;
+}
+
+#login-box .input-row .input {
+ float: left;
+}
+
+#login-box .button-row {
+ clear: both;
+ padding: 0.5em;
+ float: right;
+}
+
+*/
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/logo.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/logo.css Sun May 20 23:21:14 2007
@@ -0,0 +1,48 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/main.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/main.css Sun May 20 23:21:14 2007
@@ -0,0 +1,62 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+ at import "yui.css";
+ at import "misc.css";
+ at import "login.css";
+ at import "logo.css";
+ at import "quickbar.css";
+ at import "body.css";
+ at import "approvals.css";
+ at import "titlebox.css";
+ at import "forms.css";
+ at import "ticket.css";
+ at import "transactions.css";
+ at import "nav.css";
+ at import "header.css";
+ at import "footer.css";
+
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/misc.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/misc.css Sun May 20 23:21:14 2007
@@ -0,0 +1,149 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+
+.hide, .hidden { display: none !important; }
+
+#body.calpopup {
+ margin-left: 2em;
+}
+
+.calendar {
+ text-align: center;
+ margin: 2em 0 0 0;
+}
+
+.calendar td, .calendar th { padding: 0.1em 0.25em 0.1em 0.25em; }
+
+.calendar caption .month {
+ padding: 0 1em 0 1em;
+ font-size: 1.5em;
+}
+
+.evenline { background-color: white; }
+.oddline { background-color: #ddd; }
+
+td {
+ padding: 0.1em 0.5em 0.1em 0.5em;
+}
+
+.clear { clear: both; }
+
+ul.action-results {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+#comp-Search-Build body {
+}
+
+div.autocomplete {
+ position: absolute;
+ background-color: white;
+ border: 1px solid #888;
+ margin: 0px;
+ padding: 0px;
+}
+div.autocomplete ul {
+ list-style-type: none;
+ margin: 0px;
+ padding: 0px;
+}
+div.autocomplete ul li.selected {
+ background-color: #0088cc;
+ color: #eee;
+}
+div.autocomplete ul li {
+ list-style-type: none;
+ display: block;
+ margin: 0;
+ padding: 2px;
+}
+
+#comp-Search-Build .titlebox-content {
+ padding-left: 0.7em;
+ padding-right: 0.3em;
+}
+
+#editsearches {
+ width: 55%;
+ float:right;
+ text-align: left;
+ padding-right: 1em;
+}
+
+#editsearches .titlebox-content {
+ padding: 1em;
+}
+
+
+#editquery {
+ width: 40%;
+ float: left;
+ padding-left: 1em;
+}
+
+#pick-criteria {
+ clear: both;
+}
+
+.shredder-form { line-height: 3em }
+.shredder-form span { margin-left: 1em; margin-right: 1em }
+.shredder-help {
+ background-color: #ffe99d;
+ margin: 1em 2em;
+ padding: 1em;
+ border-style: solid;
+ border-color: black;
+ border-width: 1px;
+}
+#shredder-select-plugin { border-style: solid; border-color: black; border-width: 1px }
+#shredder-plugin-results { border-style: solid; border-color: black; border-width: 1px; margin-top: 1em; }
+#shredder-plugin-results input { margin-left: 1em; }
+
+.pod-sequence-C { background-color: #eee }
+
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/nav-left.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/nav-left.css Sun May 20 23:21:14 2007
@@ -0,0 +1,47 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/nav.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/nav.css Sun May 20 23:21:14 2007
@@ -0,0 +1,143 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+#nav {
+ float: left;
+ clear: both;
+ height: 4em;
+ width: 100%;
+ background: #999;
+ padding-top: 1em;
+}
+
+#nav ul {
+ float: left;
+ clear: left;
+ color: #eee;
+ font-weight: bold;
+
+ margin: 0;
+ padding: 0;
+
+}
+
+#nav li ul {
+}
+
+/*
+%# We need the extra padding above for browsers where we display the arrows
+%# but those don't work in IE so we don't want as much spacing
+%#
+%# IE wrongly matches the selector below even though there isn't an element
+%# above <html> in the doc tree
+*/
+* html #nav li ul {
+ margin-top: 0.25em;
+}
+
+#nav li {
+ display: inline;
+ margin-bottom: 1em;
+ padding: 0.2em 0 0.4em 0;
+}
+
+
+#nav ul div div.wrapper {
+ text-align: left;
+ padding: 0.2em 1em 0.4em 0;
+ margin-left:0;
+}
+
+
+#nav :link,
+#nav :visited
+{
+ color: #ececec;
+ text-decoration: none;
+}
+
+#nav :link.selected,
+#nav :visited.selected,
+#nav :link:hover,
+#nav :visited:hover
+{
+ color: #fc6; /*#ff6;*/
+}
+
+#nav :link.selected,
+#nav :visited.selected
+{
+ text-decoration: underline;
+}
+
+
+
+
+#header #page-menu {
+ width: 100%;
+ height: 3em;
+ margin-top: -3.5em;
+ text-align: left;
+ padding-right: 0em;
+ float: left;
+ clear: both;
+ background: #999;
+}
+
+#header ul li {
+ display: inline;
+}
+
+
+
+#actions-menu div div div{
+ position: relative;
+ right: 0;
+ top: -2em;
+ float: right;
+ margin-right: 2em;
+}
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/quickbar.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/quickbar.css Sun May 20 23:21:14 2007
@@ -0,0 +1,105 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+
+#quickbar {
+ position: absolute;
+ right: 0;
+ top: 0;
+
+}
+#quickbar #quick-personal {
+ display: inline;
+ color: #fff;
+ padding: 0.5em 1em 0 0;
+ float: right;
+}
+
+#quickbar #quick-personal span {
+ font-weight: bold;
+}
+
+#quickbar #quick-personal :link,
+#quickbar #quick-personal :visited
+{
+ color: #fff;
+ font-weight: bold;
+}
+
+#quickbar #quick-personal :link:hover,
+#quickbar #quick-personal :visited:hover
+{
+ color: black;
+}
+
+#quickbar #topactions {
+ float: right;
+ clear: right;
+
+ font-size: 0.9em;
+ padding-right: 1em;
+}
+
+#quickbar #topactions form {
+ display: inline;
+ margin-left: 1em;
+}
+
+#quickbar #topactions form .button {
+ padding: 0 2px 0 2px;
+ font-size: 1em;
+ margin: 0;
+}
+
+#quickbar #topactions form .field {
+ padding: 1px;
+ font-size: 0.9em;
+}
+
+#quickbar #topactions form input.field {
+ padding: 3px;
+}
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/ticket.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/ticket.css Sun May 20 23:21:14 2007
@@ -0,0 +1,57 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.ticket-info-cfs .label {
+ vertical-align: top;
+}
+
+.ticket-info-cfs ul {
+ margin: 0;
+ padding: 0;
+ margin-left: 0.5em;
+ list-style: none;
+}
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/titlebox.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/titlebox.css Sun May 20 23:21:14 2007
@@ -0,0 +1,198 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+.titlebox {
+ margin-bottom: 1em;
+}
+
+.titlebox .titlebox-content {
+ margin-top: -1px;
+ background: #fff;
+ /*padding: 1em 2em 0.5em 2em;*/
+ margin: 0;
+ /*margin: 1em 2em 0.5em 2em;*/
+}
+
+
+
+%# TRS: I wish there was a more elegant way to do this... I essentially need to
+%# select all elements X that do NOT have element Y as a descendant... which I can
+%# fake with the child selector of CSS2, but IE is stupid and does not support that.
+
+
+.titlebox {
+ padding:-right 3px;
+ border-bottom: 3px solid #666;
+ border-right: 3px solid #666;
+ border-left: 1px solid #ccc;
+ border-top: 1px solid #ccc;
+}
+
+
+
+
+.titlebox-content th {
+ background-color: #fff;
+ font-size: 80%;
+ font-weight: bold;
+ text-align: center;
+ padding-top: 0.5em;
+ padding-bottom: 0.5em;
+ border: 1px solid #aaa;
+ border-top:0;
+
+}
+
+.titlebox-content td {
+ text-align:left;
+
+}
+
+#login-box .titlebox .titlebox-content .button
+{
+}
+
+
+
+
+.titlebox .titlebox-title {
+ position: relative;
+ font-weight: bold;
+ color: #930;
+ font-size: 1.2em;
+ padding: 0.2em;
+ padding-left: 3em;
+ background-color: #ddd;
+ text-align: left;
+ border-bottom: 1px solid #ccc;
+}
+
+.titlebox .titlebox-title .right {
+ position: absolute;
+ top: 0.25em;
+ right: 0.5em; font-size: 0.8em;
+ color: #888;
+}
+
+.titlebox .titlebox-title .right .selected { color: #930; }
+
+#body .titlebox .titlebox-title .right :link,
+#body .titlebox .titlebox-title .right :visited {
+ color: #888;
+}
+
+#body .titlebox .titlebox-title .right :link:hover,
+#body .titlebox .titlebox-title .right :visited:hover {
+ color: #930;
+}
+
+.titlebox .titlebox-title .widget a {
+ display: block;
+ padding-top: 1em;
+ width: 2em;
+
+ background: url(<%RT->Config->Get('WebImagesURL')%>/css/rollup-arrow.gif) no-repeat center center;
+
+ margin: 0;
+ text-indent: -9999px;
+
+ position: absolute;
+ top: 0.4em;
+ left: 0.75em;
+ float: left;
+
+%# Basically IE5 will see those crazy backslashes and prematurely end the rule.
+%# This allows values for IE 5's broken box model to be set before the hack and
+%# the real values to be set after. We also set voice-family back to whatever it
+%# would have been on the off chance it's actually used.
+ /* WIN IE5 hack */
+ height: 7px;
+ voice-family: "\"}\"";
+ voice-family: inherit;
+ height: 0;
+ overflow: hidden;
+}
+
+%# IE also doesn't support the child selector ">", so we can use it to set values
+%# that only other browsers will see (in this case, playing nice with Opera, which
+%# also suffers from the backslash hack above.)
+html>body .titlebox .titlebox-title .widget a {
+ height: 0;
+ overflow: hidden;
+}
+
+%# Compensates for IE's bad box model by hiding this rule from other browsers
+* html .titlebox .titlebox-title .widget a {
+ background-position: center 0.3em;
+ left: -3.5em;
+}
+
+.titlebox.rolled-up .titlebox-title .widget a {
+ background-image: url(<%RT->Config->Get('WebImagesURL')%>/css/rolldown-arrow.gif);
+}
+
+#body .titlebox .titlebox-title :link,
+#body .titlebox .titlebox-title :visited
+{
+ color: #930;
+ text-decoration: none;
+}
+
+#body .titlebox .titlebox-title :link:hover,
+#body .titlebox .titlebox-title :visited:hover
+{
+ text-decoration: underline;
+}
+
+.titlebox .titlebox-content hr.clear {
+ display: none;
+ visibility: hidden;
+}
+.titlebox .titlebox-content table{
+ padding-left: 1em;
+}
+
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/transactions.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/transactions.css Sun May 20 23:21:14 2007
@@ -0,0 +1,160 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC
+%# <jesse at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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 this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/copyleft/gpl.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+
+.history .titlebox, .summary .titlebox {
+ margin: 1em;
+}
+.history .titlebox, .summary .titlebox table table {
+ margin: 1em;
+
+}
+.ticket-transaction {
+ padding-bottom: 0.25em;
+ padding-top: 0.25em;
+ border-bottom: 1px solid #ddd;
+ border-right: 3px solid #069;
+}
+
+#ticket-history .ticket-transaction {
+ border-bottom-color: #ccc;
+}
+
+.ticket-transaction.even {
+ background: #eee;
+}
+
+.ticket-transaction .date {
+ font-size: 0.9em;
+ width: 10em;
+}
+
+.ticket-transaction .description {
+ font-weight: bold;
+ text-align: left;
+ font-size: 0.9em;
+}
+
+.ticket-transaction .actions {
+ text-align: right;
+ font-weight: bold;
+}
+
+.ticket-transaction .type {
+ background: #888;
+ width: 1.5em;
+ color: white;
+ text-align: center;
+ font-size: 1.1em;
+}
+
+#body .ticket-transaction .type :link,
+#body .ticket-transaction .type :visited
+{
+ color: white;
+ font-weight: normal;
+}
+
+.ticket-transaction.basics { border-color: #b32; }
+.ticket-transaction.basics .type { background: #b32; }
+.ticket-summary .ticket-info-basics .titlebox { border-left: 0.5em solid #b32; }
+
+.ticket-transaction.reminders { border-color: #561; }
+.ticket-transaction.reminders .type { background: #5612; }
+.ticket-summary .ticket-info-reminders .titlebox { border-left: 0.5em solid #561; }
+
+.ticket-transaction.people { border-color: #48c; }
+.ticket-transaction.people .type { background: #48c; }
+.ticket-summary .ticket-info-people .titlebox { border-left: 0.5em solid #48c; }
+
+%# light green - #ad8
+.ticket-transaction.links { border-color: #316531; }
+.ticket-transaction.links .type { background: #316531; }
+.ticket-summary .ticket-info-links .titlebox { border-left: 0.5em solid #316531; }
+
+%# orange - #d71
+.ticket-transaction.dates { border-color: #633063; }
+.ticket-transaction.dates .type { background: #633063; }
+.ticket-summary .ticket-info-dates .titlebox { border-left: 0.5em solid #633063; }
+
+.ticket-transaction.message { border-color: #069; }
+.ticket-transaction.message .type { background: #069; }
+
+.ticket-transaction.other { border-color: #888; }
+
+.ticket-transaction td .message-header-value {
+ padding: 0;
+}
+
+.ticket-transaction td .message-header-key {
+ padding: 0 1em 0 1.5em;
+ font-weight: bold;
+}
+
+.ticket-transaction .downloadattachment {
+ float: right;
+ font-size: 0.9em;
+ text-align: right;
+}
+
+.ticket-transaction .messagebody {
+ clear: both;
+ padding-left: 3em;
+ padding-bottom: 1em;
+}
+
+%# Message stanza colors
+.message-stanza-depth-0 { color: #000; }
+.message-stanza-depth-1 { color: #600; }
+.message-stanza-depth-2 { color: #060; }
+.message-stanza-depth-3 { color: #006; }
+.message-stanza-depth-4 { color: #ccc; }
+.message-stanza-depth-5 { color: #0c0; }
+.message-stanza-depth-6 { color: #00c; }
+.message-stanza-depth-7 { color: #f00; }
+.message-stanza-depth-8 { color: #0f0; }
+.message-stanza-depth-9 { color: #00f; }
Added: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/yui.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/css/web2/yui.css Sun May 20 23:21:14 2007
@@ -0,0 +1,13 @@
+
+/*
+Copyright (c) 2007, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.2.2
+*/
+/*reset.css*/body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;}
+/*fonts.css*/body{font:13px arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}select, input, textarea {font:99% arial,helvetica,clean,sans-serif;}pre, code {font:115% monospace;*font-size:100%;}body * {line-height:1.22em;}
+/*grids.css*/body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.3em;min-width:750px;}#doc2{width:73.074em;*width:71.313em;min-width:950px;}#doc3{margin:auto 10px;width:auto;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.3207em;*width:12.0106em;}.yui-t1 #yui-main .yui-b{margin-left:13.3207em;*margin-left:13.0106em;}.yui-t2 .yui-b{float:left;width:13.8456em;*width:13.512em;}.yui-t2 #yui-main .yui-b{margin-left:14.8456em;*margin-left:14.512em;}.yui-t3 .yui-b{float:left;width:23.0759em;*width:22.52em;}.yui-t3 #yui-main .yui-b{margin-left:24.0759em;*margin-left:23.52em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.512em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.512em;}.yui-t5 .yui-b{float:right;width:18.4608em;*width:18.016em;}.yui-t5 #yui-main .yui-b{margin-right:19.4608em;*margin-right:19.016em;}.yui-t6 .yui-b{float:right;width:23.0759em;*width:22.52em;}.yui-t6 #yui-main .yui-b{margin-right:24.0759em;*margin-right:23.52em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-g .yui-u,.yui-g .yui-g,.yui-gc .yui-u,.yui-gc .yui-g .yui-u,.yui-ge .yui-u,.yui-gf .yui-u{float:right;display:inline;}.yui-g div.first,.yui-gc div.first,.yui-gc div.first div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g{width:49.1%;}.yui-g .yui-g .yui-u,.yui-gc .yui-g .yui-u{width:48.1%;}.yui-gb .yui-u,.yui-gc .yui-u,.yui-gd .yui-u{float:left;margin-left:2%;*margin-left:1.895%;width:32%;}.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge .yui-u{width:24%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-gf div.first{width:24%;}.yui-ge div.first{width:74.2%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
+
+
+
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/images/autohandler
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/images/autohandler (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/images/autohandler Sun May 20 23:21:14 2007
@@ -1,11 +1,12 @@
<%INIT>
+&RT::Interface::Web::StaticFileHeaders();
# This autohandler will spit out RT's images if the user hasn't
# properly configured their webserver to stop RT from passing
# images through the mason handler.
-
my $file = $m->base_comp->source_file;
+
my $type = "application/octet-stream";
if ($file =~ /\.(gif|png|jpe?g)$/i) {
$type = "image/$1";
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/js/autohandler
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/js/autohandler (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/NoAuth/js/autohandler Sun May 20 23:21:14 2007
@@ -46,6 +46,7 @@
%#
%# END BPS TAGGED BLOCK }}}
<%init>
+&RT::Interface::Web::StaticFileHeaders();
$r->content_type('application/x-javascript');
$m->call_next();
return();
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Build.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Build.html (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Build.html Sun May 20 23:21:14 2007
@@ -78,29 +78,29 @@
<input type="hidden" class="hidden" name="Query" value="<% $query{'Query'} %>" />
<input type="hidden" class="hidden" name="Format" value="<% $query{'Format'} %>" />
-<table width="100%" border="0" cellpadding="5">
-<tr valign="top"><td class="boxcontainer" rowspan="2" width="65%">
-
-<& Elements/PickCriteria, query => $query{'Query'}, cfqueues => $queues &>
-<& /Elements/Submit, Caption => loc('Add these terms to your search'), Label => loc('Add'), Name => 'AddClause'&>
-
-</td><td>
+<div id="editquery">
<& Elements/EditQuery,
%ARGS,
actions => \@actions,
optionlist => $optionlist,
Description => $saved_search{'Description'},
-&>
-<& /Elements/Submit, Label => loc('Add and Search'), Name => 'DoSearch'&>
+ &>
+</div>
+<div id="editsearches">
+ <& Elements/EditSearches, %saved_search, CurrentSearch => \%query &>
+</div>
+
+
+<div id="pick-criteria">
+ <& Elements/PickCriteria, query => $query{'Query'}, cfqueues => $queues &>
+</div>
+<& /Elements/Submit, Label => loc('Add these terms'), Name => 'AddClause'&>
+
+<& /Elements/Submit, Label => loc('Add these terms and Search'), Name => 'DoSearch'&>
-</td></tr>
-<tr valign="top"><td>
-<& Elements/EditSearches, %saved_search, CurrentSearch => \%query &>
-</td></tr>
-<tr><td colspan="2" class="boxcontainer">
<& Elements/DisplayOptions,
%ARGS, %query,
@@ -110,7 +110,6 @@
<& /Elements/Submit, Label => loc('Add and Search'), Name => 'DoSearch'&>
-</td></tr></table>
</form>
<%INIT>
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Elements/EditSearches
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Elements/EditSearches (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Elements/EditSearches Sun May 20 23:21:14 2007
@@ -75,7 +75,7 @@
<input type="submit" name="SavedSearchSave" value="<%loc('Save')%>" class="button" />
% }
<br />
-
+<hr />
<&|/l&>Load saved search:</&>
<& SelectSearchesForObjects, Name => 'SavedSearchLoad', Objects => \@Objects, SearchType => $Type &>
<input type="submit" value="<% loc('Load') %>" class="button" />
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Elements/PickCriteria
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Elements/PickCriteria (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Search/Elements/PickCriteria Sun May 20 23:21:14 2007
@@ -49,19 +49,18 @@
<table width="100%" cellspacing="0" cellpadding="0" border="0">
-<tr><th><&|/l&>Field</&></th><th><&|/l&>Operator</&></th><th><&|/l&>Value</&></th></tr>
+
+<& PickBasics &>
+<& PickCFs, cfqueues => \%cfqueues &>
+
+<tr class="separator"><td colspan="3"><hr /></td></tr>
<tr>
<td class="label"><&|/l&>Aggregator</&>:</td>
<td class="operator"> </td>
<td class="value"><& SelectAndOr, Name => "AndOr" &></td>
</tr>
-<tr class="separator"><td colspan="3"><hr /></td></tr>
-
-<& PickBasics &>
-<& PickCFs, cfqueues => \%cfqueues &>
-
</table>
</&>
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Create.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Create.html (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Create.html Sun May 20 23:21:14 2007
@@ -148,6 +148,7 @@
</td>
</tr>
+% if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
<tr>
<td><% loc('Sign')%></td>
<td><& /Widgets/Form/Boolean:InputOnly, Name => 'Sign', CurrentValue => $ARGS{'Sign'} &></td>
@@ -155,6 +156,7 @@
<td><& /Widgets/Form/Boolean:InputOnly, Name => 'Encrypt', CurrentValue => $ARGS{'Encrypt'} &></td>
<td colspan="2"> </td>
</tr>
+% }
<tr>
<td colspan="6">
@@ -258,12 +260,14 @@
ARGSRef => \%ARGS
);
-foreach ( qw(Sign Encrypt) ) {
- $ARGS{ $_ } = $m->comp( '/Widgets/Form/Boolean:Process',
- Name => $_,
- DefaultValue => $QueueObj->$_,
- Arguments => \%ARGS,
- );
+if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
+ foreach ( qw(Sign Encrypt) ) {
+ $ARGS{ $_ } = $m->comp( '/Widgets/Form/Boolean:Process',
+ Name => $_,
+ DefaultValue => $QueueObj->$_,
+ Arguments => \%ARGS,
+ );
+ }
}
# if no due date has been set explicitly, then use the
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Display.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Display.html (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Display.html Sun May 20 23:21:14 2007
@@ -56,10 +56,11 @@
<& Elements/ShowUpdateStatus, Ticket => $TicketObj &>
% $m->callback( %ARGS, Ticket => $TicketObj, CallbackName => 'BeforeShowSummary' );
+<div class="summary">
<&| /Widgets/TitleBox, title => loc('Ticket metadata') &>
<& /Ticket/Elements/ShowSummary, Ticket => $TicketObj, Attachments => $attachments &>
</&>
-
+</div>
<br />
% $m->callback( Ticket => $TicketObj, %ARGS, CallbackName => 'BeforeShowHistory' );
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Elements/ShowHistory
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Elements/ShowHistory (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Elements/ShowHistory Sun May 20 23:21:14 2007
@@ -58,7 +58,7 @@
my $titleright;
if ($ShowDisplayModes) {
- $titleright = q[<span style="color: black">] . loc('Display mode') . ':</span> ';
+ $titleright = '';
if ($ShowHeaders) {
$titleright .= qq{<a href="$URIFile?id=} .
@@ -76,6 +76,7 @@
}
}
</%perl>
+<div class="history">
<& /Widgets/TitleBoxStart, title => $title, titleright => $titleright &>
% }
@@ -125,6 +126,7 @@
% if ($ShowDisplayModes or $ShowTitle) {
<& /Widgets/TitleBoxEnd &>
% }
+</div>
<%INIT>
my $Transactions = new RT::Transactions($session{'CurrentUser'});
if ($Tickets) {
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Update.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Update.html (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/html/Ticket/Update.html Sun May 20 23:21:14 2007
@@ -110,12 +110,14 @@
<tr><td align="right"><&|/l&>Attach</&>:</td><td><input name="Attach" type="file" /><input type="submit" class="button" name="AddMoreAttach" value="<&|/l&>Add More Files</&>" /><input type="hidden" class="hidden" name="UpdateAttach" value="1" />
</td></tr>
+% if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
<tr><td> </td><td><table>
<td><% loc('Sign')%></td>
<td><& /Widgets/Form/Boolean:InputOnly, Name => 'Sign', CurrentValue => $ARGS{'Sign'} &></td>
<td><% loc('Encrypt')%></td>
<td><& /Widgets/Form/Boolean:InputOnly, Name => 'Encrypt', CurrentValue => $ARGS{'Encrypt'} &></td>
</table></td></tr>
+% }
<tr><td align="right" valign="top"><&|/l&>Message</&>:</td><td>
% $m->callback( %ARGS, CallbackName => 'BeforeMessageBox' );
@@ -160,12 +162,14 @@
$title = loc("Update ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject);
}
-foreach ( qw(Sign Encrypt) ) {
- $ARGS{ $_ } = $m->comp( '/Widgets/Form/Boolean:Process',
- Name => $_,
- DefaultValue => $TicketObj->QueueObj->$_,
- Arguments => \%ARGS,
- );
+if ( RT->Config->Get('GnuPG')->{'Enable'} ) {
+ foreach ( qw(Sign Encrypt) ) {
+ $ARGS{ $_ } = $m->comp( '/Widgets/Form/Boolean:Process',
+ Name => $_,
+ DefaultValue => $TicketObj->QueueObj->$_,
+ Arguments => \%ARGS,
+ );
+ }
}
# Things needed in the template - we'll do the processing here, just
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Action/SendEmail.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Action/SendEmail.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Action/SendEmail.pm Sun May 20 23:21:14 2007
@@ -104,7 +104,7 @@
my $message = $self->TemplateObj->MIMEObj;
my $orig_message;
- if ( RT->Config->Get('RecordOutgoingEmail') ) {
+ if ( RT->Config->Get('RecordOutgoingEmail') && RT->Config->Get('GnuPG')->{'Enable'} ) {
# it's hacky, but we should know if we're going to crypt things
my $attachment = $self->TransactionObj->Attachments->First;
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Crypt/GnuPG.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Crypt/GnuPG.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Crypt/GnuPG.pm Sun May 20 23:21:14 2007
@@ -54,6 +54,200 @@
use GnuPG::Interface;
use RT::EmailParser ();
+=head1 NAME
+
+RT::Crypt::GnuPG - encryt/decrypt and sign/verify email messages with the GNU Privacy Guard (GPG)
+
+=head1 DESCRIPTION
+
+This module provides support for encryption and signing of outgoing messages,
+as well as the decryption and verification of incoming email.
+
+=head1 CONFIGURATION
+
+You can control the configuration of this subsystem from RT's configuration file.
+Some options are available via the web interface, but to enable this functionality, you
+MUST start in the congiration file.
+
+There are two hashes, GnuPG and GnuPGOptions in the configuration file. The
+first one controls RT specific options. It enables you to enable/disable facility
+or change the format of messages. The second one is a hash with options for the
+'gnupg' utility. You can use it to define a keyserver, enable auto-retrieval keys
+and set almost any option 'gnupg' supports on your system.
+
+=head2 %GnuPG
+
+=head3 Enabling GnuPG
+
+Set to true value to enable this subsystem:
+
+ Set( %GnuPG,
+ Enable => 1,
+ ... other options ...
+ );
+
+However, note that you B<must> add the 'Auth::GnuPG' email filter to enable
+the handling of incoming encrypted/signed messages.
+
+=head3 Format of outgoing messages
+
+Format of outgoing messages can be controlled using the 'OutgoingMessagesFormat'
+option in the RT config:
+
+ Set( %GnuPG,
+ ... other options ...
+ OutgoingMessagesFormat => 'RFC',
+ ... other options ...
+ );
+
+or
+
+ Set( %GnuPG,
+ ... other options ...
+ OutgoingMessagesFormat => 'Inline',
+ ... other options ...
+ );
+
+This framework implements two formats of signing and encrypting of email messages:
+
+=over
+
+=item RFC
+
+This format is also known as GPG/MIME and described in RFC3156 and RFC1847.
+Technique described in these RFCs is well supported by many mail user
+agents (MUA), but some MUAs support only inline signatures and encryption,
+so it's possible to use inline format (see below).
+
+=item Inline
+
+This format doesn't take advantage of MIME, but some mail clients do
+not support GPG/MIME.
+
+We sign text parts using clear signatures. For each attachments another
+attchment with a signature is added with '.sig' extension.
+
+Encryption of text parts is implemented using inline format, other parts
+are replaced with attachments with the filename extension '.pgp'.
+
+=back
+
+=head2 %GnuPGOptions
+
+Use this hash to set options of the 'gnupg' program. You can define almost any
+option you want which gnupg supports, but never try to set options which
+change output format or gnupg's commands, such as --sign (command),
+--list-options (option) and other.
+
+Some GnuPG options take arguments while others take none. (Such as --use-agent).
+For options without specific value use C<undef> as hash value.
+To disable these option just comment them out or delete them from the hash
+
+ Set(%GnuPGOptions,
+ 'option-with-value' => 'value',
+ 'enabled-option-without-value' => undef,
+ # 'commented-option' => 'value or undef',
+ );
+
+=over
+
+=item --homedir
+
+The GnuPG home directory, by default it is set to F</opt/rt3/var/data/gpg>.
+
+You can manage this data with the 'gpg' commandline utility
+using the GNUPGHOME environment variable or --homedir option.
+Other utilities may be used as well.
+
+In a standard installation, access to this directory should be granted to
+the web server user which is running RT's web interface, but if you're running
+cronjobs or other utilities that access RT directly via API and may generate
+encrypted/signed notifications then theu sers you execute these scripts under
+must have access too.
+
+However, granting access to the dir to many users makes your setup less secure,
+some features, such as auto-import of keys, may not be avialable if you do not.
+To enable this features and suppress warnings about permissions on
+the dir use --no-permission-warning.
+
+=item --digest-algo
+
+This option is required in advance when RFC format for outgoung messages is
+used. We can not get default algorith from gpg program so RT uses 'SHA1' by
+default. You may want to override it. You can use MD5, SHA1, RIPEMD160,
+SHA256 or other, however use `gpg --version` command to get information about
+supported algorithms by your gpg. These algoriths are listed as hash-functions.
+
+=item other
+
+Read `man gpg` to get list of all options this program support.
+
+=back
+
+=head2 Per-queue options
+
+Using the web interface it's possible to enable signing and/or encrypting by
+default. As an administrative user of RT, open 'Configuration' then 'Queues',
+and select a queue. On the page you can see information about the queue's keys
+at the bottom and two checkboxes to choose default actions.
+
+=head2 Handling incoming messages
+
+To enable handling of encryped and signed message in the RT you should add
+'Auth::GnuPG' mail plugin.
+
+ Set(@MailPlugins, 'Auth::MailFrom', 'Auth::GnuPG', ...other filter...);
+
+See also `perldoc lib/RT/Interface/Email/Auth/GnuPG.pm`.
+
+=head2 Errors handling
+
+There are several global templates created in the database by default. RT
+uses these templates to send error messages to users or RT's owner. These
+templates have 'Error:' or 'Error to RT owner:' prefix in the name. You can
+adjust the text of the messages using the web interface.
+
+Note that C<$TicketObj>, C<$TransactionObj> and other variable usually available
+in RT's templates are not available in these templates, but each template
+used for errors reporting has set of available data structures you can use to
+build better messages. See default templates and descriptions below.
+
+=head3 Problems with public keys
+
+Template 'Error: public key' is used to inform the user that RT has problems with
+his public key and won't be able to send him encrypted content. There are several
+reasons why RT can't use a key. However, the actual reason is not sent to the user,
+but sent to RT owner using 'Error to RT owner: public key'.
+
+The possible reasons: "Not Found", "Ambigious specification", "Wrong
+key usage", "Key revoked", "Key expired", "No CRL known", "CRL too
+old", "Policy mismatch", "Not a secret key", "Key not trusted" or
+"No specific reason given".
+
+=head3 Private key doesn't exist
+
+Template 'Error: no private key' is used to inform the user that
+he sent an encrypted email, but we have no private key to decrypt
+it.
+
+In this template C<$Message> object of L<MIME::Entity> class
+available. It's the message RT received.
+
+=head3 Invalid data
+
+Template 'Error: bad GnuPG data' used to inform the user that a
+message he sent has invalid data and can not be handled.
+
+There are several reasons for this error, but most of them are data
+corruptio or absence of expected information.
+
+In this template C<@Messages> array is available and contains list
+of error messages.
+
+=head1 FUNCTIONS
+
+=cut
+
# gnupg options supported by GnuPG::Interface
# other otions should be handled via extra_args argument
my %supported_opt = map { $_ => 1 } qw(
@@ -175,7 +369,7 @@
my $entity = $args{'Entity'};
if ( $args{'Sign'} && !defined $args{'Passphrase'} ) {
- $args{'Passphrase'} = GetPassphrase();
+ $args{'Passphrase'} = GetPassphrase( Address => $args{'Signer'} );
}
my $gnupg = new GnuPG::Interface;
@@ -347,7 +541,7 @@
return unless $args{'Sign'} || $args{'Encrypt'};
if ( $args{'Sign'} && !defined $args{'Passphrase'} ) {
- $args{'Passphrase'} = GetPassphrase();
+ $args{'Passphrase'} = GetPassphrase( Address => $args{'Signer'} );
}
my $gnupg = new GnuPG::Interface;
@@ -431,7 +625,7 @@
return unless $args{'Sign'} || $args{'Encrypt'};
if ( $args{'Sign'} && !defined $args{'Passphrase'} ) {
- $args{'Passphrase'} = GetPassphrase();
+ $args{'Passphrase'} = GetPassphrase( Address => $args{'Signer'} );
}
my $gnupg = new GnuPG::Interface;
@@ -522,6 +716,10 @@
# inline PGP block, only in singlepart
unless ( $entity->is_multipart ) {
my $io = $entity->open('r');
+ unless ( $io ) {
+ $RT::Logger->warning( "Entity of type ". $entity->effective_type ." has no body" );
+ return ();
+ }
while ( defined($_ = $io->getline) ) {
next unless /-----BEGIN PGP (SIGNED )?MESSAGE-----/;
my $type = $1? 'signed': 'encrypted';
@@ -925,8 +1123,15 @@
return %res;
}
+=head2 GetPassphrase [ Address => undef ]
+
+Returns passphrase, called whenever it's required with Address as a named argument.
+
+=cut
+
sub GetPassphrase {
- return 'passphrase';
+ my %args = ( Address => undef, @_ );
+ return 'test';
}
=head2 ParseStatus
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/CurrentUser.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/CurrentUser.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/CurrentUser.pm Sun May 20 23:21:14 2007
@@ -51,15 +51,36 @@
=head1 SYNOPSIS
- use RT::CurrentUser
+ use RT::CurrentUser;
+
+ # laod
+ my $current_user = new RT::CurrentUser;
+ $current_user->Load(...);
+ # or
+ my $current_user = RT::CurrentUser->new( $user_obj );
+ # or
+ my $current_user = RT::CurrentUser->new( $address || $name || $id );
+
+ # manipulation
+ $current_user->UserObj->SetName('new_name');
=head1 DESCRIPTION
+B<Read-only> subclass of L<RT::User> class. Used to define the current
+user. You should pass an instance of this class to constructors of
+many RT classes, then the instance used to check ACLs and localize
+strings.
=head1 METHODS
+See also L<RT::User> for a list of methods this class has.
+
+=head2 new
+Returns new CurrentUser object. Unlike all other classes of RT it takes
+either subclass of C<RT::User> class object or scalar value that is
+passed to Load method.
=cut
@@ -67,12 +88,11 @@
package RT::CurrentUser;
use RT::I18N;
-use RT::User;
use strict;
-use base qw/RT::User/;
+use warnings;
-# {{{ sub _Init
+use base qw/RT::User/;
#The basic idea here is that $self->CurrentUser is always supposed
# to be a CurrentUser object. but that's hard to do when we're trying to load
@@ -101,31 +121,36 @@
$self->_BuildTableAttributes;
}
-# }}}
-# {{{ sub Create
+=head2 Create, Delete and Set*
+
+As stated above it's a subclass of L<RT::User>, but this class is read-only
+and calls to these methods are illegal. Return 'permission denied' message
+and log an error.
+
+=cut
sub Create {
my $self = shift;
+ $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation');
return (0, $self->loc('Permission Denied'));
}
-# }}}
-
-# {{{ sub Delete
-
sub Delete {
my $self = shift;
+ $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation');
return (0, $self->loc('Permission Denied'));
}
-# }}}
-
-# {{{ sub UserObj
+sub _Set {
+ my $self = shift;
+ $RT::Logger->error('RT::CurrentUser is read-only, RT::User for manipulation');
+ return (0, $self->loc('Permission Denied'));
+}
=head2 UserObj
-Returns the RT::User object associated with this CurrentUser object.
+Returns the L<RT::User> object associated with this CurrentUser object.
=cut
@@ -140,9 +165,6 @@
}
return $user;
}
-# }}}
-
-# {{{ sub _Accessible
sub _CoreAccessible {
{
@@ -155,9 +177,6 @@
};
}
-# }}}
-
-# {{{ sub LoadByGecos
=head2 LoadByGecos
@@ -170,9 +189,6 @@
my $self = shift;
return $self->LoadByCol( "Gecos", shift );
}
-# }}}
-
-# {{{ sub LoadByName
=head2 LoadByName
@@ -185,16 +201,12 @@
my $self = shift;
return $self->LoadByCol( "Name", shift );
}
-# }}}
-
-# {{{ Localization
=head2 LanguageHandle
Returns this current user's langauge handle. Should take a language
specification. but currently doesn't
-
=cut
sub LanguageHandle {
@@ -246,12 +258,10 @@
return $self->LanguageHandle->maketext_fuzzy( @_ );
}
-# }}}
-
=head2 CurrentUser
-Return the current currentuser object
+Return the current currentuser object
=cut
@@ -301,9 +311,6 @@
return ($password eq $auth_digest);
}
-# }}}
-
-
eval "require RT::CurrentUser_Vendor";
die $@ if ($@ && $@ !~ qr{^Can't locate RT/CurrentUser_Vendor.pm});
eval "require RT::CurrentUser_Local";
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Date.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Date.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Date.pm Sun May 20 23:21:14 2007
@@ -544,7 +544,7 @@
Formatters may also add own arguments to the list, for example
in RFC2822 format day of time in output is optional so it
-understand argument C<DayOfTime>.
+understand boolean argument C<DayOfTime>.
=head3 DefaultFormat
@@ -659,11 +659,12 @@
};
-=head3 RFC2822
+=head3 RFC2822 (MIME)
-Returns the object's date and time in RFC2822 format.
+Returns the object's date and time in RFC2822 format,
+for example C<Sun, 06 Nov 1994 08:49:37 +0000>.
Format is locale independand as required by RFC. Time
-part always has timezone offset.
+part always has timezone offset in digits with sign prefix.
Supports arguments: C<Timezone>, C<Date>, C<Time>, C<DayOfWeek>
and C<Seconds>. See </Output formatters> for description of
@@ -698,6 +699,45 @@
return join ' ', grep $_, ($date, $time);
}
+=head3 RFC2616 (HTTP)
+
+Returns the object's date and time in RFC2616 (HTTP/1.1) format,
+for example C<Sun, 06 Nov 1994 08:49:37 GMT>. While the RFC describes
+version 1.1 of HTTP, but the same form date can be used in version 1.0.
+
+Format is fixed length, locale independand and always represented in GMT
+what makes it quite useless for users, but any date in HTTP transfers
+must be presented using this format.
+
+ HTTP-date = rfc1123 | ...
+ rfc1123 = wkday "," SP date SP time SP "GMT"
+ date = 2DIGIT SP month SP 4DIGIT
+ ; day month year (e.g., 02 Jun 1982)
+ time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
+ ; 00:00:00 - 23:59:59
+ wkday = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"
+ month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun"
+ | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"
+
+Supports arguments: C<Date> and C<Time>, but you should use them only for
+some personal reasons, RFC2616 doesn't define any optional parts.
+See </Output formatters> for description of arguments.
+
+=cut
+
+sub RFC2616 {
+ my $self = shift;
+ my %args = ( Date => 1, Time => 1,
+ @_,
+ Timezone => 'utc',
+ Seconds => 1, DayOfWeek => 1,
+ );
+
+ my $res = $self->RFC2822( @_ );
+ $res =~ s/\s*[+-]\d\d\d\d$/ GMT/ if $args{'Time'};
+ return $res;
+}
+
sub _SplitOffset {
my ($self, $offset) = @_;
my $sign = $offset < 0? '-': '+';
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email.pm Sun May 20 23:21:14 2007
@@ -344,7 +344,7 @@
$args{'Ticket'} = $args{'Transaction'}->Object;
}
- if ( $args{'Ticket'} && $args{'Transaction'} ) {
+ if ( $args{'Ticket'} && $args{'Transaction'} && RT->Config->Get('GnuPG')->{'Enable'} ) {
my $attachment = $args{'Transaction'}->Attachments->First;
my %crypt;
Copied: rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email/Auth/GnuPG.pm (from r7710, /rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email/Auth/GnuPGNG.pm)
==============================================================================
--- /rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email/Auth/GnuPGNG.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Email/Auth/GnuPG.pm Sun May 20 23:21:14 2007
@@ -45,7 +45,7 @@
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
-package RT::Interface::Email::Auth::GnuPGNG;
+package RT::Interface::Email::Auth::GnuPG;
use strict;
use warnings;
@@ -57,8 +57,8 @@
Set up a gnupgp key directory with a pubring containing only the keys
you care about and specify the following in your SiteConfig.pm
-Set(%GnuPGOptions, homedir => '/opt/rt3/var/data/GnuPG');
-Set(@MailPlugins, 'Auth::MailFrom', 'Auth::GnuPGNG', ...other filter...);
+ Set(%GnuPGOptions, homedir => '/opt/rt3/var/data/GnuPG');
+ Set(@MailPlugins, 'Auth::MailFrom', 'Auth::GnuPG', ...other filter...);
=cut
@@ -234,14 +234,14 @@
return $status, @res, @nested;
}
-eval "require RT::Interface::Email::Auth::GnuPGNG_Vendor";
+eval "require RT::Interface::Email::Auth::GnuPG_Vendor";
die $@
if ( $@
- && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPGNG_Vendor.pm} );
-eval "require RT::Interface::Email::Auth::GnuPGNG_Local";
+ && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Vendor.pm} );
+eval "require RT::Interface::Email::Auth::GnuPG_Local";
die $@
if ( $@
- && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPGNG_Local.pm} );
+ && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Local.pm} );
1;
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Web.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Web.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/Interface/Web.pm Sun May 20 23:21:14 2007
@@ -60,6 +60,7 @@
package RT::Interface::Web;
+use URI;
use strict;
use warnings;
@@ -199,12 +200,15 @@
=cut
sub StaticFileHeaders {
+ my $date = RT::Date->new( $RT::SystemUser );
+
# Expire things in a month.
- $HTML::Mason::Commands::r->headers_out->{'Expires'} = HTTP::Date::time2str( time() + 2592000 );
+ $date->Set( Value => time + 30*24*60*60 );
+ $HTML::Mason::Commands::r->headers_out->{'Expires'} = $date->RFC2616;
# Last modified at server start time
- $HTML::Mason::Commands::r->headers_out->{'Last-Modified'} = HTTP::Date::time2str($^T);
-
+ $date->Set( Value => $^T );
+ $HTML::Mason::Commands::r->headers_out->{'Last-Modified'} = $date->RFC2616;
}
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/User_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/User_Overlay.pm (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/lib/RT/User_Overlay.pm Sun May 20 23:21:14 2007
@@ -708,38 +708,13 @@
return ( 0, "$pass" );
}
- my $template = RT::Template->new( $self->CurrentUser );
-
- if ( $self->Privileged ) {
- $template->LoadGlobalTemplate('RT_PasswordChange_Privileged');
- }
- else {
- $template->LoadGlobalTemplate('RT_PasswordChange_NonPrivileged');
- }
-
- unless ( $template->Id ) {
- $template->LoadGlobalTemplate('RT_PasswordChange');
- }
-
- unless ( $template->Id ) {
- $RT::Logger->crit( "$self tried to send "
- . $self->Name
- . " a password reminder "
- . "but couldn't find a password change template" );
- }
-
- my $notification = RT::Action::SendPasswordEmail->new(
- TemplateObj => $template,
- Argument => $pass
- );
-
- $notification->SetHeader( 'To', $self->EmailAddress );
-
- my ($ret);
- $ret = $notification->Prepare();
- if ($ret) {
- $ret = $notification->Commit();
- }
+ my $ret = RT::Interface::Email::SendEmailUsingTemplate(
+ To => $self->EmailAddress,
+ Template => 'PasswordChange',
+ Arguments => {
+ NewPassword => $pass,
+ },
+ );
if ($ret) {
return ( 1, $self->loc('New password notification sent') );
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/t/mail/sendmail.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/t/mail/sendmail.t (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/t/mail/sendmail.t Sun May 20 23:21:14 2007
@@ -40,7 +40,9 @@
sub file_content
{
- open my $fh, "<:raw", $_[0] or die "couldn't open file '$_[0]': $!";
+ my $path = shift;
+ diag "reading content of '$path'" if $ENV{'TEST_VERBOSE'};
+ open my $fh, "<:raw", $path or die "couldn't open file '$path': $!";
local $/;
return scalar <$fh>;
}
Modified: rt/branches/3.7-EXPERIMENTAL-TUNIS/t/web/rights.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL-TUNIS/t/web/rights.t (original)
+++ rt/branches/3.7-EXPERIMENTAL-TUNIS/t/web/rights.t Sun May 20 23:21:14 2007
@@ -1,7 +1,8 @@
#!/usr/bin/perl -w
use strict;
+use warnings;
-use Test::More tests => 12;
+use Test::More tests => 15;
use RT::Test;
my ($baseurl, $m) = RT::Test->started_ok;
use constant BaseURL => "http://localhost:".RT->Config->Get('WebPort').RT->Config->Get('WebPath')."/";
@@ -23,10 +24,15 @@
return @rights;
};
-my $everyone = RT::Group->new( $RT::SystemUser );
-$everyone->LoadSystemInternalGroup('Everyone');
-ok(my $everyone_gid = $everyone->id, "loaded 'everyone' group");
+diag "load Everyone group" if $ENV{'TEST_VERBOSE'};
+my ($everyone, $everyone_gid);
+{
+ $everyone = RT::Group->new( $RT::SystemUser );
+ $everyone->LoadSystemInternalGroup('Everyone');
+ ok($everyone_gid = $everyone->id, "loaded 'everyone' group");
+}
+diag "revoke all global rights from Everyone group" if $ENV{'TEST_VERBOSE'};
my @has = get_rights( $m, $everyone_gid, 'RT::System-1' );
if ( @has ) {
$m->form_number(3);
@@ -34,8 +40,11 @@
$m->submit;
is_deeply([get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'deleted all rights' );
+} else {
+ ok(1, 'the group has no global rights');
}
+diag "grant SuperUser right to everyone" if $ENV{'TEST_VERBOSE'};
{
$m->form_number(3);
$m->select("GrantRight-$everyone_gid-RT::System-1", ['SuperUser']);
@@ -47,6 +56,7 @@
is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], ['SuperUser'], 'granted SuperUser right' );
}
+diag "revoke the right" if $ENV{'TEST_VERBOSE'};
{
$m->form_number(3);
$m->tick("RevokeRight-$everyone_gid-RT::System-1", 'SuperUser');
@@ -58,3 +68,20 @@
is_deeply( [get_rights( $m, $everyone_gid, 'RT::System-1' )], [], 'revoked SuperUser right' );
}
+
+diag "return rights the group had in the beginning" if $ENV{'TEST_VERBOSE'};
+if ( @has ) {
+ $m->form_number(3);
+ $m->select("GrantRight-$everyone_gid-RT::System-1", \@has);
+ $m->submit;
+
+ $m->content_contains('Right Granted', 'got message');
+ is_deeply(
+ [ get_rights( $m, $everyone_gid, 'RT::System-1' ) ],
+ [ @has ],
+ 'returned back all rights'
+ );
+} else {
+ ok(1, 'the group had no global rights, so nothing to return');
+}
+
More information about the Rt-commit
mailing list