Bug 8992: Use the existing greybox plugin in interface/theme
[koha.git] / C4 / UsageStats.pm
blob73c2e1f4fab7be0439efc96165003f7f5ce16f11
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 HomeOrHoldingBranchReturn
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 RefundLostItemFeeOnReturn
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 soundon
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 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 AuthorisedValueImages
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 singleBranchMode
272 AnonSuggestions
273 EnableOpacSearchHistory
274 OPACPrivacy
275 opacreadinghistory
276 TrackClicks
277 PatronSelfRegistration
278 OPACShelfBrowser
279 AutoEmailOpacUser
280 AutoEmailPrimaryAddress
281 autoMemberNum
282 BorrowerRenewalPeriodBase
283 checkdigit
284 EnableBorrowerFiles
285 EnhancedMessagingPreferences
286 ExtendedPatronAttributes
287 intranetreadinghistory
288 memberofinstitution
289 patronimages
290 TalkingTechItivaPhoneNotification
291 uppercasesurnames
292 IncludeSeeFromInSearches
293 OpacGroupResults
294 QueryAutoTruncate
295 QueryFuzzy
296 QueryStemming
297 QueryWeightFields
298 TraceCompleteSubfields
299 TraceSubjectSubdivisions
300 UseICU
301 UseQueryParser
302 defaultSortField
303 displayFacetCount
304 OPACdefaultSortField
305 OPACItemsResultsDisplay
306 expandedSearchOption
307 IntranetNumbersPreferPhrase
308 OPACNumbersPreferPhrase
309 opacSerialDefaultTab
310 RenewSerialAddsSuggestion
311 RoutingListAddReserves
312 RoutingSerials
313 SubscriptionHistory
314 Display856uAsImage
315 DisplayIconsXSLT
316 StaffAuthorisedValueImages
317 template
318 yuipath
319 HidePatronName
320 intranetbookbag
321 StaffDetailItemSelection
322 viewISBD
323 viewLabeledMARC
324 viewMARC
325 ILS-DI
326 OAI-PMH
327 version
331 $report->{systempreferences}{$_} = C4::Context->preference($_);
333 return $report;
336 =head2 ReportToCommunity
338 ReportToCommunity;
340 Send to hea.koha-community.org database informations
342 =cut
344 sub ReportToCommunity {
345 my $data = shift;
346 my $json = encode_json($data);
348 my $url = "http://hea.koha-community.org/upload.pl";
349 my $ua = LWP::UserAgent->new;
350 my $res = $ua->post(
351 $url,
352 'Content-type' => 'application/json;charset=utf-8',
353 Content => $json,
355 my $content = decode_json( $res->decoded_content );
356 C4::Context->set_preference( 'UsageStatsID',
357 $content->{library}{id} );
360 =head2 _count
362 $data = _count($table);
364 Count the number of records in $table tables
366 =cut
368 sub _count {
369 my $table = shift;
371 my $dbh = C4::Context->dbh;
372 my $sth = $dbh->prepare("SELECT count(*) from $table");
373 $sth->execute;
374 return $sth->fetchrow_array;