Bug 6554 Fix error caused by modifying $_ in a map
[koha.git] / C4 / NewsChannels.pm
blob0201729ce2d0d74f5c5e1862fd335f739d017762
1 package C4::NewsChannels;
3 # Copyright 2000-2002 Katipo Communications
5 # This file is part of Koha.
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.
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.
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.
20 use strict;
21 use warnings;
23 use C4::Context;
24 use C4::Dates qw(format_date);
26 use vars qw($VERSION @ISA @EXPORT);
28 BEGIN {
29 $VERSION = 3.07.00.049; # 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
37 =head1 NAME
39 C4::NewsChannels - Functions to manage OPAC and intranet news
41 =head1 DESCRIPTION
43 This module provides the functions needed to mange OPAC and intranet news.
45 =head1 FUNCTIONS
47 =cut
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;
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;
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;
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;
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 ."' ";
109 $query.= " ORDER BY timestamp DESC ";
110 #if ($limit) {
111 # $query.= "LIMIT 0, " . $limit;
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;
123 $count++;
125 return ($count, \@opac_news);
128 =head2 GetNewsToDisplay
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.
134 =cut
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'
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;
159 return \@results;
163 __END__
165 =head1 AUTHOR
169 =cut