[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