Bug 5670: [QA Followup] Don't force ISO dates.
[koha.git] / C4 / UsageStats.pm
blobcf8b98eb9d4988af4c0bf6565d9f65bfa89c0756
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 AllowItemsOnHoldCheckoutSCO
125 AllowNotForLoanOverride
126 AllowRenewalLimitOverride
127 AllowReturnToBranch
128 AllowTooManyOverride
129 AutomaticItemReturn
130 AutoRemoveOverduesRestrictions
131 CircControl
132 HomeOrHoldingBranch
133 InProcessingToShelvingCart
134 IssueLostItem
135 IssuingInProcess
136 ManInvInNoissuesCharge
137 OverduesBlockCirc
138 RenewalPeriodBase
139 RenewalSendNotice
140 RentalsInNoissuesCharge
141 ReturnBeforeExpiry
142 ReturnToShelvingCart
143 TransfersMaxDaysWarning
144 UseBranchTransferLimits
145 useDaysMode
146 UseTransportCostMatrix
147 UseCourseReserves
148 finesCalendar
149 FinesIncludeGracePeriod
150 finesMode
151 RefundLostOnReturnControl
152 WhenLostChargeReplacementFee
153 WhenLostForgiveFine
154 AllowHoldDateInFuture
155 AllowHoldPolicyOverride
156 AllowHoldsOnDamagedItems
157 AllowHoldsOnPatronsPossessions
158 AutoResumeSuspendedHolds
159 canreservefromotherbranches
160 decreaseLoanHighHolds
161 DisplayMultiPlaceHold
162 emailLibrarianWhenHoldIsPlaced
163 ExpireReservesMaxPickUpDelay
164 OPACAllowHoldDateInFuture
165 OPACAllowUserToChooseBranch
166 ReservesControlBranch
167 ReservesNeedReturns
168 SuspendHoldsIntranet
169 SuspendHoldsOpac
170 TransferWhenCancelAllWaitingHolds
171 AllowAllMessageDeletion
172 AllowOfflineCirculation
173 CircAutocompl
174 CircAutoPrintQuickSlip
175 DisplayClearScreenButton
176 FilterBeforeOverdueReport
177 FineNotifyAtCheckin
178 itemBarcodeFallbackSearch
179 itemBarcodeInputFilter
180 previousIssuesDefaultSortOrder
181 RecordLocalUseOnReturn
182 AudioAlerts
183 SpecifyDueDate
184 todaysIssuesDefaultSortOrder
185 UpdateTotalIssuesOnCirc
186 UseTablesortForCirc
187 WaitingNotifyAtCheckin
188 AllowSelfCheckReturns
189 AutoSelfCheckAllowed
190 FRBRizeEditions
191 OPACFRBRizeEditions
192 AmazonCoverImages
193 OPACAmazonCoverImages
194 Babeltheque
195 BakerTaylorEnabled
196 GoogleJackets
197 HTML5MediaEnabled
198 IDreamBooksReadometer
199 IDreamBooksResults
200 IDreamBooksReviews
201 LibraryThingForLibrariesEnabled
202 LocalCoverImages
203 OPACLocalCoverImages
204 NovelistSelectEnabled
205 XISBN
206 OpenLibraryCovers
207 OpenLibrarySearch
208 UseKohaPlugins
209 SyndeticsEnabled
210 TagsEnabled
211 CalendarFirstDayOfWeek
212 opaclanguagesdisplay
213 AuthoritiesLog
214 BorrowersLog
215 CataloguingLog
216 FinesLog
217 IssueLog
218 LetterLog
219 ReturnLog
220 SubscriptionLog
221 BiblioDefaultView
222 COinSinOPACResults
223 DisplayOPACiconsXSLT
224 hidelostitems
225 HighlightOwnItemsOnOPAC
226 OpacAddMastheadLibraryPulldown
227 OPACDisplay856uAsImage
228 OpacHighlightedWords
229 OpacKohaUrl
230 OpacMaintenance
231 OpacPublic
232 OpacSeparateHoldings
233 OPACShowBarcode
234 OPACShowCheckoutName
235 OpacShowFiltersPulldownMobile
236 OPACShowHoldQueueDetails
237 OpacShowLibrariesPulldownMobile
238 OpacShowRecentComments
239 OPACShowUnusedAuthorities
240 OpacStarRatings
241 opacthemes
242 OPACURLOpenInNewWindow
243 OpacAuthorities
244 opacbookbag
245 OpacBrowser
246 OpacBrowseResults
247 OpacCloud
248 OPACFinesTab
249 OpacHoldNotes
250 OpacItemLocation
251 OpacPasswordChange
252 OPACPatronDetails
253 OPACpatronimages
254 OPACPopupAuthorsSearch
255 OpacTopissue
256 opacuserlogin
257 QuoteOfTheDay
258 RequestOnOpac
259 reviewson
260 ShowReviewer
261 ShowReviewerPhoto
262 SocialNetworks
263 suggestion
264 AllowPurchaseSuggestionBranchChoice
265 OpacAllowPublicListCreation
266 OpacAllowSharingPrivateLists
267 OpacRenewalAllowed
268 OpacRenewalBranch
269 OPACViewOthersSuggestions
270 SearchMyLibraryFirst
271 AnonSuggestions
272 EnableOpacSearchHistory
273 OPACPrivacy
274 opacreadinghistory
275 TrackClicks
276 PatronSelfRegistration
277 OPACShelfBrowser
278 AutoEmailOpacUser
279 AutoEmailPrimaryAddress
280 autoMemberNum
281 BorrowerRenewalPeriodBase
282 checkdigit
283 EnableBorrowerFiles
284 EnhancedMessagingPreferences
285 ExtendedPatronAttributes
286 intranetreadinghistory
287 memberofinstitution
288 patronimages
289 TalkingTechItivaPhoneNotification
290 uppercasesurnames
291 IncludeSeeFromInSearches
292 OpacGroupResults
293 QueryAutoTruncate
294 QueryFuzzy
295 QueryStemming
296 QueryWeightFields
297 TraceCompleteSubfields
298 TraceSubjectSubdivisions
299 UseICU
300 UseQueryParser
301 defaultSortField
302 displayFacetCount
303 OPACdefaultSortField
304 OPACItemsResultsDisplay
305 expandedSearchOption
306 IntranetNumbersPreferPhrase
307 OPACNumbersPreferPhrase
308 opacSerialDefaultTab
309 RenewSerialAddsSuggestion
310 RoutingListAddReserves
311 RoutingSerials
312 SubscriptionHistory
313 Display856uAsImage
314 DisplayIconsXSLT
315 template
316 yuipath
317 HidePatronName
318 intranetbookbag
319 StaffDetailItemSelection
320 viewISBD
321 viewLabeledMARC
322 viewMARC
323 ILS-DI
324 OAI-PMH
325 version
329 $report->{systempreferences}{$_} = C4::Context->preference($_);
331 return $report;
334 =head2 ReportToCommunity
336 ReportToCommunity;
338 Send to hea.koha-community.org database informations
340 =cut
342 sub ReportToCommunity {
343 my $data = shift;
344 my $json = encode_json($data);
346 my $url = "http://hea.koha-community.org/upload.pl";
347 my $ua = LWP::UserAgent->new;
348 my $res = $ua->post(
349 $url,
350 'Content-type' => 'application/json;charset=utf-8',
351 Content => $json,
353 my $content = decode_json( $res->decoded_content );
354 C4::Context->set_preference( 'UsageStatsID',
355 $content->{library}{id} );
358 =head2 _count
360 $data = _count($table);
362 Count the number of records in $table tables
364 =cut
366 sub _count {
367 my $table = shift;
369 my $dbh = C4::Context->dbh;
370 my $sth = $dbh->prepare("SELECT count(*) from $table");
371 $sth->execute;
372 return $sth->fetchrow_array;