Bug 19274: Translatability: Fix new splitting problems related to database warnings
[koha.git] / C4 / UsageStats.pm
blob7524e05268789402f34c33fb5a43caa6b813c438
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 use Koha::Libraries;
28 =head1 NAME
30 C4::UsageStats
32 =head1 DESCRIPTION
34 This package contains what is needed to report Koha statistics to hea
35 hea.koha-community.org is the server that centralize Koha setups informations
36 Koha libraries are encouraged to provide informations about their collections,
37 their structure,...
39 =head2 NeedUpdate
41 $needUpdateYN = C4::UsageStats::NeedUpdate;
43 Returns Y (1) if the last update is more than 1 month old
44 This way, even if the cronjob is run every minute, the webservice will be called
45 only once a month !
47 =cut
49 sub NeedUpdate {
50 my $lastupdated = C4::Context->preference('UsageStatsLastUpdateTime') || 0;
51 my $now = strftime( "%s", localtime );
53 # Need to launch cron.
54 return 1 if $now - $lastupdated >= 2592000;
56 # Data don't need to be updated
57 return 0;
60 sub BuildReport {
61 my $report;
62 my @libraries;
63 if( C4::Context->preference('UsageStatsLibrariesInfo') ) {
64 my $libraries = Koha::Libraries->search;
65 while ( my $library = $libraries->next ) {
66 push @libraries, { name => $library->branchname, url => $library->branchurl, country => $library->branchcountry, geolocation => $library->geolocation, };
69 $report = {
70 installation => {
71 koha_id => C4::Context->preference('UsageStatsID') || 0,
72 name => C4::Context->preference('UsageStatsLibraryName') || q||,
73 url => C4::Context->preference('UsageStatsLibraryUrl') || q||,
74 type => C4::Context->preference('UsageStatsLibraryType') || q||,
75 country => C4::Context->preference('UsageStatsCountry') || q||,
76 geolocation => C4::Context->preference('UsageStatsGeolocation') || q||,
78 libraries => \@libraries,
81 # Get database volumetry.
82 foreach (
83 qw/biblio items auth_header old_issues old_reserves borrowers aqorders subscription/
86 $report->{volumetry}{$_} = _count($_);
89 # Get systempreferences.
90 foreach (
91 qw/
92 AcqCreateItem
93 AcqWarnOnDuplicateInvoice
94 AcqViewBaskets
95 BasketConfirmations
96 OrderPdfFormat
97 casAuthentication
98 casLogout
99 AllowPKIAuth
100 DebugLevel
101 delimiter
102 noItemTypeImages
103 virtualshelves
104 AutoLocation
105 IndependentBranches
106 SessionStorage
107 Persona
108 AuthDisplayHierarchy
109 AutoCreateAuthorities
110 BiblioAddsAuthorities
111 AuthorityMergeLimit
112 AuthorityMergeMode
113 UseAuthoritiesForTracings
114 CatalogModuleRelink
115 hide_marc
116 IntranetBiblioDefaultView
117 LabelMARCView
118 OpacSuppression
119 SeparateHoldings
120 UseControlNumber
121 advancedMARCeditor
122 DefaultClassificationSource
123 EasyAnalyticalRecords
124 autoBarcode
125 item-level_itypes
126 marcflavour
127 PrefillItem
128 z3950NormalizeAuthor
129 SpineLabelAutoPrint
130 SpineLabelShowPrintOnBibDetails
131 BlockReturnOfWithdrawnItems
132 CalculateFinesOnReturn
133 AgeRestrictionOverride
134 AllFinesNeedOverride
135 AllowFineOverride
136 AllowItemsOnHoldCheckout
137 AllowItemsOnHoldCheckoutSCO
138 AllowNotForLoanOverride
139 AllowRenewalLimitOverride
140 AllowReturnToBranch
141 AllowTooManyOverride
142 AutomaticItemReturn
143 AutoRemoveOverduesRestrictions
144 CircControl
145 HomeOrHoldingBranch
146 InProcessingToShelvingCart
147 IssueLostItem
148 IssuingInProcess
149 ManInvInNoissuesCharge
150 OverduesBlockCirc
151 RenewalPeriodBase
152 RenewalSendNotice
153 RentalsInNoissuesCharge
154 ReturnBeforeExpiry
155 ReturnToShelvingCart
156 TransfersMaxDaysWarning
157 UseBranchTransferLimits
158 useDaysMode
159 UseTransportCostMatrix
160 UseCourseReserves
161 finesCalendar
162 FinesIncludeGracePeriod
163 finesMode
164 RefundLostOnReturnControl
165 WhenLostChargeReplacementFee
166 WhenLostForgiveFine
167 AllowHoldDateInFuture
168 AllowHoldPolicyOverride
169 AllowHoldsOnDamagedItems
170 AllowHoldsOnPatronsPossessions
171 AutoResumeSuspendedHolds
172 canreservefromotherbranches
173 decreaseLoanHighHolds
174 DisplayMultiPlaceHold
175 emailLibrarianWhenHoldIsPlaced
176 ExpireReservesMaxPickUpDelay
177 OPACAllowHoldDateInFuture
178 OPACAllowUserToChooseBranch
179 ReservesControlBranch
180 ReservesNeedReturns
181 SuspendHoldsIntranet
182 SuspendHoldsOpac
183 TransferWhenCancelAllWaitingHolds
184 AllowAllMessageDeletion
185 AllowOfflineCirculation
186 CircAutocompl
187 CircAutoPrintQuickSlip
188 DisplayClearScreenButton
189 FilterBeforeOverdueReport
190 FineNotifyAtCheckin
191 itemBarcodeFallbackSearch
192 itemBarcodeInputFilter
193 previousIssuesDefaultSortOrder
194 RecordLocalUseOnReturn
195 AudioAlerts
196 SpecifyDueDate
197 todaysIssuesDefaultSortOrder
198 UpdateTotalIssuesOnCirc
199 UseTablesortForCirc
200 WaitingNotifyAtCheckin
201 AllowSelfCheckReturns
202 AutoSelfCheckAllowed
203 FRBRizeEditions
204 OPACFRBRizeEditions
205 AmazonCoverImages
206 OPACAmazonCoverImages
207 Babeltheque
208 BakerTaylorEnabled
209 GoogleJackets
210 HTML5MediaEnabled
211 IDreamBooksReadometer
212 IDreamBooksResults
213 IDreamBooksReviews
214 LibraryThingForLibrariesEnabled
215 LocalCoverImages
216 OPACLocalCoverImages
217 NovelistSelectEnabled
218 XISBN
219 OpenLibraryCovers
220 OpenLibrarySearch
221 UseKohaPlugins
222 SyndeticsEnabled
223 TagsEnabled
224 CalendarFirstDayOfWeek
225 opaclanguagesdisplay
226 AuthoritiesLog
227 BorrowersLog
228 CataloguingLog
229 FinesLog
230 IssueLog
231 LetterLog
232 ReturnLog
233 SubscriptionLog
234 BiblioDefaultView
235 COinSinOPACResults
236 DisplayOPACiconsXSLT
237 hidelostitems
238 HighlightOwnItemsOnOPAC
239 OpacAddMastheadLibraryPulldown
240 OPACDisplay856uAsImage
241 OpacHighlightedWords
242 OpacKohaUrl
243 OpacMaintenance
244 OpacPublic
245 OpacSeparateHoldings
246 OPACShowCheckoutName
247 OpacShowFiltersPulldownMobile
248 OPACShowHoldQueueDetails
249 OpacShowLibrariesPulldownMobile
250 OpacShowRecentComments
251 OPACShowUnusedAuthorities
252 OpacStarRatings
253 opacthemes
254 OPACURLOpenInNewWindow
255 OpacAuthorities
256 opacbookbag
257 OpacBrowser
258 OpacBrowseResults
259 OpacCloud
260 OPACFinesTab
261 OpacHoldNotes
262 OpacItemLocation
263 OpacPasswordChange
264 OPACPatronDetails
265 OPACpatronimages
266 OPACPopupAuthorsSearch
267 OpacTopissue
268 opacuserlogin
269 QuoteOfTheDay
270 RequestOnOpac
271 reviewson
272 ShowReviewer
273 ShowReviewerPhoto
274 SocialNetworks
275 suggestion
276 AllowPurchaseSuggestionBranchChoice
277 OpacAllowPublicListCreation
278 OpacAllowSharingPrivateLists
279 OpacRenewalAllowed
280 OpacRenewalBranch
281 OPACViewOthersSuggestions
282 SearchMyLibraryFirst
283 AnonSuggestions
284 EnableOpacSearchHistory
285 OPACPrivacy
286 opacreadinghistory
287 TrackClicks
288 PatronSelfRegistration
289 OPACShelfBrowser
290 AutoEmailOpacUser
291 AutoEmailPrimaryAddress
292 autoMemberNum
293 BorrowerRenewalPeriodBase
294 checkdigit
295 EnableBorrowerFiles
296 EnhancedMessagingPreferences
297 ExtendedPatronAttributes
298 intranetreadinghistory
299 memberofinstitution
300 patronimages
301 TalkingTechItivaPhoneNotification
302 uppercasesurnames
303 IncludeSeeFromInSearches
304 OpacGroupResults
305 QueryAutoTruncate
306 QueryFuzzy
307 QueryStemming
308 QueryWeightFields
309 TraceCompleteSubfields
310 TraceSubjectSubdivisions
311 UseICU
312 UseQueryParser
313 defaultSortField
314 displayFacetCount
315 OPACdefaultSortField
316 OPACItemsResultsDisplay
317 expandedSearchOption
318 IntranetNumbersPreferPhrase
319 OPACNumbersPreferPhrase
320 opacSerialDefaultTab
321 RenewSerialAddsSuggestion
322 RoutingListAddReserves
323 RoutingSerials
324 SubscriptionHistory
325 Display856uAsImage
326 DisplayIconsXSLT
327 template
328 yuipath
329 HidePatronName
330 intranetbookbag
331 StaffDetailItemSelection
332 viewISBD
333 viewLabeledMARC
334 viewMARC
335 ILS-DI
336 OAI-PMH
337 version
341 $report->{systempreferences}{$_} = C4::Context->preference($_);
343 return $report;
346 =head2 ReportToCommunity
348 ReportToCommunity;
350 Send to hea.koha-community.org database informations
352 =cut
354 sub ReportToCommunity {
355 my $data = shift;
356 my $json = encode_json($data);
358 my $url = "https://hea.koha-community.org/upload.pl";
359 my $ua = LWP::UserAgent->new;
360 my $res = $ua->post(
361 $url,
362 'Content-type' => 'application/json;charset=utf-8',
363 Content => $json,
365 my $content = decode_json( $res->decoded_content );
366 if ( $content->{koha_id} ) {
367 C4::Context->set_preference( 'UsageStatsID', $content->{koha_id} );
369 if ( $content->{id} ) {
370 C4::Context->set_preference( 'UsageStatsPublicID', $content->{id} );
374 =head2 _count
376 $data = _count($table);
378 Count the number of records in $table tables
380 =cut
382 sub _count {
383 my $table = shift;
385 my $dbh = C4::Context->dbh;
386 my $sth = $dbh->prepare("SELECT count(*) from $table");
387 $sth->execute;
388 return $sth->fetchrow_array;