diff options
Diffstat (limited to 'rt/share/html')
62 files changed, 3773 insertions, 79 deletions
diff --git a/rt/share/html/Admin/Users/Modify.html b/rt/share/html/Admin/Users/Modify.html index 6af7bf378..70650a47d 100755 --- a/rt/share/html/Admin/Users/Modify.html +++ b/rt/share/html/Admin/Users/Modify.html @@ -105,6 +105,12 @@ </table> </&> <br /> + +<&| /Widgets/TitleBox, title => loc('Customers') &> +<& /Elements/EditCustomers, Object => $UserObj, CustomerString=> $CustomerString, ServiceString => $ServiceString &> +</&> +<br /> + <&| /Widgets/TitleBox, title => loc('Access control') &> <input type="hidden" class="hidden" name="SetEnabled" value="1" /> <input type="checkbox" class="checkbox" name="Enabled" value="1" <%$EnabledChecked%> /> @@ -330,6 +336,8 @@ if ($UserObj->Id && $id ne 'new') { push (@results,@fieldresults); push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); + #deal with freeside customer links + push @results, ProcessObjectCustomers( ARGSRef => \%ARGS, Object => $UserObj ); # {{{ Deal with special fields: Privileged, Enabled if ( $SetPrivileged and $Privileged != $UserObj->Privileged ) { @@ -418,4 +426,8 @@ $CurrentPass => undef $Pass1 => undef $Pass2 => undef $Create=> undef +$OnlySearchForCustomers => undef +$OnlySearchForServices => undef +$CustomerString => undef +$ServiceString => undef </%ARGS> diff --git a/rt/share/html/Callbacks/RTx-Calendar/Elements/Header/Head b/rt/share/html/Callbacks/RTx-Calendar/Elements/Header/Head new file mode 100644 index 000000000..c1f24c2b4 --- /dev/null +++ b/rt/share/html/Callbacks/RTx-Calendar/Elements/Header/Head @@ -0,0 +1,2 @@ +<link rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/css/calendar.css" type="text/css" media="all" /> + diff --git a/rt/share/html/Callbacks/RTx-Calendar/Ticket/Elements/Tabs/Default b/rt/share/html/Callbacks/RTx-Calendar/Ticket/Elements/Tabs/Default new file mode 100644 index 000000000..cb46fdaf6 --- /dev/null +++ b/rt/share/html/Callbacks/RTx-Calendar/Ticket/Elements/Tabs/Default @@ -0,0 +1,19 @@ +<%init> +my $args; +$args= "?" . $m->comp( + '/Elements/QueryString', + Query => $ARGS{'Query'} || $session{'CurrentSearchHash'}->{'Query'}, + Format => $ARGS{'Format'} || $session{'CurrentSearchHash'}->{'Format'}, + OrderBy => $ARGS{'OrderBy'} || $session{'CurrentSearchHash'}->{'OrderBy'}, + Order => $ARGS{'Order'} || $session{'CurrentSearchHash'}->{'Order'}, + Page => $ARGS{'Page'} || $session{'CurrentSearchHash'}->{'Page'}, + Rows => $ARGS{'Rows'}, + ) if ($ARGS{'Query'} or $session{'CurrentSearchHash'}->{'Query'}); +$args ||= ''; + +$tabs->{'zz'} = { title =>loc("Calendar"), + path => "Search/Calendar.html$args" }; +</%init> +<%args> +$tabs +</%args> diff --git a/rt/share/html/Callbacks/RTx-Calendar/User/Elements/Tabs/Default b/rt/share/html/Callbacks/RTx-Calendar/User/Elements/Tabs/Default new file mode 100644 index 000000000..06413e278 --- /dev/null +++ b/rt/share/html/Callbacks/RTx-Calendar/User/Elements/Tabs/Default @@ -0,0 +1,9 @@ +<%init> + $tabs->{'z'} = { title =>loc("Calendar"), + path => "Prefs/Calendar.html" }; +</%init> +<%args> +$tabs +$current_subtab => undef +$Searches => undef +</%args> diff --git a/rt/share/html/Elements/AddCustomers b/rt/share/html/Elements/AddCustomers new file mode 100644 index 000000000..aaf8ca8ba --- /dev/null +++ b/rt/share/html/Elements/AddCustomers @@ -0,0 +1,59 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# Copyright (c) 2008 Freeside Internet Services, Inc. +%# +%# 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. +<BR> +<%$msg%><br> + +% if (@Customers) { + +<br><i>(Check box to link)<i> +<table> +% foreach my $customer (@Customers) { +<tr> + <td> + <input type="checkbox" name="Object-AddCustomer-<% $customer->{'custnum'} %>" VALUE="1" <% scalar(@Customers) == 1 ? 'CHECKED' : '' %>> + <A HREF="<%$freeside_url%>/view/cust_main.cgi?<% $customer->{'custnum'} %>"><% &RT::URI::freeside::small_custview($customer->{'custnum'}, &RT::URI::freeside::FreesideGetConfig('countrydefault'), 1) |n %> + </td> +</tr> +% } +</table> + +% } + +<%INIT> +my ($msg); + +my $freeside_url = &RT::URI::freeside::FreesideURL(); + +warn "/Elements/AddCustomers called with CustomerString $CustomerString\n" + if $Debug; + +my @Customers = (); +if ( $CustomerString ) { + @Customers = &RT::URI::freeside::smart_search( 'search' => $CustomerString ); +} + +my @Services = (); +if ($ServiceString) { + @Services = (); #service_search(); +} + +warn "/Elements/AddCustomers displaying ". scalar(@Customers). " customers\n" + if $Debug; + +</%INIT> + +<%ARGS> +$CustomerString => undef +$ServiceString => undef +$Debug => 0 +</%ARGS> diff --git a/rt/share/html/Elements/CalendarEvent b/rt/share/html/Elements/CalendarEvent new file mode 100644 index 000000000..3a6b00bb8 --- /dev/null +++ b/rt/share/html/Elements/CalendarEvent @@ -0,0 +1,129 @@ +<%args> +$Date => undef +$Object => undef +$DateTypes => undef +</%args> +<div class="tooltip"> +<small> + +% if ($IsReminder and RTx::Calendar::LocalDate($Object->DueObj->Unix) eq $today) { + <img src="<%$RT::WebImagesURL%>/reminder.png" /> + +% } elsif ($DateTypes->{Resolved} +% and RTx::Calendar::LocalDate($Object->ResolvedObj->Unix) eq $today) { + <img src="<%$RT::WebImagesURL%>/resolved.png" /> + +% } elsif ($DateTypes->{Starts} and $DateTypes->{Due} +% and RTx::Calendar::LocalDate($Object->StartsObj->Unix) eq $today and RTx::Calendar::LocalDate($Object->DueObj->Unix) eq $today ) { + <img src="<%$RT::WebImagesURL%>/starts_due.png" /> + +% } elsif ($DateTypes->{Due} and $DateTypes->{Created} +% and RTx::Calendar::LocalDate($Object->DueObj->Unix) eq $today and RTx::Calendar::LocalDate($Object->CreatedObj->Unix) eq $today ) { + <img src="<%$RT::WebImagesURL%>/created_due.png" /> + +% } elsif ($DateTypes->{Starts} +% and RTx::Calendar::LocalDate($Object->StartsObj->Unix) eq $today) { + <img src="<%$RT::WebImagesURL%>/starts.png" /> + +% } elsif ($DateTypes->{Due} +% and RTx::Calendar::LocalDate($Object->DueObj->Unix) eq $today) { + <img src="<%$RT::WebImagesURL%>/due.png" /> + +% } elsif ($DateTypes->{Created} +% and RTx::Calendar::LocalDate($Object->CreatedObj->Unix) eq $today) { + <img src="<%$RT::WebImagesURL%>/created.png" /> + +% } elsif ($DateTypes->{Started} +% and RTx::Calendar::LocalDate($Object->StartedObj->Unix) eq $today) { + <img src="<%$RT::WebImagesURL%>/started.png" /> + +% } elsif ($DateTypes->{LastUpdated} +% and RTx::Calendar::LocalDate($Object->LastUpdatedObj->Unix) eq $today) { + <img src="<%$RT::WebImagesURL%>/updated.png" /> + +% } + + <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$TicketId%>"> + <% $Object->QueueObj->Name %> #<% $TicketId %> + <% $display_owner ? 'by ' . $Object->OwnerObj->Name : '' %> + <% length($Object->Subject) > 80 ? substr($Object->Subject, 0, 77) . "..." : $Object->Subject %></a></small><br /> + <span class="tip"> + <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$TicketId%>"> + <% $Object->QueueObj->Name %> #<% $TicketId %> + </a> + :</strong> <% $subject%><br /> + <br /> + +%# logic taken from Ticket/Search/Results.tsv +% foreach my $attr (@display_fields) { +% my $value; +% +% if ($attr =~ /(.*)->ISO$/ and $Object->$1->Unix <= 0) { +% $value = '-'; +% } else { +% my $method = '$Object->'.$attr.'()'; +% $method =~ s/->ISO\(\)$/->ISO( Timezone => 'user' )/; +% $value = eval $method; +% if ($@) {die "<b>Check your CalendarPopupFields config in etc/RT_SiteConfig.pm</b>.<br /><br />Failed to find \"$attr\" - ". $@}; +% } + <strong><&|/l&><% $label_of{$attr} %></&>:</strong> <% $value %><br /> +% } + +<br /> + </span> +</div> + +<%init> +use RTx::Calendar; + +my $today = $Date->strftime("%F"); + +my $TicketId; + +my $ticket; +my $subject; +my $IsReminder; + +if ($Object->Type eq 'reminder') { + $IsReminder = 1; + if ($Object->RefersTo->First) { + $ticket = $Object->RefersTo->First->TargetObj; + $TicketId = $ticket->Id; + $subject = $Object->Subject . " (" . $ticket->Subject . ")"; + } +} else { + $TicketId = $Object->Id; + $subject = $Object->Subject; +} + +my $display_owner = $RT::CalendarDisplayOwner; +$display_owner ||= RT->Config->Get('CalendarDisplayOwner') + if RT->can('Config'); + + +# 3.6 config +my @display_fields = @RT::CalendarPopupFields; + +# 3.8 config +# the if condition is weird but it doesn't work with 3.8.0 without the last part +@display_fields = RT->Config->Get('CalendarPopupFields') + if 0 == @display_fields and RT->can('Config') and RT->Config->Get('CalendarPopupFields'); + +# default +if (0 == @display_fields) { + @display_fields = qw(OwnerObj->Name CreatedObj->ISO StartsObj->ISO + StartedObj->ISO LastUpdatedObj->ISO DueObj->ISO + ResolvedObj->ISO Status Priority + Requestors->MemberEmailAddressesAsString); +} + + +my %label_of; +for my $field (@display_fields) { + my $label = $field; + $label =~ s'Obj-.(?:AsString|Name|ISO)''g; + $label =~ s'-\>MemberEmailAddressesAsString''g; + $label_of{$field} = $label; +} + +</%init> diff --git a/rt/share/html/Elements/CollectionList b/rt/share/html/Elements/CollectionList index c7bdfd903..4e06e3f0a 100644 --- a/rt/share/html/Elements/CollectionList +++ b/rt/share/html/Elements/CollectionList @@ -123,7 +123,9 @@ if ( $ShowHeader ) { my ($i, $column_map) = (0, {}); while ( my $record = $Collection->Next ) { # Every ten rows, flush the buffer and put something on the page. - $m->flush_buffer unless ++$i % 10; + #broken w/FS, causes rows to be output prematurely + #$m->flush_buffer unless ++$i % 10; + ++$i; my $warning = 0; my $Classes = ''; diff --git a/rt/share/html/Elements/ColumnMap b/rt/share/html/Elements/ColumnMap index a1475a99d..6a1c23779 100644 --- a/rt/share/html/Elements/ColumnMap +++ b/rt/share/html/Elements/ColumnMap @@ -157,7 +157,12 @@ my $COLUMN_MAP = { } qw(WebPath WebBaseURL WebURL)), WebRequestPath => { value => sub { substr( $m->request_path, 1 ) } }, - WebRequestPathDir => { value => sub { substr( $m->request_comp->dir_path, 1 ) } }, + #WebRequestPathDir => { value => sub { substr( $m->request_comp->dir_path, 1 ) } }, + WebRequestPathDir => { value => sub { + my $wrpd = substr( $m->request_comp->dir_path, 1 ); + $wrpd =~ s(^rt/)(); #hacky, dunno why this happens + $wrpd; + } }, }; $COLUMN_MAP->{'CF'} = $COLUMN_MAP->{'CustomField'}; diff --git a/rt/share/html/Elements/EditCustomers b/rt/share/html/Elements/EditCustomers new file mode 100644 index 000000000..68efb5f40 --- /dev/null +++ b/rt/share/html/Elements/EditCustomers @@ -0,0 +1,63 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# Copyright (c) 2008 Freeside Internet Services, Inc. +%# +%# 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. +<TABLE width=100%> + <TR> + <TD VALIGN=TOP WIDTH=50%> + <h3><&|/l&>Current Customers</&></h3> + +<table> + <tr> + <td><i><&|/l&>(Check box to disassociate)</&></i></td> + </tr> + <tr> + <td class="value"> +% foreach my $link ( @{ $Object->Customers->ItemsArrayRef } ) { + + <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>"> +%# <& ShowLink, URI => $link->TargetURI &><br> + <A HREF="<% $link->TargetURI->Resolver->HREF %>"><% $link->TargetURI->Resolver->AsStringLong |n %></A> + <BR> +% } + </td> + </tr> +</table> + +</TD> + +<TD VALIGN=TOP> +<h3><&|/l&>New Customer Links</&></h3> +<&|/l&>Find customer</&><BR> +<input name="CustomerString"> +<input type=submit name="OnlySearchForCustomers" value="<&|/l&>Go!</&>"> +<br><i>cust #, name, company or phone</i> +<BR> +%#<BR> +%#<&|/l&>Find service</&><BR> +%#<input name="ServiceString"> +%#<input type=submit name="OnlySearchForServices" value="<&|/l&>Go!</&>"> +%#<br><i>username, username@domain, domain, or IP address</i> +%#<BR> + +<& AddCustomers, Object => $Object, + CustomerString => $CustomerString, + ServiceString => $ServiceString, &> + +</TD> +</TR> +</TABLE> + +<%ARGS> +$CustomerString => undef +$ServiceString => undef +$Object => undef +</%ARGS> diff --git a/rt/share/html/Elements/Footer b/rt/share/html/Elements/Footer index 2fcdee949..59547e238 100755 --- a/rt/share/html/Elements/Footer +++ b/rt/share/html/Elements/Footer @@ -48,25 +48,6 @@ %# End of div#body from /Elements/PageLayout </div> % $m->callback( %ARGS ); -<div id="footer"> -% if ($m->{'rt_base_time'}) { - <p id="time"> - <span><&|/l&>Time to display</&>: <%Time::HiRes::tv_interval( $m->{'rt_base_time'} )%></span> - </p> -%} - <p id="bpscredits"> - <span> -<&|/l, '»|«', $RT::VERSION, '2009', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>', &>[_1] RT [_2] Copyright 1996-[_3] [_4].</&> -</span> -</p> -% if (!$Menu) { - <p id="legal"> -<&|/l&>Distributed under version 2 <a href="http://www.gnu.org/copyleft/gpl.html"> of the GNU GPL.</a></&><br /> -<&|/l, '<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>' &>To inquire about support, training, custom development or licensing, please contact [_1].</&><br /> - </p> -% } - -</div> % if ($Debug >= 2 ) { % require Data::Dumper; % my $d = Data::Dumper->new([\%ARGS], [qw(%ARGS)]); diff --git a/rt/share/html/Elements/Header b/rt/share/html/Elements/Header index 953efcb22..d970ac52f 100755 --- a/rt/share/html/Elements/Header +++ b/rt/share/html/Elements/Header @@ -45,61 +45,67 @@ %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<% include( '/elements/header.html', { + 'title' => $Title, + 'head' => $head, + 'etc' => $etc, + 'nobr' => 1, + 'nocss' => 1, + }) |n +%> +<%INIT> +$r->headers_out->{'Pragma'} = 'no-cache'; +$r->headers_out->{'Cache-control'} = 'no-cache'; -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head> -<title><%$Title%></title> +my $id = $m->request_comp->path; +$id =~ s|^/||g; +$id =~ s|/|-|g; +$id =~ s|\.html$||g; +$id =~ s|index$||g + if $id ne 'index'; +$id =~ s|-$||g; +my $head = ''; -% if ($Refresh && $Refresh =~ /^(\d+)/ && $1 > 0) { - <meta http-equiv="refresh" content="<% $Refresh %>" /> -% } +if ($Refresh && $Refresh =~ /^(\d+)/ && $1 > 0) { + $head .= '<meta http-equiv="refresh" content="$Refresh" />'; +} -<link rel="shortcut icon" href="<%RT->Config->Get('WebImagesURL')%>/favicon.png" type="image/png" /> -<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/<% RT->Config->Get( 'WebDefaultStylesheet', $session{'CurrentUser'} ) %>/main<% RT->Config->Get('DevelMode')? '' : '-squished' %>.css" type="text/css" media="all" /> -<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/print.css" type="text/css" media="print" /> +my $WebPath = RT->Config->Get('WebPath'); +my $WebImagesURL = RT->Config->Get('WebImagesURL'); +my $WebDefaultStylesheet = + RT->Config->Get('WebDefaultStylesheet', $session{'CurrentUser'}); +my $squished = RT->Config->Get('DevelMode') ? '' : '-squished'; -% for (keys %{$LinkRel || {}}) { - <link rel="<% $_ %>" href="<% RT->Config->Get('WebPath') . $LinkRel->{$_} %>" /> -% } +$head .= <<END; +<link rel="shortcut icon" href="$WebImagesURL/favicon.png" type="image/png" /> +<link rel="stylesheet" href="$WebPath/NoAuth/css/$WebDefaultStylesheet/main$squished.css" type="text/css" media="all" /> +<link rel="stylesheet" href="$WebPath/NoAuth/css/print.css" type="text/css" media="print" /> +END -% if ( $RSSAutoDiscovery ) { - <link rel="alternate" href="<%$RSSAutoDiscovery%>" type="application/rss+xml" title="RSS RT Search" /> -% } +for (keys %{$LinkRel || {}}) { + $head .= qq(<link rel="$_" href="$WebPath) . $LinkRel->{$_} . '" />'; +} -% if ($JavaScript) { -<& HeaderJavascript, focus => $Focus, onload => $onload &> -% } +if ( $RSSAutoDiscovery ) { + $head .= qq(<link rel="alternate" href="$RSSAutoDiscovery" type="application/rss+xml" title="RSS RT Search" />); +} -% my $stylesheet_plugin = "/NoAuth/css/". RT->Config->Get( 'WebDefaultStylesheet', $session{'CurrentUser'} )."/InHeader"; -% if ($m->comp_exists($stylesheet_plugin) ) { -<& $stylesheet_plugin &> -% } -% $m->callback( %ARGS, CallbackName => 'Head' ); +if ($JavaScript) { + $head .= $m->scomp('HeaderJavascript', focus => $Focus, onload => $onload); +} -</head> - <body<% $id && qq[ id="comp-$id"] |n %>> +my $stylesheet_plugin = "/NoAuth/css/$WebDefaultStylesheet/InHeader"; +if ($m->comp_exists($stylesheet_plugin) ) { + $head .= $m->scomp($stylesheet_plugin); +} -% if ($ShowBar) { -<& /Elements/Logo, %ARGS &> +# $m->callback( %ARGS, CallbackName => 'Head' ); +$head .= $m->scomp( '/Elements/Callback', _CallbackName => 'Head', %ARGS ); -<div id="quickbar"> - <& /Elements/PersonalQuickbar, %ARGS &> -% } +my $etc = ''; +$etc .= qq[ id="comp-$id"] if $id; -<%INIT> -$r->headers_out->{'Pragma'} = 'no-cache'; -$r->headers_out->{'Cache-control'} = 'no-cache'; - -my $id = $m->request_comp->path; -$id =~ s|^/||g; -$id =~ s|/|-|g; -$id =~ s|\.html$||g; -$id =~ s|index$||g - if $id ne 'index'; -$id =~ s|-$||g; </%INIT> <%ARGS> diff --git a/rt/share/html/Elements/MyCalendar b/rt/share/html/Elements/MyCalendar new file mode 100644 index 000000000..a54ab39d6 --- /dev/null +++ b/rt/share/html/Elements/MyCalendar @@ -0,0 +1,78 @@ +<&|/Widgets/TitleBox, + title => loc("Calendar"), + title_href => "Search/Calendar.html" &> + +<table class="rtxcalendar"> +<thead> +<tr> +% my $date = $begin->clone; +% while ( $date <= $end ) { +<th width="14%"><%$rtdate->GetWeekday($date->day_of_week % 7)%></th> +% $date = $set->next($date); +% } +</tr> +</thead> +<tbody> +<tr> +% $date = $begin->clone; +% while ($date <= $end) { +<td> +<p class="date"><%$date->day%></p> +% for my $t (@{ $Tickets{$date->strftime("%F")} }) { +<& /Elements/CalendarEvent, Object => $t, Date => $date, DateTypes => \%DateTypes &> +% } +</td> +% $date = $set->next($date); +% } +</tr> +</tbody> +</table> + + </&> + +<%INIT> + +use RTx::Calendar; + +my $title = loc("Calendar"); + +my $rtdate = RT::Date->new($session{'CurrentUser'}); + +my @DateTypes = qw/Created Starts Started Due LastUpdated Resolved/; + +my $today = DateTime->today; + +# this line is used to debug MyCalendar +# $today = DateTime->new(year => 2007, month => 4, day => 11); + +my $begin = $today->clone->subtract( days => 3); +my $end = $today->clone->add( days => 3); + +# use this to loop over days until $end +my $set = DateTime::Set->from_recurrence( + next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) } +); + +my $Query = "( Status = 'new' OR Status = 'open' OR Status = 'stalled') + AND ( Owner = '" . $session{CurrentUser}->Id ."' OR Owner = 'Nobody' ) + AND ( Type = 'reminder' OR 'Type' = 'ticket' )"; +my $Format = "__Starts__ __Due__"; + +if ( my $Search = RTx::Calendar::SearchDefaultCalendar($session{CurrentUser}) ) { + $Format = $Search->SubValue('Format'); + $Query = $Search->SubValue('Query'); +} + +# we search all date types in Format string +my @Dates = grep { $Format =~ m/__${_}(Relative)?__/ } @DateTypes; + +# used to display or not a date in Element/CalendarEvent +my %DateTypes = map { $_ => 1 } @Dates; + +$Query .= RTx::Calendar::DatesClauses(\@Dates, $begin->strftime("%F"), $end->strftime("%F")); + +# print STDERR $Query, "\n"; + +my %Tickets = RTx::Calendar::FindTickets($session{'CurrentUser'}, $Query, \@Dates); + +</%INIT> diff --git a/rt/share/html/Elements/PageLayout b/rt/share/html/Elements/PageLayout index 981e58a3c..f30d815a5 100755 --- a/rt/share/html/Elements/PageLayout +++ b/rt/share/html/Elements/PageLayout @@ -45,23 +45,27 @@ %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} + +<% include('/elements/init_calendar.html') |n %> + +% if (0) { ## new ticket via customer, and we already have a ticket search box <div id="topactions"> % foreach my $action (reverse sort keys %{$topactions}) { <span class="topaction" id="topaction-<%$action%>"><% $topactions->{"$action"}->{'html'} |n %></span> % } </div> +% } -%# End of div#quickbar from /Elements/Header -</div> - +% if (0) { ##FREESIDE MENUS INSTEAD## if ( $show_menu ) { % if ( $show_menu ) { <div id="nav"> <& /Elements/Menu, toptabs => $toptabs, current_toptab => $current_toptab &> </div> % } +% } <div id="header"> -<h1><% $title %></h1> +%#already shown <h1><% $title %></h1> <div id="page-navigation"> % my $sep = 0; % my $postsep = 0; diff --git a/rt/share/html/Elements/SelectDate b/rt/share/html/Elements/SelectDate index 32a173db4..183086f3d 100755 --- a/rt/share/html/Elements/SelectDate +++ b/rt/share/html/Elements/SelectDate @@ -45,10 +45,21 @@ %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} -<script type="text/javascript"><!-- - onLoadHook('createCalendarLink("<% $Name %>");'); ---></script> +%# in PageLayout instead, once <% include('/elements/init_calendar.html') |n %> <input type="text" id="<% $Name %>" name="<% $Name %>" value="<% $Value %>" size="<% $Size %>" /> +<IMG SRC="<%$fsurl%>images/calendar.png" ID="<% $Name %>_date_button" STYLE="cursor: pointer" TITLE="Select date"> +<script type="text/javascript"> +Calendar.setup({ + inputField: "<%$Name%>", +% if ( defined($ShowTime) && $ShowTime ) { + ifFormat: "%Y-%m-%d %H:%M", + showsTime: true, +% } else { + ifFormat: "%Y-%m-%d", +% } + button: "<%$Name%>_date_button", +}); +</script> <%init> unless ((defined $Default) or ($current <= 0)) { diff --git a/rt/share/html/NoAuth/Calendar/dhandler b/rt/share/html/NoAuth/Calendar/dhandler new file mode 100644 index 000000000..4b4aa631e --- /dev/null +++ b/rt/share/html/NoAuth/Calendar/dhandler @@ -0,0 +1,159 @@ +<%init> + +use Data::ICal; +use Data::ICal::Entry::Todo; +use Data::ICal::Entry::Event; +use Date::ICal; + +$RT::ICalTicketType ||= "Data::ICal::Entry::Todo"; +$RT::ICalReminderType ||= "Data::ICal::Entry::Event"; + +my ($UserId, $SearchId, $MagicNumber); +my $arg = $m->dhandler_arg; + +if ($arg =~ m{^(\d+)@(\d+)/(.*)$}) { + $UserId = $1; + $SearchId = $2; + $MagicNumber = $3; +} elsif ($arg =~ m{^(\d+)/(.*)}) { + $UserId = $1; + $MagicNumber = $2; +} else { + Abort("Corrupted URL."); +} + +my $CurrentUser = new RT::CurrentUser(); +$CurrentUser->LoadById($UserId); +my $user = $CurrentUser->Name; + +# if no user, abort +unless ($CurrentUser->Id) { + $RT::Logger->error("No such user id $UserId from $ENV{'REMOTE_ADDR'}"); + $m->out("RT/".$RT::VERSION ." ".404 ."\n\nno such file\n"); + $m->abort; +} + +# verify user has LoadSavedSearch right +if ($SearchId and not $CurrentUser->HasRight( Right => 'LoadSavedSearch', + Object=> $RT::System )) { + $RT::Logger->error("not enough rights for user $user from $ENV{'REMOTE_ADDR'}"); + $m->out("RT/".$RT::VERSION ." ".404 ."\n\nno such file\n"); + $m->abort; +} + + +# if MagicNumber doesn't match the one stored in database, abort +my $Search; +my $ICalAttribute; +if ($SearchId) { + $Search = $CurrentUser->Attributes->WithId($SearchId); + $ICalAttribute = $Search->FirstAttribute('ICalURL'); +} else { + $ICalAttribute = $CurrentUser->UserObj->FirstAttribute('ICalURL'); +} + +unless ($ICalAttribute) { + $RT::Logger->error("No such ICal feed for $user from $ENV{'REMOTE_ADDR'}"); + $m->out("RT/".$RT::VERSION ." ".404 ."\n\nno such file\n"); + $m->abort; +} + + +if ($MagicNumber ne $ICalAttribute->Content) { + $RT::Logger->error("FAILED LOGIN for $user from $ENV{'REMOTE_ADDR'}"); + $m->out("RT/".$RT::VERSION ." ".404 ."\n\nno such file\n"); + $m->abort; +} + +my $Tickets = RT::Tickets->new($CurrentUser); + +my $Query = "( Status = 'new' OR Status = 'open' OR Status = 'stalled') + AND ( Owner = '" . $CurrentUser->Id ."' OR Owner = 'Nobody' ) + AND ( Type = 'reminder' OR 'Type' = 'ticket' )"; + +$Query = $Search->SubValue('Query') + if $Search; + +$Query .= " AND ( Due > '1970-01-01' OR Starts > '1970-01-01' )"; + +$Tickets->FromSQL($Query); + +$Tickets->OrderBy(FIELD => 'Due', ORDER => 'ASC'); + +my $calendar = Data::ICal->new(); + +my ($uid) = $RT::WebURL =~ m{https?://([^:]+)}; + +while (my $Ticket = $Tickets->Next ) { + + my $event; + if ($Ticket->Type eq 'ticket') { + $event = add_todo($Ticket, $uid); + } else { + $event = add_event($Ticket, $uid); + } + next unless $event; + $calendar->add_entry($event); +} + +my $cal = $calendar->as_string; + +$r->content_type('text/calendar;charset=utf-8'); +$m->clear_buffer(); +$m->out($cal); +$m->abort; + +sub add_event { + my ($Reminder, $uid) = @_; + + return unless defined $Reminder->RefersTo->First; + my $Ticket = $Reminder->RefersTo->First->TargetObj; + + my %event = ( + summary => $Reminder->Subject ? $Reminder->Subject : '', + url => "${RT::WebURL}/Ticket/Display.html?id=" . $Ticket->id, + uid => Date::ICal->new( epoch => time() )->ical() . "-" . $Reminder->Id . "@" . $uid, + categories => $Ticket->QueueObj->Name, + dtstart => Date::ICal->new( epoch => $Reminder->DueObj->Unix )->ical, + ); + + my $event = $RT::ICalReminderType->new(); + $event->add_properties(%event); + + return $event; +} + +sub add_todo { + my ($Ticket, $uid) = @_; + + my %vtodo = ( + summary => $Ticket->Subject ? $Ticket->Subject : '', + dtstart => Date::ICal->new( epoch => $Ticket->CreatedObj->Unix )->ical, + url => "${RT::WebURL}/Ticket/Display.html?id=" . $Ticket->id, + uid => Date::ICal->new( epoch => time() )->ical() . "-" . $Ticket->Id . "@" . $uid, + categories => $Ticket->QueueObj->Name, + ); + + $vtodo{due} = Date::ICal->new( epoch => $Ticket->DueObj->Unix )->ical, + if $Ticket->DueObj; + + if ($Ticket->OwnerObj->Id != $RT::Nobody->Id and $Ticket->OwnerObj->EmailAddress) { + $vtodo{organizer} = "MAILTO:" . $Ticket->OwnerObj->EmailAddress; + $vtodo{attendee} = "MAILTO:" . $Ticket->OwnerObj->EmailAddress; + } elsif ($Ticket->QueueObj->CommentAddress) { + $vtodo{organizer} = "MAILTO:" . $Ticket->QueueObj->CommentAddress; + $vtodo{attendee} = "MAILTO:" . $Ticket->QueueObj->CommentAddress; + } + + $vtodo{priority} = $Ticket->Priority + if $Ticket->Priority; + + my $vtodo = $RT::ICalTicketType->new(); + $vtodo->add_properties(%vtodo); + + return $vtodo; +} + + + +</%init> diff --git a/rt/share/html/NoAuth/css/calendar.css b/rt/share/html/NoAuth/css/calendar.css new file mode 100644 index 000000000..c6b584e96 --- /dev/null +++ b/rt/share/html/NoAuth/css/calendar.css @@ -0,0 +1,75 @@ +.tooltip{position:relative;z-index:1;} +.tooltip:hover{z-index:5;color:#000;} +.tooltip span.tip{display: none; text-align:left;} + +div.tooltip:hover span.tip{ +display:block; +position:absolute; +top:12px; left:24px; width:350px; +border:1px solid #555; +background-color:#fff; +padding: 4px; +font-size: 0.8em; +color:#505050; +} + +.calendardate { + text-align: right; + background-color: #f8f8ff; + width:100%; +} + +.offmonthcalendardate { + text-align: right; + background-color: #f8f8f8; + width:100%; +} + +.todayscalendardate { + text-align: right; + background-color: #fc6; /*#fad163*/ + width:100%; +} + +table.rtxcalendar { + width:100%; + border-collapse: collapse; + border: 1px solid #d0d0d0; + margin-bottom: 6px; +} + +table.rtxcalendar td { + border: 1px solid #d7d7d7; + background: #fff; + vertical-align: top; + width: 14%; +} + +table.rtxcalendar th { + border: 1px solid #d7d7d7; + background: #eef; +} +table.rtxcalendar tbody th { + border: 1px solid #d7d7d7; + background: #eee; + font-weight: normal; +} + +table.rtxcalendar td.offmonth { + background: #f8f8f8; + color: #aaa; +} + +table.rtxcalendar td.today { + background: #ffe; /*#fed;*/ + border: 1px solid #fc6; +} + +table.rtxcalendar td.yesterday { + border-right: none; +} + +table.rtxcalendar td.aweekago { + border-bottom: none; +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/InHeader b/rt/share/html/NoAuth/css/freeside2.1/InHeader new file mode 100644 index 000000000..904535fbd --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/InHeader @@ -0,0 +1,54 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +<!--[if lt IE 8]> +<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/freeside2.1/msie.css" type="text/css" media="all" /> + +<![endif]--> +<!--[if lt IE 7]> +<link rel="stylesheet" href="<%RT->Config->Get('WebPath')%>/NoAuth/css/freeside2.1/msie6.css" type="text/css" media="all" /> +<![endif]--> diff --git a/rt/share/html/NoAuth/css/freeside2.1/admin.css b/rt/share/html/NoAuth/css/freeside2.1/admin.css new file mode 100644 index 000000000..63385bffa --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/admin.css @@ -0,0 +1,60 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +ul.list-menu .menu-item { + font-size: 1.25em; +} +ul.list-menu { + list-style: none; + +} +ul.list-menu .description { + display: block; + padding: 0.5em; + font-style: italic; + padding-left: 1em; +} diff --git a/rt/share/html/NoAuth/css/freeside2.1/base.css b/rt/share/html/NoAuth/css/freeside2.1/base.css new file mode 100644 index 000000000..a38854fb5 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/base.css @@ -0,0 +1,63 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +a { + color: #000; + text-decoration: none; +} + + +div#body a:visited { + color: #666; + +} + +a:hover { + text-decoration: underline; +} + +textarea:focus, input:focus { background-color: #ffd; } diff --git a/rt/share/html/NoAuth/css/freeside2.1/boxes.css b/rt/share/html/NoAuth/css/freeside2.1/boxes.css new file mode 100644 index 000000000..fbd9af108 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/boxes.css @@ -0,0 +1,192 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 { + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + background-color: #efefef; + padding-top: 1em; + margin-top: 1em; + margin-left: 1em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + margin-bottom: 2em; + border-bottom: 2px solid #aaa; + border-right: 2px solid #aaa; + padding-right: 1em; +} + +* html .titlebox { + border-top: none; + border-left: none; +} + +.titlebox .titlebox { + + background-color: #ffffff; + margin-top: 1em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + margin-right: 0.25em; + +} + + +.titlebox { + margin-left: 0em; + margin-right: 0em; + min-height: 1.25em; + +} + + + +.titlebox .titlebox-title { + position: relative; + margin-top: -1.5em; + padding-bottom: 0.25em; + padding-left: 1em; + margin-right: -1em; + +} + +.titlebox .titlebox-title a { + text-decoration: none; + color: black; + +} + +.titlebox .titlebox-title a:hover { + text-decoration: underline; + +} + +.titlebox .titlebox-title a:visited { + color: #fff; +} + +.titlebox .titlebox-title .left { + font-weight: bold; + background: #ccc; + margin-left: 0.75em; + padding:0.5em; + padding-left: 0.75em; + padding-right: 0.75em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + border-bottom: 2px solid #aaa; + border-right: 2px solid #aaa; + + +} + +.titlebox .titlebox-title .right-empty { + display:none; +} + +.titlebox .titlebox-title .right { + position: absolute; + right: 0; + top: 0.5em; + font-size: 0.9em; + background: #dedede; + border-left: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding-right: 0.4em; + padding-left: 0.4em; + padding-bottom: 0.2em; + padding-top: 0.5em; + -moz-border-radius-bottomleft: 0.25em; + -webkit-border-bottom-left-radius: 0.25em; + + + -moz-border-radius-topright: 0.25em; + -webkit-border-top-right-radius: 0.25em; + +} + +.titlebox .titlebox-title .right a { + color: #000; +} + +.titlebox .titlebox-content { + padding-top: 0.5em; + padding-left: 1em; + padding-bottom: 1em; + +} + +.titlebox .titlebox-title .widget a { + display: block; + margin: 0; + margin-top: 0.5em; + width: 20px; + + background: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/css/rollup-arrow.gif) no-repeat center center; + + position: absolute; + top: -1em; + left: 0.15em; + float: left; + + padding: 11px 0 0 0; + overflow: hidden; +} + +* html .titlebox .titlebox-title .widget a { + background-position: center 0.3em; + top: 0em; + left: -1.5em; +} + +.titlebox.rolled-up .titlebox-title .widget a { + background-image: url(<%RT->Config->Get('WebPath')%>/NoAuth/images/css/rolldown-arrow.gif); +} + +.titlebox hr.clear { + display: none; +} diff --git a/rt/share/html/NoAuth/css/freeside2.1/collection.css b/rt/share/html/NoAuth/css/freeside2.1/collection.css new file mode 100644 index 000000000..cbc8cefd7 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/collection.css @@ -0,0 +1,52 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} + +table.collection td:first-child, table.collection th:first-child { + padding-left: 1em; +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/forms.css b/rt/share/html/NoAuth/css/freeside2.1/forms.css new file mode 100755 index 000000000..8afedcb03 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/forms.css @@ -0,0 +1,242 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 { + + background: none; + border: none; + margin: 0; +} + + +.input-row .label { + position: relative; + text-align: right; + width: 4em; +} + +.input-row .input { + position: relative; + left: 1em; + width: 10em; + text-align: right; +} + +.value { + font-size: 0.85em; + +} + + + +div.button-row { + text-align: right; + padding-right: 0.5em; +} + + +input[type=reset], input[type=submit], input[class=button] { + color: #fff; + background: #3858a3; + padding: 0.25em; + padding-left: 0.5em; + padding-right: 0.5em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; +} + +input.button:hover, button:hover, input[type=reset]:hover, input[type=submit]:hover, input[class=button]:hover { + background: #1D3B7D; +} + +input.button:focus, button:focus, input[type=reset]:focus, input[type=submit]:focus, input[class=button]:focus { + background: #1D3B7D; +} + +div.error div.error { + border: 2px solid #aa0000; + border-top: 1px solid #bb0000; + border-left: 1px solid #bb0000; + background-color: #fcc; +} + +div.error .titlebox-title span.left { + background-color: #f00; + color: #fff; + border: 1px solid #cc0000; + border-right: 2px solid #bb0000; + border-bottom: 2px solid #bb0000; + +} + + +div.results .titlebox-title .left, div.results .titlebox { + border: 1px solid #aa9; + border-bottom: 2px solid #990; + border-right: 2px solid #990; +} + +div.results .titlebox-title .left { + background: #ff9; + +} + +div.results .titlebox { + background: #ffc; + +} + +div.results .titlebox-content { + padding: 0; +} + + +.label, .labeltop { + text-align: right; + font-size: 0.8em; + padding-right: .5em; + +} + +.cflabel { + text-align: right; + font-size: 0.8em; + padding-right: .5em; + width: 25%; +} + +.labeltop, .label, .value { + padding-top: 0.25em; +} + +div.ticket-info-basics div.titlebox-content .labeltop{ + width: 10em; +} + +div.submit { + text-align: right; +} + +div.submit .extra-buttons { + text-align: left; +} + + +div.widget { + padding-bottom: 0.5em; +} + +div.widget .label { + text-align: right; + display: block; + width: 15em; + float: left; + clear: both; + font-size: 0.9em; + padding-right: 0.5em; +} + +div.widget .hints { + + display: block; + padding-left: 14em; + font-style: italic; +} + + +%# ComboBox styles... some properties like height and width must be dynamically +%# set in the JS (at least for now). +.combobox { + position: relative; + width: 11.5em; +} + +.combobox .combo-button { + right: 0; + padding: 0; + margin-top: 0; + cursor: default; + color: ButtonFace; + background: ButtonFace; + border: 2px outset ButtonHighlight; +} + +/* this style replaces the default down-triangle with one that looks more like + * native widget sets. It does not work in IE as it's an :after pseudo element + * with a "content" value. but that's ok because IE can't display unicode 25be + * anyway */ + +.combobox .combo-button:after { + color: ButtonText; + margin: 0; + padding: 0; + margin-top: -0.5em; + margin-left: -0.8em; + content: "\25be"; +} + +.combobox .combo-text { + border: 1px inset ButtonHighlight; + margin: 0; + padding: 0; +} + +.combobox .combo-list { + border: 1px outset; + z-index: 150; +} + +.value .TimeUnits{ + margin-left: .5em; + width: 7em; +} + +.cfinvalidfield { + font-style: italic; + color: red; +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/freeside.css b/rt/share/html/NoAuth/css/freeside2.1/freeside.css new file mode 100644 index 000000000..6e5f3b576 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/freeside.css @@ -0,0 +1,9 @@ + +%# div.titlebox { +%# background: #d4d4d4; +%# } +%# +%# div.titlebox-title { +%# background: #e8e8e8; +%# } + diff --git a/rt/share/html/NoAuth/css/freeside2.1/images/dhandler b/rt/share/html/NoAuth/css/freeside2.1/images/dhandler new file mode 100644 index 000000000..6ec9dea05 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/images/dhandler @@ -0,0 +1,8 @@ +<%INIT> +use File::Basename; +my $arg = $m->dhandler_arg; +my $file = dirname($m->current_comp->source_file) . '/source/'. $arg; +RT::Interface::Web->SendStaticFile( File => $file ); + +$m->abort; +</%INIT> diff --git a/rt/share/html/NoAuth/css/freeside2.1/images/source/background-gradient.png b/rt/share/html/NoAuth/css/freeside2.1/images/source/background-gradient.png Binary files differnew file mode 100644 index 000000000..9c126c7e3 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/images/source/background-gradient.png diff --git a/rt/share/html/NoAuth/css/freeside2.1/layout.css b/rt/share/html/NoAuth/css/freeside2.1/layout.css new file mode 100644 index 000000000..0e7912d98 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/layout.css @@ -0,0 +1,237 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 */ + +body { + + + padding:0; + margin:0; + + /*background: #547CCC url(<%RT->Config->Get('WebPath')%>/NoAuth/css/freeside2.1/images/background-gradient.png) top left repeat-x ; */ + background: #f8f8f8; + font-family: arial, helvetica, sans-serif; + + color: #000000; +} + +div#body { + position: relative; + padding: 1em; + padding-top: 1.8em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + /* margin-left: 10.5em; */ + /* margin-top: 5.2em; */ + margin-left: .5em; + margin-top: 3.0em; + margin-right: 1em; + margin-bottom: 0em; + min-height: 10%; + background: #fff; + border-top: 2px solid #ccc; + border-left: 2px solid #ccc; + z-index:1; + + +} + +#topactions { + position: absolute; + background: transparent; + top: 3.8em; + right: 1em; + width: auto; + min-width: 42em; + font-size: 0.9em; + z-index: 99; +} + +#topactions form * { + vertical-align: top; +} + +#topactions button, #topactions select, #topactions input{ + padding-top: 0em; + padding-bottom: 0em; + width: 8em; + +} + +#topactions form { + display: block; + +} + +#topactions #CreateTicketInQueue { + text-align: right; + +} +#topactions #simple-search { + float: right; +} + +#topactions #simple-search .field{ + margin-left: 1em; + color: #787; + } + +#topactions #simple-search .field:focus { + color: #000; + } + +#topactions #GotoTicket { + text-align: right; + +} + +div#footer { + position: absolute; + right: 0; + text-align: right; + font-size: 0.9em; + margin-top: 2em; + background: #fff; + margin-bottom: 0; + padding-left: 3em; + padding-right: 1em; + + + + + + border-top: 2px solid #aaa; + border-left: 2px solid #aaa; + + + + -moz-border-radius-topleft: 0.5em; + -webkit-border-top-left-radius: 0.5em; + -moz-border-radius-bottomleft: 0.5em; + -webkit-border-bottom-left-radius: 0.5em; +} + +div#footer #time { +display: none ; +} + +div#footer #bpscredits { + text-align: right; + background: url(<%RT->Config->Get('WebPath')%>/NoAuth/images//bplogo.gif) no-repeat top right; + padding-top: 4em; +} + + +/* logo stuff */ + +div#logo { +} + + +div#logo a { + display: none; + position: absolute; + left: 0; + bottom: 0; +} +div#logo a img { + border: 0; +} +div#logo .rtname { + position: absolute; + font-weight: bold; + top: 1em; + left: 1em; +} + + +div#quickbar, div#logo { + font-size: 0.9em; +} +div#quickbar a, div#logo a { + color: #000; +} + + +div#quickbar { + background: #eaeaea; + padding-top: 1em; + padding-left: 1em; + padding-bottom: 0.5em; + height: 1em; + border-bottom: 1px solid #ccc; + +} +div#quick-personal { + float: right; + margin-right: 1em; +} + + +div#header h1 { + position: absolute; + left: 7.25em; + right: 20em; + overflow: hidden; + height: 1em; + font-size: 1.4em; + margin-top: 0.4em; + padding: 0.25em; + color: #fff; +} + +/* in multi-column layouts, make sure we have an internal gutter */ + +tr .boxcontainer { + padding-right: 1em; +} + +tr .boxcontainer:last-child { + padding-right: 0; +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/login.css b/rt/share/html/NoAuth/css/freeside2.1/login.css new file mode 100644 index 000000000..2eb423876 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/login.css @@ -0,0 +1,82 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 hr { + display: none; +} + +#login-box { + + width: 30em; + +margin-right:auto;margin-left:auto; + padding-top: 2em; + padding-bottom: 2em; + + +} + + +#login-box .input-row { + position: relative; + height: 1.5em; + padding-top: 1em; +} + +#login-box .input-row .label { + + float: left; + width: 8em; + text-align: right; + font-weight: bold; + + +} + +#login-box .button-row { + margin-top: 0.5em; +} diff --git a/rt/share/html/NoAuth/css/freeside2.1/main.css b/rt/share/html/NoAuth/css/freeside2.1/main.css new file mode 100644 index 000000000..69e7f44e2 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/main.css @@ -0,0 +1,71 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +% $m->callback(CallbackName => 'Begin'); + +@import "yui-fonts.css"; +@import "base.css"; + +@import "layout.css"; +@import "nav.css"; +@import "forms.css"; +@import "boxes.css"; + +@import "login.css"; +@import "ticket-lists.css"; +@import "ticket-search.css"; +@import "portlets.css"; +@import "ticket.css"; +@import "tools.css"; +@import "admin.css"; +@import "collection.css"; +@import "misc.css"; + +@import "freeside.css"; + +% $m->callback(CallbackName => 'End'); + diff --git a/rt/share/html/NoAuth/css/freeside2.1/misc.css b/rt/share/html/NoAuth/css/freeside2.1/misc.css new file mode 100644 index 000000000..80d7ce0b4 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/misc.css @@ -0,0 +1,87 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} + +@import "../base/misc.css"; + +#body.calpopup { + margin-left: 1em; + margin-top: 1em; +} + +#body.calpopup a.today { + font-size: 1em; + font-weight: bold; +} + +#body.calpopup a { + font-size: 0.8em; +} + +.calendar { + text-align: center; + margin: 0 0 0 0; +} + +.calendar td, .calendar th { padding: 0.1em 0.1em 0.1em 0.1em; } + +.calendar caption .month { + padding: 0 0.25em 0 0.25em; + font-size: 1.5em; +} + +.comment { + padding-left: 0.5em; + color: #999; + +} + +#comp-Ticket-ShowEmailRecord #body { + margin-left: 1em; + margin-top: 1em; + overflow: auto; +} diff --git a/rt/share/html/NoAuth/css/freeside2.1/msie.css b/rt/share/html/NoAuth/css/freeside2.1/msie.css new file mode 100644 index 000000000..2297c304a --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/msie.css @@ -0,0 +1,246 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +div#body { + left: 0.25em; + height: 100%; + top: 1em; + +} + + +#footer { + padding: 1em; +} + + +div#header h1 { + position: absolute; + left: 7.25em; + overflow: hidden; + height: 1em; + font-size: 1.4em; + margin-top: 0.4em; + right: 23.5em; + padding: 0.25em; +} + + +#topactions { + top: 4.1em; + width: auto; +} +.topaction form * { + vertical-align: top; +} + +.topaction form button, .topaction form input { + height: 2em; +} + +.topaction form input.field { + height: 1.6em; +} + +.topaction .select-queue { + margin-top: 0.2em; +} + +div#page-navigation ul#actions-menu { + margin-top: -2.9em; + margin-right: -0.2em; + border-top: 1px solid #ccc; + border-right: none; +} + + +div#page-navigation { + position: absolute; + top: 6.2em; + height: 1.8em; + background: #fff; + border-top: 2px solid #ccc; +} + + + +div#page-navigation ul#page-menu { + margin-top: -2.5em; + margin-left: 4em; + background: none; + border: none; +} + + +div#quickbar { height: 1.2em; + + +} + +#pick-criteria td.label select { + width: 10em; +} + + +#editquery { + margin-top: 0.2em; + width: 39%; + left: 60%; +} + +div#nav li.first { + margin-top: 0.75em; + border-top: none; +} +div#nav ul ul li.first { + border-top: 1px solid #cccccc; + margin-top: 0.25em; +} + +div#nav li.last { + border-bottom: none; + padding-bottom: 0; + margin-bottom: 0; +} + + +.ticket-transaction .type a { font-weight: normal; text-decoration: none; color: #fff; } + + +.titlebox { + border-top: none; + border-left: none; +} + +.titlebox .titlebox-title .left { + padding: 0.25em; + padding-left: 0.5em; +} + +.titlebox { +} + +.titlebox .titlebox-title .right { + border-right: 2px solid #aaa; + +} + + +.titlebox .titlebox-content { + padding-top: 2.2em; +} + +.titlebox table.ticket-list, .titlebox table.queue-summary { + width: 95%; + padding: 0.5em; + margin-left: auto; + margin-right: auto; +} + +th.collection-as-table { + padding: 0.25em; +} + +table.queue-summary td, td.collection-as-table { + padding: 0.25em; +} + + .titlebox-title { + position: relative; +} + +.titlebox-title .widget { + position: absolute; + top: -0.25em; + left: -0.25em; + +} +.titlebox-title .left { + position: absolute; + top: -0.75em; + left: 0.5em; +} + + +.titlebox .titlebox-title .right{ + top: 0.2em; + right: -0.2em; +} + +/* nested things. like the ticket dates tab */ +.titlebox .titlebox .titlebox-title .right{ + top: 0.25em; +} + +.combobox { + float: left; +} + +.combobox .combo-button { + color: ButtonText; + padding: 0; +} + +.combobox .combo-list { + margin-top:0.5em; + margin-left: -0.2em; +} + +#pick-criteria td.label { + width: auto; +} + +#pick-criteria td.operator { + width: 7.5em; +} + +.plain-text-white-space { + word-wrap: break-word; /* Internet Explorer 5.5+ */ + white-space: pre; /* IE only hack to re-specify in addition to + word-wrap */ +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/msie6.css b/rt/share/html/NoAuth/css/freeside2.1/msie6.css new file mode 100644 index 000000000..bf6b1ed6d --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/msie6.css @@ -0,0 +1,88 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +.topaction .select-queue { + margin-top: 0; +} + +div#page-navigation ul#page-menu { + margin-top: -3.2em; +} + +.titlebox-title .widget { + top: -1em; + left: 0.5em; + +} +.titlebox .titlebox-title .right{ + position: absolute; + top: 0.25em; + right: 1em; +} + +/* nested things. like the ticket dates tab */ +.titlebox .titlebox .titlebox-title .right{ + right: 1.3em; +} + +#login-box .titlebox .titlebox-title .right { + margin-top: -0.1em; + right: 0em; +} + +.titlebox +{ + height: auto !important; + height: 1.25em; +} + + +.ticket-transaction .messagebody img { + /* ie6 does not support max-width */ + width: expression(this.width > 401 ? 400 : true); +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/nav.css b/rt/share/html/NoAuth/css/freeside2.1/nav.css new file mode 100644 index 000000000..8a52e62c4 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/nav.css @@ -0,0 +1,206 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +div#nav { + position: absolute; + left: 0; + font-size: 0.9em; + top: 3.2em; + width: 10.5em; + background: #fff; + -moz-border-radius-bottomright: 0.5em; + -webkit-border-bottom-right-radius: 0.5em; + border-left: 1px solid #999; +border-top: 1px solid #999; + + -moz-border-radius-topright: 0.5em; + -webkit-border-top-right-radius: 0.5em; + z-index: 99; + + +} + +div#nav ul { + padding-left: 0.75em; + margin-left: 0; + padding-right: 0.75em; + list-style-type: none; +} + +div#nav li:first-child { + border-top: 1px solid #ccc; + padding-top: 0.25em; + +} + +div#nav li { + padding: 0.125em; + padding-bottom: 0.25em; + margin-bottom: 0.25em; + border-bottom: 1px solid #ccc; + padding-left: 0.5em; + margin-right: 0.25em; + margin-left: 0em; +} + +div#nav li li:first-child { + margin-top: 0.25em; +} +div#nav li li { + margin-left: -0.5em; + padding-left: 0.25em; + margin-right: -0.5em; +} + +div#nav li li:last-child { + margin-bottom: 0; + padding-bottom: 0; + border: none; +} + +div#nav .bullet { + display: none; +} + +div#nav .separator { +display: none; +} + + +div#nav a, div#page-navigation a{ + text-decoration: none; + font-weight: normal; + color: #000; +} + +div#nav a:hover, div#page-navigation a:hover { + text-decoration: underline; +} + + + +div#nav a.selected, div#page-navigation a.selected { + font-weight: bold; +} + + +div#nav a.selected:after { +/* content: " > " */ +} + +div#page-navigation { + background: white; + position: relative; + /* width:100%; */ + z-index: 10; + +} + + +div#page-navigation ul { + +} + +div#page-navigation ul#page-menu { + display: block; + /* position: absolute; */ + float: left; + left: 8em; + font-size: 0.9em; + top: 2.3em; + min-height: 1em; + background-color: white; + right: 0em; + padding-top:0.3em; + padding-bottom:0.5em; + padding-right: 4em; + border-top: 1px solid #aaa; + +} + +/* ie hack */ +* html div#page-navigation ul#page-menu { + left: 6.5em; + top: 3.2em; + padding-left: 2em; +} + + +div#page-navigation ul#actions-menu { + /* position: absolute; */ + float: right; + right: 1em; + top: 5.2em; + margin-top: 0em; + padding: 0.25em; + padding-left: 0.5em; + padding-right: 0.5em; + + background: #dedede; + border-left: 1px solid #aaa; + border-bottom: 2px solid #aaa; + -moz-border-radius-bottomleft: 0.5em; + -webkit-border-bottom-left-radius: 0.5em; + -moz-border-radius-topright: 0.25em; + -webkit-border-top-right-radius: 0.25em; + + + +} + + + +div#page-navigation ul li{ + display: inline; + +} + + +ul.page-navigation ul.page-menu { + float: right; +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/portlets.css b/rt/share/html/NoAuth/css/freeside2.1/portlets.css new file mode 100644 index 000000000..d96d5a9f0 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/portlets.css @@ -0,0 +1,71 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +table.myrt { + width: 100%; +} + +table.dashboard { + width: 100%; + border: 0; +} + +.quick-create .select-queue { + width: 12em; +} + +.quick-create input[type="text"], .quick-create textarea { + width: 100%; + +} + +.reminders blockquote { + margin-top: 0.5em; + margin-bottom: 0.5em; + margin-left: 1em; + margin-right: 1em; +} diff --git a/rt/share/html/NoAuth/css/freeside2.1/ticket-lists.css b/rt/share/html/NoAuth/css/freeside2.1/ticket-lists.css new file mode 100644 index 000000000..799a391e5 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/ticket-lists.css @@ -0,0 +1,172 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +table.ticket-list, table.queue-summary, table.collection { + margin-top: 0.75em; + font-size: 0.9em; + border: 1px solid #aaa; + border-bottom: 2px solid #999; + border-right: 2px solid #999; + + +} + +table.queue-summary tr>*:first-child { + padding-left: 1em; + +} + + +table.queue-summary tr>*:last-child { + padding-right: 1em; + +} + +table.ticket-list a, table.queue-summary a, table.collection a { + font-weight: bold; +} + + +table.ticket-list th.collection-as-table, table.collection th.collection-as-table { + background: #ddd; + font-size: 0.9em; + margin-bottom: 0.5em; + text-align: left; + +} + + +table.queue-summary th.collection-as-table { + font-size: 0.9em; + margin-bottom: 0.5em; + text-align: right; + +} + +table.queue-summary th.collection-as-table:first-child { + text-align: left; + +} + + +tr.collection-as-table+tr.collection-as-table th { + border-bottom: 2px solid grey; + +} + + + + +table.queue-summary td { + background: #efefef; + border-bottom: 1px solid #ccc; +} + + + +tr.evenline td { + background: #eee; +} + +tr.oddline td { + background: #fff; + +} + +tr.evenline td, tr.oddline td { + padding-top: 0.5em; +} + + + +tr.evenline+tr.evenline td, tr.oddline+tr.oddline td{ + padding-top: 0; + border: none; +} + + + +table.ticket-list td:first-child, table.ticket-list th:first-child { + padding-left: 1em; +} + +table.ticket-list td:last-child, table.ticket-list th:last-child { + padding-right: 1em; +} + +th.collection-as-table , td.collection-as-table { + padding-right: 0.5em; +} + +.pagenum.a:hover, .paging a.nav:hover{ +text-decoration: underline; +} + + +.pagenum *, .paging a.nav{ +padding: .5em; +} + +.currentpage{ +text-decoration: none; +font-weight: bold; +background: #eee; +} + +div.paging{ +text-align: center; +padding-bottom: 1em; +} + + +/* full-page ticket lists */ +#body>table.ticket-list { + margin-bottom: 2em; + +} + + diff --git a/rt/share/html/NoAuth/css/freeside2.1/ticket-search.css b/rt/share/html/NoAuth/css/freeside2.1/ticket-search.css new file mode 100644 index 000000000..7a31d3e82 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/ticket-search.css @@ -0,0 +1,199 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +#comp-Search-Build #body { + position: relative; +} + +#pick-criteria select { + width: 8em; +} + +#pick-criteria tr { + height: 1.5em; +} + +#pick-criteria td.label { + font: message-box; + padding-right: 0.5em; + width: 11em; +} + +#pick-criteria td.label * { + width: 8.5em; +} + +#pick-criteria td.label select { + text-align: right; +} + +#pick-criteria td.operator { + padding-right: 0.5em; + text-align: left; + vertical-align: bottom; + width: 7em; +} + +#pick-criteria td.operator select { + text-align: right; +} + +#pick-criteria td.value input, +#pick-criteria td.value select { + width: 10em; +} + +#pick-criteria td.value #ValueOfDate { + width: 6em; +} + + +#pick-criteria td.value #ValueOfTime { + width: 4em; + +} + +#pick-criteria td.value #ValueOfTime-TimeUnits{ + width: 5.5em; +} + +#pick-criteria td.value { + padding-right: 0.5em; + text-align: left; + font: message-box; +} + +#editquery, #editsearches{ + position: absolute; + margin-top: 0.2em; + right: 1em; + left: 60%; + top: 1em; +/* margin-top: -1em; */ +} + +#editquery { + top: 1.3em; +} + + +#editsearches { + top: 24em; +} + + +#pick-criteria { + width: 58%; + padding-top: 0em; + margin-top: 0em; +} + +#pick-criteria .titlebox-content { + overflow-x: auto; +} + +#comp-Search-Build .submit { + width: 58%; +} + + +#sorting.titlebox { + width: 55%; + padding-right: 1em; +} + +#comp-Search-Build #columns { +} + +#display-options .submit { + width: 100%; +} + + + +.search-result-views { + position: absolute; + top: 0; + right: 0; + margin-top: -2px; + margin-right: 0em; + padding: 0.25em; + padding-left: 0.5em; + padding-right: 0.5em; + background-color: #ccc; + border-left: 1px solid #999; + border-bottom: 1px solid #999; + -moz-border-radius-bottomleft: 0.5em; + -webkit-border-bottom-left-radius: 0.5em; +} + + + +.search-result-views li { + + display: inline; +} + +.search-result-views li:after { + content: " \00b7 "; +} + +.search-result-views li:last-child:after { + content: ""; + +} + + +.refresh { + float: left; +} + +/* Force some widget to fit at max parent box */ +#HomeRefreshInterval, #SavedSearchLoad, #SavedSearchOwner { + max-width: 100%; +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/ticket.css b/rt/share/html/NoAuth/css/freeside2.1/ticket.css new file mode 100644 index 000000000..78477e0d4 --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/ticket.css @@ -0,0 +1,230 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +div#ticket-history div.ticket-transaction { + border-top: 1px solid #ccc; + padding-bottom: 0.25em; + +} + +div#ticket-history div.odd { + background-color: #fff; +} + +div#ticket-history { + + margin-top: 0.75em; + border-left: 1px solid #ccc; + + border-right: 2px solid #999; + border-bottom: 2px solid #999; + +} + +.ticket-transaction div.metadata span.actions { + position: absolute; + right: 2.3em; + padding: 0em; + background: #ccc; + text-align: right; + border-left: 1px solid #999; + border-bottom: 1px solid #999; + color: #ccc; + -moz-border-radius-bottomleft: 0.5em; + -webkit-border-bottom-left-radius: 0.5em; + white-space: nowrap; +} + +.ticket-transaction div.metadata span.type { + text-align: center; + float: left; + margin: 0.25em 0.70em 0.25em 0.25em; + width: 1em; + height: 1.25em; + padding: 0.75em 0 0 0; + border-right: 1px solid #999; + border-bottom: 1px solid #999; + -moz-border-radius: 0.25em; + -webkit-border-bottom-right-radius: 0.25em; +} + +div#ticket-history span.type a { + color: #fff; +} + + +div#ticket-history span.date { + width: 10em; +} + + +div#ticket-history span.description { + margin-left: 1em; + font-weight: bold; +} + +div#ticket-history span.time-taken { + margin-left: 1em; +} + +div#ticket-history div.content { + padding-right: 1em; + padding-bottom: 0.7em; + font-size: 1.1em; + margin-left: 1.5em; +} + +.plain-text-white-space { + white-space: pre-wrap; + font-family: monospace; +} + +.ticket-transaction .messagebody { + font-size: 1em; + padding-left: 1em; + margin-top: 0.5em; + padding-top: 0.5em; + border-top: 1px solid #ccc; + /*overflow: auto; */ + min-height: 2.5em; + /* To avoid overlapping of "downloadattachment" by messagebody */ + clear: left; +} + +.ticket-transaction .messagebody img { + max-width: 100%; +} + +div#ticket-history div.downloadattachment { +float: right; +clear: both; +font-size: 0.9em; +text-align: right; +background: #ddd; +padding: 0.5em; +margin-left: 1em; + +border: 1px solid #ccc; +border-right: 2px solid #aaa; +border-bottom: 2px solid #aaa; +margin-top: 0.5em; +-moz-border-radius: 0.5em; +-webkit-border-radius: 0.5em; + +} + +div#ticket-history div.downloadattachment .downloadcontenttype{ +color: #666; +padding-right:0.25em; +} + + +div#ticket-history .message-header-key { + width: 7em; + font-weight: bold; + color: #666; +} + + +div#ticket-history .messagebody .messagebody{ + font-size: 1em; + padding: 0; + border: 0; + margin: 0; +} + + + +.ticket-transaction.basics .type { background: #b32; } +.ticket-transaction.cfs .type { background: #b32; } +.ticket-transaction.people .type { background: #48c; } +.ticket-transaction.links .type { background: #316531; } +.ticket-transaction.dates .type { background: #633063; } +.ticket-transaction.message .type { background: #069; } +.ticket-transaction.reminders .type { background: #369; } +.ticket-transaction.other .type { background: #abc; } + + + + +.ticket-info-cfs .titlebox-title .left { background-color: #b32; color: #fff;} +.ticket-info-basics .titlebox-title .left { background-color: #b32; color: #fff;} +.ticket-info-people .titlebox-title .left { background-color: #48c; color: #fff;} +.ticket-info-requestor .titlebox-title .left { white-space: nowrap; background-color: #48c; color: #fff;} +.ticket-info-links .titlebox-title .left { background-color: #316531; color: #fff;} +.ticket-info-reminders .titlebox-title .left { background-color: #369; color: #fff;} +.ticket-info-dates .titlebox-title .left { background-color: #633063; color: #fff;} +.ticket-info-attachments .titlebox-title .left { background-color: #993366; color: #fff;} + + +.ticket-summary .titlebox-title a, div#body .ticket-summary .titlebox-title a:visited { color: #fff;} + +.unread-messages .titlebox , .unread-messages .titlebox-title .left { + border: 1px solid #99a; + border-right: 2px solid #aab; + border-bottom: 2px solid #aab; + +} + + +.unread-messages .titlebox { + background-color: #dde; +} + +.unread-messages .titlebox-title .left { + background-color: #cce; +} + +.ticket-inactive { + text-decoration: line-through; + color: #666 +} + +table.ticket-summary td.boxcontainer:first-child { + width: 50%; +} + diff --git a/rt/share/html/NoAuth/css/freeside2.1/tools.css b/rt/share/html/NoAuth/css/freeside2.1/tools.css new file mode 100644 index 000000000..843feb27f --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/tools.css @@ -0,0 +1,56 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC +%# <jesse@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/licenses/old-licenses/gpl-2.0.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 }}} +table.myday td { + padding: 1em; +} + +ol.dashboard-queries { + padding-left: 1.5em; +} + + diff --git a/rt/share/html/NoAuth/css/freeside2.1/yui-fonts.css b/rt/share/html/NoAuth/css/freeside2.1/yui-fonts.css new file mode 100644 index 000000000..fdae8d98f --- /dev/null +++ b/rt/share/html/NoAuth/css/freeside2.1/yui-fonts.css @@ -0,0 +1,7 @@ +/* +Copyright (c) 2008, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 2.5.1 +*/ +body {font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;} diff --git a/rt/share/html/NoAuth/images/created.png b/rt/share/html/NoAuth/images/created.png Binary files differnew file mode 100644 index 000000000..4d5eeb9ea --- /dev/null +++ b/rt/share/html/NoAuth/images/created.png diff --git a/rt/share/html/NoAuth/images/created_due.png b/rt/share/html/NoAuth/images/created_due.png Binary files differnew file mode 100644 index 000000000..52dfc96f0 --- /dev/null +++ b/rt/share/html/NoAuth/images/created_due.png diff --git a/rt/share/html/NoAuth/images/due.png b/rt/share/html/NoAuth/images/due.png Binary files differnew file mode 100644 index 000000000..30a3aff8a --- /dev/null +++ b/rt/share/html/NoAuth/images/due.png diff --git a/rt/share/html/NoAuth/images/reminder.png b/rt/share/html/NoAuth/images/reminder.png Binary files differnew file mode 100644 index 000000000..4370b6902 --- /dev/null +++ b/rt/share/html/NoAuth/images/reminder.png diff --git a/rt/share/html/NoAuth/images/resolved.png b/rt/share/html/NoAuth/images/resolved.png Binary files differnew file mode 100644 index 000000000..09db36d5a --- /dev/null +++ b/rt/share/html/NoAuth/images/resolved.png diff --git a/rt/share/html/NoAuth/images/started.png b/rt/share/html/NoAuth/images/started.png Binary files differnew file mode 100644 index 000000000..e177addea --- /dev/null +++ b/rt/share/html/NoAuth/images/started.png diff --git a/rt/share/html/NoAuth/images/starts.png b/rt/share/html/NoAuth/images/starts.png Binary files differnew file mode 100644 index 000000000..88064ba50 --- /dev/null +++ b/rt/share/html/NoAuth/images/starts.png diff --git a/rt/share/html/NoAuth/images/starts_due.png b/rt/share/html/NoAuth/images/starts_due.png Binary files differnew file mode 100644 index 000000000..16a4de46f --- /dev/null +++ b/rt/share/html/NoAuth/images/starts_due.png diff --git a/rt/share/html/NoAuth/images/updated.png b/rt/share/html/NoAuth/images/updated.png Binary files differnew file mode 100644 index 000000000..680e79a54 --- /dev/null +++ b/rt/share/html/NoAuth/images/updated.png diff --git a/rt/share/html/Prefs/Calendar.html b/rt/share/html/Prefs/Calendar.html new file mode 100644 index 000000000..5fbdd2717 --- /dev/null +++ b/rt/share/html/Prefs/Calendar.html @@ -0,0 +1,123 @@ +<%args> +$ChangeURL => undef +$ResetURL => undef +$SearchType => 'Ticket' +$HiddenField => undef +</%args> + +<& /Elements/Header, Title => $title &> +<& /User/Elements/Tabs, + current_tab => 'Prefs/Calendar.html', + Title => $title +&> + +<&| /Widgets/TitleBox, title => loc('ICal Feeds (ics)') &> + +<&| /Widgets/TitleBox, title => 'Help' &> + +<h3>displaying reminders :</h3> +<p>If you want to have reminders in a search you need to go in the <a +href="<%$RT::WebPath%>/Search/Edit.html"><%loc("Edit Query")%></a> tab +of the <%loc("query builder")%> and add something like that : + + <pre> + AND ( Type = 'ticket' OR Type = 'reminder' ) +</pre> +</p> + +<h3>displaying other kind of dates :</h3> +<p>By default RTx::Calendar display Due and Starts dates. You can +select other kind of events you want with the <%loc("Display +Columns")%> section in the <a +href="<%$RT::WebPath%>/Search/Build.html"><%loc("Query +Builder")%></a>. The following one will display the two latter and +LastUpdated dates : + +<pre> + '<small>__Due__</small>', + '<small>__Starts__</small>', + '<small>__LastUpdated__</small>' +</pre> +</p> + +<h3>changing the default query :</h3> +<p>You can change the default Query of Calendar.html and MyCalendar +portlet by saving a query with the name <code>calendar</code> in the +<a href="<%$RT::WebPath%>/Search/Build.html"><%loc("Query +Builder")%></a>.</p> + +</&> + +<& /Prefs/Elements/CalendarFeed &> + +% # only allow this part if +% if ($AllowSearch) { + +% my $search_count; + +% # I'm quite sure the loop isn't usefull but... +% my @Objects = $session{CurrentUser}->UserObj; +% for my $object (@Objects) { +% next unless ref($object) eq 'RT::User' && $object->id == $session{'CurrentUser'}->Id; +% my @searches = $object->Attributes->Named('SavedSearch'); +% for my $search (@searches) { +% next if ($search->SubValue('SearchType') +% && $search->SubValue('SearchType') ne $SearchType); +% $search_count++; +<& /Prefs/Elements/CalendarFeed, Object => $object, Search => $search &> + +% } +% } +% unless ($search_count) { + +<&| /Widgets/TitleBox, title => loc('Private Search ICal feeds') + , title_class=> 'inverse' + , color => "#993333" &> + +You can add private ICal feeds by saving new queries in <a +href="<%$RT::WebPath . '/Search/Build.html'%>">the Query Builder</a> + +</&> + +% } +% } else { +%#<&| /Widgets/TitleBox, title => loc('Private Search ICal feeds') +%# , title_class=> 'inverse' +%# , color => "#993333" &> +%# +%#<%loc('Private search ICal feeds disabled. To enable them, ask your admin for "[_1]" and "[_2]" rights', +%# loc('CreateSavedSearch'), +%# loc('LoadSavedSearch') )%> +%# +%#</&> +% } + +</&> + +<%INIT> +use Digest::SHA1; +use RT::SavedSearches; + +my $title = loc("Calendar Prefs"); +my $AllowSearch; + +$AllowSearch = 1 + if $session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch', + Object=> $RT::System ); + +my $object; + +if ($HiddenField eq 'Private') { + $object = $session{CurrentUser}->UserObj; +} elsif ($AllowSearch and my ($SearchId) = $HiddenField =~ m/SavedSearch\-(\d+)/) { + $object = $session{CurrentUser}->Attributes->WithId($SearchId); +} + +if (defined $ChangeURL) { + my @args = $object->SetAttribute(Name => 'ICalURL', Content => Digest::SHA1::sha1_base64(time)); +} elsif (defined $ResetURL) { + my @args = $object->DeleteAttribute('ICalURL'); +} + + +</%INIT> diff --git a/rt/share/html/Prefs/Elements/CalendarFeed b/rt/share/html/Prefs/Elements/CalendarFeed new file mode 100644 index 000000000..46893435e --- /dev/null +++ b/rt/share/html/Prefs/Elements/CalendarFeed @@ -0,0 +1,68 @@ +<%args> +$Search => undef +$Object => undef +$HiddenField => undef +</%args> + +<&| /Widgets/TitleBox, title => $title &> + +% if ($FeedText) { +<p><%$FeedText%></p> +% } else { +This feed will show tickets with due date find with query:<br /> +"<%$Search->SubValue('Query')%>". +% } + +% if ($ICalURL) { +<p>Your can paste this url in your calendar : <b><a href="<%$link%>"><%$link%></a></b><p> +<table> +<tr> +<td> +<form action="<%$RT::WebPath%>/Prefs/Calendar.html" method="post"> +<input type="hidden" name="HiddenField" value="<%$HiddenField%>" /> +<input type="submit" class="button" name="ResetURL" value="<%loc('Disable Feed')%>" /> +</form> +</td> +<td> +<form action="<%$RT::WebPath%>/Prefs/Calendar.html" method="post"> +<input type="hidden" name="HiddenField" value="<%$HiddenField%>" /> +<input type="submit" class="button" name="ChangeURL" value="<%loc('Change Feed URL')%>" /> +</form> +</td> +</tr> +</table> +% } else { + +<form action="<%$RT::WebPath%>/Prefs/Calendar.html" method="post"> +<input type="hidden" name="HiddenField" value="<%$HiddenField%>" /> +<input type="submit" class="button" name="ChangeURL" value="<%loc('Enable Feed')%>" /> +</form> +% } + +</&> + +<%init> +my $title; +my $ICalURL; +my $Id; +my $FeedText; +my $link; + +if ($Object) { + $title = loc('Feed for "') . ($Search->Description || loc('Unnamed search')) . '" search'; + $HiddenField = "SavedSearch-" . $Search->Id; + $ICalURL = $Search->FirstAttribute('ICalURL'); + $Id = $session{CurrentUser}->Id . "@" . $Search->Id; + $title .= " (disabled)" unless $ICalURL; +} else { + $title = loc('Feed for default calendar'); + $HiddenField = "Private"; + $ICalURL = $session{CurrentUser}->UserObj->FirstAttribute('ICalURL'); + $Id = $session{CurrentUser}->Id; + $FeedText = "This feed will show yours and Nobody's tasks with due date."; +} + +$link = $RT::WebURL . "NoAuth/Calendar/" . $Id . "/" . $ICalURL->Content + if $ICalURL; + +</%init>
\ No newline at end of file diff --git a/rt/share/html/Prefs/SearchOptions.html b/rt/share/html/Prefs/SearchOptions.html index e40265f23..5e5ed46f1 100644 --- a/rt/share/html/Prefs/SearchOptions.html +++ b/rt/share/html/Prefs/SearchOptions.html @@ -45,7 +45,7 @@ %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} -<& /Elements/Header, Title => loc("Search Preferences") &> +<& /Elements/Header, Title => loc("Ticketing Search Preferences") &> <& /User/Elements/Tabs, current_tab => "Prefs/SearchOptions.html", Title => loc("Search Preferences") diff --git a/rt/share/html/Search/Build.html b/rt/share/html/Search/Build.html index 0fd79742a..c5067d5d1 100644 --- a/rt/share/html/Search/Build.html +++ b/rt/share/html/Search/Build.html @@ -85,9 +85,9 @@ <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'&> +</div> <div id="editquery"> diff --git a/rt/share/html/Search/Calendar.html b/rt/share/html/Search/Calendar.html new file mode 100644 index 000000000..9d2b6f546 --- /dev/null +++ b/rt/share/html/Search/Calendar.html @@ -0,0 +1,238 @@ +<%args> +$Month => (localtime)[4] +$Year => (localtime)[5] + 1900 +$Query => undef +$Format => undef +$Order => undef +$OrderBy => undef +$RowsPerPage => undef +$NewQuery => 0 +</%args> + +<& /Elements/Header, Title => $title &> +<& /Ticket/Elements/Tabs, + current_tab => "Search/Calendar.html?$QueryString", + Title => $title &> +<&| /Widgets/TitleBox, + title => loc('Calendar for ') . $rtdate->GetMonth($Month) . " $Year" , + title_class=> 'inverse', + color => "#993333" &> + +<table width="100%"> +<tr> +<td align="left"> +% my ($PMonth, $PYear) = ($Month - 1, $Year); +% if ($PMonth < 0) { +% $PYear--; +% $PMonth = 11; +% } +<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$PMonth%>&Year=<%$PYear%>&<%$QueryString%>">«<%$rtdate->GetMonth($PMonth)%></a> +</td> +<th align="center"> + <font size="+1"><% $rtdate->GetMonth($Month). " $Year" %></font> +</th> +<td align="right"> +% my ($NMonth, $NYear) = ($Month + 1, $Year); +% if ($NMonth > 11) { +% $NYear++; +% $NMonth = 0; +% } +<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$NMonth%>&Year=<%$NYear%>&<%$QueryString%>"><%$rtdate->GetMonth($NMonth)%>»</a> +</td> +</tr> +</table> + +<table class="rtxcalendar"> + +<thead> +<tr> +% for ( @{$week{$weekstart}} ) { +<th width="14%"><%$rtdate->GetWeekday($_)%></th> +% } +</tr> +</thead> + +<tbody> +<tr> +% while ($date <= $end) { +% +% my $offmonth = $date->month != ($Month + 1); +% my $is_today = (DateTime->compare($today, $date) == 0); +% my $is_yesterday = (DateTime->compare($yesterday, $date) == 0); +% my $is_aweekago = (DateTime->compare($aweekago, $date) == 0); + + <td class="<% $offmonth ? 'offmonth' + : $is_today ? 'today' + : $is_yesterday ? 'yesterday' + : $is_aweekago ? 'aweekago' + : '' + %>" + > + <div class="<% $is_today ? 'todays' + : $offmonth ? 'offmonth' + :'' %>calendardate" + ><%$date->day%></div> + +% my $sp = 3; +% for my $t ( @{ $Tickets{$date->strftime("%F")} } ) { +% $sp--; + <& /Elements/CalendarEvent, Object => $t, Date => $date, DateTypes => \%DateTypes &> +% } + <% ($sp>0) ? '<BR>'x$sp : '' |n %> + + </td> + +% $date = $set->next($date); +% if ( $date->day_of_week == $startday_of_week ) { + </tr><tr> +% } + +% } +</tr> +</tbody> +</table> + +<table width="100%"> +<tr> +<td align="left"> +<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$PMonth%>&Year=<%$PYear%>&<%$QueryString%>">«<%$rtdate->GetMonth($PMonth)%></a> +</td> + +<td valign="top" align="center"> +<form action="<%$RT::WebPath%>/Search/Calendar.html?<%$QueryString%>" method="post"> + +<select name="Month"> +% for (0..11) { +<option value="<%$_%>" <% $_ == $Month ? 'selected' : ''%> ><%$rtdate->GetMonth($_)%></option> +% } +</select> +% my $year = (localtime)[5] + 1900; +<select name="Year"> +% for ( ($year-5) .. ($year+5)) { +<option value="<%$_%>" <% $_ == $Year ? 'selected' : ''%>><%$_%></option> +% } +</select> + +%# <& /Elements/Submit&> +<input type="submit" value="<% loc('Submit') %>" class="button" /> + +</form> +</td> + +<td align="right"> +<a href="<%$RT::WebPath%>/Search/Calendar.html?Month=<%$NMonth%>&Year=<%$NYear%>&<%$QueryString%>"><%$rtdate->GetMonth($NMonth)%>»</a> +</td> +</tr> +</table> + +<table width="100%"> +<tr> + +<td valign="top" rowspan=9> + <BR> + <a href="<%$RT::WebPath%>/Prefs/Calendar.html">Calendar Preferences and Help</a> +</td> + +% foreach my $legend (keys %legend) { + <tr> + <td align="right"> + <img src="<%$RT::WebImagesURL%>/<%$legend%>.png" /> + </td> + <td align="left"> +% my $more = 0; +% foreach ( @{$legend{$legend}} ) { + <% $more++ ? ', ' : '' %> + <&|/l&><% $_ %></&> +% } + </td> + </tr> +% } + +</table> + +</&> + +<%ONCE> + +my %legend = ( + 'created' => ['Created'], + 'due' => ['Due'], + 'resolved' => ['Resolved'], + 'updated' => ['Last Updated'], + 'created_due' => ['Created','Due'], + 'reminder' => ['Reminders'], + 'started' => ['Started'], + 'starts_due' => ['Starts','Due'], +); + +</%ONCE> +<%INIT> +use RTx::Calendar qw(FirstDay LastDay); + +my $title = loc("Calendar"); + +my @DateTypes = qw/Created Starts Started Due LastUpdated Resolved/; + +my $rtdate = RT::Date->new($session{'CurrentUser'}); + +my $weekstart = 'Sunday'; #RT::SiteConfig? user pref? +my %week = ( + 'Saturday' => [6,0..5], + 'Sunday' => [0..6], + 'Monday' => [1..6,0], +); +my $startday_of_week = ${$week{$weekstart}}[0] || 7; +my $endday_of_week = ${$week{$weekstart}}[-1] || 7; + +my $today = DateTime->today; +my $yesterday = $today->clone->subtract( days=>1 ); +my $aweekago = $today->clone->subtract( days=>7 ); +my $date = FirstDay($Year, $Month + 1, $startday_of_week ); +my $end = LastDay ($Year, $Month + 1, $endday_of_week ); + +# use this to loop over days until $end +my $set = DateTime::Set->from_recurrence( + next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) } +); + +my $QueryString = + $m->comp( + '/Elements/QueryString', + Query => $Query, + Format => $Format, + Order => $Order, + OrderBy => $OrderBy, + Rows => $RowsPerPage + ) + if ($Query); + +$QueryString ||= 'NewQuery=1'; + +# Default Query and Format +my $TempFormat = "__Starts__ __Due__"; +my $TempQuery = "( Status = 'new' OR Status = 'open' OR Status = 'stalled') + AND ( Owner = '" . $session{CurrentUser}->Id ."' OR Owner = 'Nobody' ) + AND ( Type = 'reminder' OR 'Type' = 'ticket' )"; + +if ( my $Search = RTx::Calendar::SearchDefaultCalendar($session{CurrentUser}) ) { + $TempFormat = $Search->SubValue('Format'); + $TempQuery = $Search->SubValue('Query'); +} + +# we overide them if needed +$TempQuery = $Query if $Query; +$TempFormat = $Format if $Format; + +# we search all date types in Format string +my @Dates = grep { $TempFormat =~ m/__${_}(Relative)?__/ } @DateTypes; + +# used to display or not a date in Element/CalendarEvent +my %DateTypes = map { $_ => 1 } @Dates; + +$TempQuery .= RTx::Calendar::DatesClauses(\@Dates, $date->strftime("%F"), $end->strftime("%F")); + +# print STDERR ("-" x 30), "\n", $TempQuery, "\n"; + +my %Tickets = RTx::Calendar::FindTickets($session{'CurrentUser'}, $TempQuery, \@Dates, $date->strftime("%F"), $end->strftime("%F")); + +</%INIT> diff --git a/rt/share/html/Ticket/Display.html b/rt/share/html/Ticket/Display.html index f8eaf3949..c1984bdca 100755 --- a/rt/share/html/Ticket/Display.html +++ b/rt/share/html/Ticket/Display.html @@ -46,12 +46,12 @@ %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, - Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject), + Title => loc("Ticket #[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject), LinkRel => \%link_rel &> <& /Ticket/Elements/Tabs, Ticket => $TicketObj, current_tab => 'Ticket/Display.html?id='.$TicketObj->id, - Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &> + Title => loc("Ticket #[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &> % $m->callback(CallbackName => 'BeforeActionList', %ARGS, Actions => \@Actions, ARGSRef => \%ARGS, Ticket => $TicketObj); diff --git a/rt/share/html/Ticket/Elements/AddCustomers b/rt/share/html/Ticket/Elements/AddCustomers new file mode 100644 index 000000000..e04c07702 --- /dev/null +++ b/rt/share/html/Ticket/Elements/AddCustomers @@ -0,0 +1,52 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# Copyright (c) 2008 Freeside Internet Services, Inc. +%# +%# 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. +<BR> +<%$msg%><br> + +% if (@Customers) { + +<br><i>(Check box to link)<i> +<table> +% foreach my $customer (@Customers) { +<tr> + <td> + <input type="checkbox" name="Ticket-AddCustomer-<% $customer->{'custnum'} %>" VALUE="1" <% scalar(@Customers) == 1 ? 'CHECKED' : '' %>> + <A HREF="<%$freeside_url%>/view/cust_main.cgi?<% $customer->{'custnum'} %>"><% &RT::URI::freeside::small_custview($customer->{'custnum'}, &RT::URI::freeside::FreesideGetConfig('countrydefault'), 1) |n %> + </td> +</tr> +% } +</table> + +% } + +<%INIT> +my ($msg); + +my $freeside_url = &RT::URI::freeside::FreesideURL(); + +my @Customers = (); +if ( $CustomerString ) { + @Customers = &RT::URI::freeside::smart_search( 'search' => $CustomerString ); +} + +my @Services = (); +if ($ServiceString) { + @Services = (); #service_search(); +} + +</%INIT> + +<%ARGS> +$CustomerString => undef +$ServiceString => undef +</%ARGS> diff --git a/rt/share/html/Ticket/Elements/EditCustomers b/rt/share/html/Ticket/Elements/EditCustomers new file mode 100644 index 000000000..0ba6e447b --- /dev/null +++ b/rt/share/html/Ticket/Elements/EditCustomers @@ -0,0 +1,63 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# Copyright (c) 2008 Freeside Internet Services, Inc. +%# +%# 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. +<TABLE width=100%> + <TR> + <TD VALIGN=TOP WIDTH=50%> + <h3><&|/l&>Current Customers</&></h3> + +<table> + <tr> + <td><i><&|/l&>(Check box to disassociate)</&></i></td> + </tr> + <tr> + <td class="value"> +% foreach my $link ( @{ $Ticket->Customers->ItemsArrayRef } ) { + + <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>"> +%# <& ShowLink, URI => $link->TargetURI &><br> + <A HREF="<% $link->TargetURI->Resolver->HREF %>"><% $link->TargetURI->Resolver->AsStringLong |n %></A> + <BR> +% } + </td> + </tr> +</table> + +</TD> + +<TD VALIGN=TOP> +<h3><&|/l&>New Customer Links</&></h3> +<&|/l&>Find customer</&><BR> +<input name="CustomerString"> +<input type=submit name="OnlySearchForCustomers" value="<&|/l&>Go!</&>"> +<br><i>cust #, name, company or phone</i> +<BR> +%#<BR> +%#<&|/l&>Find service</&><BR> +%#<input name="ServiceString"> +%#<input type=submit name="OnlySearchForServices" value="<&|/l&>Go!</&>"> +%#<br><i>username, username@domain, domain, or IP address</i> +%#<BR> + +<& AddCustomers, Ticket => $Ticket, + CustomerString => $CustomerString, + ServiceString => $ServiceString, &> + +</TD> +</TR> +</TABLE> + +<%ARGS> +$CustomerString => undef +$ServiceString => undef +$Ticket => undef +</%ARGS> diff --git a/rt/share/html/Ticket/Elements/ShowCustomers b/rt/share/html/Ticket/Elements/ShowCustomers new file mode 100644 index 000000000..3acf92dd4 --- /dev/null +++ b/rt/share/html/Ticket/Elements/ShowCustomers @@ -0,0 +1,38 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# +%# 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. +<table> +% my $cust = 0; +% foreach my $custResolver ( map { $_->TargetURI->Resolver } +% @{ $Ticket->Customers->ItemsArrayRef } +% ) +% { +% $cust++; +% my $cust_main = ''; + <tr> + <td class="value"> + <A HREF="<% $custResolver->HREF %>"><% $custResolver->AsStringLong |n %></A> + </td> + </tr> +% } +% unless ( $cust ) { + <tr> + <td class="labeltop"> + <i>(none)<i> + </td> + </tr> + +% } +</table> +<%ARGS> +$Ticket => undef +</%ARGS> + diff --git a/rt/share/html/Ticket/Elements/ShowSummary b/rt/share/html/Ticket/Elements/ShowSummary index 21c53c594..295ac6d56 100755 --- a/rt/share/html/Ticket/Elements/ShowSummary +++ b/rt/share/html/Ticket/Elements/ShowSummary @@ -66,6 +66,13 @@ </&> % } + <&| /Widgets/TitleBox, title => loc('Customers'), + title_href => RT->Config->Get('WebPath')."/Ticket/ModifyCustomers.html?id=".$Ticket->Id, + class => 'ticket-info-customers' + &> + <& /Ticket/Elements/ShowCustomers, Ticket => $Ticket &> + </&> + <&| /Widgets/TitleBox, title => loc('People'), title_href => RT->Config->Get('WebPath')."/Ticket/ModifyPeople.html?id=".$Ticket->Id, class => 'ticket-info-people', diff --git a/rt/share/html/Ticket/Elements/ShowTransactionAttachments b/rt/share/html/Ticket/Elements/ShowTransactionAttachments index a8cdfc11c..95ffcbd64 100644 --- a/rt/share/html/Ticket/Elements/ShowTransactionAttachments +++ b/rt/share/html/Ticket/Elements/ShowTransactionAttachments @@ -210,8 +210,14 @@ my $render_attachment = sub { # if it's a text/plain show the body elsif ( $message->ContentType =~ m{^(text|message)}i ) { - eval { require Text::Quoted; $content = Text::Quoted::extract($content); }; - if ($@) { $RT::Logger->warning( "Text::Quoted failed: $@" ) } + #don't want to use this even if it is installed, its + #segfaulting on weird characters and silently truncating the + #ticket history output + #see: + # r44838@pinglin: jesse | 2006-11-14 15:53:18 -0500 + # * Move Text::Quoted back to being a run-time require. So that it's possible to turn off the feature if it causes your perl to segfault. (Text::Tabs is...not robust in the face of perl bugs) + #eval { require Text::Quoted; $content = Text::Quoted::extract($content); }; + #if ($@) { $RT::Logger->warning( "Text::Quoted failed: $@" ) } $m->comp( 'ShowMessageStanza', diff --git a/rt/share/html/Ticket/Elements/Tabs b/rt/share/html/Ticket/Elements/Tabs index a9e697a9f..c893a350c 100755 --- a/rt/share/html/Ticket/Elements/Tabs +++ b/rt/share/html/Ticket/Elements/Tabs @@ -142,6 +142,10 @@ if ($Ticket) { title => loc('Links'), path => "Ticket/ModifyLinks.html?id=" . $id, }, + _Eb=> { + title => loc('Customers'), + path => "Ticket/ModifyCustomers.html?id=" . $id, + }, _X => { title => loc('Jumbo'), path => "Ticket/ModifyAll.html?id=" . $id, diff --git a/rt/share/html/Ticket/ModifyCustomers.html b/rt/share/html/Ticket/ModifyCustomers.html new file mode 100644 index 000000000..72d103b23 --- /dev/null +++ b/rt/share/html/Ticket/ModifyCustomers.html @@ -0,0 +1,49 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# +%# 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. +<& /Elements/Header, Title => loc("Customers for ticket #[_1]", $Ticket->Id) &> +<& /Ticket/Elements/Tabs, + Ticket => $Ticket, + current_tab => "Ticket/ModifyCustomers.html?id=".$Ticket->Id, + Title => loc("Customers for ticket #[_1]", $Ticket->Id) &> + +<& /Elements/ListActions, actions => \@results &> + +<form action="ModifyCustomers.html" method="post"> +<input type="hidden" name="id" value="<%$Ticket->id%>"> + +<& /Elements/TitleBoxStart, title => loc('Edit Customer Links'), color => "#7f007b"&> +<& Elements/EditCustomers, Ticket => $Ticket, CustomerString => $CustomerString, ServiceString => $ServiceString &> +<& /Elements/TitleBoxEnd &> +<& /Elements/Submit, color => "#7f007b", Label => loc('Save Changes') &> +</form> + + +<%INIT> + +my @results = (); +my $Ticket = LoadTicket($id); + +# if we're trying to search for customers/services and nothing else +unless ( $OnlySearchForCustomers || $OnlySearchForServices) { + @results = ProcessTicketCustomers( TicketObj => $Ticket, ARGSRef => \%ARGS); +} + +</%INIT> + + +<%ARGS> +$OnlySearchForCustomers => undef +$OnlySearchForServices => undef +$CustomerString => undef +$ServiceString => undef +$id => undef +</%ARGS> diff --git a/rt/share/html/User/Prefs.html b/rt/share/html/User/Prefs.html index 884cf85e4..e3a00f6ef 100755 --- a/rt/share/html/User/Prefs.html +++ b/rt/share/html/User/Prefs.html @@ -45,7 +45,7 @@ %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} -<& /Elements/Header, Title=>loc("Preferences") &> +<& /Elements/Header, Title=>loc("Ticketing Preferences") &> <& /User/Elements/Tabs, current_tab => 'User/Prefs.html', Title => loc("Preferences") &> diff --git a/rt/share/html/Widgets/TitleBoxEnd b/rt/share/html/Widgets/TitleBoxEnd index 402124e28..4a698e9f7 100755 --- a/rt/share/html/Widgets/TitleBoxEnd +++ b/rt/share/html/Widgets/TitleBoxEnd @@ -50,7 +50,7 @@ </div> % #Manually flush the content buffer after each titlebox is displayed -% $m->flush_buffer(); +% #wtf? this causes us to lose content #$m->flush_buffer(); <%ARGS> $title => undef |