← Index
NYTProf Performance Profile   « line view »
For starman worker -M FindBin --max-requests 50 --workers 2 --user=kohadev-koha --group kohadev-koha --pid /var/run/koha/kohadev/plack.pid --daemonize --access-log /var/log/koha/kohadev/plack.log --error-log /var/log/koha/kohadev/plack-error.log -E deployment --socket /var/run/koha/kohadev/plack.sock /etc/koha/sites/kohadev/plack.psgi
  Run on Fri Jan 8 14:31:06 2016
Reported on Fri Jan 8 14:33:30 2016

Filename/home/vagrant/kohaclone/C4/NewsChannels.pm
StatementsExecuted 0 statements in 1.01ms
Line State
ments
Time
on line
Calls Time
in subs
Code
1package C4::NewsChannels;
2
3# This file is part of Koha.
4#
5# Copyright (C) 2000-2002 Katipo Communications
6# Copyright (C) 2013 Mark Tompsett
7#
8# Koha is free software; you can redistribute it and/or modify it
9# under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 3 of the License, or
11# (at your option) any later version.
12#
13# Koha is distributed in the hope that it will be useful, but
14# WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with Koha; if not, see <http://www.gnu.org/licenses>.
20
21use Modern::Perl;
22use C4::Context;
23use Koha::DateUtils;
24
25use vars qw($VERSION @ISA @EXPORT);
26
27BEGIN {
28 $VERSION = 3.07.00.049; # set the version for version checking
29 @ISA = qw(Exporter);
30 @EXPORT = qw(
31 &GetNewsToDisplay
32 &add_opac_new &upd_opac_new &del_opac_new &get_opac_new &get_opac_news
33 );
34}
35
36=head1 NAME
37
38C4::NewsChannels - Functions to manage OPAC and intranet news
39
40=head1 DESCRIPTION
41
42This module provides the functions needed to mange OPAC and intranet news.
43
44=head1 FUNCTIONS
45
46=cut
47
48=head2 add_opac_new
49
50 $retval = add_opac_new($hashref);
51
52 $hashref should contains all the fields found in opac_news,
53 except idnew. The idnew field is auto-generated.
54
55=cut
56
57sub add_opac_new {
58 my ($href_entry) = @_;
59 my $retval = 0;
60
61 if ($href_entry) {
62 my @fields = keys %{$href_entry};
63 my @values = values %{$href_entry};
64 my $field_string = join ',', @fields;
65 $field_string = $field_string // q{};
66 my $values_string = join(',', map { '?' } @fields);
67 my $dbh = C4::Context->dbh;
68 my $sth = $dbh->prepare("INSERT INTO opac_news ( $field_string ) VALUES ( $values_string )");
69 $sth->execute(@values);
70 $retval = 1;
71 }
72 return $retval;
73}
74
75=head2 upd_opac_new
76
77 $retval = upd_opac_new($hashref);
78
79 $hashref should contains all the fields found in opac_news,
80 including idnew, since it is the key for the SQL UPDATE.
81
82=cut
83
84sub upd_opac_new {
85 my ($href_entry) = @_;
86 my $retval = 0;
87
88 if ($href_entry) {
89 # take the keys of hash entry and make a list, but...
90 my @fields = keys %{$href_entry};
91 my @values;
92 $#values = -1;
93 my $field_string = q{};
94 foreach my $field_name (@fields) {
95 # exclude idnew
96 if ( $field_name ne 'idnew' ) {
97 $field_string = $field_string . "$field_name = ?,";
98 push @values,$href_entry->{$field_name};
99 }
100 }
101 # put idnew at the end, so we know which record to update
102 push @values,$href_entry->{'idnew'};
103 chop $field_string; # remove that excess ,
104
105 my $dbh = C4::Context->dbh;
106 my $sth = $dbh->prepare("UPDATE opac_news SET $field_string WHERE idnew = ?;");
107 $sth->execute(@values);
108 $retval = 1;
109 }
110 return $retval;
111}
112
113sub del_opac_new {
114 my ($ids) = @_;
115 if ($ids) {
116 my $dbh = C4::Context->dbh;
117 my $sth = $dbh->prepare("DELETE FROM opac_news WHERE idnew IN ($ids)");
118 $sth->execute();
119 return 1;
120 } else {
121 return 0;
122 }
123}
124
125sub get_opac_new {
126 my ($idnew) = @_;
127 my $dbh = C4::Context->dbh;
128 my $query = q{
129 SELECT opac_news.*,branches.branchname
130 FROM opac_news LEFT JOIN branches
131 ON opac_news.branchcode=branches.branchcode
132 WHERE opac_news.idnew = ?;
133 };
134 my $sth = $dbh->prepare($query);
135 $sth->execute($idnew);
136 my $data = $sth->fetchrow_hashref;
137 $data->{$data->{'lang'}} = 1 if defined $data->{lang};
138 $data->{expirationdate} = output_pref({ dt => dt_from_string( $data->{expirationdate} ), dateonly => 1 });
139 $data->{timestamp} = output_pref({ dt => dt_from_string( $data->{timestamp} ), dateonly => 1 }) ;
140 return $data;
141}
142
143sub get_opac_news {
144 my ($limit, $lang, $branchcode) = @_;
145 my @values;
146 my $dbh = C4::Context->dbh;
147 my $query = q{
148 SELECT opac_news.*, branches.branchname,
149 timestamp AS newdate,
150 borrowers.title AS author_title,
151 borrowers.firstname AS author_firstname,
152 borrowers.surname AS author_surname
153 FROM opac_news LEFT JOIN branches
154 ON opac_news.branchcode=branches.branchcode
155 LEFT JOIN borrowers on borrowers.borrowernumber = opac_news.borrowernumber
156 };
157 $query .= ' WHERE 1';
158 if ($lang) {
159 $query .= " AND (opac_news.lang='' OR opac_news.lang=?)";
160 push @values,$lang;
161 }
162 if ($branchcode) {
163 $query .= ' AND (opac_news.branchcode IS NULL OR opac_news.branchcode=?)';
164 push @values,$branchcode;
165 }
166 $query.= ' ORDER BY timestamp DESC ';
167 #if ($limit) {
168 # $query.= 'LIMIT 0, ' . $limit;
169 #}
170 my $sth = $dbh->prepare($query);
171 $sth->execute(@values);
172 my @opac_news;
173 my $count = 0;
174 while (my $row = $sth->fetchrow_hashref) {
175 if ((($limit) && ($count < $limit)) || (!$limit)) {
176 push @opac_news, $row;
177 }
178 $count++;
179 }
180 return ($count, \@opac_news);
181}
182
183=head2 GetNewsToDisplay
184
185 $news = &GetNewsToDisplay($lang,$branch);
186 C<$news> is a ref to an array which containts
187 all news with expirationdate > today or expirationdate is null
188 that is applicable for a given branch.
189
190=cut
191
192sub GetNewsToDisplay {
193 my ($lang,$branch) = @_;
194 my $dbh = C4::Context->dbh;
195 # SELECT *,DATE_FORMAT(timestamp, '%d/%m/%Y') AS newdate
196 my $query = q{
197 SELECT opac_news.*,timestamp AS newdate,
198 borrowers.title AS author_title,
199 borrowers.firstname AS author_firstname,
200 borrowers.surname AS author_surname
201 FROM opac_news
202 LEFT JOIN borrowers on borrowers.borrowernumber = opac_news.borrowernumber
203 WHERE (
204 expirationdate >= CURRENT_DATE()
205 OR expirationdate IS NULL
206 OR expirationdate = '00-00-0000'
207 )
208 AND DATE(timestamp) < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
209 AND (lang = '' OR lang = ?)
210 AND (opac_news.branchcode IS NULL OR opac_news.branchcode = ?)
211 ORDER BY number
212 }; # expirationdate field is NOT in ISO format?
213 # timestamp has HH:mm:ss, CURRENT_DATE generates 00:00:00
214 # by adding 1, that captures today correctly.
2151383µs180µs my $sth = $dbh->prepare($query);
# spent 80µs making 1 call to DBD::mysql::db::prepare
216 $lang = $lang // q{};
217 $sth->execute($lang,$branch);
218 my @results;
2191628µs3156µs while ( my $row = $sth->fetchrow_hashref ){
# spent 156µs making 3 calls to DBD::mysql::st::__ANON__[DBD/mysql.pm:799], avg 52µs/call
220 $row->{newdate} = output_pref({ dt => dt_from_string( $row->{newdate} ), dateonly => 1 });
221 push @results, $row;
222 }
223 return \@results;
224}
225
2261;
227__END__
228
229=head1 AUTHOR
230
231TG
232
233=cut