View | Details | Raw Unified | Return to bug 14855
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt (-7 / +17 lines)
Lines 21-26 Link Here
21
    });
21
    });
22
    
22
    
23
    });
23
    });
24
    function resendMessage(id, status_element){
25
        var resend = $.ajax({
26
                type: "POST",
27
                url: "/api/v1/messages/"+id+"/resend",
28
                data: { },
29
                statusCode: {
30
                    404: function(){
31
                        alert("Message not found.");
32
                    },
33
                    204: function(){
34
                        $(status_element).text("pending");
35
                    }
36
                }
37
            });
38
    }
24
//]]>
39
//]]>
25
</script>
40
</script>
26
<style type="text/css">
41
<style type="text/css">
Lines 74-87 Link Here
74
            [% ELSIF ( QUEUED_MESSAGE.status == 'failed' ) %]failed
89
            [% ELSIF ( QUEUED_MESSAGE.status == 'failed' ) %]failed
75
            [% ELSIF ( QUEUED_MESSAGE.status == 'deleted' ) %]deleted
90
            [% ELSIF ( QUEUED_MESSAGE.status == 'deleted' ) %]deleted
76
            [% ELSE %][% QUEUED_MESSAGE.status %][% END %]
91
            [% ELSE %][% QUEUED_MESSAGE.status %][% END %]
77
            [% IF ( QUEUED_MESSAGE.status != 'pending' ) %]
92
            [% IF ( QUEUED_MESSAGE.status != 'pending' ) AND showResendLink == 1 %]
78
            <div class="notice">
93
            <div class="notice">
79
                <form action="/cgi-bin/koha/members/notices.pl?borrowernumber=[% borrowernumber %]" method="POST">
94
                <a href="#" onclick="resendMessage([% QUEUED_MESSAGE.message_id %], $(this).closest('td'));return false;" title="Attempt to resend the notice">Resend</a>
80
                    <input type="hidden" name="op" value="resend_notice" />
81
                    <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
82
                    <input type="hidden" name="message_id" value="[% QUEUED_MESSAGE.message_id %]" />
83
                    <a href="#" onclick="$(this).closest('form').submit();return false;" title="Attempt to resend the notice">Resend</a>
84
                </form>
85
            </div>
95
            </div>
86
            [% END %]
96
            [% END %]
87
        </td>
97
        </td>
