[Rt-commit] r12573 - in rt/branches/3.8-TESTING: . etc lib/RT lib/RT/I18N lib/RT/Interface lib/RT/Search sbin share/html/NoAuth/css/3.5-default share/html/NoAuth/js share/html/Search share/html/Search/Elements share/html/SelfService/Elements share/html/Ticket share/html/Ticket/Elements share/html/Widgets
jesse at bestpractical.com
jesse at bestpractical.com
Wed May 21 01:43:13 EDT 2008
Author: jesse
Date: Wed May 21 01:43:10 2008
New Revision: 12573
Modified:
rt/branches/3.8-TESTING/ (props changed)
rt/branches/3.8-TESTING/etc/RT_Config.pm.in
rt/branches/3.8-TESTING/lib/RT/Action/SendEmail.pm
rt/branches/3.8-TESTING/lib/RT/Base.pm
rt/branches/3.8-TESTING/lib/RT/I18N.pm
rt/branches/3.8-TESTING/lib/RT/I18N/fr.po
rt/branches/3.8-TESTING/lib/RT/I18N/pt_br.po
rt/branches/3.8-TESTING/lib/RT/Interface/REST.pm
rt/branches/3.8-TESTING/lib/RT/Interface/Web.pm
rt/branches/3.8-TESTING/lib/RT/Queue_Overlay.pm
rt/branches/3.8-TESTING/lib/RT/Search/Googleish.pm
rt/branches/3.8-TESTING/lib/RT/Ticket_Overlay.pm
rt/branches/3.8-TESTING/lib/RT/Tickets_Overlay.pm
rt/branches/3.8-TESTING/sbin/extract-message-catalog
rt/branches/3.8-TESTING/sbin/rt-test-dependencies.in
rt/branches/3.8-TESTING/share/html/NoAuth/css/3.5-default/forms.css
rt/branches/3.8-TESTING/share/html/NoAuth/js/combobox.js
rt/branches/3.8-TESTING/share/html/Search/Bulk.html
rt/branches/3.8-TESTING/share/html/Search/Elements/DisplayOptions
rt/branches/3.8-TESTING/share/html/Search/Simple.html
rt/branches/3.8-TESTING/share/html/SelfService/Elements/MyRequests
rt/branches/3.8-TESTING/share/html/Ticket/Create.html
rt/branches/3.8-TESTING/share/html/Ticket/Display.html
rt/branches/3.8-TESTING/share/html/Ticket/Elements/Tabs
rt/branches/3.8-TESTING/share/html/Widgets/ComboBox
Log:
r31793 at 31b: jesse | 2008-05-21 11:45:28 +0800
* Merge down from RT 3.6. (Except for tests. those will come in the next commit)
Modified: rt/branches/3.8-TESTING/etc/RT_Config.pm.in
==============================================================================
--- rt/branches/3.8-TESTING/etc/RT_Config.pm.in (original)
+++ rt/branches/3.8-TESTING/etc/RT_Config.pm.in Wed May 21 01:43:10 2008
@@ -515,8 +515,10 @@
Set($WebExternalAuto , undef);
-# $AutoCreate is a custom set of attributes to create the user with,
-# if they are created using $WebExternalAuto
+# If $WebExternalAuto is true, $AutoCreate will be passed to User's
+# Create method. Use it to set defaults, such as creating
+# Unprivileged users with { Privileged => 0 }
+# Must be a hashref of arguments
Set($AutoCreate, undef);
@@ -681,8 +683,11 @@
Set($DateDayBeforeMonth , 1);
-# Should "Tuesday" default to meaning "Next Tuesday" or "Last Tuesday"?
-# Set to 0 for "Next" or 1 for "Last".
+# Should an unspecified day or year in a date refer to a future or a
+# past value? For example, should a date of "Tuesday" default to mean
+# the date for next Tuesday or last Tuesday? Should the date "March 1"
+# default to the date for next March or last March?
+# Set to 0 for the next date or 1 for the last date.
Set($AmbiguousDayInPast , 1);
Modified: rt/branches/3.8-TESTING/lib/RT/Action/SendEmail.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/Action/SendEmail.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/Action/SendEmail.pm Wed May 21 01:43:10 2008
@@ -388,6 +388,7 @@
}
$self->AddAttachment($attach);
}
+ my $method = 'send';
}
Modified: rt/branches/3.8-TESTING/lib/RT/Base.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/Base.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/Base.pm Wed May 21 01:43:10 2008
@@ -105,7 +105,7 @@
." with a RT::CurrentUser or a RT::User obejct as the first argument.";
$msg .= "\n". Carp::longmess() if @_;
- $RT::Logger->err( $msg );
+ $RT::Logger->error( $msg );
return $self->{'user'} = undef;
}
Modified: rt/branches/3.8-TESTING/lib/RT/I18N.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/I18N.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/I18N.pm Wed May 21 01:43:10 2008
@@ -215,7 +215,7 @@
}
# If this is a textual entity, we'd need to preserve its original encoding
- $head->add( "X-RT-Original-Encoding" => $charset )
+ $head->replace( "X-RT-Original-Encoding" => $charset )
if $head->mime_attr('content-type.charset') or IsTextualContentType($head->mime_type);
return unless IsTextualContentType($head->mime_type);
Modified: rt/branches/3.8-TESTING/lib/RT/I18N/fr.po
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/I18N/fr.po (original)
+++ rt/branches/3.8-TESTING/lib/RT/I18N/fr.po Wed May 21 01:43:10 2008
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: RT 3.5.x\n"
"POT-Creation-Date: 2002-05-02 11:36+0800\n"
-"PO-Revision-Date: 2008-02-22 10:07+0200\n"
+"PO-Revision-Date: 2008-04-04 17:17+0200\n"
"Last-Translator: Emmanuel Lacour <elacour at easter-eggs.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -153,7 +153,7 @@
msgstr "%1 - Précisez l'identifiant du modèle que vous souhaitez utiliser"
#: NOT FOUND IN SOURCE
-msgid "%1 - Specify if you want to use either 'first' or 'last' tarnsaction"
+msgid "%1 - Specify if you want to use either 'first' or 'last' transaction"
msgstr "%1 - Précisez si vous souhaitez utiliser la première ou la dernière transaction"
#: bin/rt-crontool:297
@@ -262,10 +262,6 @@
msgid "%1 deleted"
msgstr "%1 supprimé(e)"
-#: NOT FOUND IN SOURCE
-msgid "%1 grouped by %2"
-msgstr "%1 groupés par %2"
-
#: etc/initialdata:652
msgid "%1 highest priority tickets I own"
msgstr "Mes %1 tickets de plus haute priorité"
@@ -720,7 +716,7 @@
msgid "AdminOwnPersonalGroups"
msgstr "GérerGroupesPersonnelsPropres"
-#: lib/RT/Queue_Overlay.pm:92
+#: lib/RT/Queue_Overlay.pm:94
msgid "AdminQueue"
msgstr "GérerFile"
@@ -829,11 +825,11 @@
msgid "Ascending"
msgstr "Croissant"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "Assign and remove custom fields"
msgstr "Fixer et supprimer les champs personnalisés"
-#: lib/RT/Queue_Overlay.pm:96
+#: lib/RT/Queue_Overlay.pm:98
msgid "AssignCustomFields"
msgstr "FixerChampsPersonnalisés"
@@ -982,7 +978,7 @@
msgid "Can not modify system users"
msgstr "Les utilisateurs système ne peuvent être modifiés"
-#: lib/RT/Queue_Overlay.pm:91
+#: lib/RT/Queue_Overlay.pm:93
msgid "Can this principal see this queue"
msgstr "Le groupe/utilisateur peut-il voir cette file"
@@ -1117,7 +1113,7 @@
msgid "Comment on tickets"
msgstr "Commentaire sur le ticket"
-#: lib/RT/Queue_Overlay.pm:111
+#: lib/RT/Queue_Overlay.pm:113
msgid "CommentOnTicket"
msgstr "CommenterTicket"
@@ -1441,13 +1437,15 @@
msgid "Couldn't resolve '%1' into a URI."
msgstr "Impossible de convertir '%1' en URI."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Link_Overlay.pm:113
+#. ($args{'Base'})
msgid "Couldn't resolve base '%1' into a URI."
-msgstr "Impossible de résoudre la base '%1' dans une URI."
+msgstr "Impossible de résoudre la base '%1' en URI."
-#: NOT FOUND IN SOURCE
+#: lib/RT/Link_Overlay.pm:128
+#. ($args{'Target'})
msgid "Couldn't resolve target '%1' into a URI."
-msgstr "Impossible de résoudre la cible '%1' dans une URI."
+msgstr "Impossible de résoudre la cible '%1' en URI."
#: lib/RT/Interface/Email.pm:643
msgid "Couldn't send email"
@@ -1540,7 +1538,7 @@
msgid "Create ticket"
msgstr "Ajouter un ticket"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "Create tickets in this queue"
msgstr "Ajouter des tickets dans cette file"
@@ -1548,7 +1546,7 @@
msgid "Create, delete and modify custom fields"
msgstr "Ajouter, supprimer et modifier des champs personnalisés"
-#: lib/RT/Queue_Overlay.pm:92
+#: lib/RT/Queue_Overlay.pm:94
msgid "Create, delete and modify queues"
msgstr "Ajouter, supprimer et modifier les files"
@@ -1564,7 +1562,7 @@
msgid "CreateSavedSearch"
msgstr "CréerRechercheSauvée"
-#: lib/RT/Queue_Overlay.pm:109
+#: lib/RT/Queue_Overlay.pm:111
msgid "CreateTicket"
msgstr "CréerTicket"
@@ -1825,7 +1823,7 @@
msgid "Delete values"
msgstr "Supprimer les valeurs"
-#: lib/RT/Queue_Overlay.pm:114
+#: lib/RT/Queue_Overlay.pm:116
msgid "DeleteTicket"
msgstr "SupprimerTicket"
@@ -1906,7 +1904,7 @@
msgid "Display"
msgstr "Afficher"
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Queue_Overlay.pm:95
msgid "Display Access Control List"
msgstr "Afficher la liste des droits"
@@ -1914,11 +1912,11 @@
msgid "Display Columns"
msgstr "Afficher les colonnes"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:101
msgid "Display Scrip templates for this queue"
msgstr "Afficher les modèles de Scrips pour cette file"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:104
msgid "Display Scrips for this queue"
msgstr "Afficher les Scrips pour cette file"
@@ -2698,7 +2696,7 @@
msgid "Invalid Group Type"
msgstr "Type de groupe invalide"
-#: lib/RT/Principal_Overlay.pm:161
+#: lib/RT/Principal_Overlay.pm:163
msgid "Invalid Right"
msgstr "Droit invalide"
@@ -2833,6 +2831,7 @@
msgstr "Date dernière MAJ"
#: NOT FOUND IN SOURCE
+#. FIXME: title in ColumnMap, html/Elements/RT__Ticket/ColumnMap:278
msgid "Last Updated By"
msgstr "Dernière MAJ par"
@@ -3213,7 +3212,7 @@
msgid "Mobile"
msgstr "Mobile"
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:96
msgid "Modify Access Control List"
msgstr "Modifier la liste de droits"
@@ -3239,11 +3238,11 @@
msgid "Modify Rights"
msgstr "Modifier les droits"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "Modify Scrip templates for this queue"
msgstr "Modifier les modèles de Scrips pour cette file"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "Modify Scrips for this queue"
msgstr "Modifier les Scrips pour cette file"
@@ -3399,7 +3398,7 @@
msgid "Modify ticket #%1"
msgstr "Modifier le ticket n°%1"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "Modify tickets"
msgstr "Modifier les tickets"
@@ -3418,7 +3417,7 @@
msgid "Modify user rights for queue %1"
msgstr "Modifier les droits utilisateurs pour la file %1"
-#: lib/RT/Queue_Overlay.pm:94
+#: lib/RT/Queue_Overlay.pm:96
msgid "ModifyACL"
msgstr "ModifierACL"
@@ -3434,11 +3433,11 @@
msgid "ModifyOwnMembership"
msgstr "ModifierPropresAppartenances"
-#: lib/RT/Queue_Overlay.pm:95
+#: lib/RT/Queue_Overlay.pm:97
msgid "ModifyQueueWatchers"
msgstr "ModifierObservateurs"
-#: lib/RT/Queue_Overlay.pm:100
+#: lib/RT/Queue_Overlay.pm:102
msgid "ModifyScrips"
msgstr "ModifierScrips"
@@ -3446,11 +3445,11 @@
msgid "ModifySelf"
msgstr "ModifierDonnéesPerso"
-#: lib/RT/Queue_Overlay.pm:97
+#: lib/RT/Queue_Overlay.pm:99
msgid "ModifyTemplate"
msgstr "ModifierModèle"
-#: lib/RT/Queue_Overlay.pm:113
+#: lib/RT/Queue_Overlay.pm:115
msgid "ModifyTicket"
msgstr "ModifierTicket"
@@ -4147,11 +4146,11 @@
msgid "Over time, priority moves toward"
msgstr "Temps dépassé, priorité augmentée"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "Own tickets"
msgstr "Tickets propres"
-#: lib/RT/Queue_Overlay.pm:112
+#: lib/RT/Queue_Overlay.pm:114
msgid "OwnTicket"
msgstr "PrendreTicket"
@@ -4621,11 +4620,11 @@
msgid "Reply to requestors"
msgstr "Répondre aux demandeurs"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "Reply to tickets"
msgstr "Répondre aux tickets"
-#: lib/RT/Queue_Overlay.pm:110
+#: lib/RT/Queue_Overlay.pm:112
msgid "ReplyToTicket"
msgstr "RépondreTicket"
@@ -4900,15 +4899,15 @@
msgid "See custom fields"
msgstr "Voir les champs personnalisés"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:108
msgid "See exact outgoing email messages and their recipeients"
msgstr "Voir les mails sortant et leurs destinataires"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "See ticket private commentary"
msgstr "Voir les commentaires privés du ticket"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "See ticket summaries"
msgstr "Vue récapitulative des tickets"
@@ -4920,7 +4919,7 @@
msgid "SeeGroup"
msgstr "VoirGroupe"
-#: lib/RT/Queue_Overlay.pm:91
+#: lib/RT/Queue_Overlay.pm:93
msgid "SeeQueue"
msgstr "VoirFile"
@@ -5140,7 +5139,7 @@
msgid "Show requests awaiting other approvals"
msgstr "Afficher les requêtes attendant d'autres approbations"
-#: lib/RT/Queue_Overlay.pm:93
+#: lib/RT/Queue_Overlay.pm:95
msgid "ShowACL"
msgstr "AfficherACL"
@@ -5148,7 +5147,7 @@
msgid "ShowConfigTab"
msgstr "VoirOngletConfiguration"
-#: lib/RT/Queue_Overlay.pm:106
+#: lib/RT/Queue_Overlay.pm:108
msgid "ShowOutgoingEmail"
msgstr "AfficherEmailSortant"
@@ -5156,19 +5155,19 @@
msgid "ShowSavedSearches"
msgstr "AfficherRecherchesSauvées"
-#: lib/RT/Queue_Overlay.pm:102
+#: lib/RT/Queue_Overlay.pm:104
msgid "ShowScrips"
msgstr "AfficherScrips"
-#: lib/RT/Queue_Overlay.pm:99
+#: lib/RT/Queue_Overlay.pm:101
msgid "ShowTemplate"
msgstr "AfficherModèle"
-#: lib/RT/Queue_Overlay.pm:103
+#: lib/RT/Queue_Overlay.pm:105
msgid "ShowTicket"
msgstr "AfficherTicket"
-#: lib/RT/Queue_Overlay.pm:104
+#: lib/RT/Queue_Overlay.pm:106
msgid "ShowTicketComments"
msgstr "AfficherCommentairesTickets"
@@ -5188,7 +5187,7 @@
msgid "Sign up as a ticket Requestor or ticket or queue Cc"
msgstr "S'identifier en tant que demandeur ou CC de file ou de ticket"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "Sign up as a ticket or queue AdminCc"
msgstr "S'identifier en tant qu'AdminCC de ticket ou de file"
@@ -5280,11 +5279,11 @@
msgid "Steal"
msgstr "Voler"
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:119
msgid "Steal tickets"
msgstr "Voler les tickets "
-#: lib/RT/Queue_Overlay.pm:117
+#: lib/RT/Queue_Overlay.pm:119
msgid "StealTicket"
msgstr "VolerTicket"
@@ -5418,11 +5417,11 @@
msgid "Take"
msgstr "Prendre"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "Take tickets"
msgstr "Prendre les tickets"
-#: lib/RT/Queue_Overlay.pm:115
+#: lib/RT/Queue_Overlay.pm:117
msgid "TakeTicket"
msgstr "PrendreTicket"
@@ -6121,7 +6120,8 @@
msgid "User Rights"
msgstr "Droits utilisateurs"
-#: NOT FOUND IN SOURCE
+#: lib/RT/Interface/Web.pm:1387
+#. ($cf->Name, ref $args{'Object'}, $args{'Object'}->id)
msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
msgstr "L'utilisateur a demandé un type de mise à jour non connu pour le champ personnalisé %1 de l'objet %2 n°%3"
@@ -6195,7 +6195,7 @@
msgid "Watch"
msgstr "Observer"
-#: lib/RT/Queue_Overlay.pm:108
+#: lib/RT/Queue_Overlay.pm:110
msgid "WatchAsAdminCc"
msgstr "ObserverCommeAdminCC"
@@ -6401,7 +6401,7 @@
msgid "days"
msgstr "jours"
-#: lib/RT/Queue_Overlay.pm:87
+#: lib/RT/Queue_Overlay.pm:89
msgid "deleted"
msgstr "effacé"
@@ -6568,11 +6568,11 @@
msgid "queue %1 %2"
msgstr "file %1 %2"
-#: lib/RT/Queue_Overlay.pm:86
+#: lib/RT/Queue_Overlay.pm:88
msgid "rejected"
msgstr "rejeté"
-#: lib/RT/Queue_Overlay.pm:85
+#: lib/RT/Queue_Overlay.pm:87
msgid "resolved"
msgstr "résolu"
@@ -6588,7 +6588,7 @@
msgid "spreadsheet"
msgstr "feuille de calcul"
-#: lib/RT/Queue_Overlay.pm:84
+#: lib/RT/Queue_Overlay.pm:86
msgid "stalled"
msgstr "stagnant"
Modified: rt/branches/3.8-TESTING/lib/RT/I18N/pt_br.po
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/I18N/pt_br.po (original)
+++ rt/branches/3.8-TESTING/lib/RT/I18N/pt_br.po Wed May 21 01:43:10 2008
@@ -6,7 +6,7 @@
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Mime-Version: 1.0Last-Translator: Fernando Frota Machado de Morais <frota at cecom.ufmg.br>\n"
+"MIME-Version: 1.0\n"
"PO-Revision-Date: 2008-02-23 11:48-0300\n"
"Project-Id-Version: RT 3.6.x - pt_br\n"
"Language-Team: Portugues Brasileiro <pt at li.org>\n"
Modified: rt/branches/3.8-TESTING/lib/RT/Interface/REST.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/Interface/REST.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/Interface/REST.pm Wed May 21 01:43:10 2008
@@ -126,7 +126,8 @@
elsif ($state <= 1 && $line =~ /^($field):(?:\s+(.*))?$/i) {
# Read a field: value specification.
my $f = $1;
- my @v = ($2 || ());
+ my @v = ($2);
+ $v[0] = '' unless defined $v[0];
# Read continuation lines, if any.
while (@lines && ($lines[0] eq '' || $lines[0] =~ /^\s+/)) {
@@ -141,6 +142,8 @@
}
s/^$ws// foreach @v;
+ shift @v while (@v && $v[0] eq '');
+
push(@$o, $f) unless exists $k->{$f};
vpush($k, $f, join("\n", @v));
Modified: rt/branches/3.8-TESTING/lib/RT/Interface/Web.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/Interface/Web.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/Interface/Web.pm Wed May 21 01:43:10 2008
@@ -139,7 +139,12 @@
my %user_info;
- $user_info{'Privileged'} = 1;
+ # default to making Privileged users, even if they specify
+ # some other default Attributes
+ if (!$RT::AutoCreate ||
+ ( ref($RT::AutoCreate) && not exists $RT::AutoCreate->{Privileged})) {
+ $user_info{'Privileged'} = 1;
+ }
if ($^O !~ /^(?:riscos|MacOS|MSWin32|dos|os2)$/) {
# Populate fields with information from Unix /etc/passwd
Modified: rt/branches/3.8-TESTING/lib/RT/Queue_Overlay.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/Queue_Overlay.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/Queue_Overlay.pm Wed May 21 01:43:10 2008
@@ -694,46 +694,41 @@
@_
);
+ return ( 0, "No principal specified" )
+ unless $args{'Email'} or $args{'PrincipalId'};
+
+ if ( !$args{'PrincipalId'} && $args{'Email'} ) {
+ my $user = RT::User->new( $self->CurrentUser );
+ $user->LoadByEmail( $args{'Email'} );
+ $args{'PrincipalId'} = $user->PrincipalId if $user->id;
+ }
+
# {{{ Check ACLS
+ return ( $self->_AddWatcher(%args) )
+ if $self->CurrentUserHasRight('ModifyQueueWatchers');
+
#If the watcher we're trying to add is for the current user
- if ( defined $args{'PrincipalId'} &&
- $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) {
+ if ( defined $args{'PrincipalId'} && $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) {
# If it's an AdminCc and they don't have
# 'WatchAsAdminCc' or 'ModifyTicket', bail
if ( defined $args{'Type'} && ($args{'Type'} eq 'AdminCc') ) {
- unless ( $self->CurrentUserHasRight('ModifyQueueWatchers')
- or $self->CurrentUserHasRight('WatchAsAdminCc') ) {
- return ( 0, $self->loc('Permission Denied'))
- }
+ return ( $self->_AddWatcher(%args) )
+ if $self->CurrentUserHasRight('WatchAsAdminCc');
}
# If it's a Requestor or Cc and they don't have
# 'Watch' or 'ModifyTicket', bail
- elsif ( ( $args{'Type'} eq 'Cc' ) or ( $args{'Type'} eq 'Requestor' ) ) {
-
- unless ( $self->CurrentUserHasRight('ModifyQueueWatchers')
- or $self->CurrentUserHasRight('Watch') ) {
- return ( 0, $self->loc('Permission Denied'))
- }
+ elsif ( $args{'Type'} eq 'Cc' or $args{'Type'} eq 'Requestor' ) {
+ return ( $self->_AddWatcher(%args) )
+ if $self->CurrentUserHasRight('Watch');
}
- else {
+ else {
$RT::Logger->warning( "$self -> AddWatcher got passed a bogus type");
return ( 0, $self->loc('Error in parameters to Queue->AddWatcher') );
}
}
- # If the watcher isn't the current user
- # and the current user doesn't have 'ModifyQueueWatcher'
- # bail
- else {
- unless ( $self->CurrentUserHasRight('ModifyQueueWatchers') ) {
- return ( 0, $self->loc("Permission Denied") );
- }
- }
-
- # }}}
-
- return ( $self->_AddWatcher(%args) );
+ return ( 0, $self->loc("Permission Denied") );
}
#This contains the meat of AddWatcher. but can be called from a routine like
@@ -749,48 +744,45 @@
);
- my $principal = RT::Principal->new($self->CurrentUser);
- if ($args{'PrincipalId'}) {
- $principal->Load($args{'PrincipalId'});
+ my $principal = RT::Principal->new( $self->CurrentUser );
+ if ( $args{'PrincipalId'} ) {
+ $principal->Load( $args{'PrincipalId'} );
}
- elsif ($args{'Email'}) {
-
+ elsif ( $args{'Email'} ) {
my $user = RT::User->new($self->CurrentUser);
- $user->LoadByEmail($args{'Email'});
+ $user->LoadByEmail( $args{'Email'} );
+ $user->Load( $args{'Email'} )
+ unless $user->id;
- unless ($user->Id) {
- $user->Load($args{'Email'});
- }
- if ($user->Id) { # If the user exists
- $principal->Load($user->PrincipalId);
+ if ( $user->Id ) { # If the user exists
+ $principal->Load( $user->PrincipalId );
} else {
-
- # if the user doesn't exist, we need to create a new user
- my $new_user = RT::User->new($RT::SystemUser);
+ # if the user doesn't exist, we need to create a new user
+ my $new_user = RT::User->new($RT::SystemUser);
my ( $Address, $Name ) =
RT::Interface::Email::ParseAddressFromHeader($args{'Email'});
my ( $Val, $Message ) = $new_user->Create(
- Name => $Address,
+ Name => $Address,
EmailAddress => $Address,
RealName => $Name,
Privileged => 0,
- Comments => 'Autocreated when added as a watcher');
+ Comments => 'Autocreated when added as a watcher'
+ );
unless ($Val) {
$RT::Logger->error("Failed to create user ".$args{'Email'} .": " .$Message);
# Deal with the race condition of two account creations at once
- $new_user->LoadByEmail($args{'Email'});
+ $new_user->LoadByEmail( $args{'Email'} );
}
- $principal->Load($new_user->PrincipalId);
+ $principal->Load( $new_user->PrincipalId );
}
}
# If we can't find this watcher, we need to bail.
- unless ($principal->Id) {
+ unless ( $principal->Id ) {
return(0, $self->loc("Could not find or create that user"));
}
-
my $group = RT::Group->new($self->CurrentUser);
$group->LoadQueueRoleGroup(Type => $args{'Type'}, Queue => $self->Id);
unless ($group->id) {
@@ -838,14 +830,21 @@
my %args = ( Type => undef,
PrincipalId => undef,
+ Email => undef,
@_ );
unless ( $args{'PrincipalId'} || $args{'Email'} ) {
return ( 0, $self->loc("No principal specified") );
}
+
+ if ( !$args{PrincipalId} and $args{Email} ) {
+ my $user = RT::User->new( $self->CurrentUser );
+ my ($rv, $msg) = $user->LoadByEmail( $args{Email} );
+ $args{PrincipalId} = $user->PrincipalId if $rv;
+ }
+
my $principal = RT::Principal->new( $self->CurrentUser );
if ( $args{'PrincipalId'} ) {
-
$principal->Load( $args{'PrincipalId'} );
}
else {
@@ -865,13 +864,15 @@
return(0,$self->loc("Group not found"));
}
+ my $can_modify_queue = $self->CurrentUserHasRight('ModifyQueueWatchers');
+
# {{{ Check ACLS
#If the watcher we're trying to add is for the current user
if ( defined $args{'PrincipalId'} and $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) {
# If it's an AdminCc and they don't have
# 'WatchAsAdminCc' or 'ModifyQueue', bail
if ( $args{'Type'} eq 'AdminCc' ) {
- unless ( $self->CurrentUserHasRight('ModifyQueueWatchers')
+ unless ( $can_modify_queue
or $self->CurrentUserHasRight('WatchAsAdminCc') ) {
return ( 0, $self->loc('Permission Denied'))
}
@@ -880,7 +881,7 @@
# If it's a Requestor or Cc and they don't have
# 'Watch' or 'ModifyQueue', bail
elsif ( ( $args{'Type'} eq 'Cc' ) or ( $args{'Type'} eq 'Requestor' ) ) {
- unless ( $self->CurrentUserHasRight('ModifyQueueWatchers')
+ unless ( $can_modify_queue
or $self->CurrentUserHasRight('Watch') ) {
return ( 0, $self->loc('Permission Denied'))
}
@@ -894,7 +895,7 @@
# If the watcher isn't the current user
# and the current user doesn't have 'ModifyQueueWathcers' bail
else {
- unless ( $self->CurrentUserHasRight('ModifyQueueWatchers') ) {
+ unless ( $can_modify_queue ) {
return ( 0, $self->loc("Permission Denied") );
}
}
Modified: rt/branches/3.8-TESTING/lib/RT/Search/Googleish.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/Search/Googleish.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/Search/Googleish.pm Wed May 21 01:43:10 2008
@@ -104,6 +104,13 @@
push @id_clauses, "id = '$key'";
}
+ elsif ($key =~ /^fulltext:(.*?)$/i) {
+ $key = $1;
+ $key =~ s/['\\].*//g;
+ push @tql_clauses, "Content LIKE '$key'";
+
+ }
+
elsif ( $key =~ /\w+\@\w+/ ) {
push @user_clauses, "Requestor LIKE '$key'";
}
@@ -133,13 +140,6 @@
push @owner_clauses, "Owner = '" . $User->Name . "'";
}
- elsif ($key =~ /^fulltext:(.*?)$/i) {
- $key = $1;
- $key =~ s/['\\].*//g;
- push @tql_clauses, "Content LIKE '$key'";
-
- }
-
# Else, subject must contain $key
else {
$key =~ s/['\\].*//g;
Modified: rt/branches/3.8-TESTING/lib/RT/Ticket_Overlay.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/Ticket_Overlay.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/Ticket_Overlay.pm Wed May 21 01:43:10 2008
@@ -1031,7 +1031,6 @@
# ModifyTicket works in any case
return $self->_AddWatcher( %args )
if $self->CurrentUserHasRight('ModifyTicket');
-
if ( $args{'Email'} ) {
my ($addr) = Mail::Address->parse( $args{'Email'} );
return (0, $self->loc("Couldn't parse address from '[_1]' string", $args{'Email'} ))
@@ -2113,7 +2112,6 @@
) if defined $args{ $argument };
}
- # XXX: This code is duplicated several times
# If this is from an external source, we need to come up with its
# internal Message-ID now, so all emails sent because of this
# message have a common Message-ID
@@ -3439,19 +3437,19 @@
sub CustomFieldValues {
my $self = shift;
my $field = shift;
- if ( $field and $field !~ /^\d+$/ ) {
- my $cf = RT::CustomField->new( $self->CurrentUser );
- $cf->LoadByNameAndQueue( Name => $field, Queue => $self->Queue );
- unless ( $cf->id ) {
- $cf->LoadByNameAndQueue( Name => $field, Queue => 0 );
- }
- unless ( $cf->id ) {
- # If we didn't find a valid cfid, give up.
- return RT::ObjectCustomFieldValues->new($self->CurrentUser);
- }
- $field = $cf->id;
+
+ return $self->SUPER::CustomFieldValues( $field ) if !$field || $field =~ /^\d+$/;
+
+ my $cf = RT::CustomField->new( $self->CurrentUser );
+ $cf->LoadByNameAndQueue( Name => $field, Queue => $self->Queue );
+ unless ( $cf->id ) {
+ $cf->LoadByNameAndQueue( Name => $field, Queue => 0 );
}
- return $self->SUPER::CustomFieldValues($field);
+
+ # If we didn't find a valid cfid, give up.
+ return RT::ObjectCustomFieldValues->new( $self->CurrentUser ) unless $cf->id;
+
+ return $self->SUPER::CustomFieldValues( $cf->id );
}
# }}}
Modified: rt/branches/3.8-TESTING/lib/RT/Tickets_Overlay.pm
==============================================================================
--- rt/branches/3.8-TESTING/lib/RT/Tickets_Overlay.pm (original)
+++ rt/branches/3.8-TESTING/lib/RT/Tickets_Overlay.pm Wed May 21 01:43:10 2008
@@ -1139,16 +1139,19 @@
$RT::Logger->warning("Queue '$queue' doesn't exists, parsed from '$string'");
$queue = 0;
}
-
- if ( $cf and my $id = $cf->id ) {
- $cfid = $cf->id;
- $field = $cf->Name;
- }
- } else {
- $queue = 0;
+ return ($queue, $field, $cf->id, $cf) if $cf && $cf->id;
+ return ($queue, $field);
}
-
- return ($queue, $field, $cfid, $column);
+
+ my $cfs = RT::CustomFields->new( $self->CurrentUser );
+ $cfs->Limit( FIELD => 'Name', VALUE => $field );
+ $cfs->LimitToLookupType('RT::Queue-RT::Ticket');
+ my $count = $cfs->Count;
+ return (undef, $field, undef) if $count > 1;
+ return (undef, $field, 0) if $count == 0;
+ my $cf = $cfs->First;
+ return (undef, $field, $cf->id, $cf) if $cf && $cf->id;
+ return (undef, $field, undef);
}
=head2 _CustomFieldJoin
@@ -1170,7 +1173,7 @@
my ($TicketCFs, $CFs);
if ( $cfid ) {
$TicketCFs = $self->{_sql_object_cfv_alias}{$cfkey} = $self->Join(
- TYPE => 'left',
+ TYPE => 'LEFT',
ALIAS1 => 'main',
FIELD1 => 'id',
TABLE2 => 'ObjectCustomFieldValues',
@@ -1205,9 +1208,21 @@
TABLE2 => 'CustomFields',
FIELD2 => 'id',
);
+ $self->SUPER::Limit(
+ LEFTJOIN => $CFs,
+ ENTRYAGGREGATOR => 'AND',
+ FIELD => 'LookupType',
+ VALUE => 'RT::Queue-RT::Ticket',
+ );
+ $self->SUPER::Limit(
+ LEFTJOIN => $CFs,
+ ENTRYAGGREGATOR => 'AND',
+ FIELD => 'Name',
+ VALUE => $field,
+ );
$TicketCFs = $self->{_sql_object_cfv_alias}{$cfkey} = $self->Join(
- TYPE => 'left',
+ TYPE => 'LEFT',
ALIAS1 => $CFs,
FIELD1 => 'id',
TABLE2 => 'ObjectCustomFieldValues',
@@ -1272,27 +1287,37 @@
$self->_OpenParen;
- if ( $CFs && !$cfid ) {
- $self->SUPER::Limit(
- ALIAS => $CFs,
- FIELD => 'Name',
- VALUE => $field,
- ENTRYAGGREGATOR => 'AND',
- );
- }
-
- $self->_OpenParen if $null_columns_ok;
-
+ $self->_OpenParen;
$self->_SQLLimit(
ALIAS => $TicketCFs,
FIELD => $column || 'Content',
OPERATOR => $op,
VALUE => $value,
- QUOTEVALUE => 1,
%rest
);
- if ( $null_columns_ok ) {
+ # XXX: if we join via CustomFields table then
+ # because of order of left joins we get NULLs in
+ # CF table and then get nulls for those records
+ # in OCFVs table what result in wrong results
+ # as decifer method now tries to load a CF then
+ # we fall into this situation only when there
+ # are more than one CF with the name in the DB.
+ # the same thing applies to order by call.
+ # TODO: reorder joins T <- OCFVs <- CFs <- OCFs if
+ # we want treat IS NULL as (not applies or has
+ # no value)
+ $self->_SQLLimit(
+ ALIAS => $CFs,
+ FIELD => 'Name',
+ OPERATOR => 'IS NOT',
+ VALUE => 'NULL',
+ QUOTEVALUE => 1,
+ ENTRYAGGREGATOR => 'AND',
+ ) if $CFs;
+ $self->_CloseParen;
+
+ if ($null_columns_ok) {
$self->_SQLLimit(
ALIAS => $TicketCFs,
FIELD => $column || 'Content',
@@ -1301,7 +1326,6 @@
QUOTEVALUE => 0,
ENTRYAGGREGATOR => 'OR',
);
- $self->_CloseParen;
}
$self->_CloseParen;
@@ -1329,10 +1353,43 @@
my $order = 0;
foreach my $row (@args) {
- if ( $row->{ALIAS} || $row->{FIELD} !~ /\./ ) {
+ if ( $row->{ALIAS} ) {
push @res, $row;
next;
}
+ if ( $row->{FIELD} !~ /\./ ) {
+ my $meta = $self->FIELDS->{ $row->{FIELD} };
+ unless ( $meta ) {
+ push @res, $row;
+ next;
+ }
+
+ if ( $meta->[0] eq 'ENUM' && ($meta->[1]||'') eq 'Queue' ) {
+ my $alias = $self->Join(
+ TYPE => 'LEFT',
+ ALIAS1 => 'main',
+ FIELD1 => $row->{'FIELD'},
+ TABLE2 => 'Queues',
+ FIELD2 => 'id',
+ );
+ push @res, { %$row, ALIAS => $alias, FIELD => "Name" };
+ } elsif ( ( $meta->[0] eq 'ENUM' && ($meta->[1]||'') eq 'User' )
+ || ( $meta->[0] eq 'WATCHERFIELD' && ($meta->[1]||'') eq 'Owner' )
+ ) {
+ my $alias = $self->Join(
+ TYPE => 'LEFT',
+ ALIAS1 => 'main',
+ FIELD1 => $row->{'FIELD'},
+ TABLE2 => 'Users',
+ FIELD2 => 'id',
+ );
+ push @res, { %$row, ALIAS => $alias, FIELD => "Name" };
+ } else {
+ push @res, $row;
+ }
+ next;
+ }
+
my ( $field, $subkey ) = split /\./, $row->{FIELD}, 2;
my $meta = $self->FIELDS->{$field};
if ( defined $meta->[0] && $meta->[0] eq 'WATCHERFIELD' ) {
@@ -1344,9 +1401,19 @@
}
push @res, { %$row, ALIAS => $users, FIELD => $subkey };
} elsif ( defined $meta->[0] && $meta->[0] eq 'CUSTOMFIELD' ) {
- my ($queue, $field, $cfid ) = $self->_CustomFieldDecipher( $subkey );
+ my ($queue, $field, $cfid, $cf_obj) = $self->_CustomFieldDecipher( $subkey );
my $cfkey = $cfid ? $cfid : "$queue.$field";
+ $cfkey .= ".ordering" if !$cf_obj || ($cf_obj->MaxValues||0) != 1;
my ($TicketCFs, $CFs) = $self->_CustomFieldJoin( $cfkey, $cfid, $field );
+ # this is described in _CustomFieldLimit
+ $self->_SQLLimit(
+ ALIAS => $CFs,
+ FIELD => 'Name',
+ OPERATOR => 'IS NOT',
+ VALUE => 'NULL',
+ QUOTEVALUE => 1,
+ ENTRYAGGREGATOR => 'AND',
+ ) if $CFs;
unless ($cfid) {
# For those cases where we are doing a join against the
# CF name, and don't have a CFid, use Unique to make sure
@@ -1358,17 +1425,17 @@
DBIx::SearchBuilder::Unique->import;
}
my $CFvs = $self->Join(
- TYPE => 'left',
+ TYPE => 'LEFT',
ALIAS1 => $TicketCFs,
FIELD1 => 'CustomField',
TABLE2 => 'CustomFieldValues',
FIELD2 => 'CustomField',
);
$self->SUPER::Limit(
- LEFTJOIN => $CFvs,
- FIELD => 'Name',
- QUOTEVALUE => 0,
- VALUE => $TicketCFs . ".Content",
+ LEFTJOIN => $CFvs,
+ FIELD => 'Name',
+ QUOTEVALUE => 0,
+ VALUE => $TicketCFs . ".Content",
ENTRYAGGREGATOR => 'AND'
);
@@ -2830,11 +2897,12 @@
BUG: There should be an API for this
-=cut
=cut
+=cut
+
1;
Modified: rt/branches/3.8-TESTING/sbin/extract-message-catalog
==============================================================================
--- rt/branches/3.8-TESTING/sbin/extract-message-catalog (original)
+++ rt/branches/3.8-TESTING/sbin/extract-message-catalog Wed May 21 01:43:10 2008
@@ -136,7 +136,7 @@
my ( $vars, $str );
if ( $match =~
- /\(\s*($RE{delimited}{-delim=>q{'"}}{-keep})(.*?)\s*\)$/ ) {
+ /\(\s*($RE{delimited}{-delim=>q{'"}}{-keep})(.*?)\s*\)$/s ) {
$str = substr( $1, 1, -1 ); # $str comes before $vars now
$vars = $9;
Modified: rt/branches/3.8-TESTING/sbin/rt-test-dependencies.in
==============================================================================
--- rt/branches/3.8-TESTING/sbin/rt-test-dependencies.in (original)
+++ rt/branches/3.8-TESTING/sbin/rt-test-dependencies.in Wed May 21 01:43:10 2008
@@ -203,7 +203,7 @@
Digest::MD5 2.27
DBI 1.37
Class::ReturnValue 0.40
-DBIx::SearchBuilder 1.50
+DBIx::SearchBuilder 1.53
Text::Template
File::ShareDir
File::Spec 0.8
Modified: rt/branches/3.8-TESTING/share/html/NoAuth/css/3.5-default/forms.css
==============================================================================
--- rt/branches/3.8-TESTING/share/html/NoAuth/css/3.5-default/forms.css (original)
+++ rt/branches/3.8-TESTING/share/html/NoAuth/css/3.5-default/forms.css Wed May 21 01:43:10 2008
@@ -114,9 +114,8 @@
%# ComboBox styles... some properties like height and width must be dynamically
%# set in the JS (at least for now).
.combobox {
- border: 2px inset #069;
- padding-left: 0.5em;
- padding-bottom: 0.1em;
+ border: 1px solid #069;
+ padding: 4px;
}
.combobox .combo-button {
@@ -132,10 +131,11 @@
.combobox .combo-text {
border: none;
margin: 0;
- padding: 0;
+ padding: 1px;
}
.combobox .combo-list {
+ border: 1px outset;
z-index: 200;
}
Modified: rt/branches/3.8-TESTING/share/html/NoAuth/js/combobox.js
==============================================================================
--- rt/branches/3.8-TESTING/share/html/NoAuth/js/combobox.js (original)
+++ rt/branches/3.8-TESTING/share/html/NoAuth/js/combobox.js Wed May 21 01:43:10 2008
@@ -132,8 +132,8 @@
function ComboBox_EnsureListSize( theList ) {
if ( typeof( theList.listSize ) == "undefined" ) {
if( typeof( theList.getAttribute ) != "undefined" ) {
- if( theList.getAttribute( "listSize" ) != null && theList.getAttribute( "listSize" ) != "" ) {
- theList.listSize = theList.getAttribute( "listSize" );
+ if( theList.getAttribute( "size" ) != null && theList.getAttribute( "size" ) != "" ) {
+ theList.listSize = theList.getAttribute( "size" );
return;
}
}
Modified: rt/branches/3.8-TESTING/share/html/Search/Bulk.html
==============================================================================
--- rt/branches/3.8-TESTING/share/html/Search/Bulk.html (original)
+++ rt/branches/3.8-TESTING/share/html/Search/Bulk.html Wed May 21 01:43:10 2008
@@ -317,6 +317,7 @@
foreach my $key (@$list) {
my ( $cfid, $cf );
+ next if $key =~ /CustomField-(\d+)-Category$/;
if ( $key =~ /CustomField-(\d+)-/ ) {
$cfid = $1;
$cf = RT::CustomField->new( $session{'CurrentUser'} );
Modified: rt/branches/3.8-TESTING/share/html/Search/Elements/DisplayOptions
==============================================================================
--- rt/branches/3.8-TESTING/share/html/Search/Elements/DisplayOptions (original)
+++ rt/branches/3.8-TESTING/share/html/Search/Elements/DisplayOptions Wed May 21 01:43:10 2008
@@ -105,6 +105,7 @@
my %fields = %{$tickets->FIELDS};
map { $fields{$_}->[0] =~ /^(?:ENUM|INT|DATE|STRING)$/ || delete $fields{$_} } keys %fields;
delete $fields{'EffectiveId'};
+$fields{'Owner'} = 1;
$fields{ $_ . '.EmailAddress' } = 1 foreach( qw(Requestor Cc AdminCc) );
# Add all available CustomFields to the list of sortable columns.
Modified: rt/branches/3.8-TESTING/share/html/Search/Simple.html
==============================================================================
--- rt/branches/3.8-TESTING/share/html/Search/Simple.html (original)
+++ rt/branches/3.8-TESTING/share/html/Search/Simple.html Wed May 21 01:43:10 2008
@@ -56,7 +56,7 @@
<div id="SimpleSearchForm">
<form action="Simple.html" method="get">
-<p><&|/l&>Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>. RT will look for anything else you enter in ticket bodies and attachments.</&></p>
+<p><&|/l&>Search for tickets. Enter <strong>id</strong> numbers, <strong>queues</strong> by name, Owners by <strong>username</strong> and Requestors by <strong>email address</strong>.</&></p>
<p><&|/l&>Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>.</&></p>
<p><&|/l&>RT will look for anything else you enter in ticket subjects.</&></p>
Modified: rt/branches/3.8-TESTING/share/html/SelfService/Elements/MyRequests
==============================================================================
--- rt/branches/3.8-TESTING/share/html/SelfService/Elements/MyRequests (original)
+++ rt/branches/3.8-TESTING/share/html/SelfService/Elements/MyRequests Wed May 21 01:43:10 2008
@@ -47,7 +47,7 @@
%# END BPS TAGGED BLOCK }}}
<&| /Widgets/TitleBox, title => $title &>
<& /Elements/TicketList, Title => $title,
- Format => @Format,
+ Format => $Format,
Query => $Query,
Order => $Order,
OrderBy => $OrderBy,
@@ -67,7 +67,7 @@
}
my $Order = "ASC";
my $OrderBy = "Created";
-my @Format = qq{
+my $Format = qq{
'<B><A HREF="}. RT->Config->Get('WebPath') .qq{/SelfService/Display.html?id=__id__">__id__</a></B>/TITLE:#',
'<B><A HREF="}. RT->Config->Get('WebPath') .qq{/SelfService/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
Status,
Modified: rt/branches/3.8-TESTING/share/html/Ticket/Create.html
==============================================================================
--- rt/branches/3.8-TESTING/share/html/Ticket/Create.html (original)
+++ rt/branches/3.8-TESTING/share/html/Ticket/Create.html Wed May 21 01:43:10 2008
@@ -88,7 +88,7 @@
</td>
</tr>
<tr>
-<td class="labeltop">
+<td class="label">
<&|/l&>Cc</&>:
</td>
<td class="value" colspan="3"><& /Elements/EmailInput, Name => 'Cc', Size => '40', Default => $ARGS{Cc} &></td>
@@ -97,7 +97,7 @@
</td>
</tr>
<tr>
-<td class="labeltop">
+<td class="label">
<&|/l&>Admin Cc</&>:
</td>
<td class="value" colspan="3"><& /Elements/EmailInput, Name => 'AdminCc', Size => '40', Default => $ARGS{AdminCc} &></td>
@@ -159,6 +159,7 @@
<tr>
<td colspan="6">
<&|/l&>Describe the issue below</&>:<br />
+<& /Elements/Callback, _CallbackName => 'BeforeMessageBox', QueueObj => $QueueObj, %ARGS &>
% if (exists $ARGS{Content}) {
<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &>
% } else {
Modified: rt/branches/3.8-TESTING/share/html/Ticket/Display.html
==============================================================================
--- rt/branches/3.8-TESTING/share/html/Ticket/Display.html (original)
+++ rt/branches/3.8-TESTING/share/html/Ticket/Display.html Wed May 21 01:43:10 2008
@@ -153,8 +153,12 @@
Actions => \@Actions,
TicketObj => $TicketObj,
);
- delete $session{'Attachments'};
+ delete $session{'Attachments'};
+ } elsif ( $ARGS{'UpdateTimeWorked'} ) {
+ # Add UpdateTimeWorked to TimeWorked (processed below with ProcessTicketBasics)
+ $ARGS{'TimeWorked'} = $TicketObj->TimeWorked + $ARGS{'UpdateTimeWorked'};
}
+ #Process status updates
push @Actions, ProcessTicketWatchers(ARGSRef => \%ARGS, TicketObj => $TicketObj );
push @Actions, ProcessTicketBasics( ARGSRef => \%ARGS, TicketObj => $TicketObj );
push @Actions, ProcessTicketLinks( ARGSRef => \%ARGS, TicketObj => $TicketObj );
Modified: rt/branches/3.8-TESTING/share/html/Ticket/Elements/Tabs
==============================================================================
--- rt/branches/3.8-TESTING/share/html/Ticket/Elements/Tabs (original)
+++ rt/branches/3.8-TESTING/share/html/Ticket/Elements/Tabs Wed May 21 01:43:10 2008
@@ -224,13 +224,13 @@
$tabs->{"i"} = { path => "Search/Results.html$args",
title => loc('Show Results'),
};
- if ($current_tab =~ "Search/Results.html") {
+ if ($current_tab =~ m{Search/Results.html}) {
$current_tab = "Search/Results.html$args";
}
$tabs->{"j"} = { path => "Search/Bulk.html$args",
title => loc('Bulk Update'),
};
- if ($current_tab =~ "Search/Bulk.html") {
+ if ($current_tab =~ m{Search/Bulk.html}) {
$current_tab = "Search/Bulk.html$args";
}
foreach my $searchtab (keys %{$searchtabs}) {
Modified: rt/branches/3.8-TESTING/share/html/Widgets/ComboBox
==============================================================================
--- rt/branches/3.8-TESTING/share/html/Widgets/ComboBox (original)
+++ rt/branches/3.8-TESTING/share/html/Widgets/ComboBox Wed May 21 01:43:10 2008
@@ -50,12 +50,13 @@
<span id="<% $Name %>_Container" class="combobox">
<input name="<% $Name %>" id="<% $Name %>" class="combo-text" value="<% $Default || '' %>" type="text" <% $Size ? "size='$Size'" : '' |n %> autocomplete="off" />
-<br style="display: none" /><span id="<% $Name %>_Button" class="combo-button"></span></span><select name="List-<% $Name %>" id="<% $Name %>_List" class="combo-list" onchange="ComboBox_SimpleAttach(this, this.form['<% $Name %>']); " rows="<% $Rows %>">
+<br style="display: none" /><span id="<% $Name %>_Button" class="combo-button"></span><select name="List-<% $Name %>" id="<% $Name %>_List" class="combo-list" onchange="ComboBox_SimpleAttach(this, this.form['<% $Name %>']); " size="<% $Rows %>">
<option style="display: none" value="">-</option>
% foreach my $value (@Values) {
<option value="<%$value%>"><% $value%></option>
% }
</select>
+</span>
<script language="javascript"><!--
ComboBox_InitWith('<% $Name %>');
//--></script>
More information about the Rt-commit
mailing list