Bug 15711: Fixing the 'Delete selected' button on patroncard images
[koha.git] / C4 / UsageStats.pm
blob092e8bd4d56cb1e6adacb03a256f6bdf66347e0d
1 package C4::UsageStats;
3 # This file is part of Koha.
5 # Copyright 2014 BibLibre
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20 use Modern::Perl;
21 use C4::Context;
22 use POSIX qw(strftime);
23 use LWP::UserAgent;
24 use JSON;
26 =head1 NAME
28 C4::UsageStats
30 =head1 DESCRIPTION
32 This package contains what is needed to report Koha statistics to hea
33 hea.koha-community.org is the server that centralize Koha setups informations
34 Koha libraries are encouraged to provide informations about their collections,
35 their structure,...
37 =head2 NeedUpdate
39 $needUpdateYN = C4::UsageStats::NeedUpdate;
41 Returns Y (1) if the last update is more than 1 month old
42 This way, even if the cronjob is run every minute, the webservice will be called
43 only once a month !
45 =cut
47 sub NeedUpdate {
48 my $lastupdated = C4::Context->preference('UsageStatsLastUpdateTime') || 0;
49 my $now = strftime( "%s", localtime );
51 # Need to launch cron.
52 return 1 if $now - $lastupdated >= 2592000;
54 # Data don't need to be updated
55 return 0;
58 sub BuildReport {
59 my $report = {
60 library => {
61 id => C4::Context->preference('UsageStatsID') || 0,
62 name => C4::Context->preference('UsageStatsLibraryName') || q||,
63 url => C4::Context->preference('UsageStatsLibraryUrl') || q||,
64 type => C4::Context->preference('UsageStatsLibraryType') || q||,
65 country => C4::Context->preference('UsageStatsCountry') || q||,
69 # Get database volumetry.
70 foreach (
71 qw/biblio items auth_header old_issues old_reserves borrowers aqorders subscription/
74 $report->{volumetry}{$_} = _count($_);
77 # Get systempreferences.
78 foreach (
79 qw/
80 AcqCreateItem
81 AcqWarnOnDuplicateInvoice
82 AcqViewBaskets
83 BasketConfirmations
84 OrderPdfFormat
85 casAuthentication
86 casLogout
87 AllowPKIAuth
88 DebugLevel
89 delimiter
90 noItemTypeImages
91 virtualshelves
92 AutoLocation
93 IndependentBranches
94 SessionStorage
95 Persona
96 AuthDisplayHierarchy
97 AutoCreateAuthorities
98 BiblioAddsAuthorities
99 dontmerge
100 UseAuthoritiesForTracings
101 CatalogModuleRelink
102 hide_marc
103 IntranetBiblioDefaultView
104 LabelMARCView
105 OpacSuppression
106 SeparateHoldings
107 UseControlNumber
108 advancedMARCeditor
109 DefaultClassificationSource
110 EasyAnalyticalRecords
111 autoBarcode
112 item-level_itypes
113 marcflavour
114 PrefillItem
115 z3950NormalizeAuthor
116 SpineLabelAutoPrint
117 SpineLabelShowPrintOnBibDetails
118 BlockReturnOfWithdrawnItems
119 CalculateFinesOnReturn
120 AgeRestrictionOverride
121 AllFinesNeedOverride
122 AllowFineOverride
123 AllowItemsOnHoldCheckout
124 AllowNotForLoanOverride
125 AllowRenewalLimitOverride
126 AllowReturnToBranch
127 AllowTooManyOverride
128 AutomaticItemReturn
129 AutoRemoveOverduesRestrictions
130 CircControl
131 HomeOrHoldingBranch
132 InProcessingToShelvingCart
133 IssueLostItem
134 IssuingInProcess
135 ManInvInNoissuesCharge
136 OverduesBlockCirc
137 RenewalPeriodBase
138 RenewalSendNotice
139 RentalsInNoissuesCharge
140 ReturnBeforeExpiry
141 ReturnToShelvingCart
142 TransfersMaxDaysWarning
143 UseBranchTransferLimits
144 useDaysMode
145 UseTransportCostMatrix
146 UseCourseReserves
147 finesCalendar
148 FinesIncludeGracePeriod
149 finesMode
150 RefundLostItemFeeOnReturn
151 WhenLostChargeReplacementFee
152 WhenLostForgiveFine
153 AllowHoldDateInFuture
154 AllowHoldPolicyOverride
155 AllowHoldsOnDamagedItems
156 AllowHoldsOnPatronsPossessions
157 AutoResumeSuspendedHolds
158 canreservefromotherbranches
159 decreaseLoanHighHolds
160 DisplayMultiPlaceHold
161 emailLibrarianWhenHoldIsPlaced
162 ExpireReservesMaxPickUpDelay
163 OPACAllowHoldDateInFuture
164 OPACAllowUserToChooseBranch
165 ReservesControlBranch
166 ReservesNeedReturns
167 SuspendHoldsIntranet
168 SuspendHoldsOpac
169 TransferWhenCancelAllWaitingHolds
170 AllowAllMessageDeletion
171 AllowOfflineCirculation
172 CircAutocompl
173 CircAutoPrintQuickSlip
174 DisplayClearScreenButton
175 FilterBeforeOverdueReport
176 FineNotifyAtCheckin
177 itemBarcodeFallbackSearch
178 itemBarcodeInputFilter
179 previousIssuesDefaultSortOrder
180 RecordLocalUseOnReturn
181 AudioAlerts
182 SpecifyDueDate
183 todaysIssuesDefaultSortOrder
184 UpdateTotalIssuesOnCirc
185 UseTablesortForCirc
186 WaitingNotifyAtCheckin
187 AllowSelfCheckReturns
188 AutoSelfCheckAllowed
189 FRBRizeEditions
190 OPACFRBRizeEditions
191 AmazonCoverImages
192 OPACAmazonCoverImages
193 Babeltheque
194 BakerTaylorEnabled
195 GoogleJackets
196 HTML5MediaEnabled
197 IDreamBooksReadometer
198 IDreamBooksResults
199 IDreamBooksReviews
200 LibraryThingForLibrariesEnabled
201 LocalCoverImages
202 OPACLocalCoverImages
203 NovelistSelectEnabled
204 XISBN
205 OpenLibraryCovers
206 OpenLibrarySearch
207 UseKohaPlugins
208 SyndeticsEnabled
209 TagsEnabled
210 CalendarFirstDayOfWeek
211 opaclanguagesdisplay
212 AuthoritiesLog
213 BorrowersLog
214 CataloguingLog
215 FinesLog
216 IssueLog
217 LetterLog
218 ReturnLog
219 SubscriptionLog
220 BiblioDefaultView
221 COinSinOPACResults
222 DisplayOPACiconsXSLT
223 hidelostitems
224 HighlightOwnItemsOnOPAC
225 OpacAddMastheadLibraryPulldown
226 OPACDisplay856uAsImage
227 OpacHighlightedWords
228 OpacKohaUrl
229 OpacMaintenance
230 OpacPublic
231 OpacSeparateHoldings
232 OPACShowBarcode
233 OPACShowCheckoutName
234 OpacShowFiltersPulldownMobile
235 OPACShowHoldQueueDetails
236 OpacShowLibrariesPulldownMobile
237 OpacShowRecentComments
238 OPACShowUnusedAuthorities
239 OpacStarRatings
240 opacthemes
241 OPACURLOpenInNewWindow
242 OpacAuthorities
243 opacbookbag
244 OpacBrowser
245 OpacBrowseResults
246 OpacCloud
247 OPACFinesTab
248 OpacHoldNotes
249 OpacItemLocation
250 OpacPasswordChange
251 OPACPatronDetails
252 OPACpatronimages
253 OPACPopupAuthorsSearch
254 OpacTopissue
255 opacuserlogin
256 QuoteOfTheDay
257 RequestOnOpac
258 reviewson
259 ShowReviewer
260 ShowReviewerPhoto
261 SocialNetworks
262 suggestion
263 AllowPurchaseSuggestionBranchChoice
264 OpacAllowPublicListCreation
265 OpacAllowSharingPrivateLists
266 OpacRenewalAllowed
267 OpacRenewalBranch
268 OPACViewOthersSuggestions
269 SearchMyLibraryFirst
270 AnonSuggestions
271 EnableOpacSearchHistory
272 OPACPrivacy
273 opacreadinghistory
274 TrackClicks
275 PatronSelfRegistration
276 OPACShelfBrowser
277 AutoEmailOpacUser
278 AutoEmailPrimaryAddress
279 autoMemberNum
280 BorrowerRenewalPeriodBase
281 checkdigit
282 EnableBorrowerFiles
283 EnhancedMessagingPreferences
284 ExtendedPatronAttributes
285 intranetreadinghistory
286 memberofinstitution
287 patronimages
288 TalkingTechItivaPhoneNotification
289 uppercasesurnames
290 IncludeSeeFromInSearches
291 OpacGroupResults
292 QueryAutoTruncate
293 QueryFuzzy
294 QueryStemming
295 QueryWeightFields
296 TraceCompleteSubfields
297 TraceSubjectSubdivisions
298 UseICU
299 UseQueryParser
300 defaultSortField
301 displayFacetCount
302 OPACdefaultSortField
303 OPACItemsResultsDisplay
304 expandedSearchOption
305 IntranetNumbersPreferPhrase
306 OPACNumbersPreferPhrase
307 opacSerialDefaultTab
308 RenewSerialAddsSuggestion
309 RoutingListAddReserves
310 RoutingSerials
311 SubscriptionHistory
312 Display856uAsImage
313 DisplayIconsXSLT
314 template
315 yuipath
316 HidePatronName
317 intranetbookbag
318 StaffDetailItemSelection
319 viewISBD
320 viewLabeledMARC
321 viewMARC
322 ILS-DI
323 OAI-PMH
324 version
328 $report->{systempreferences}{$_} = C4::Context->preference($_);
330 return $report;
333 =head2 ReportToCommunity
335 ReportToCommunity;
337 Send to hea.koha-community.org database informations
339 =cut
341 sub ReportToCommunity {
342 my $data = shift;
343 my $json = encode_json($data);
345 my $url = "http://hea.koha-community.org/upload.pl";
346 my $ua = LWP::UserAgent->new;
347 my $res = $ua->post(
348 $url,
349 'Content-type' => 'application/json;charset=utf-8',
350 Content => $json,
352 my $content = decode_json( $res->decoded_content );
353 C4::Context->set_preference( 'UsageStatsID',
354 $content->{library}{id} );
357 =head2 _count
359 $data = _count($table);
361 Count the number of records in $table tables
363 =cut
365 sub _count {
366 my $table = shift;
368 my $dbh = C4::Context->dbh;
369 my $sth = $dbh->prepare("SELECT count(*) from $table");
370 $sth->execute;
371 return $sth->fetchrow_array;