summaryrefslogtreecommitdiff
path: root/rt
diff options
context:
space:
mode:
authorcvs2git <cvs2git>2010-11-05 19:05:57 +0000
committercvs2git <cvs2git>2010-11-05 19:05:57 +0000
commitaaf8baf3662e16e9414de236a39f8801a8c41b01 (patch)
tree2cda603e4311b3e80f79b93d9bcce3a7c7c2d053 /rt
parent995a145c931164347683071c95c6754379d36604 (diff)
parent9b2de4257b6a2877434008188e52b8ef71ff339d (diff)
This commit was manufactured by cvs2svn to create branch
'FREESIDE_2_1_BRANCH'.
Diffstat (limited to 'rt')
-rw-r--r--rt/FREESIDE_MODIFIED16
-rwxr-xr-xrt/etc/schema.Pg1
-rwxr-xr-xrt/etc/schema.mysql-4.11
-rw-r--r--rt/lib/RT/CustomField.pm3
-rw-r--r--rt/lib/RT/Ticket_Overlay.pm10
-rw-r--r--rt/lib/RT/Tickets_Overlay.pm8
-rw-r--r--rt/lib/RT/URI/freeside/Internal.pm4
-rw-r--r--rt/share/html/Admin/CustomFields/Modify.html23
-rw-r--r--rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Elements/Tabs/Default12
-rw-r--r--rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Modify.html/BeforeActionList15
-rw-r--r--rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Update.html/BeforeDisplay24
-rw-r--r--rt/share/html/Elements/AddCustomers5
-rw-r--r--rt/share/html/Elements/ColumnMap7
-rwxr-xr-xrt/share/html/Elements/Header6
-rw-r--r--rt/share/html/Elements/RT__CustomField/ColumnMap4
-rw-r--r--rt/share/html/Elements/RefreshHomepage6
-rw-r--r--rt/share/html/Ticket/Elements/AddCustomers5
-rw-r--r--rt/share/html/Ticket/Elements/CheckMandatoryFields9
-rw-r--r--rt/share/html/Ticket/Graphs/index.html4
-rwxr-xr-xrt/share/html/autohandler4
20 files changed, 134 insertions, 33 deletions
diff --git a/rt/FREESIDE_MODIFIED b/rt/FREESIDE_MODIFIED
index 71ec135..45a6106 100644
--- a/rt/FREESIDE_MODIFIED
+++ b/rt/FREESIDE_MODIFIED
@@ -4,10 +4,15 @@ config.layout.in
etc/RT_Config.pm.in
etc/RT_Config.pm
etc/RT_SiteConfig.pm
+ etc/schema.Pg
+ etc/schema.mysql-4.1
+
lib/RT/Config.pm
+lib/RT/CustomField.pm #CheckMandatoryFields
lib/RT/CustomField_Overlay.pm #customfield date patch
lib/RT/Interface/Web.pm #customfield date patch
lib/RT/Interface/Web_Vendor.pm
+ lib/RT/Interface/Web/Handler.pm #freeside comp_root for dashboard emails
lib/RT/Record.pm #and customfield date patch
lib/RT/SearchBuilder.pm #need DBIx::SearchBuilder >= 1.36 for Pg 8.1+
lib/RT/Transaction_Overlay.pm
@@ -18,15 +23,15 @@ lib/RT/Tickets_Overlay.pm #customfield date patch
lib/RT/URI/freeside.pm
lib/RT/URI/freeside/Internal.pm
lib/RT/URI/freeside/XMLRPC.pm
+
+ share/html/autohandler #Footer getting appended where unwelcome
+ share/html/Admin/CustomFields/Modify.html #CheckMandatoryFields
share/html/Admin/Users/Modify.html
- share/html/Elements/ColumnMap
share/html/Elements/CollectionList
share/html/Elements/EditCustomFieldDate #customfield date patch (NEW)
share/html/Elements/Header
share/html/Elements/PageLayout
#html/Elements/QuickCreate
- share/html/Elements/RefreshHomepage
- share/html/Elements/RT__CustomField/ColumnMap
share/html/Elements/RT__Ticket/ColumnMap
share/html/Elements/ShowCustomFieldDate #customfield date patch (NEW)
share/html/Elements/SelectDate
@@ -40,6 +45,7 @@ share/html/Elements/ShowLink_Checklist
share/html/Ticket/Checklist.html
share/html/Ticket/Display.html
share/html/Ticket/Elements/AddCustomers
+ share/html/Ticket/Elements/CheckMandatoryFields
share/html/Ticket/Elements/EditCustomers
share/html/Ticket/Elements/ShowCustomers
share/html/Ticket/Elements/ShowMembers_Checklist
@@ -47,7 +53,6 @@ share/html/Ticket/Elements/ShowMembers_Checklist
share/html/Ticket/Elements/ShowSummary
share/html/Ticket/Elements/ShowTransactionAttachments
share/html/Ticket/Elements/Tabs
- share/html/Ticket/Graph/index.html
share/html/Ticket/ModifyCustomers.html
html/NoAuth/css/3.5-default/main.css
html/NoAuth/css/3.5-default/misc.css
@@ -66,3 +71,6 @@ share/html/Elements/EditCustomers
share/html/Widgets/TitleBoxEnd
share/html/Callbacks/RTx-Checklist/*
+
+share/html/Callbacks/CheckMandatoryFields/*
+
diff --git a/rt/etc/schema.Pg b/rt/etc/schema.Pg
index 48525c8..e3006d0 100755
--- a/rt/etc/schema.Pg
+++ b/rt/etc/schema.Pg
@@ -539,6 +539,7 @@ CREATE TABLE CustomFields (
LastUpdatedBy integer NOT NULL DEFAULT 0 ,
LastUpdated TIMESTAMP NULL ,
Disabled integer NOT NULL DEFAULT 0 ,
+ Required integer NOT NULL DEFAULT 0 ,
PRIMARY KEY (id)
);
diff --git a/rt/etc/schema.mysql-4.1 b/rt/etc/schema.mysql-4.1
index 172e477..1735702 100755
--- a/rt/etc/schema.mysql-4.1
+++ b/rt/etc/schema.mysql-4.1
@@ -386,6 +386,7 @@ CREATE TABLE CustomFields (
LastUpdatedBy integer NOT NULL DEFAULT 0 ,
LastUpdated DATETIME NULL ,
Disabled int2 NOT NULL DEFAULT 0 ,
+ Required int2 NOT NULL DEFAULT 0 ,
PRIMARY KEY (id)
) TYPE=InnoDB CHARACTER SET utf8;
diff --git a/rt/lib/RT/CustomField.pm b/rt/lib/RT/CustomField.pm
index 995728f..dc41080 100644
--- a/rt/lib/RT/CustomField.pm
+++ b/rt/lib/RT/CustomField.pm
@@ -122,6 +122,7 @@ sub Create {
Disabled => '0',
LinkToValue => '',
IncludeContentForValue => '',
+ Required => '0',
@_);
$self->SUPER::Create(
@@ -381,6 +382,8 @@ sub _CoreAccessible {
{read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''},
Disabled =>
{read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'},
+ Required =>
+ {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'},
}
};
diff --git a/rt/lib/RT/Ticket_Overlay.pm b/rt/lib/RT/Ticket_Overlay.pm
index b60ae38..8d04742 100644
--- a/rt/lib/RT/Ticket_Overlay.pm
+++ b/rt/lib/RT/Ticket_Overlay.pm
@@ -2312,6 +2312,16 @@ sub _Links {
return $links;
}
+ # without this you will also get RT::User(s) instead of tickets!
+ if ($field == 'Base' and $type == 'MemberOf') {
+ my $rtname = RT->Config->Get('rtname');
+ $links->Limit(
+ FIELD => 'Base',
+ OPERATOR => 'STARTSWITH',
+ VALUE => "fsck.com-rt://$rtname/ticket/",
+ );
+ }
+
# Maybe this ticket is a merge ticket
my $limit_on = 'Local'. $field;
# at least to myself
diff --git a/rt/lib/RT/Tickets_Overlay.pm b/rt/lib/RT/Tickets_Overlay.pm
index f2949ed..be5a0d5 100644
--- a/rt/lib/RT/Tickets_Overlay.pm
+++ b/rt/lib/RT/Tickets_Overlay.pm
@@ -1855,7 +1855,13 @@ sub OrderByCols {
);
#if there was a Links.RemoteTarget int, this bs wouldn't be necessary
- my $custnum_sql = "CAST(SUBSTR($linkalias.Target,31) AS INTEGER)";
+ my $custnum_sql = "CAST(SUBSTR($linkalias.Target,31) AS ";
+ if ( RT->Config->Get('DatabaseType') eq 'mysql' ) {
+ $custnum_sql .= 'SIGNED INTEGER)';
+ }
+ else {
+ $custnum_sql .= 'INTEGER)';
+ }
if ( $subkey eq 'Number' ) {
diff --git a/rt/lib/RT/URI/freeside/Internal.pm b/rt/lib/RT/URI/freeside/Internal.pm
index bd7c42c..b5af134 100644
--- a/rt/lib/RT/URI/freeside/Internal.pm
+++ b/rt/lib/RT/URI/freeside/Internal.pm
@@ -104,13 +104,13 @@ sub FreesideGetConfig {
sub smart_search { #Subroutine
- return map { { $_->hash } } &FS::cust_main::smart_search(@_);
+ return map { { $_->hash } } &FS::cust_main::Search::smart_search(@_);
}
sub email_search { #Subroutine
- return map { { $_->hash } } &FS::cust_main::email_search(@_);
+ return map { { $_->hash } } &FS::cust_main::Search::email_search(@_);
}
diff --git a/rt/share/html/Admin/CustomFields/Modify.html b/rt/share/html/Admin/CustomFields/Modify.html
index f75607a..fc2c49d 100644
--- a/rt/share/html/Admin/CustomFields/Modify.html
+++ b/rt/share/html/Admin/CustomFields/Modify.html
@@ -119,6 +119,11 @@
% }
<tr><td class="label">&nbsp;</td><td>
+<input type="checkbox" class="checkbox" name="Required" value="1" <% $RequiredChecked |n%> />
+<&|/l&>Required for ticket resolution</&>
+</td></tr>
+
+<tr><td class="label">&nbsp;</td><td>
<input type="hidden" class="hidden" name="SetEnabled" value="1" />
<input type="checkbox" class="checkbox" name="Enabled" value="1" <% $EnabledChecked |n%> />
<&|/l&>Enabled (Unchecking this box disables this custom field)</&>
@@ -171,11 +176,12 @@ else {
}
if ( $ARGS{'Update'} && $id ne 'new' ) {
-
#we're asking about enabled on the web page but really care about disabled.
$ARGS{'Disabled'} = $Disabled = $Enabled? 0 : 1;
+
+ $ARGS{'Required'} ||= 0;
- my @attribs = qw(Disabled Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue);
+ my @attribs = qw(Disabled Required Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue);
push @results, UpdateRecordObject(
AttributesRef => \@attribs,
Object => $CustomFieldObj,
@@ -193,6 +199,15 @@ if ( $ARGS{'Update'} && $id ne 'new' ) {
push (@results, $msg);
}
+ # Clean up values
+ foreach my $param (grep /^$paramtag-/, keys(%ARGS)) {
+ for ($ARGS{$param}) {
+ s/\r+\n/\n/g;
+ s/^\s+//;
+ s/\s+$//;
+ }
+ }
+
# Update any existing values
my $values = $CustomFieldObj->ValuesObj;
while ( my $value = $values->Next ) {
@@ -200,7 +215,6 @@ if ( $ARGS{'Update'} && $id ne 'new' ) {
my $param = join("-", $paramtag, $value->Id, $attr);
next unless exists $ARGS{$param};
next if ($value->$attr()||'') eq ($ARGS{$param}||'');
-
my $mutator = "Set$attr";
my ($id, $msg) = $value->$mutator( $ARGS{$param} );
push (@results, $msg);
@@ -222,6 +236,9 @@ $id = $CustomFieldObj->id if $CustomFieldObj->id;
my $EnabledChecked = qq[checked="checked"];
$EnabledChecked = '' if $CustomFieldObj->Disabled;
+my $RequiredChecked = '';
+$RequiredChecked = qq[checked="checked"] if $CustomFieldObj->Required;
+
my @CFvalidations = (
'(?#Mandatory).',
'(?#Digits)^[\d.]+$',
diff --git a/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Elements/Tabs/Default b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Elements/Tabs/Default
new file mode 100644
index 0000000..2c0698e
--- /dev/null
+++ b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Elements/Tabs/Default
@@ -0,0 +1,12 @@
+<%doc>
+If mandatory fields aren't set yet, point the "Resolve" link back
+to "Ticket Basics".
+</%doc>
+<%init>
+my $TicketObj = delete($ARGS{'Ticket'});
+my $actions = $ARGS{'actions'};
+if( $m->comp('/Ticket/Elements/CheckMandatoryFields', Ticket => $TicketObj)
+ ) {
+ $actions->{'G'}->{'path'} = 'Ticket/Modify.html?id='.$TicketObj->Id.'&resolve=1';
+}
+</%init>
diff --git a/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Modify.html/BeforeActionList b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Modify.html/BeforeActionList
new file mode 100644
index 0000000..4779411
--- /dev/null
+++ b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Modify.html/BeforeActionList
@@ -0,0 +1,15 @@
+<%init>
+use Data::Dumper;
+my $ARGSRef = $ARGS{'ARGSRef'};
+my $TicketObj = $ARGS{'Ticket'};
+my $results = $ARGS{'Actions'};
+if(defined($ARGSRef->{'resolve'})) {
+ my @errors =
+ $m->comp('/Ticket/Elements/CheckMandatoryFields', Ticket => $TicketObj);
+ return if !@errors;
+ my $msg = 'Missing required field'.(@errors > 1 ? 's' : '').': ' .
+ join(', ', map { $_->Name } @errors);
+ $m->notes( ('InvalidField-' . $_->Id) => 'Required' ) foreach @errors;
+ push @$results, $msg;
+}
+</%init>
diff --git a/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Update.html/BeforeDisplay b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Update.html/BeforeDisplay
new file mode 100644
index 0000000..0d69bc2
--- /dev/null
+++ b/rt/share/html/Callbacks/CheckMandatoryFields/Ticket/Update.html/BeforeDisplay
@@ -0,0 +1,24 @@
+<%doc>
+When the user tries to change a ticket's status to "resolved" through
+the Update interface, check mandatory fields. If they aren't all set,
+redirect to Ticket Basics instead of updating. Note that this will
+lose any comments/time/other information the user has entered.
+</%doc>
+
+<%init>
+my $TicketObj = $ARGS{'Ticket'};
+my $ARGSRef = $ARGS{'ARGSRef'};
+my $oldStatus = $TicketObj->Status();
+my $newStatus = $ARGSRef->{'Status'} || $ARGSRef->{'DefaultStatus'};
+if( $oldStatus ne 'resolved' and
+ $newStatus eq 'resolved' and
+ $m->comp('/Ticket/Elements/CheckMandatoryFields',
+ Ticket => $TicketObj
+ ) ) {
+ $m->clear_buffer;
+ RT::Interface::Web::Redirect(
+ RT->Config->Get('WebURL')."Ticket/Modify.html?id=".$TicketObj->Id."&resolve=1"
+ );
+ $m->abort;
+}
+</%init>
diff --git a/rt/share/html/Elements/AddCustomers b/rt/share/html/Elements/AddCustomers
index aaf8ca8..9828d7d 100644
--- a/rt/share/html/Elements/AddCustomers
+++ b/rt/share/html/Elements/AddCustomers
@@ -39,7 +39,10 @@ warn "/Elements/AddCustomers called with CustomerString $CustomerString\n"
my @Customers = ();
if ( $CustomerString ) {
- @Customers = &RT::URI::freeside::smart_search( 'search' => $CustomerString );
+ @Customers = &RT::URI::freeside::smart_search(
+ 'search' => $CustomerString,
+ 'no_fuzzy_on_exact' => 1, #pref?
+ );
}
my @Services = ();
diff --git a/rt/share/html/Elements/ColumnMap b/rt/share/html/Elements/ColumnMap
index 6a1c237..a1475a9 100644
--- a/rt/share/html/Elements/ColumnMap
+++ b/rt/share/html/Elements/ColumnMap
@@ -157,12 +157,7 @@ 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 {
- my $wrpd = substr( $m->request_comp->dir_path, 1 );
- $wrpd =~ s(^rt/)(); #hacky, dunno why this happens
- $wrpd;
- } },
+ WebRequestPathDir => { value => sub { substr( $m->request_comp->dir_path, 1 ) } },
};
$COLUMN_MAP->{'CF'} = $COLUMN_MAP->{'CustomField'};
diff --git a/rt/share/html/Elements/Header b/rt/share/html/Elements/Header
index d970ac5..72e3e72 100755
--- a/rt/share/html/Elements/Header
+++ b/rt/share/html/Elements/Header
@@ -45,14 +45,14 @@
%# those contributions and any derivatives thereof.
%#
%# END BPS TAGGED BLOCK }}}
-<% include( '/elements/header.html', {
+<& /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';
diff --git a/rt/share/html/Elements/RT__CustomField/ColumnMap b/rt/share/html/Elements/RT__CustomField/ColumnMap
index 0a867eb..6d8d76a 100644
--- a/rt/share/html/Elements/RT__CustomField/ColumnMap
+++ b/rt/share/html/Elements/RT__CustomField/ColumnMap
@@ -155,9 +155,7 @@ my $COLUMN_MAP = {
: ($args->{'PassArguments'});
my %pass = map { $_ => $args->{$_} } grep exists $args->{$_}, @pass;
- my $path = $m->request_path;
- $path =~ s(^/rt)(); #hacky, dunno why this happens
- my $uri = RT->Config->Get('WebPath') . $path;
+ my $uri = RT->Config->Get('WebPath') . $m->request_path;
my @res = (
\'<a href="',
diff --git a/rt/share/html/Elements/RefreshHomepage b/rt/share/html/Elements/RefreshHomepage
index 7840f59..bf91a95 100644
--- a/rt/share/html/Elements/RefreshHomepage
+++ b/rt/share/html/Elements/RefreshHomepage
@@ -46,13 +46,9 @@
%#
%# END BPS TAGGED BLOCK }}}
<&|/Widgets/TitleBox, title => loc('Refresh')&>
-<form method="get" action="<% RT->Config->Get('WebPath') . $path %>">
+<form method="get" action="<% RT->Config->Get('WebPath') . $m->request_path %>">
<& /Elements/Refresh, Name => 'HomeRefreshInterval',
Default => $session{'home_refresh_interval'}||RT->Config->Get('HomePageRefreshInterval', $session{'CurrentUser'}) &>
<& /Elements/Submit, Label => loc('Go!') &>
</&>
</form>
-<%init>
-my $path = $m->request_path;
-$path =~ s(^/rt)(); #hacky, dunno why this happens
-</%init>
diff --git a/rt/share/html/Ticket/Elements/AddCustomers b/rt/share/html/Ticket/Elements/AddCustomers
index e04c077..09acdfd 100644
--- a/rt/share/html/Ticket/Elements/AddCustomers
+++ b/rt/share/html/Ticket/Elements/AddCustomers
@@ -36,7 +36,10 @@ my $freeside_url = &RT::URI::freeside::FreesideURL();
my @Customers = ();
if ( $CustomerString ) {
- @Customers = &RT::URI::freeside::smart_search( 'search' => $CustomerString );
+ @Customers = &RT::URI::freeside::smart_search(
+ 'search' => $CustomerString,
+ 'no_fuzzy_on_exact' => 1, #pref?
+ );
}
my @Services = ();
diff --git a/rt/share/html/Ticket/Elements/CheckMandatoryFields b/rt/share/html/Ticket/Elements/CheckMandatoryFields
new file mode 100644
index 0000000..3d0324f
--- /dev/null
+++ b/rt/share/html/Ticket/Elements/CheckMandatoryFields
@@ -0,0 +1,9 @@
+<%init>
+
+my $TicketObj = $ARGS{'Ticket'} or return ();
+my $ARGSRef = $ARGS{'ARGSRef'};
+my @fields = grep { $_->Required }
+ @{ $TicketObj->CustomFields->ItemsArrayRef };
+return grep { !defined($TicketObj->FirstCustomFieldValue($_->id)) } @fields;
+
+</%init>
diff --git a/rt/share/html/Ticket/Graphs/index.html b/rt/share/html/Ticket/Graphs/index.html
index 211d3a0..e23737c 100644
--- a/rt/share/html/Ticket/Graphs/index.html
+++ b/rt/share/html/Ticket/Graphs/index.html
@@ -56,9 +56,7 @@
<& Elements/ShowGraph, %ARGS, Ticket => $ticket &>
-% my $path = $m->request_comp->path;
-% $path =~ s(^/rt)(); #hacky, dunno why this happens
-<form action="<% RT->Config->Get('WebPath') . $path %>">
+<form action="<% RT->Config->Get('WebPath') . $m->request_comp->path %>">
<input type="hidden" class="hidden" name="id" value="<% $id %>" />
<& Elements/EditGraphProperties, %ARGS, Ticket => $ticket &>
diff --git a/rt/share/html/autohandler b/rt/share/html/autohandler
index 1bb2c93..b44bd68 100755
--- a/rt/share/html/autohandler
+++ b/rt/share/html/autohandler
@@ -52,7 +52,9 @@ $m->callback( ARGSRef => \%ARGS, CallbackName => 'Init', CallbackPage => '/autoh
RT::Interface::Web::HandleRequest(\%ARGS);
-$m->comp( '/Elements/Footer', %ARGS );
+$m->comp( '/Elements/Footer', %ARGS )
+ unless $r->content_type =~ qr<^(text|application)/(x-)?(css|javascript)>;
+
</%INIT>
<%ARGS>
$user => undef