(-)a/members/notices.pl (-11 / +18 lines)
Lines 28-33 use C4::Members; Link Here
28
use C4::Branch;
28
use C4::Branch;
29
use C4::Letters;
29
use C4::Letters;
30
use C4::Members::Attributes qw(GetBorrowerAttributes);
30
use C4::Members::Attributes qw(GetBorrowerAttributes);
31
use Try::Tiny;
32
use Scalar::Util qw ( blessed );
31
33
32
use C4::Dates qw/format_date/;
34
use C4::Dates qw/format_date/;
33
my $input=new CGI;
35
my $input=new CGI;
Lines 52-68 $template->param( $borrower ); Link Here
52
my ($picture, $dberror) = GetPatronImage($borrower->{'borrowernumber'});
54
my ($picture, $dberror) = GetPatronImage($borrower->{'borrowernumber'});
53
$template->param( picture => 1 ) if $picture;
55
$template->param( picture => 1 ) if $picture;
54
56
55
# Allow resending of messages in Notices tab
56
if ( $op eq 'resend_notice' ) {
57
    my $message_id = $input->param('message_id');
58
    my $message = C4::Letters::GetMessage( $message_id );
59
    if ( $message->{borrowernumber} = $borrowernumber ) {
60
        C4::Letters::ResendMessage( $message_id );
61
        # redirect to self to avoid form submission on refresh
62
        print $input->redirect("/cgi-bin/koha/members/notices.pl?borrowernumber=$borrowernumber");
63
    }
64
}
65
66
# Getting the messages
57
# Getting the messages
67
my $queued_messages = C4::Letters::GetQueuedMessages({borrowernumber => $borrowernumber});
58
my $queued_messages = C4::Letters::GetQueuedMessages({borrowernumber => $borrowernumber});
68
59
Lines 77-82 if (C4::Context->preference('ExtendedPatronAttributes')) { Link Here
77
my $roadtype = C4::Koha::GetAuthorisedValueByCode( 'ROADTYPE', $borrower->{'streettype'} );
68
my $roadtype = C4::Koha::GetAuthorisedValueByCode( 'ROADTYPE', $borrower->{'streettype'} );
78
$template->param(%$borrower);
69
$template->param(%$borrower);
79
70
71
my $showResendLink = 0;
72
73
my $permissionManager = Koha::Auth::PermissionManager->new();
74
try {
75
    $showResendLink = 1 if $permissionManager->hasPermission($loggedinuser,'messages','resend_message');
76
} catch {
77
    if (blessed($_) && $_->isa('Koha::Exception::NoPermission')) {
78
        # no permission
79
    }
80
    else {
81
        die $_;
82
    }
83
};
84
85
80
$template->param(
86
$template->param(
81
    QUEUED_MESSAGES    => $queued_messages,
87
    QUEUED_MESSAGES    => $queued_messages,
82
    borrowernumber     => $borrowernumber,
88
    borrowernumber     => $borrowernumber,
Lines 86-91 $template->param( Link Here
86
    roadtype           => $roadtype,
92
    roadtype           => $roadtype,
87
    activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
93
    activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
88
    RoutingSerials => C4::Context->preference('RoutingSerials'),
94
    RoutingSerials => C4::Context->preference('RoutingSerials'),
95
    showResendLink => $showResendLink,
89
);
96
);
90
output_html_with_http_headers $input, $cookie, $template->output;
97
output_html_with_http_headers $input, $cookie, $template->output;
91
98
(-)a/t/db_dependent/ResendMessage.t (-1 / +155 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/env perl
2
3
# Copyright 2015 Vaara-kirjastot
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it
8
# under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 3 of the License, or
10
# (at your option) any later version.
11
#
12
# Koha is distributed in the hope that it will be useful, but
13
# WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
$ENV{KOHA_PAGEOBJECT_DEBUG} = 1;
20
use Modern::Perl;
21
22
use Test::More;
23
use Try::Tiny; #Even Selenium::Remote::Driver uses Try::Tiny :)
24
25
use Koha::Auth::PermissionManager;
26
27
use t::lib::Page::Mainpage;
28
use t::lib::Page::Opac::OpacMain;
29
use t::lib::Page::Opac::OpacMemberentry;
30
use t::lib::Page::Members::Memberentry;
31
use t::lib::Page::Members::Moremember;
32
use t::lib::Page::Members::Notices;
33
34
use t::lib::TestObjects::BorrowerFactory;
35
use t::lib::TestObjects::MessageQueueFactory;
36
use t::lib::TestObjects::SystemPreferenceFactory;
37
38
use C4::Context;
39
use C4::Members;
40
41
##Setting up the test context
42
my $testContext = {};
43
44
my $password = '1234';
45
my $invalidBorrowerNumber = '000';
46
my $borrowerFactory = t::lib::TestObjects::BorrowerFactory->new();
47
my $borrowers = $borrowerFactory->createTestGroup([
48
            {firstname  => 'Testthree',
49
             surname    => 'Testfour',
50
             cardnumber => 'superuberadmin',
51
             branchcode => 'CPL',
52
             userid     => 'god',
53
             address    => 'testi',
54
             city       => 'joensuu',
55
             smsalertnumber => '99999999999912007',
56
             zipcode    => '80100',
57
             password   => $password,
58
            },
59
        ], undef, $testContext);
60
my $messages = t::lib::TestObjects::MessageQueueFactory->createTestGroup([
61
            {subject => "Test pending",
62
             content => "Tessst content",
63
             cardnumber => $borrowers->{'superuberadmin'}->cardnumber,
64
             message_transport_type => 'sms',
65
             from_address => 'A001@example.com',
66
            },
67
            {subject => "Test sent",
68
             content => "Tessst content",
69
             cardnumber => $borrowers->{'superuberadmin'}->cardnumber,
70
             message_transport_type => 'sms',
71
             from_address => 'A002@example.com',
72
            },
73
            {subject => "Test failed",
74
             content => "Tessst content",
75
             cardnumber => $borrowers->{'superuberadmin'}->cardnumber,
76
             message_transport_type => 'sms',
77
             to_address   => '',
78
             from_address => 'A003@example.com',
79
            },
80
        ], undef, $testContext);
81
my $systempreferences = t::lib::TestObjects::SystemPreferenceFactory->createTestGroup([
82
            {preference => 'SMSSendDriver',
83
             value      => 'nonexistentdriver'
84
            },
85
            {
86
             preference => 'EnhancedMessagingPreferences',
87
             value      => '1'
88
            }
89
        ], undef, $testContext);
90
91
my $permissionManager = Koha::Auth::PermissionManager->new();
92
$permissionManager->grantPermissions($borrowers->{'superuberadmin'}, {catalogue => 'staff_login', borrowers => 'view_borrowers'});
93
94
eval {
95
96
    # staff client
97
    my $notices = t::lib::Page::Members::Notices->new({borrowernumber => $borrowers->{'superuberadmin'}->borrowernumber});
98
99
    setMessageStatus($messages->{'A001@example.com'}->{message_id}, "pending");
100
    setMessageStatus($messages->{'A002@example.com'}->{message_id}, "sent");
101
    setMessageStatus($messages->{'A003@example.com'}->{message_id}, "failed");
102
103
    # then, login to intranet
104
    $notices->doPasswordLogin($borrowers->{'superuberadmin'}->userid(), $password)
105
    ->openNotice("Test pending")
106
    ->openNotice("Test sent")
107
    ->openNotice("Test failed")
108
    ->resendMessage("Test pending", 0) #pending cannot be resent
109
    ->resendMessage("Test sent", 0) # --these two should fail because
110
    ->resendMessage("Test failed", 0); # of missing permissions--
111
    
112
    # add permission and refresh page
113
    $permissionManager->grantPermissions($borrowers->{'superuberadmin'}, {messages => 'resend_message'});
114
    $notices
115
    ->navigateToNotices() # refresh page and make sure everything is pending
116
    ->openNotice("Test pending")
117
    ->openNotice("Test sent")
118
    ->openNotice("Test failed")
119
    ->resendMessage("Test pending", 0) # pending cannot be resent
120
    ->resendMessage("Test sent", 1) # --these two should now
121
    ->resendMessage("Test failed", 1) # resend successfully--
122
    ->navigateToNotices()
123
    ->getTextInColumnAtRow("pending", { row => 1, column => 3 })
124
    ->getTextInColumnAtRow("pending", { row => 2, column => 3 })
125
    ->getTextInColumnAtRow("pending", { row => 3, column => 3 });
126
};
127
if ($@) { #Catch all leaking errors and gracefully terminate.
128
    warn $@;
129
    tearDown();
130
    exit 1;
131
}
132
133
##All tests done, tear down test context
134
tearDown();
135
done_testing;
136
137
sub tearDown {
138
    t::lib::TestObjects::ObjectFactory->tearDownTestContext($testContext);
139
}
140
141
142
143
144
145
146
147
148
######################################################
149
    ###  STARTING TEST IMPLEMENTATIONS         ###
150
######################################################
151
152
sub setMessageStatus {
153
    my ($message_id, $status) = @_;
154
    return C4::Letters::UpdateQueuedMessage({ message_id => $message_id, status => $status } );
155
}

Return to bug 14855