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

(-)a/C4/Letters.pm (-1 / +4 lines)
Lines 631-638 sub GetPreparedLetter { Link Here
631
       }
631
       }
632
    }
632
    }
633
633
634
    my $OPACBaseURL = C4::Context->preference('OPACBaseURL');
634
    my $OPACBaseURL = C4::Context->preference('OPACBaseURL') // q{};
635
    $letter->{content} =~ s/<<OPACBaseURL>>/$OPACBaseURL/go;
635
    $letter->{content} =~ s/<<OPACBaseURL>>/$OPACBaseURL/go;
636
    my $staff_client_base_url = C4::Context->preference('staffClientBaseURL') // q{};
637
    $letter->{content} =~ s/<<staffClientBaseURL>>/$staff_client_base_url/go;
636
638
637
    if ($want_librarian) {
639
    if ($want_librarian) {
638
        # parsing librarian name
640
        # parsing librarian name
Lines 754-759 sub _parseletter_sth { Link Here
754
    ($table eq 'aqbooksellers')    ? "SELECT * FROM $table WHERE             id = ?"                                  :
756
    ($table eq 'aqbooksellers')    ? "SELECT * FROM $table WHERE             id = ?"                                  :
755
    ($table eq 'aqorders'     )    ? "SELECT * FROM $table WHERE    ordernumber = ?"                                  :
757
    ($table eq 'aqorders'     )    ? "SELECT * FROM $table WHERE    ordernumber = ?"                                  :
756
    ($table eq 'opac_news'    )    ? "SELECT * FROM $table WHERE          idnew = ?"                                  :
758
    ($table eq 'opac_news'    )    ? "SELECT * FROM $table WHERE          idnew = ?"                                  :
759
    ($table eq 'reviews'      )    ? "SELECT * FROM $table WHERE    reviewid = ?"                                  :
757
    ($table eq 'article_requests') ? "SELECT * FROM $table WHERE             id = ?"                                  :
760
    ($table eq 'article_requests') ? "SELECT * FROM $table WHERE             id = ?"                                  :
758
    ($table eq 'borrower_modifications') ? "SELECT * FROM $table WHERE verification_token = ?" :
761
    ($table eq 'borrower_modifications') ? "SELECT * FROM $table WHERE verification_token = ?" :
759
    ($table eq 'subscription') ? "SELECT * FROM $table WHERE subscriptionid = ?" :
762
    ($table eq 'subscription') ? "SELECT * FROM $table WHERE subscriptionid = ?" :
(-)a/Koha/Review.pm (-1 / +50 lines)
Lines 19-25 use Modern::Perl; Link Here
19
19
20
use Carp;
20
use Carp;
21
21
22
use Koha::Database;
22
# Koha::Database is used in the nested mess of C4::Letters;
23
# As is C4::Context.
24
use C4::Letters;
23
25
24
use base qw(Koha::Object);
26
use base qw(Koha::Object);
25
27
Lines 67-70 sub _type { Link Here
67
    return 'Review';
69
    return 'Review';
68
}
70
}
69
71
72
=head3 SendReviewAlert
73
74
    $review->SendReviewAlert($parameters);
75
76
Queue an outgoing email alert when a borrower posts a review,
77
using the passed parameters in a hash reference.
78
79
=cut
80
81
sub SendReviewAlert {
82
    my ( $self, $params ) = @_;
83
84
    my $borrowernumber = $params->{borrowernumber};
85
    my $reviewid = $params->{reviewid};
86
    my $biblionumber = $params->{biblionumber};
87
88
    my $moderatorEmail = C4::Context->preference('CommentModeratorsEmail');
89
    unless ($moderatorEmail) {
90
        carp 'CommentModeratorsEmail is not set!';
91
        return;
92
    }
93
94
    my $letter =  C4::Letters::GetPreparedLetter (
95
        module => 'members',
96
        letter_code => 'COMMENT_CREATED',
97
        tables => {
98
            'reviews'     => $reviewid,
99
            'borrowers'   => $borrowernumber,
100
            'biblio'      => $biblionumber,
101
            'biblioitems' => $biblionumber,
102
        }
103
    );
104
    unless ($letter) {
105
        carp 'COMMENT_CREATED member letter not found!';
106
        return;
107
    }
108
109
    C4::Letters::EnqueueLetter({
110
        letter                 => $letter,
111
        borrowernumber         => $borrowernumber,
112
        message_transport_type => 'email',
113
        to_address             => $moderatorEmail,
114
    });
115
116
    return 1;
117
}
118
70
1;
119
1;
(-)a/installer/data/mysql/atomicupdate/bug_1985.sql (+38 lines)
Line 0 Link Here
1
INSERT IGNORE INTO letter
2
    (module,    code,              branchcode, name,                           is_html,
3
     title,
4
     content, message_transport_type)
5
VALUES
6
    ('members', 'COMMENT_CREATED', '',         'Comment created notification', '0',
7
     'Comment from <<borrowers.cardnumber>> is waiting for moderation',
8
'Dear moderator,
9
10
We want to inform you that borrower <<borrowers.cardnumber>> has just created a new comment on <<biblio.title>>, which is biblionumber <<biblio.biblionumber>>.
11
12
--- BEGIN COMMENT ---
13
<<reviews.review>>
14
--- END COMMENT ---
15
16
To approve:
17
http://<<staffClientBaseURL>>/cgi-bin/koha/reviews/reviewswaiting.pl?op=approve&reviewid=<<reviews.reviewid>>
18
19
To delete:
20
http://<<staffClientBaseURL>>/cgi-bin/koha/reviews/reviewswaiting.pl?op=delete&reviewid=<<reviews.reviewid>>
21
22
Or to review all comments:
23
http://<<staffClientBaseURL>>/cgi-bin/koha/reviews/reviewswaiting.pl
24
25
Check it out!
26
27
Your library.',
28
'email'
29
    );
30
31
INSERT IGNORE INTO systempreferences
32
    (variable,                value,options,
33
     explanation,
34
     type)
35
VALUES
36
    ('CommentModeratorsEmail','',   '',
37
     'The email address where to send a notification (template code COMMENT_CREATED) when a Borrower adds/modifies a review/comment for a Biblio. Set to empty to disable sending email notifications.',
38
     'Textarea');
(-)a/installer/data/mysql/en/mandatory/sample_notices.sql (+25 lines)
Lines 156-161 Your library account has been created. Please verify your email address by click Link Here
156
If you did not initiate this request, you may safely ignore this one-time message. The request will expire shortly.'
156
If you did not initiate this request, you may safely ignore this one-time message. The request will expire shortly.'
157
);
157
);
158
158
159
INSERT INTO  letter (module, code, branchcode, name, is_html, title, content, message_transport_type)
160
VALUES ( 'members', 'COMMENT_CREATED', '', 'Comment created notification', '0', 'Comment from <<borrowers.cardnumber>> is waiting for moderation',
161
'Dear moderator,
162
163
We want to inform you that borrower <<borrowers.cardnumber>> has just created a new comment on <<biblio.title>>, which is biblionumber <<biblio.biblionumber>>.
164
165
--- BEGIN COMMENT ---
166
<<reviews.review>>
167
--- END COMMENT ---
168
169
To approve:
170
http://<<staffClientBaseURL>>/cgi-bin/koha/reviews/reviewswaiting.pl?op=approve&reviewid=<<reviews.reviewid>>
171
172
To delete:
173
http://<<staffClientBaseURL>>/cgi-bin/koha/reviews/reviewswaiting.pl?op=delete&reviewid=<<reviews.reviewid>>
174
175
Or to review all comments:
176
http://<<staffClientBaseURL>>/cgi-bin/koha/reviews/reviewswaiting.pl
177
178
Check it out!
179
180
Your library.',
181
'email'
182
);
183
159
INSERT INTO  letter (module, code, branchcode, name, is_html, title, content)
184
INSERT INTO  letter (module, code, branchcode, name, is_html, title, content)
160
VALUES ('members', 'SHARE_INVITE', '', 'Invitation for sharing a list', '0', 'Share list <<listname>>', 'Dear patron,
185
VALUES ('members', 'SHARE_INVITE', '', 'Invitation for sharing a list', '0', 'Share list <<listname>>', 'Dear patron,
161
186
(-)a/installer/data/mysql/sysprefs.sql (+1 lines)
Lines 122-127 INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` Link Here
122
('CoceHost', '', NULL, 'Coce server URL', 'Free'),
122
('CoceHost', '', NULL, 'Coce server URL', 'Free'),
123
('CoceProviders', '', 'aws,gb,ol', 'Coce providers', 'multiple'),
123
('CoceProviders', '', 'aws,gb,ol', 'Coce providers', 'multiple'),
124
('COinSinOPACResults','1','','If ON, use COinS in OPAC search results page.  NOTE: this can slow down search response time significantly','YesNo'),
124
('COinSinOPACResults','1','','If ON, use COinS in OPAC search results page.  NOTE: this can slow down search response time significantly','YesNo'),
125
('CommentModeratorsEmail','','','The email address where to send a notification (template code COMMENT_CREATED) when a Borrower adds/modifies a review/comment for a Biblio. Set to empty to disable sending email notifications.','Textarea'),
125
('ConfirmFutureHolds','0','','Number of days for confirming future holds','Integer'),
126
('ConfirmFutureHolds','0','','Number of days for confirming future holds','Integer'),
126
('ConsiderOnSiteCheckoutsAsNormalCheckouts','1',NULL,'Consider on-site checkouts as normal checkouts','YesNo'),
127
('ConsiderOnSiteCheckoutsAsNormalCheckouts','1',NULL,'Consider on-site checkouts as normal checkouts','YesNo'),
127
('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo'),
128
('CronjobLog','0',NULL,'If ON, log information from cron jobs.','YesNo'),
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref (+4 lines)
Lines 470-475 OPAC: Link Here
470
                  no: Hide
470
                  no: Hide
471
            - reviewer's avatar beside comments in OPAC. The avatar will be searched on www.libravatar.org using the patron's e-mail address.
471
            - reviewer's avatar beside comments in OPAC. The avatar will be searched on www.libravatar.org using the patron's e-mail address.
472
        -
472
        -
473
            - The email address where to send a notification (template code COMMENT_CREATED) when a Borrower adds/modifies a review/comment for a Biblio. Set to empty to disable sending email notifications.
474
            - pref: CommentModeratorsEmail
475
              class: textarea
476
        -
473
            - pref: RequestOnOpac
477
            - pref: RequestOnOpac
474
              choices:
478
              choices:
475
                  yes: Allow
479
                  yes: Allow
(-)a/opac/opac-review.pl (-6 / +21 lines)
Lines 33-40 use Koha::Reviews; Link Here
33
33
34
my $query        = new CGI;
34
my $query        = new CGI;
35
my $biblionumber = $query->param('biblionumber');
35
my $biblionumber = $query->param('biblionumber');
36
my $review       = $query->param('review');
36
my $review       = $query->param('review');   # if defined submit
37
my $reviewid     = $query->param('reviewid');
37
my $reviewid     = $query->param('reviewid'); # if defined edit
38
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
38
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
39
    {
39
    {
40
        template_name   => "opac-review.tt",
40
        template_name   => "opac-review.tt",
Lines 46-52 my ( $template, $borrowernumber, $cookie ) = get_template_and_user( Link Here
46
46
47
# FIXME: need to allow user to delete their own comment(s)
47
# FIXME: need to allow user to delete their own comment(s)
48
48
49
my ( $clean, @errors, $savedreview );
49
my ( $clean, @errors, $savedreview, $affectedreview );
50
51
my $submitting = ( defined $review && $review ne q{} ) ? 1 : 0;
52
my $editing    = ( defined $reviewid ) ? 1 : 0;
53
50
my $biblio = Koha::Biblios->find( $biblionumber );
54
my $biblio = Koha::Biblios->find( $biblionumber );
51
55
52
if( !$biblio ) {
56
if( !$biblio ) {
Lines 60-66 if( !$biblio ) { Link Here
60
    $review = $savedreview? $savedreview->review: $review;
64
    $review = $savedreview? $savedreview->review: $review;
61
}
65
}
62
66
63
if( !@errors && defined $review ) {
67
if( !@errors && $submitting ) {
64
    if ($review !~ /\S/) {
68
    if ($review !~ /\S/) {
65
        push @errors, {empty=>1};
69
        push @errors, {empty=>1};
66
    } else {
70
    } else {
Lines 79-93 if( !@errors && defined $review ) { Link Here
79
                        datereviewed  => dt_from_string
83
                        datereviewed  => dt_from_string
80
                    }
84
                    }
81
                )->store;
85
                )->store;
86
                $affectedreview = $savedreview;
82
            } else {
87
            } else {
83
                $reviewid = Koha::Review->new(
88
                my $newreview = Koha::Review->new(
84
                    {   biblionumber   => $biblionumber,
89
                    {   biblionumber   => $biblionumber,
85
                        borrowernumber => $borrowernumber,
90
                        borrowernumber => $borrowernumber,
86
                        review         => $clean,
91
                        review         => $clean,
87
                        datereviewed   => dt_from_string
92
                        datereviewed   => dt_from_string
88
                    }
93
                    }
89
                )->store->reviewid;
94
                )->store;
95
                $reviewid = $newreview ? $newreview->reviewid : 0;
96
                $affectedreview = $newreview;
90
            }
97
            }
98
            if ($reviewid) {
99
                $affectedreview->SendReviewAlert({
100
                    'borrowernumber' => $borrowernumber,
101
                    'reviewid'       => $reviewid,
102
                    'biblionumber'   => $biblionumber
103
                });
104
            }
105
91
            unless (@errors){ $template->param(WINDOW_CLOSE=>1); }
106
            unless (@errors){ $template->param(WINDOW_CLOSE=>1); }
92
        }
107
        }
93
    }
108
    }
(-)a/t/db_dependent/Koha/Reviews.t (-2 / +42 lines)
Lines 19-28 Link Here
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
21
22
use Test::More tests => 8;
22
use Test::More tests => 14;
23
use Test::Warn;
23
24
24
use Koha::Patrons;
25
use Koha::Patrons;
25
use Koha::Reviews;
26
use Koha::Reviews;
27
use Koha::Notice::Messages;
28
use Koha::Notice::Templates;
26
use Koha::Database;
29
use Koha::Database;
27
30
28
use t::lib::TestBuilder;
31
use t::lib::TestBuilder;
Lines 38-43 $patron_1 = Koha::Patrons->find( $patron_1->{borrowernumber} ); Link Here
38
$patron_2 = Koha::Patrons->find( $patron_2->{borrowernumber} );
41
$patron_2 = Koha::Patrons->find( $patron_2->{borrowernumber} );
39
my $biblio_1 = $builder->build({ source => 'Biblio' });
42
my $biblio_1 = $builder->build({ source => 'Biblio' });
40
my $biblio_2 = $builder->build({ source => 'Biblio' });
43
my $biblio_2 = $builder->build({ source => 'Biblio' });
44
my $nb_of_messages = Koha::Notice::Messages->search->count;
41
my $nb_of_reviews = Koha::Reviews->search->count;
45
my $nb_of_reviews = Koha::Reviews->search->count;
42
my $nb_of_approved_reviews = Koha::Reviews->search({ approved => 1 })->count;
46
my $nb_of_approved_reviews = Koha::Reviews->search({ approved => 1 })->count;
43
my $new_review_1_1 = Koha::Review->new({
47
my $new_review_1_1 = Koha::Review->new({
Lines 83-86 subtest 'search_limited' => sub { Link Here
83
$retrieved_review_1_1->delete;
87
$retrieved_review_1_1->delete;
84
is( Koha::Reviews->search->count, $nb_of_reviews + 2, 'Delete should have deleted the review' );
88
is( Koha::Reviews->search->count, $nb_of_reviews + 2, 'Delete should have deleted the review' );
85
89
90
# Test SendReview Alert
91
92
# empty CommentModeratorsEmail
93
t::lib::Mocks::mock_preference('CommentModeratorsEmail',undef);
94
warning_like {
95
$new_review_1_2->SendReviewAlert({
96
    borrowernumber => $patron_1->{borrowernumber},
97
    biblionumber   => $biblio_2->{biblionumber},
98
    reviewid       => $new_review_1_2->reviewid
99
}) } qr/CommentModeratorsEmail is not set!/, 'SendReviewAlert triggered expected CommentModeratorsEmail warning.';
100
is( Koha::Notice::Messages->search->count, $nb_of_messages, 'SendReviewAlert lacking CommentModeratorsEmail triggered nothing.' );
101
102
# set CommentModeratorsEmail
103
t::lib::Mocks::mock_preference('CommentModeratorsEmail','test@test.test');
104
warning_is {
105
$new_review_1_2->SendReviewAlert({
106
    borrowernumber => $patron_1->{borrowernumber},
107
    biblionumber   => $biblio_2->{biblionumber},
108
    reviewid       => $new_review_1_2->reviewid
109
}) } '', 'SendReviewAlert triggered no warnings as expected.';
110
is( Koha::Notice::Messages->search->count, $nb_of_messages+1, 'SendReviewAlert triggered notice.' );
111
112
# letter missing
113
Koha::Notice::Templates->search({
114
    module => 'members',
115
    code => 'COMMENT_CREATED'
116
})->delete;
117
warnings_like {
118
$new_review_1_2->SendReviewAlert({
119
    borrowernumber => $patron_1->{borrowernumber},
120
    biblionumber   => $biblio_2->{biblionumber},
121
    reviewid       => $new_review_1_2->reviewid
122
}) }
123
[ qr/No members COMMENT_CREATED letter transported by email/,
124
  qr/COMMENT_CREATED member letter not found!/ ] , 'SendReviewAlert triggered expected COMMENT_CREATED warnings.';
125
is( Koha::Notice::Messages->search->count, $nb_of_messages+1, 'SendReviewAlert lacking letter triggered nothing new.' );
126
86
$schema->storage->txn_rollback;
127
$schema->storage->txn_rollback;
87
- 

Return to bug 1985