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

(-)a/installer/data/mysql/atomicupdate/bug_18922_add_reader_auth.pl (+18 lines)
Line 0 Link Here
1
use Modern::Perl;
2
3
return {
4
    bug_number  => "BUG_18922",
5
    description => "Add flags for sharing reviews",
6
    up          => sub {
7
        my ($args) = @_;
8
        my ( $dbh, $out ) = @$args{qw(dbh out)};
9
10
        $dbh->do(q{'ALTER TABLE reviews ADD COLUMN share_auth integer'});
11
        say $out "Added new column 'share_auth' in table 'reviews'";
12
13
        $dbh->do(q{'ALTER TABLE reviews ADD COLUMN mana_id integer'});
14
        say $out "Added new column 'mana_id' in table 'reviews'";
15
        $dbh->do(q{'ALTER TABLE biblioitems ADD COLUMN last_mana_update date'});
16
        say $out "Added new column 'last_mana_update' in table 'biblioitems'";
17
    },
18
};
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/web_services.pref (+1 lines)
Lines 127-132 Web services: Link Here
127
            - pref: AutoShareWithMana
127
            - pref: AutoShareWithMana
128
              multiple:
128
              multiple:
129
                subscription: subscriptions
129
                subscription: subscriptions
130
                review: reviews
130
    Reporting:
131
    Reporting:
131
        -
132
        -
132
            - Only return
133
            - Only return
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reviews/reviewswaiting.tt (+7 lines)
Lines 43-48 Link Here
43
43
44
[% WRAPPER 'main-container.inc' aside='tools-menu' %]
44
[% WRAPPER 'main-container.inc' aside='tools-menu' %]
45
    <h1>Comments</h1>
45
    <h1>Comments</h1>
46
    [% IF msg %]
47
        [% IF code %]
48
            <div class="dialog message"> Error occured, mana server returned [% msg %] with statuscode [% code %] </div>
49
        [% ELSE %]
50
            <div class="dialog message"> [% msg %] </div>
51
        [% END %]
52
    [% END %]
46
53
47
    <!-- The manual invoice and credit buttons -->
54
    <!-- The manual invoice and credit buttons -->
48
    <div class="toptabs">
55
    <div class="toptabs">
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-review.tt (+1 lines)
Lines 52-57 Link Here
52
                        [% END %]
52
                        [% END %]
53
                        <fieldset>
53
                        <fieldset>
54
                            <textarea id="review" name="review" cols="60" rows="8">[% review | html %]</textarea>
54
                            <textarea id="review" name="review" cols="60" rows="8">[% review | html %]</textarea>
55
                            <input type="checkbox" name="share_auth" />I accept to share anonymously this comment with all users of ManaKB.
55
                        </fieldset>
56
                        </fieldset>
56
                        <p>Note: Your comment must be approved by a librarian. </p>
57
                        <p>Note: Your comment must be approved by a librarian. </p>
57
                        <fieldset class="action">
58
                        <fieldset class="action">
