[freeside-commits] branch master updated. a2d35e30236c5d233516fa8b77c219665f97e77c

Ivan ivan at 420.am
Mon Dec 7 15:40:06 PST 2015


The branch, master has been updated
       via  a2d35e30236c5d233516fa8b77c219665f97e77c (commit)
      from  7c08f01e1a05fe4bab903bd44277b5c3784aebc5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit a2d35e30236c5d233516fa8b77c219665f97e77c
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Mon Dec 7 15:40:05 2015 -0800

    custom fields edit popup, RT#34237

diff --git a/httemplate/elements/header-popup.html b/httemplate/elements/header-popup.html
index 307252a..1759369 100644
--- a/httemplate/elements/header-popup.html
+++ b/httemplate/elements/header-popup.html
@@ -20,7 +20,7 @@ Example:
 <HTML>
   <HEAD>
     <TITLE>
-      <% $title |h %>
+      <% encode_entities($title) || $title_noescape |n %>
     </TITLE>
     <!-- per RT, to prevent IE compatibility mode -->
     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
@@ -28,14 +28,16 @@ Example:
     <META HTTP-Equiv="Cache-Control" Content="no-cache">
     <META HTTP-Equiv="Pragma" Content="no-cache">
     <META HTTP-Equiv="Expires" Content="0"> 
-    <SCRIPT SRC="<% $fsurl %>elements/jquery.js"></SCRIPT>
-    <% $head %>
+%   unless ( $no_jquery ) {
+      <SCRIPT SRC="<% $fsurl %>elements/jquery.js"></SCRIPT>
+%   }
+    <% $head |n %>
   </HEAD>
-  <BODY <% $etc %>>
+  <BODY <% $etc |n %>>
     <link href="<%$fsurl%>elements/freeside.css" type="text/css" rel="stylesheet">
