diff options
| -rw-r--r-- | httemplate/elements/header-popup.html | 33 | ||||
| -rw-r--r-- | rt/share/html/Elements/CalendarSlotSchedule | 8 | ||||
| -rwxr-xr-x | rt/share/html/Elements/Header | 13 | ||||
| -rw-r--r-- | rt/share/html/Search/Schedule.html | 13 | ||||
| -rwxr-xr-x | rt/share/html/Ticket/ModifyCustomFieldsPopup.html | 129 | 
5 files changed, 179 insertions, 17 deletions
| diff --git a/httemplate/elements/header-popup.html b/httemplate/elements/header-popup.html index 307252afb..17593693e 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 4ff47670a..765569736 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 2503455fc..17bfe7460 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 f021df702..96670cdb2 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 000000000..57be0be1f --- /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@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> | 
