Merge remote-tracking branch 'origin/new/bug_5347'
[koha.git] / C4 / NewsChannels.pm
1 package C4::NewsChannels;
2
3 # Copyright 2000-2002 Katipo Communications
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 use strict;
21 use warnings;
22
23 use C4::Context;
24 use C4::Dates qw(format_date);
25
26 use vars qw($VERSION @ISA @EXPORT);
27
28 BEGIN { 
29         $VERSION = 3.01;        # set the version for version checking
30         @ISA = qw(Exporter);
31         @EXPORT = qw(
32                 &GetNewsToDisplay
33                 &add_opac_new &upd_opac_new &del_opac_new &get_opac_new &get_opac_news
34         );
35 }
36
37 =head1 NAME
38
39 C4::NewsChannels - Functions to manage OPAC and intranet news
40
41 =head1 DESCRIPTION
42
43 This module provides the functions needed to mange OPAC and intranet news.
44
45 =head1 FUNCTIONS
46
47 =cut
48
49 sub add_opac_new {
50     my ($title, $new, $lang, $expirationdate, $timestamp, $number) = @_;
51     my $dbh = C4::Context->dbh;
52     my $sth = $dbh->prepare("INSERT INTO opac_news (title, new, lang, expirationdate, timestamp, number) VALUES (?,?,?,?,?,?)");
53     $sth->execute($title, $new, $lang, $expirationdate, $timestamp, $number);
54     $sth->finish;
55     return 1;
56 }
57
58 sub upd_opac_new {
59     my ($idnew, $title, $new, $lang, $expirationdate, $timestamp,$number) = @_;
60     my $dbh = C4::Context->dbh;
61     my $sth = $dbh->prepare("
62         UPDATE opac_news SET 
63             title = ?,
64             new = ?,
65             lang = ?,
66             expirationdate = ?,
67             timestamp = ?,
68             number = ?
69         WHERE idnew = ?
70     ");
71     $sth->execute($title, $new, $lang, $expirationdate, $timestamp,$number,$idnew);
72     $sth->finish;
73     return 1;
74 }
75
76 sub del_opac_new {
77     my ($ids) = @_;
78     if ($ids) {
79         my $dbh = C4::Context->dbh;
80         my $sth = $dbh->prepare("DELETE FROM opac_news WHERE idnew IN ($ids)");
81         $sth->execute();
82         $sth->finish;
83         return 1;
84     } else {
85         return 0;
86     }
87 }
88
89 sub get_opac_new {
90     my ($idnew) = @_;
91     my $dbh = C4::Context->dbh;
92     my $sth = $dbh->prepare("SELECT * FROM opac_news WHERE idnew = ?");
93     $sth->execute($idnew);
94     my $data = $sth->fetchrow_hashref;
95     $data->{$data->{'lang'}} = 1 if defined $data->{lang};
96     $data->{expirationdate} = format_date($data->{expirationdate});
97     $data->{timestamp}      = format_date($data->{timestamp});
98     $sth->finish;
99     return $data;
100 }
101
102 sub get_opac_news {
103     my ($limit, $lang) = @_;
104     my $dbh = C4::Context->dbh;
105     my $query = "SELECT *, timestamp AS newdate FROM opac_news";
106     if ($lang) {
107         $query.= " WHERE lang = '" .$lang ."' ";
108     }
109     $query.= " ORDER BY timestamp DESC ";
110     #if ($limit) {
111     #    $query.= "LIMIT 0, " . $limit;
112     #}
113     my $sth = $dbh->prepare($query);
114     $sth->execute();
115     my @opac_news;
116     my $count = 0;
117     while (my $row = $sth->fetchrow_hashref) {
118         if ((($limit) && ($count < $limit)) || (!$limit)) {
119             $row->{'newdate'} = format_date($row->{'newdate'});
120             $row->{'expirationdate'} = format_date($row->{'expirationdate'});
121             push @opac_news, $row;
122         }
123         $count++;
124     }
125     return ($count, \@opac_news);
126 }
127
128 =head2 GetNewsToDisplay
129
130     $news = &GetNewsToDisplay($lang);
131     C<$news> is a ref to an array which containts
132     all news with expirationdate > today or expirationdate is null.
133
134 =cut
135
136 sub GetNewsToDisplay {
137     my $lang = shift;
138     my $dbh = C4::Context->dbh;
139     # SELECT *,DATE_FORMAT(timestamp, '%d/%m/%Y') AS newdate
140     my $query = "
141      SELECT *,timestamp AS newdate
142      FROM   opac_news
143      WHERE   (
144         expirationdate >= CURRENT_DATE()
145         OR    expirationdate IS NULL
146         OR    expirationdate = '00-00-0000'
147       )
148       AND   `timestamp` <= CURRENT_DATE()
149       AND   lang = ?
150       ORDER BY number
151     ";                          # expirationdate field is NOT in ISO format?
152     my $sth = $dbh->prepare($query);
153     $sth->execute($lang);
154     my @results;
155     while ( my $row = $sth->fetchrow_hashref ){
156                 $row->{newdate} = format_date($row->{newdate});
157         push @results, $row;
158     }
159     return \@results;
160 }
161
162 1;
163 __END__
164
165 =head1 AUTHOR
166
167 TG
168
169 =cut