-% if ( $title ) {
+% if ( $title || $title_noescape ) {
     <FONT SIZE=6>
-      <CENTER><% $title |h %></CENTER>
+      <CENTER><% encode_entities($title) || $title_noescape |n %></CENTER>
     </FONT>
 % }
 % unless ( $nobr ) {
@@ -43,17 +45,18 @@ Example:
 % }
 <%init>
 
-my( $title, $menubar, $etc, $head ) = ( '', '', '', '' );
-#my( $nobr, $nocss ) = ( 0, 0 );
-my $nobr = 0;
+my( $title, $title_noescape, $menubar, $etc, $head ) = ( '', '', '', '', '' );
+my( $nobr, $no_jquery ) = ( 0, 0 );
 if ( ref($_[0]) ) {
   my $opt = shift;
-  $title   = $opt->{title};
-  $menubar = $opt->{menubar};
-  $etc     = $opt->{etc};
-  $head    = $opt->{head};
-  $nobr    = $opt->{nobr};
-#  $nocss   = $opt->{nocss};
+  $title          = $opt->{title};
+  $title_noescape = $opt->{title_noescape};
+  $menubar        = $opt->{menubar};
+  $etc            = $opt->{etc};
+  $head           = $opt->{head};
+  $nobr           = $opt->{nobr};
+  #$nocss          = $opt->{nocss};
+  $no_jquery      = $opt->{no_jquery};
 } else {
   ($title, $menubar) = ( shift, shift );
   $etc = @_ ? shift : ''; #$etc is for things like onLoad= etc.
diff --git a/rt/share/html/Elements/CalendarSlotSchedule b/rt/share/html/Elements/CalendarSlotSchedule
index 4ff4767..7655697 100644
--- a/rt/share/html/Elements/CalendarSlotSchedule
+++ b/rt/share/html/Elements/CalendarSlotSchedule
@@ -61,7 +61,13 @@
 %                   FS::sched_avail::pretty_time($due).
 %                   ': '. $cust_main[0]->_FreesideURILabel;
 %                   #'install for custname XX miles away'; #XXX placeholder/more
-%       $link = qq( <A HREF="$RT::WebPath/Ticket/Display.html?id=$id">view</A>);
+%       $link = qq( <A HREF="$RT::WebPath/Ticket/Display.html?id=$id" target="_blank">view</A> ).
+%               include('/elements/popup_link.html',
+%                         action=>$RT::WebPath.'/Ticket/ModifyCustomFieldsPopup.html?id='.$id,
+%                         label =>'edit',
+%                         actionlabel => 'Edit appointment',
+%                         height      => 436, # better: A + B * (num_custom_fields)
+%                      );
 %       $draggable_ticketid = $id;
 %       $draggable_length = $due - $starts;
 %
diff --git a/rt/share/html/Elements/Header b/rt/share/html/Elements/Header
index 2503455..17bfe74 100755
--- a/rt/share/html/Elements/Header
+++ b/rt/share/html/Elements/Header
@@ -45,6 +45,17 @@
 %# those contributions and any derivatives thereof.
 %#
 %# END BPS TAGGED BLOCK }}}
+% if ( $Popup ) {
+<& /elements/header-popup.html, {
+              'title_noescape' => $Title,
+              'head'      => $head,
+              'etc'       => $etc,
+              'nobr'      => 1,
+              #'nocss'     => 1,
+              'no_jquery' => $JavaScript,
+          }
+&>
+% } else {
 <& /elements/header.html, {
               'title_noescape' => $Title,
               'head'      => $head,
@@ -54,6 +65,7 @@
               'no_jquery' => $JavaScript,
           }
 &>
+% }
 <%INIT>
 #for "Site CSS from theme editor" below
 $r->headers_out->{'Pragma'} = 'no-cache';
@@ -159,4 +171,5 @@ $SkipDoctype => 0
 $RichText => 1
 $BodyClass => undef
 $JavaScript => 1
+$Popup => 0
 </%ARGS>
diff --git a/rt/share/html/Search/Schedule.html b/rt/share/html/Search/Schedule.html
index f021df7..96670cd 100644
--- a/rt/share/html/Search/Schedule.html
+++ b/rt/share/html/Search/Schedule.html
@@ -175,7 +175,18 @@
 %         #remove their droppable
           $('#'+n_td_id).droppable('destroy');
           if ( d == 0 ) {
-            $('#'+n_td_id).html(label + ' <A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=' + ticketid + '">view</A>' );
+            var title = 
+              label +
+              ' <A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=' + ticketid + '" target="_blank">view</A> ' +
+              <% include('/elements/popup_link.html',
+                   action=>$RT::WebPath.'/Ticket/ModifyCustomFieldsPopup.html?id=__MAGIC_TICKET_ID__',
+                   label =>'edit',
+                   actionlabel => 'Edit appointment',
+                   height      => 436, # better: A + B * (num_custom_fields)
+                 ) |n,js_string
+              %>;
+            title = title.replace( /__MAGIC_TICKET_ID__/, ticketid );
+            $('#'+n_td_id).html( title );
 %           #(and make the top draggable, so we could do it all over again)
             $('#'+n_td_id).draggable({
               containment: '.titlebox-content',
diff --git a/rt/share/html/Ticket/ModifyCustomFieldsPopup.html b/rt/share/html/Ticket/ModifyCustomFieldsPopup.html
new file mode 100755
index 0000000..57be0be
--- /dev/null
+++ b/rt/share/html/Ticket/ModifyCustomFieldsPopup.html
@@ -0,0 +1,129 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
+%#                                          <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+%
+%# false laziness w/Modify.html - better to modify it directly?
+%
+%#<& /Elements/Header, Title => loc('Modify ticket #[_1]', $TicketObj->Id) &>
+<& /Elements/Header, Title=>'', Popup=>1 &>
+
+% $m->callback(CallbackName => 'BeforeActionList', Actions => \@results, ARGSRef => \%ARGS, Ticket => $TicketObj);
+
+<& /Elements/ListActions, actions => \@results &>
+<form method="post" action="ModifyCustomFieldsPopup.html" enctype="multipart/form-data" name="TicketModify" id="TicketModify">
+% $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS );
+<input type="hidden" class="hidden" name="id" value="<% $TicketObj->Id %>" />
+
+<& /Elements/EditCustomFieldCustomGroupings, Object => $TicketObj &>
+
+%# <& /Elements/Submit, Name => 'SubmitTicket', Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#993333" &>
+  <div class="submit">
+    <div class="buttons">
+    <span class="caption">If you've updated anything above, be sure to</span>
+    <input type="submit"  name="SubmitTicket" value="Save Changes" class="button" />
+    </div>
+    <div class="submit-clear"></div>
+  </div>
+
+</form>
+
+% $m->callback(CallbackName => 'AfterForm', ARGSRef => \%ARGS, Ticket => $TicketObj);
+<%INIT>
+  
+my $TicketObj = LoadTicket($id);
+my $CustomFields = $TicketObj->CustomFields;
+
+my @results;
+my $skip_update = 0;
+
+# Now let callbacks have a chance at editing %ARGS
+$m->callback( TicketObj => $TicketObj, CustomFields => $CustomFields, ARGSRef => \%ARGS, skip_update => \$skip_update, results => \@results );
+
+##push @results, ProcessTicketStatus(TicketObj => $TicketObj, ARGSRef => \%ARGS);
+# for WillResolve
+##push @results, ProcessTicketDates( TicketObj => $TicketObj, ARGSRef => \%ARGS);
+
+{
+    my ($status, @msg) = $m->comp(
+        '/Elements/ValidateCustomFields',
+        Object       => $TicketObj,
+        CustomFields => $CustomFields,
+        ARGSRef      => \%ARGS,
+    );
+    unless ($status) {
+        push @results, @msg;
+        $skip_update = 1;
+    }
+}
+
+unless ($skip_update) {
+##    push @results, ProcessTicketBasics(TicketObj => $TicketObj, ARGSRef => \%ARGS);
+    push @results, ProcessObjectCustomFieldUpdates(Object => $TicketObj, ARGSRef => \%ARGS);
+    $m->callback( CallbackName => 'ProcessUpdates', TicketObj => $TicketObj,
+                  ARGSRef => \%ARGS, Results => \@results );
+
+    $TicketObj->ApplyTransactionBatch;
+
+    MaybeRedirectForResults(
+        Actions   => \@results,
+        Path      => "/Ticket/ModifyCustomFieldsPopup.html",
+        Arguments => { id => $TicketObj->id },
+    );
+}
+
+unless ($TicketObj->CurrentUserHasRight('ShowTicket')) {
+    if (@results) {
+        Abort("A change was applied successfully, but you no longer have permissions to view the ticket", Actions => \@results);
+    } else {
+        Abort("No permission to view ticket");
+    }
+}
+
+</%INIT>
+<%ARGS>
+$id => undef
+</%ARGS>

-----------------------------------------------------------------------

Summary of changes:
 httemplate/elements/header-popup.html              |   33 +++++++++---------
 rt/share/html/Elements/CalendarSlotSchedule        |    8 ++++-
 rt/share/html/Elements/Header                      |   13 ++++++++
 rt/share/html/Search/Schedule.html                 |   13 +++++++-
 .../{Modify.html => ModifyCustomFieldsPopup.html}  |   35 +++++++++++---------
 5 files changed, 69 insertions(+), 33 deletions(-)
 copy rt/share/html/Ticket/{Modify.html => ModifyCustomFieldsPopup.html} (78%)




More information about the freeside-commits mailing list