(-)a/opac/opac-detail.pl (+51 lines)
Lines 78-89 use Koha::Patrons; Link Here
78
use Koha::Plugins;
78
use Koha::Plugins;
79
use Koha::Ratings;
79
use Koha::Ratings;
80
use Koha::Reviews;
80
use Koha::Reviews;
81
use Koha::SharedContent;
81
use Koha::Serial::Items;
82
use Koha::Serial::Items;
82
use Koha::SearchEngine::Search;
83
use Koha::SearchEngine::Search;
83
use Koha::SearchEngine::QueryBuilder;
84
use Koha::SearchEngine::QueryBuilder;
84
use Koha::Util::MARC;
85
use Koha::Util::MARC;
85
86
86
use JSON qw( decode_json );
87
use JSON qw( decode_json );
88
use DateTime;
89
use constant DURATION_BEFORE_REFRESH => DateTime::Duration->new( months => 3 );
87
90
88
my $query = CGI->new();
91
my $query = CGI->new();
89
92
Lines 921-926 $template->param( ocoins => $coins ); Link Here
921
924
922
my ( $loggedincommenter, $reviews );
925
my ( $loggedincommenter, $reviews );
923
if ( C4::Context->preference('OPACComments') ) {
926
if ( C4::Context->preference('OPACComments') ) {
927
    if ( C4::Context->preference('Mana') ) {
928
        my $now        = DateTime->now();
929
        my $biblioitem = Koha::Biblioitems->find($biblionumber);
930
        $biblioitem = $biblioitem->unblessed if $biblioitem;
931
        my $last_update;
932
        eval { $last_update = DateTime::Format::MySQL->parse_date( $biblioitem->{last_mana_update} ) };
933
        if ( ( !$last_update )
934
            or DateTime::Duration->compare( ( $now - $last_update ), DURATION_BEFORE_REFRESH ) == -1 )
935
        {
936
            my $idtype;
937
            my $documentid;
938
            if ($isbn) {
939
                $idtype     = 'isbn';
940
                $documentid = $isbn;
941
            } elsif ( $biblioitem->{issn} ) {
942
                $idtype     = 'issn';
943
                $documentid = $biblioitem->{issn};
944
            } elsif ( $biblioitem->{ean} ) {
945
                $idtype     = 'ean';
946
                $documentid = $ean;
947
            }
948
            if ( $documentid and $idtype ) {
949
                my $mana_ip = C4::Context->config('mana_config');
950
                my $url     = "$mana_ip/review.json?documentid=$documentid&idtype=$idtype";
951
                my $request = HTTP::Request->new( GET => $url );
952
                $request->content_type('aplication/json');
953
                my $response     = Koha::SharedContent::manaRequest($request);
954
                my $mana_reviews = $response->{data};
955
                foreach my $mana_review (@$mana_reviews) {
956
                    my $existing = Koha::Reviews->search( mana_id => $mana_review->{id} );
957
                    unless ( scalar @{ $existing->unblessed } ) {
958
                        my $review;
959
                        $review->{borrowernumber} = undef;
960
                        $review->{biblionumber}   = $biblionumber;
961
                        $review->{review}         = $mana_review->{review};
962
                        $review->{approved}       = 1;
963
                        $review->{datereviewed}   = DateTime->now();
964
                        $review->{share_auth}     = 1;
965
                        $review->{mana_id}        = $mana_review->{id};
966
                        Koha::Review->new($review)->store;
967
                    }
968
                }
969
            }
970
        }
971
        $biblioitem->last_mana_update( $now->ymd() );
972
        $biblioitem->store();
973
    }
974
924
    $reviews = Koha::Reviews->search(
975
    $reviews = Koha::Reviews->search(
925
        {
976
        {
926
            biblionumber => $biblionumber,
977
            biblionumber => $biblionumber,
(-)a/opac/opac-review.pl (+3 lines)
Lines 32-37 my $query = CGI->new; Link Here
32
my $biblionumber = $query->param('biblionumber');
32
my $biblionumber = $query->param('biblionumber');
33
my $review       = $query->param('review');
33
my $review       = $query->param('review');
34
my $reviewid     = $query->param('reviewid');
34
my $reviewid     = $query->param('reviewid');
35
my $share_auth   = ( $query->param('share_auth') eq 'on' ) ? 1 : 0;
35
my $op           = $query->param('op') // q{};
36
my $op           = $query->param('op') // q{};
36
37
37
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
38
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
Lines 74-79 if ( $op =~ /^cud-/ && !@errors && defined $review ) { Link Here
74
                    {
75
                    {
75
                        review       => $clean,
76
                        review       => $clean,
76
                        approved     => 0,
77
                        approved     => 0,
78
                        share_auth   => $share_auth,
77
                        datereviewed => dt_from_string
79
                        datereviewed => dt_from_string
78
                    }
80
                    }
79
                )->store;
81
                )->store;
Lines 83-88 if ( $op =~ /^cud-/ && !@errors && defined $review ) { Link Here
83
                        biblionumber   => $biblionumber,
85
                        biblionumber   => $biblionumber,
84
                        borrowernumber => $borrowernumber,
86
                        borrowernumber => $borrowernumber,
85
                        review         => $clean,
87
                        review         => $clean,
88
                        share_auth     => $share_auth,
86
                        datereviewed   => dt_from_string
89
                        datereviewed   => dt_from_string
87
                    }
90
                    }
88
                )->store->reviewid;
91
                )->store->reviewid;
(-)a/reviews/reviewswaiting.pl (-1 / +39 lines)
Lines 24-29 use C4::Context; Link Here
24
use Koha::Biblios;
24
use Koha::Biblios;
25
use Koha::Patrons;
25
use Koha::Patrons;
26
use Koha::Reviews;
26
use Koha::Reviews;
27
use Koha::SharedContent;
28
use HTTP::Request;
27
29
28
my $query = CGI->new;
30
my $query = CGI->new;
29
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
31
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
Lines 46-51 my $biblionumber = $query->param('biblionumber'); Link Here
46
if ( $op eq 'cud-approve' ) {
48
if ( $op eq 'cud-approve' ) {
47
    my $review = Koha::Reviews->find($reviewid);
49
    my $review = Koha::Reviews->find($reviewid);
48
    $review->approve if $review;
50
    $review->approve if $review;
51
52
    if (    C4::Context->preference("Mana")
53
        and grep { $_ eq "review" } split( /,/, C4::Context->preference('AutoShareWithMana') )
54
        and $review->share_auth )
55
    {
56
        my $biblioitem = Koha::Biblioitems->find( $review->biblionumber );
57
        my $documentid;
58
        my $idtype;
59
        if ( $biblioitem->isbn ) {
60
            $documentid = $biblioitem->isbn;
61
            $idtype     = 'isbn';
62
        } elsif ( $biblioitem->issn ) {
63
            $documentid = $biblioitem->issn;
64
            $idtype     = 'issn';
65
        } elsif ( $biblioitem->ean ) {
66
            $documentid = $biblioitem->ean;
67
            $idtype     = 'ean';
68
        }
69
70
        #if the resource can be identified by Mana
71
        if ( $documentid and $idtype ) {
72
            my $reviewforMana = {
73
                reviewid   => $review->reviewid,
74
                review     => $review->review,
75
                documentid => $documentid,
76
                idtype     => $idtype,
77
                language   => C4::Context->preference('language')
78
            };
79
            my $result = Koha::SharedContent::manaPostRequest( 'review', $reviewforMana );
80
            $template->param(
81
                msg => $result->{msg},
82
            );
83
            unless ( $result->{code} =~ /2../ ) {
84
                $template->param( code => $result->{code} );
85
            }
86
        }
87
    }
49
} elsif ( $op eq 'cud-unapprove' ) {
88
} elsif ( $op eq 'cud-unapprove' ) {
50
    my $review = Koha::Reviews->find($reviewid);
89
    my $review = Koha::Reviews->find($reviewid);
51
    $review->unapprove if $review;
90
    $review->unapprove if $review;
52
- 

Return to bug 18922