[Rt-commit] r18183 - in rt/3.999/branches/lorzy: . lib/RT lib/RT/Approval/Rule lib/RT/Condition lib/RT/Interface lib/RT/Model sbin share/html/Approvals share/html/Dashboards share/html/Dashboards/Elements share/html/Dashboards/Elements/ShowPortlet share/html/Elements share/html/Install share/po t/api t/i18n t/ticket t/web
clkao at bestpractical.com
clkao at bestpractical.com
Wed Feb 4 05:12:23 EST 2009
Author: clkao
Date: Wed Feb 4 05:12:23 2009
New Revision: 18183
Modified:
rt/3.999/branches/lorzy/ (props changed)
rt/3.999/branches/lorzy/TODO
rt/3.999/branches/lorzy/lib/RT/Approval/Rule/Created.pm
rt/3.999/branches/lorzy/lib/RT/Condition/CloseTicket.pm
rt/3.999/branches/lorzy/lib/RT/Condition/ReopenTicket.pm
rt/3.999/branches/lorzy/lib/RT/Condition/StatusChange.pm
rt/3.999/branches/lorzy/lib/RT/Dashboard.pm
rt/3.999/branches/lorzy/lib/RT/Interface/REST.pm
rt/3.999/branches/lorzy/lib/RT/Interface/Web.pm
rt/3.999/branches/lorzy/lib/RT/Model/Group.pm
rt/3.999/branches/lorzy/lib/RT/Model/Scrip.pm
rt/3.999/branches/lorzy/lib/RT/Model/Ticket.pm
rt/3.999/branches/lorzy/lib/RT/Model/Transaction.pm
rt/3.999/branches/lorzy/lib/RT/Model/User.pm
rt/3.999/branches/lorzy/lib/RT/Rule.pm
rt/3.999/branches/lorzy/sbin/rt-email-group-admin
rt/3.999/branches/lorzy/share/html/Approvals/autohandler
rt/3.999/branches/lorzy/share/html/Dashboards/Elements/HiddenSearches
rt/3.999/branches/lorzy/share/html/Dashboards/Elements/ShowPortlet/search
rt/3.999/branches/lorzy/share/html/Dashboards/Elements/ShowSubscription
rt/3.999/branches/lorzy/share/html/Dashboards/Queries.html
rt/3.999/branches/lorzy/share/html/Dashboards/Render.html
rt/3.999/branches/lorzy/share/html/Dashboards/Subscription.html
rt/3.999/branches/lorzy/share/html/Elements/Tabs
rt/3.999/branches/lorzy/share/html/Install/index.html
rt/3.999/branches/lorzy/share/html/Ticket/ModifyPeople.html
rt/3.999/branches/lorzy/share/po/zh_cn.po
rt/3.999/branches/lorzy/share/po/zh_tw.po
rt/3.999/branches/lorzy/t/api/scrip_order.t
rt/3.999/branches/lorzy/t/api/ticket.t
rt/3.999/branches/lorzy/t/i18n/default.t
rt/3.999/branches/lorzy/t/ticket/linking.t
rt/3.999/branches/lorzy/t/web/command_line.t
rt/3.999/branches/lorzy/t/web/custom_search.t
rt/3.999/branches/lorzy/t/web/dashboards.t
rt/3.999/branches/lorzy/t/web/rest.t
rt/3.999/branches/lorzy/t/web/ticket-create-utf8.t
Log:
merge branch merge_to_3.8.2 to lorzy.
Modified: rt/3.999/branches/lorzy/TODO
==============================================================================
--- rt/3.999/branches/lorzy/TODO (original)
+++ rt/3.999/branches/lorzy/TODO Wed Feb 4 05:12:23 2009
@@ -47,13 +47,3 @@
( I dig a bit, they all play with $SIG{__WARN__}, which I think they collapse )
suggestion please
-
-2.
-
-obra said: REST/1.0 should serve and accept the formats it did for RT 3.8
-we changed the cases of keys before, I think we need to change them back
-e.g. show ticket/1 -f subject currently shows
- subject: work
-we need to change it back to:
- Subject: work
-
Modified: rt/3.999/branches/lorzy/lib/RT/Approval/Rule/Created.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Approval/Rule/Created.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Approval/Rule/Created.pm Wed Feb 4 05:12:23 2009
@@ -51,7 +51,7 @@
use warnings;
use base 'RT::Approval::Rule';
-use constant _stage => 'TransactionBatch';
+use constant _stage => 'transaction_batch';
use constant description => "Notify Owner of their ticket has been approved by some or all approvers"; # loc
Modified: rt/3.999/branches/lorzy/lib/RT/Condition/CloseTicket.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Condition/CloseTicket.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Condition/CloseTicket.pm Wed Feb 4 05:12:23 2009
@@ -65,8 +65,8 @@
my $txn = $self->transaction_obj;
return 0
- unless $txn->type eq "Status"
- || ( $txn->type eq "Set" && $txn->field eq "Status" );
+ unless $txn->type eq "status"
+ || ( $txn->type eq "set" && $txn->field eq "status" );
my $queue = $self->ticket_obj->queue;
return 0 unless $queue->status_schema->is_active( $txn->old_value );
Modified: rt/3.999/branches/lorzy/lib/RT/Condition/ReopenTicket.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Condition/ReopenTicket.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Condition/ReopenTicket.pm Wed Feb 4 05:12:23 2009
@@ -65,8 +65,8 @@
my $txn = $self->transaction_obj;
return 0
- unless $txn->type eq "Status"
- || ( $txn->type eq "Set" && $txn->field eq "Status" );
+ unless $txn->type eq "status"
+ || ( $txn->type eq "set" && $txn->field eq "status" );
my $queue = $self->ticket_obj->queue;
return 0 unless $queue->status_schema->is_inactive( $txn->old_value );
Modified: rt/3.999/branches/lorzy/lib/RT/Condition/StatusChange.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Condition/StatusChange.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Condition/StatusChange.pm Wed Feb 4 05:12:23 2009
@@ -58,7 +58,7 @@
sub is_applicable {
my $self = shift;
- if ( ( $self->transaction_obj->field eq 'Status' )
+ if ( ( $self->transaction_obj->field eq 'status' )
and ( $self->argument eq $self->transaction_obj->new_value() ) )
{
return (1);
Modified: rt/3.999/branches/lorzy/lib/RT/Dashboard.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Dashboard.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Dashboard.pm Wed Feb 4 05:12:23 2009
@@ -108,8 +108,7 @@
return $object->add_attribute(
'name' => 'Dashboard',
'description' => $args->{'name'},
- 'content' => { Panes => $args->{'panes'} },
-
+ 'content' => { panes => $args->{'panes'} },
);
}
Modified: rt/3.999/branches/lorzy/lib/RT/Interface/REST.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Interface/REST.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Interface/REST.pm Wed Feb 4 05:12:23 2009
@@ -51,6 +51,7 @@
package RT::Interface::REST;
use strict;
use RT;
+use Text::Naming::Convention qw/renaming/;
BEGIN {
use base 'Exporter';
@@ -222,13 +223,15 @@
my ( @lines, $key );
foreach $key (@$o) {
+ my $renamed_key = $key eq 'id' ? 'id' :
+ renaming( $key, { convention => 'UpperCamelCase' } );
my ( $line, $sp, $v );
my @values
= ( ref $k->{$key} eq 'ARRAY' )
? @{ $k->{$key} }
: $k->{$key};
- $sp = " " x ( length("$key: ") );
+ $sp = " " x ( length("$renamed_key: ") );
$sp = " " x 4 if length($sp) > 16;
foreach $v (@values) {
@@ -243,17 +246,17 @@
} elsif ( @lines && $lines[-1] !~ /\n\n$/ ) {
$lines[-1] .= "\n";
}
- push @lines, "$key: $v\n\n";
+ push @lines, "$renamed_key: $v\n\n";
} elsif ( $line
&& length($line) + length($v) - rindex( $line, "\n" ) >= 70 )
{
$line .= ",\n$sp$v";
} else {
- $line = $line ? "$line, $v" : "$key: $v";
+ $line = $line ? "$line, $v" : "$renamed_key: $v";
}
}
- $line = "$key:" unless @values;
+ $line = "$renamed_key:" unless @values;
if ($line) {
if ( $line =~ /\n/ ) {
if ( @lines && $lines[-1] !~ /\n\n$/ ) {
Modified: rt/3.999/branches/lorzy/lib/RT/Interface/Web.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Interface/Web.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Interface/Web.pm Wed Feb 4 05:12:23 2009
@@ -360,7 +360,7 @@
&& $session{'ErrorDocumentType'} )
{
$r->content_type( $session{'ErrorDocumentType'} );
- $m->comp( $session{'ErrorDocument'}, Why => $why, %args );
+ $m->comp( $session{'ErrorDocument'}, why => $why, %args );
$m->abort;
} else {
$m->comp( "/Elements/Error", why => $why, %args );
Modified: rt/3.999/branches/lorzy/lib/RT/Model/Group.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Model/Group.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Model/Group.pm Wed Feb 4 05:12:23 2009
@@ -1141,7 +1141,7 @@
my %args = (
column => undef,
value => undef,
- transaction_type => 'Set',
+ transaction_type => 'set',
record_transaction => 1,
@_
);
Modified: rt/3.999/branches/lorzy/lib/RT/Model/Scrip.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Model/Scrip.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Model/Scrip.pm Wed Feb 4 05:12:23 2009
@@ -69,7 +69,7 @@
column template => references RT::Model::Template, is mandatory;
column scrip_action => references RT::Model::ScripAction, is mandatory;
column scrip_condition => references RT::Model::ScripCondition, is mandatory;
- column stage => type is 'varchar(32)', default is 'TransactionCreate';
+ column stage => type is 'varchar(32)', default is 'transaction_create';
column description => type is 'text';
column custom_prepare_code => type is 'text';
column custom_commit_code => type is 'text';
@@ -110,7 +110,7 @@
template => 0, # name or id
scrip_action => 0, # name or id
scrip_condition => 0, # name or id
- stage => 'TransactionCreate',
+ stage => 'transaction_create',
description => undef,
custom_prepare_code => undef,
custom_commit_code => undef,
@@ -318,7 +318,7 @@
Upon success, returns the applicable Transaction object.
Otherwise, undef is returned.
-If the Scrip is in the TransactionCreate stage (the usual case), only test
+If the Scrip is in the transaction_create stage (the usual case), only test
the associated Transaction object to see if it is applicable.
For Scrips in the transaction_batch stage, test all Transaction objects
@@ -341,7 +341,7 @@
Jifty->log->debug( "In the eval for stage " . $self->stage );
my @Transactions;
- if ( $self->stage eq 'TransactionCreate' ) {
+ if ( $self->stage eq 'transaction_create' ) {
# Only look at our current Transaction
@Transactions = ( $args{'transaction_obj'} );
Modified: rt/3.999/branches/lorzy/lib/RT/Model/Ticket.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Model/Ticket.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Model/Ticket.pm Wed Feb 4 05:12:23 2009
@@ -2253,7 +2253,7 @@
Takes two arguments:
the id or name of the owner
and (optionally) the type of the SetOwner Transaction. It defaults
-to 'Give'. 'Steal' is also a valid option.
+to 'give'. 'steal' is also a valid option.
=cut
@@ -2261,7 +2261,7 @@
sub set_owner {
my $self = shift;
my $NewOwner = shift;
- my $Type = shift || "Give";
+ my $Type = shift || "give";
Jifty->handle->begin_transaction();
@@ -2309,8 +2309,8 @@
# If we're not stealing and the ticket has an owner and it's not
# the current user
- if ( $Type ne 'Steal'
- and $Type ne 'Force'
+ if ( $Type ne 'steal'
+ and $Type ne 'force'
and $old_owner_obj->id != RT->nobody->id
and $old_owner_obj->id != $self->current_user->id )
{
@@ -2396,7 +2396,7 @@
sub take {
my $self = shift;
- return ( $self->set_owner( $self->current_user->id, 'Take' ) );
+ return ( $self->set_owner( $self->current_user->id, 'take' ) );
}
@@ -2409,7 +2409,7 @@
sub untake {
my $self = shift;
- return ( $self->set_owner( RT->nobody->user_object->id, 'Untake' ) );
+ return ( $self->set_owner( RT->nobody->user_object->id, 'untake' ) );
}
=head2 steal
@@ -2425,7 +2425,7 @@
if ( $self->is_owner( $self->current_user ) ) {
return ( 0, _("You already own this ticket") );
} else {
- return ( $self->set_owner( $self->current_user->id, 'Steal' ) );
+ return ( $self->set_owner( $self->current_user->id, 'steal' ) );
}
@@ -2653,7 +2653,7 @@
# Entry point of the rule system
my $rules = RT::Ruleset->find_all_rules(
- stage => 'TransactionBatch',
+ stage => 'transaction_batch',
ticket_obj => $self,
transaction_obj => $batch->[0],
type => join( ',', map $_->type, grep defined, @{$batch} )
Modified: rt/3.999/branches/lorzy/lib/RT/Model/Transaction.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Model/Transaction.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Model/Transaction.pm Wed Feb 4 05:12:23 2009
@@ -377,7 +377,7 @@
Jifty->log->debug( 'About to prepare scrips for transaction #' . $self->id );
$self->{'scrips'}->prepare(
- stage => 'TransactionCreate',
+ stage => 'transaction_create',
type => $args{'type'},
ticket => $args{'object_id'},
transaction => $self->id,
@@ -387,7 +387,7 @@
my $ticket = RT::Model::Ticket->new( current_user => RT->system_user );
$ticket->load( $args{'object_id'} );
my $rules = RT::Ruleset->find_all_rules(
- stage => 'TransactionCreate',
+ stage => 'transaction_create',
type => $args{'type'},
ticket_obj => $ticket,
transaction_obj => $self,
@@ -757,8 +757,8 @@
if ( $type eq 'create' ) {
return ( _( "%1 Created", $obj_type ) );
- } elsif ( $type =~ /Status/i ) {
- if ( $self->field eq 'Status' ) {
+ } elsif ( $type eq 'status' ) {
+ if ( $self->field eq 'status' ) {
if ( $self->new_value eq 'deleted' ) {
return ( _( "%1 deleted", $obj_type ) );
}
Modified: rt/3.999/branches/lorzy/lib/RT/Model/User.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Model/User.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Model/User.pm Wed Feb 4 05:12:23 2009
@@ -1220,7 +1220,7 @@
my %args = (
column => undef,
value => undef,
- transaction_type => 'Set',
+ transaction_type => 'set',
record_transaction => 1,
@_
);
Modified: rt/3.999/branches/lorzy/lib/RT/Rule.pm
==============================================================================
--- rt/3.999/branches/lorzy/lib/RT/Rule.pm (original)
+++ rt/3.999/branches/lorzy/lib/RT/Rule.pm Wed Feb 4 05:12:23 2009
@@ -51,7 +51,7 @@
use warnings;
use base 'RT::ScripAction';
-use constant _stage => 'TransactionCreate';
+use constant _stage => 'transaction_create';
use constant _queue => undef;
sub prepare {
Modified: rt/3.999/branches/lorzy/sbin/rt-email-group-admin
==============================================================================
--- rt/3.999/branches/lorzy/sbin/rt-email-group-admin (original)
+++ rt/3.999/branches/lorzy/sbin/rt-email-group-admin Wed Feb 4 05:12:23 2009
@@ -77,7 +77,7 @@
Condition: On Create
Action: Notify developers
Template: Transaction
- Stage: TransactionCreate
+ Stage: transaction_create
Your development team will be notified on every new ticket in the queue.
Modified: rt/3.999/branches/lorzy/share/html/Approvals/autohandler
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Approvals/autohandler (original)
+++ rt/3.999/branches/lorzy/share/html/Approvals/autohandler Wed Feb 4 05:12:23 2009
@@ -46,8 +46,8 @@
%#
%# END BPS TAGGED BLOCK }}}
<%init>
-$m->call_next(%ARGS) if Jifty->web->current_user->user_obj->has_right(
+$m->call_next(%ARGS) if Jifty->web->current_user->has_right(
right => 'ShowApprovalsTab',
- object => $RT::System,
+ object => RT->system,
);
</%init>
Modified: rt/3.999/branches/lorzy/share/html/Dashboards/Elements/HiddenSearches
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Dashboards/Elements/HiddenSearches (original)
+++ rt/3.999/branches/lorzy/share/html/Dashboards/Elements/HiddenSearches Wed Feb 4 05:12:23 2009
@@ -56,7 +56,7 @@
if ($search->name eq 'SavedSearch') {
push @display, $search->description;
}
- elsif ($search->Name =~ m/^Search - (.*)/) {
+ elsif ($search->name =~ m/^Search - (.*)/) {
push @display, $1;
}
else {
Modified: rt/3.999/branches/lorzy/share/html/Dashboards/Elements/ShowPortlet/search
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Dashboards/Elements/ShowPortlet/search (original)
+++ rt/3.999/branches/lorzy/share/html/Dashboards/Elements/ShowPortlet/search Wed Feb 4 05:12:23 2009
@@ -52,7 +52,7 @@
$preview => 0
</%args>
<%init>
-my @for_showsearch = $Dashboard->show_search_name($portlet);
+my @for_showsearch = $dashboard->show_search_name($portlet);
</%init>
<& /Elements/ShowSearch,
Modified: rt/3.999/branches/lorzy/share/html/Dashboards/Elements/ShowSubscription
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Dashboards/Elements/ShowSubscription (original)
+++ rt/3.999/branches/lorzy/share/html/Dashboards/Elements/ShowSubscription Wed Feb 4 05:12:23 2009
@@ -58,15 +58,15 @@
my $frequency = _("None");
if (defined $subscription) {
- my $freq = $subscription->sub_value('Frequency');
- my $hour = $subscription->sub_value('Hour');
+ my $freq = $subscription->sub_value('frequency');
+ my $hour = $subscription->sub_value('hour');
if ($freq eq 'weekly') {
- my $day = $Subscription->sub_value('Dow');
+ my $day = $subscription->sub_value('dow');
$frequency = _("weekly (on %1) at %2", _($day), $hour);
}
elsif ($freq eq 'monthly') {
- $frequency = _("monthly (day %1) at %2", $Subscription->sub_value('Dom'), $hour);
+ $frequency = _("monthly (day %1) at %2", $subscription->sub_value('dom'), $hour);
}
elsif ($freq eq 'daily') {
$frequency = _("daily at %1", $hour);
Modified: rt/3.999/branches/lorzy/share/html/Dashboards/Queries.html
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Dashboards/Queries.html (original)
+++ rt/3.999/branches/lorzy/share/html/Dashboards/Queries.html Wed Feb 4 05:12:23 2009
@@ -54,7 +54,7 @@
<& /Elements/ListActions, actions => \@results &>
% if (@hidden_searches) {
-<& Elements/HiddenSearches, searches => \@hidden_searches, Dashboard => $Dashboard &>
+<& Elements/HiddenSearches, searches => \@hidden_searches, dashboard => $Dashboard &>
% }
<table width="100%" border="0">
@@ -63,7 +63,7 @@
<form action="Queries.html" name="Dashboard-<%$pane->{name}%>" method="post" enctype="multipart/form-data">
<input type="hidden" class="hidden" name="id" value="<%$Dashboard->id%>" />
<input type="hidden" class="hidden" name="privacy" value="<%$Dashboard->privacy%>" />
-<&| /Widgets/TitleBox, title => $pane->{DisplayName} &>
+<&| /Widgets/TitleBox, title => $pane->{display_name} &>
<& /Widgets/SelectionBox:show, self => $pane, nojs => 1 &>
</&>
</form>
@@ -85,13 +85,33 @@
my %desc_of;
my @items;
-my @selected;
+my %selected;
# Get the list of queries already in use
-for ($Dashboard->search_ids) {
- my ($privacy, $id, $desc) = @$_;
- my $name = "$id-$privacy";
- push @selected, $name;
+do {
+ my $panes = $Dashboard->panes;
+ for my $pane (keys %$panes) {
+ for my $portlet (@{ $panes->{$pane} }) {
+ my $name;
+ if ($portlet->{portlet_type} eq 'search') {
+ $name = join '-', 'search', $portlet->{id}, $portlet->{privacy};
+ }
+ else {
+ $name = join '-', 'component', $portlet->{component};
+ }
+
+ push @{ $selected{$pane} }, $name;
+ $desc_of{$name} = $portlet->{description};
+ }
+ }
+};
+
+my @components = @{ RT->config->get('HomepageComponents') };
+my %allowed_components = map {$_ => 1} @components;
+
+for my $desc (@components) {
+ my $name = "component-$desc";
+ push @items, [$name, $desc];
$desc_of{$name} = $desc;
}
@@ -107,40 +127,80 @@
my ($desc, $search) = @$_;
my $SearchType = $search->content->{'SearchType'} || 'Ticket';
my $privacy = $Dashboard->_build_privacy($object);
- my $name = $search->id . '-' . $privacy;
+ my $name = 'search-' . $search->id . '-' . $privacy;
push @items, [$name, $desc];
$desc_of{$name} = $desc;
}
}
-# Create a selectionbox widget for those queries
-my $sel = $m->comp(
- '/Widgets/SelectionBox:new',
- action => 'Dashboards/Queries.html',
- name => "searches",
- available => \@items,
- selected => \@selected,
- auto_save => 1,
- on_submit => sub {
- my $self = shift;
-
- # transform list of "SearchID-PrivacyObjType-PrivacyObjID"s to
- # list of [Privacy, SearchID, description]s
- my $searches = [ map {
- [ reverse(split /-/, $_, 2), $desc_of{$_} ]
- } @{ $self->{Current} } ];
+# Create selectionbox widgets for those queries
+my %pane_name = (
+ 'body' => _('Body'),
+ 'sidebar' => _('Sidebar'),
+);
+
+my @panes;
+for my $pane (keys %pane_name) {
+ my $sel = $m->comp(
+ '/Widgets/SelectionBox:new',
+ action => 'Queries.html',
+ name => "Searches-$pane",
+ display_name => $pane_name{$pane},
+ available => \@items,
+ selected => $selected{$pane},
+ auto_save => 1,
+ on_submit => sub {
+ my $self = shift;
+
+ my @portlets;
+ for (@{ $self->{Current} }) {
+ my $item = $_;
+ my $desc = $desc_of{$item};
+ my $portlet_type = $1 if $item =~ s/^(\w+)-//;
+
+ if ($portlet_type eq 'search') {
+ my ($search_id, $privacy) = split '-', $item, 2;
+ push @portlets, {
+ portlet_type => $portlet_type,
+ privacy => $privacy,
+ id => $search_id,
+ description => $desc,
+ pane => $pane,
+ };
+ }
+ elsif ($portlet_type eq 'component') {
+ push @portlets, {
+ portlet_type => $portlet_type,
+ component => $item,
+ path => "/Elements/$item",
+ description => $item,
+ pane => $pane,
+ };
+ }
+ }
+
+ # we want to keep all the other panes the same
+ my $panes = $Dashboard->panes;
+ $panes->{$pane} = \@portlets;
+
+ my ($ok, $msg) = $Dashboard->update(panes => $panes);
+
+ if ($ok) {
+ push @results, _("Dashboard updated");
+ }
+ else {
+ push @results, _("Dashboard could not be updated: %1", $msg);
+ }
+ },
+ );
- my ($ok, $msg) = $Dashboard->update(searches => $searches);
+ push @panes, $sel;
+}
- if ($ok) {
- push @results, _("Dashboard updated");
- }
- else {
- push @results, _("Dashboard could not be updated: %1", $msg);
- }
- },
-);
-$m->comp('/Widgets/SelectionBox:process', %ARGS, self => $sel, nojs => 1);
+$m->comp('/Widgets/SelectionBox:process', %ARGS, self => $_, nojs => 1)
+ for @panes;
+
+my @hidden_searches = $Dashboard->possible_hidden_searches;
</%INIT>
<%ARGS>
Modified: rt/3.999/branches/lorzy/share/html/Dashboards/Render.html
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Dashboards/Render.html (original)
+++ rt/3.999/branches/lorzy/share/html/Dashboards/Render.html Wed Feb 4 05:12:23 2009
@@ -51,7 +51,7 @@
<& /Dashboards/Elements/Tabs,
current_subtab => $current_subtab,
title => $title,
- dashboard_obj => $DashboardObj &>
+ dashboard_obj => $dashboard_obj &>
% }
<table class="dashboard">
@@ -79,8 +79,8 @@
my $current_subtab = 'Dashboards/Render.html?id=' . $id;
use RT::Dashboard;
-my $DashboardObj = RT::Dashboard->new( current_user => Jifty->web->current_user );
-my ($ok, $msg) = $DashboardObj->load_by_id($id);
+my $dashboard_obj = RT::Dashboard->new( current_user => Jifty->web->current_user );
+my ($ok, $msg) = $dashboard_obj->load_by_id($id);
abort(_("Couldn't load dashboard %1: %2", $id, $msg)) if !$ok;
my $SubscriptionObj = RT::Model::Attribute->new( current_user => Jifty->web->current_user );
@@ -106,7 +106,7 @@
$m->comp($component,
portlet => $portlet,
rows => $rows,
- preview => $Preview,
+ preview => $preview,
dashboard => $dashboard_obj,
);
};
Modified: rt/3.999/branches/lorzy/share/html/Dashboards/Subscription.html
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Dashboards/Subscription.html (original)
+++ rt/3.999/branches/lorzy/share/html/Dashboards/Subscription.html Wed Feb 4 05:12:23 2009
@@ -49,7 +49,7 @@
<& /Dashboards/Elements/Tabs,
current_subtab => $current_subtab,
title => $title,
- dashboard_obj => $DashboardObj &>
+ dashboard_obj => $dashboard_obj &>
<& /Elements/ListActions, actions => \@results &>
@@ -65,20 +65,20 @@
<tr><td class="label">
<&|/l&>Dashboard</&>:
</td><td class="value">
-<% $DashboardObj->name %>
+<% $dashboard_obj->name %>
</td></tr>
<tr><td class="label">
<&|/l&>Queries</&>:
</td><td class="value">
-% my @portlets = grep { defined } $dashboard_obj->Portlets;
+% my @portlets = grep { defined } $dashboard_obj->portlets;
% if (!@portlets) {
(<&|/l&>none</&>)
% } else {
<ol class="dashboard-queries">
% for my $portlet (@portlets) {
<li class="dashboard-query">
- <% _($portlet->{description}, $fields{'Rows'}) %>
+ <% _($portlet->{description}, $fields{'rows'}) %>
</li>
% }
</ol>
@@ -187,7 +187,7 @@
my $timezone = Jifty->web->current_user->user_object->timezone || RT->config->get('Timezone');
use RT::Dashboard;
-my $DashboardObj = RT::Dashboard->new( current_user => Jifty->web->current_user );
+my $dashboard_obj = RT::Dashboard->new( current_user => Jifty->web->current_user );
my $SubscriptionObj = RT::Model::Attribute->new( current_user => Jifty->web->current_user );
@@ -202,7 +202,7 @@
? $SubscriptionObj->sub_value('dashboard_id')
: $ARGS{'dashboard_id'};
-($val, $msg) = $DashboardObj->load_by_id($dashboard_id);
+($val, $msg) = $dashboard_obj->load_by_id($dashboard_id);
$val || abort(_("Couldn't load dashboard %1: %2.", $dashboard_id, $msg));
my %fields = (
@@ -248,7 +248,7 @@
# create
else {
abort(_("Unable to subscribe to dashboard %1: Permission denied", $dashboard_id))
- unless $DashboardObj->current_user_can_subscribe;
+ unless $dashboard_obj->current_user_can_subscribe;
my ($val, $msg) = $SubscriptionObj->create(
name => 'Subscription',
@@ -258,7 +258,7 @@
content => \%fields,
);
if ($val) {
- push @results, _("Subscribed to dashboard %1", $DashboardObj->name);
+ push @results, _("Subscribed to dashboard %1", $dashboard_obj->name);
push @results, _("Warning: you have no email address set, so you will not receive this dashboard until you have it set")
unless Jifty->web->current_user->email || $fields{recipient};
}
@@ -269,10 +269,10 @@
}
if ($SubscriptionObj->id) {
- $title = _("Modify the subscription to dashboard %1", $DashboardObj->name);
+ $title = _("Modify the subscription to dashboard %1", $dashboard_obj->name);
}
else {
- $title = _("Subscribe to dashboard %1", $DashboardObj->name);
+ $title = _("Subscribe to dashboard %1", $dashboard_obj->name);
}
</%INIT>
Modified: rt/3.999/branches/lorzy/share/html/Elements/Tabs
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Elements/Tabs (original)
+++ rt/3.999/branches/lorzy/share/html/Elements/Tabs Wed Feb 4 05:12:23 2009
@@ -93,7 +93,7 @@
};
}
-if (Jifty->web->current_user->has_right( Right => 'ShowApprovalsTab',
+if (Jifty->web->current_user->has_right( right => 'ShowApprovalsTab',
object => RT->system )) {
$basetabs->{p} = { title => _('Approval'),
path => 'Approvals/'
Modified: rt/3.999/branches/lorzy/share/html/Install/index.html
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Install/index.html (original)
+++ rt/3.999/branches/lorzy/share/html/Install/index.html Wed Feb 4 05:12:23 2009
@@ -85,7 +85,6 @@
<& Elements/Form, fields => 'start',
next => '/Install/DatabaseType.html',
next_label => _("Let's go") &>
-% }
</&>
<%init>
my @errors;
Modified: rt/3.999/branches/lorzy/share/html/Ticket/ModifyPeople.html
==============================================================================
--- rt/3.999/branches/lorzy/share/html/Ticket/ModifyPeople.html (original)
+++ rt/3.999/branches/lorzy/share/html/Ticket/ModifyPeople.html Wed Feb 4 05:12:23 2009
@@ -77,7 +77,6 @@
push @results, process_ticket_watchers( ticket_obj => $Ticket, args_ref => \%ARGS);
}
-push @results, @wresults;
</%INIT>
Modified: rt/3.999/branches/lorzy/share/po/zh_cn.po
==============================================================================
--- rt/3.999/branches/lorzy/share/po/zh_cn.po (original)
+++ rt/3.999/branches/lorzy/share/po/zh_cn.po Wed Feb 4 05:12:23 2009
@@ -7438,7 +7438,7 @@
msgstr "批次更动时"
#: NOT FOUND IN SOURCE
-msgid "TransactionCreate"
+msgid "transaction_create"
msgstr "新增更动时"
#: lib/RT/Transaction_Overlay.pm:870
Modified: rt/3.999/branches/lorzy/share/po/zh_tw.po
==============================================================================
--- rt/3.999/branches/lorzy/share/po/zh_tw.po (original)
+++ rt/3.999/branches/lorzy/share/po/zh_tw.po Wed Feb 4 05:12:23 2009
@@ -7438,7 +7438,7 @@
msgstr "批次更動時"
#: NOT FOUND IN SOURCE
-msgid "TransactionCreate"
+msgid "transaction_create"
msgstr "新增更動時"
#: lib/RT/Transaction_Overlay.pm:870
Modified: rt/3.999/branches/lorzy/t/api/scrip_order.t
==============================================================================
--- rt/3.999/branches/lorzy/t/api/scrip_order.t (original)
+++ rt/3.999/branches/lorzy/t/api/scrip_order.t Wed Feb 4 05:12:23 2009
@@ -23,7 +23,7 @@
custom_prepare_code => 'Jifty->log->debug("Setting priority to 10..."); return 1;',
custom_commit_code => '$self->ticket_obj->set_priority(10);',
template => 'Blank',
- stage => 'TransactionCreate',
+ stage => 'transaction_create',
);
ok($id, "Created priority-10 scrip? ".$msg);
@@ -36,7 +36,7 @@
custom_prepare_code => 'Jifty->log->debug("Setting priority to 5..."); return 1;',
custom_commit_code => '$self->ticket_obj->set_priority(5);',
template => 'Blank',
- stage => 'TransactionCreate',
+ stage => 'transaction_create',
);
ok($id, "Created priority-5 scrip? ".$msg);
Modified: rt/3.999/branches/lorzy/t/api/ticket.t
==============================================================================
--- rt/3.999/branches/lorzy/t/api/ticket.t (original)
+++ rt/3.999/branches/lorzy/t/api/ticket.t Wed Feb 4 05:12:23 2009
@@ -209,10 +209,9 @@
$txns->limit(column => 'type', operator => '!=', value => 'email_record');
my $give = $txns->first;
-is($give->type, 'Give');
+is($give->type, 'give');
-
-is($give-> new_value , $root->id , "Stolen from root");
+is($give->new_value , $root->id , "Stolen from root");
is($give->old_value , RT->system_user->id , "Stolen by the systemuser");
Modified: rt/3.999/branches/lorzy/t/i18n/default.t
==============================================================================
--- rt/3.999/branches/lorzy/t/i18n/default.t (original)
+++ rt/3.999/branches/lorzy/t/i18n/default.t Wed Feb 4 05:12:23 2009
@@ -7,14 +7,14 @@
my ($baseurl, $m) = RT::Test->started_ok;
$m->get_ok('/');
-$m->title_is('Login');
+$m->title_is('Login!');
$m->get_ok('/', { 'Accept-Language' => 'x-klingon' });
-$m->title_is('Login', 'unavailable language fallback to en');
+$m->title_is('Login!', 'unavailable language fallback to en');
$m->add_header('Accept-Language' => 'zh-tw,zh;q=0.8,en-gb;q=0.5,en;q=0.3');
$m->get_ok('/');
use utf8;
Encode::_utf8_on($m->{content});
-$m->title_is('登入', 'Page title properly translated to chinese');
+$m->title_is('登入!', 'Page title properly translated to chinese');
$m->content_contains('密碼','Password properly translated');
Modified: rt/3.999/branches/lorzy/t/ticket/linking.t
==============================================================================
--- rt/3.999/branches/lorzy/t/ticket/linking.t (original)
+++ rt/3.999/branches/lorzy/t/ticket/linking.t Wed Feb 4 05:12:23 2009
@@ -76,7 +76,7 @@
scrip_condition => $condition->id,
scrip_action => $action->id,
template => $template->id,
- stage => 'TransactionCreate',
+ stage => 'transaction_create',
queue => 0,
custom_is_applicable_code => '$self->transaction_obj->type =~ /(add|delete)_link/;',
custom_prepare_code => '1;',
Modified: rt/3.999/branches/lorzy/t/web/command_line.t
==============================================================================
--- rt/3.999/branches/lorzy/t/web/command_line.t (original)
+++ rt/3.999/branches/lorzy/t/web/command_line.t Wed Feb 4 05:12:23 2009
@@ -76,12 +76,12 @@
expect_handle->before() =~ /Queue (\d+) created/;
my $queue_id = $1;
ok($queue_id, "Got queue id=$queue_id");
-# updating users
-expect_send("edit queue/$queue_id set name='EditedQueue$$'", 'Editing the queue');
+# updating users, with old arg format "Name"
+expect_send("edit queue/$queue_id set Name='EditedQueue$$'", 'Editing the queue');
expect_like(qr/Queue $queue_id updated/, 'Edited the queue');
expect_send("show queue/$queue_id", 'Showing the queue...');
expect_like(qr/id: queue\/$queue_id/, 'Saw the queue');
-expect_like(qr/name: EditedQueue$$/, 'Saw the modification');
+expect_like(qr/Name: EditedQueue$$/, 'Saw the modification');
TODO: {
todo_skip "Listing non-ticket items doesn't work", 2;
expect_send("list -t queue 'id > 0'", 'Listing the queues...');
@@ -123,32 +123,32 @@
expect_send("edit ticket/$ticket_id set owner=root", 'Changing owner...');
expect_like(qr/Ticket $ticket_id updated/, 'Changed owner');
expect_send("show ticket/$ticket_id -f owner", 'Verifying change...');
-expect_like(qr/owner: root/, 'Verified change');
+expect_like(qr/Owner: root/, 'Verified change');
# change a ticket's Requestor
expect_send("edit ticket/$ticket_id set requestors=foo\@example.com", 'Changing Requestor...');
expect_like(qr/Ticket $ticket_id updated/, 'Changed Requestor');
expect_send("show ticket/$ticket_id -f requestors", 'Verifying change...');
-expect_like(qr/requestors: foo\@example.com/, 'Verified change');
+expect_like(qr/Requestors: foo\@example.com/, 'Verified change');
# change a ticket's Cc
expect_send("edit ticket/$ticket_id set cc=bar\@example.com", 'Changing Cc...');
expect_like(qr/Ticket $ticket_id updated/, 'Changed Cc');
expect_send("show ticket/$ticket_id -f cc", 'Verifying change...');
-expect_like(qr/cc: bar\@example.com/, 'Verified change');
+expect_like(qr/Cc: bar\@example.com/, 'Verified change');
# change a ticket's priority
expect_send("edit ticket/$ticket_id set priority=10", 'Changing priority...');
expect_like(qr/Ticket $ticket_id updated/, 'Changed priority');
expect_send("show ticket/$ticket_id -f priority", 'Verifying change...');
-expect_like(qr/priority: 10/, 'Verified change');
+expect_like(qr/Priority: 10/, 'Verified change');
# move a ticket to a different queue
expect_send("edit ticket/$ticket_id set queue=EditedQueue$$", 'Changing queue...');
expect_like(qr/Ticket $ticket_id updated/, 'Changed queue');
expect_send("show ticket/$ticket_id -f queue", 'Verifying change...');
-expect_like(qr/queue: EditedQueue$$/, 'Verified change');
+expect_like(qr/Queue: EditedQueue$$/, 'Verified change');
# cannot move ticket to a nonexistent queue
expect_send("edit ticket/$ticket_id set queue=nonexistent-$$", 'Changing to nonexistent queue...');
expect_like(qr/queue does not exist/i, 'Errored out');
expect_send("show ticket/$ticket_id -f queue", 'Verifying lack of change...');
-expect_like(qr/queue: EditedQueue$$/, 'Verified lack of change');
+expect_like(qr/Queue: EditedQueue$$/, 'Verified lack of change');
# Test reading and setting custom fields without spaces
expect_send("show ticket/$ticket_id -f CF-myCF$$", 'Checking initial value');
@@ -202,17 +202,17 @@
expect_send("edit ticket/$ticket_id set status=stalled", 'Changing status to "stalled"...');
expect_like(qr/Ticket $ticket_id updated/, 'Changed status');
expect_send("show ticket/$ticket_id -f status", 'Verifying change...');
-expect_like(qr/status: stalled/, 'Verified change');
+expect_like(qr/Status: stalled/, 'Verified change');
# resolve a ticket
expect_send("edit ticket/$ticket_id set status=resolved", 'Changing status to "resolved"...');
expect_like(qr/Ticket $ticket_id updated/, 'Changed status');
expect_send("show ticket/$ticket_id -f status", 'Verifying change...');
-expect_like(qr/status: resolved/, 'Verified change');
+expect_like(qr/Status: resolved/, 'Verified change');
# try to set status to an invalid value
expect_send("edit ticket/$ticket_id set status=quux", 'Changing status to an invalid value...');
expect_like(qr/invalid value/i, 'Errored out');
expect_send("show ticket/$ticket_id -f status", 'Verifying lack of change...');
-expect_like(qr/status: resolved/, 'Verified change');
+expect_like(qr/Status: resolved/, 'Verified change');
# }}}
@@ -246,7 +246,7 @@
my $attachment_type = $2;
ok($attachment_id, "Got attachment id=$attachment_id $attachment_type");
expect_send("show -s ticket/$ticket_id/attachments/$attachment_id", "Showing attachment $attachment_id...");
-expect_like(qr/content_type: $attachment_type/, 'Got the attachment');
+expect_like(qr/ContentType: $attachment_type/, 'Got the attachment');
# }}}
@@ -263,7 +263,7 @@
expect_like(qr/User $user_id updated/, 'Edited the user');
expect_send("show user/$user_id", 'Showing the user...');
expect_like(qr/id: user\/$user_id/, 'Saw the user');
-expect_like(qr/name: EditedUser$$/, 'Saw the modification');
+expect_like(qr/Name: EditedUser$$/, 'Saw the modification');
TODO: {
todo_skip "Listing non-ticket items doesn't work", 2;
expect_send("list -t user 'id > 0'", 'Listing the users...');
@@ -287,7 +287,7 @@
expect_like(qr/Group $group_id updated/, 'Edited the group');
expect_send("show group/$group_id", 'Showing the group...');
expect_like(qr/id: group\/$group_id/, 'Saw the group');
-expect_like(qr/name: EditedGroup$$/, 'Saw the modification');
+expect_like(qr/Name: EditedGroup$$/, 'Saw the modification');
TODO: {
local $TODO = "Listing non-ticket items doesn't work";
expect_send("list -t group 'id > 0'", 'Listing the groups...');
@@ -312,7 +312,7 @@
expect_like(qr/Custom field $cf_id updated/, 'Edited the custom field');
expect_send("show cf/$cf_id", 'Showing the queue...');
expect_like(qr/id: custom_field\/$cf_id/, 'Saw the custom field');
-expect_like(qr/name: EditedCF$$/, 'Saw the modification');
+expect_like(qr/Name: EditedCF$$/, 'Saw the modification');
TODO: {
todo_skip "Listing non-ticket items doesn't work", 2;
expect_send("list -t custom_field 'id > 0'", 'Listing the CFs...');
@@ -399,13 +399,13 @@
expect_send("take $steal_ticket_id", 'user tries to take the ticket...');
expect_like(qr/You can only take tickets that are unowned/, '...and fails.');
expect_send("show ticket/$steal_ticket_id -f owner", 'Double-checking...');
- expect_like(qr/owner: root/, '...no change.');
+ expect_like(qr/Owner: root/, '...no change.');
# user steals the ticket
expect_send("steal $steal_ticket_id", 'user tries to *steal* the ticket...');
expect_like(qr/Owner changed from root to fooser$$/, '...and succeeds!');
expect_send("show ticket/$steal_ticket_id -f owner", 'Double-checking...');
- expect_like(qr/owner: fooser$$/, '...yup, it worked.');
+ expect_like(qr/Owner: fooser$$/, '...yup, it worked.');
expect_quit();
# log back in as root
Modified: rt/3.999/branches/lorzy/t/web/custom_search.t
==============================================================================
--- rt/3.999/branches/lorzy/t/web/custom_search.t (original)
+++ rt/3.999/branches/lorzy/t/web/custom_search.t Wed Feb 4 05:12:23 2009
@@ -1,7 +1,7 @@
#!/usr/bin/perl -w
use strict;
-use RT::Test; use Test::More tests => 11;
+use RT::Test; use Test::More tests => 12;
my ($baseurl, $m) = RT::Test->started_ok;
my $url = $m->rt_base_url;
@@ -44,7 +44,7 @@
$m->form_name('build_query');
my $cdc = $m->current_form->find_input('current_display_columns');
-my ($requestor_value) = grep { /Requestor/ } $cdc->possible_values;
+my ($requestor_value) = grep { /requestor/ } $cdc->possible_values;
ok($requestor_value, "got the requestor value");
$m->field (current_display_columns => $requestor_value);
Modified: rt/3.999/branches/lorzy/t/web/dashboards.t
==============================================================================
--- rt/3.999/branches/lorzy/t/web/dashboards.t (original)
+++ rt/3.999/branches/lorzy/t/web/dashboards.t Wed Feb 4 05:12:23 2009
@@ -1,7 +1,7 @@
#!/usr/bin/perl -w
use strict;
-use Test::More tests => 110;
+use Test::More tests => 113;
use RT::Test;
use RT::Dashboard;
my ($baseurl, $m) = RT::Test->started_ok;
@@ -106,8 +106,8 @@
$m->follow_link_ok({text => "Queries"});
$m->content_contains("Modify the queries of dashboard different dashboard");
-$m->form_name( 'dashboard-searches-body' );
-$m->field('searches-Available' => ["2-RT::System-1"]);
+$m->form_name( 'Dashboard-Searches-body' );
+$m->field('Searches-body-Available' => ["search-2-RT::System-1"]);
$m->click_button(name => 'add');
$m->content_contains("Dashboard updated");
@@ -124,8 +124,8 @@
is(@searches, 1, "one saved search in the dashboard");
like($searches[0]->name, qr/newest unowned tickets/, "correct search name");
-$m->form_name('dashboard-searches-body');
-$m->field('searches-body-available' => ["search-1-RT::System-1"]);
+$m->form_name('Dashboard-Searches-body');
+$m->field('Searches-body-Available' => ["search-1-RT::System-1"]);
$m->click_button(name => 'add');
$m->content_contains("Dashboard updated");
@@ -216,8 +216,8 @@
# first create a personal saved search...
$m->get_ok($url."Search/Build.html");
$m->follow_link_ok({text => 'Advanced'});
-$m->form_with_fields('Query');
-$m->field(Query => "id > 0");
+$m->form_with_fields('query');
+$m->field(query => "id > 0");
$m->submit;
$m->form_with_fields('saved_search_description');
@@ -227,7 +227,7 @@
# then the system-wide dashboard
$m->get_ok($url."Dashboards/Modify.html?create=1");
-$m->form_name('ModifyDashboard');
+$m->form_name('modify_dashboard');
$m->field("name" => 'system dashboard');
$m->field("privacy" => 'RT::System-1');
$m->content_lacks('Delete', "Delete button hidden because we are creating");
@@ -237,8 +237,8 @@
$m->follow_link_ok({text => 'Queries'});
-$m->form_name('dashboard-searches-body');
-$m->field('searches-body-available' => ['search-7-RT::Model::User-22']); # XXX: :( :(
+$m->form_name('Dashboard-Searches-body');
+$m->field('Searches-body-Available' => ['search-7-RT::Model::User-22']); # XXX: :( :(
$m->click_button(name => 'add');
$m->content_contains("Dashboard updated");
Modified: rt/3.999/branches/lorzy/t/web/rest.t
==============================================================================
--- rt/3.999/branches/lorzy/t/web/rest.t (original)
+++ rt/3.999/branches/lorzy/t/web/rest.t Wed Feb 4 05:12:23 2009
@@ -35,7 +35,7 @@
$text = join "\n", @lines;
-ok($text =~ s/subject:\s*$/subject: REST interface/m, "successfully replaced subject");
+ok($text =~ s/Subject:\s*$/Subject: REST interface/m, "successfully replaced subject");
$m->post("$baseurl/REST/1.0/ticket/edit", [
user => 'root',
@@ -63,10 +63,10 @@
# the fields are interpreted server-side a hash (why?), so we can't depend
# on order
for ("id: ticket/1",
- "subject: REST interface",
+ "Subject: REST interface",
"CF.{fu()n:k/}: maximum",
"CF.{severity}: explosive",
- "status: new") {
+ "Status: new") {
$m->content_contains($_);
}
Modified: rt/3.999/branches/lorzy/t/web/ticket-create-utf8.t
==============================================================================
--- rt/3.999/branches/lorzy/t/web/ticket-create-utf8.t (original)
+++ rt/3.999/branches/lorzy/t/web/ticket-create-utf8.t Wed Feb 4 05:12:23 2009
@@ -40,8 +40,8 @@
{
ok $m->goto_create_ticket( $q ), "go to create ticket";
$m->form_number(3);
- $m->field( Subject => $ru_test );
- $m->field( Content => $ru_support );
+ $m->field( subject => $ru_test );
+ $m->field( content => $ru_support );
$m->submit;
$m->content_like(
More information about the Rt-commit
mailing list