Bug 22784: DB Changes
[koha.git] / C4 / UsageStats.pm
blobd608eb9ea9ca7f5d6a64e4fe38f363029fc4b105
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 OpacNoItemTypeImages
104 virtualshelves
105 AutoLocation
106 IndependentBranches
107 SessionStorage
108 Persona
109 AuthDisplayHierarchy
110 AutoCreateAuthorities
111 BiblioAddsAuthorities
112 AuthorityMergeLimit
113 AuthorityMergeMode
114 UseAuthoritiesForTracings
115 CatalogModuleRelink
116 hide_marc
117 IntranetBiblioDefaultView
118 LabelMARCView
119 OpacSuppression
120 SeparateHoldings
121 UseControlNumber
122 advancedMARCeditor
123 DefaultClassificationSource
124 EasyAnalyticalRecords
125 autoBarcode
126 item-level_itypes
127 marcflavour
128 PrefillItem
129 z3950NormalizeAuthor
130 SpineLabelAutoPrint
131 SpineLabelShowPrintOnBibDetails
132 BlockReturnOfLostItems
133 BlockReturnOfWithdrawnItems
134 CalculateFinesOnReturn
135 AgeRestrictionOverride
136 AllFinesNeedOverride
137 AllowFineOverride
138 AllowItemsOnHoldCheckoutSIP
139 AllowItemsOnHoldCheckoutSCO
140 AllowNotForLoanOverride
141 AllowRenewalLimitOverride
142 AllowReturnToBranch
143 AllowTooManyOverride
144 AutomaticItemReturn
145 AutoRemoveOverduesRestrictions
146 CircControl
147 HomeOrHoldingBranch
148 IssueLostItem
149 IssuingInProcess
150 ManInvInNoissuesCharge
151 OverduesBlockCirc
152 RenewalPeriodBase
153 RenewalSendNotice
154 RentalsInNoissuesCharge
155 ReturnBeforeExpiry
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 PatronAutoComplete
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 LibraryThingForLibrariesEnabled
212 LocalCoverImages
213 OPACLocalCoverImages
214 NovelistSelectEnabled
215 OpenLibraryCovers
216 OpenLibrarySearch
217 SyndeticsEnabled
218 TagsEnabled
219 CalendarFirstDayOfWeek
220 opaclanguagesdisplay
221 AuthoritiesLog
222 BorrowersLog
223 CataloguingLog
224 FinesLog
225 IssueLog
226 LetterLog
227 ReturnLog
228 SubscriptionLog
229 BiblioDefaultView
230 COinSinOPACResults
231 DisplayOPACiconsXSLT
232 hidelostitems
233 HighlightOwnItemsOnOPAC
234 OpacAddMastheadLibraryPulldown
235 OPACDisplay856uAsImage
236 OpacHighlightedWords
237 OpacKohaUrl
238 OpacMaintenance
239 OpacPublic
240 OpacSeparateHoldings
241 OPACShowCheckoutName
242 OpacShowFiltersPulldownMobile
243 OPACShowHoldQueueDetails
244 OpacShowRecentComments
245 OPACShowUnusedAuthorities
246 OpacStarRatings
247 opacthemes
248 OPACURLOpenInNewWindow
249 OpacAuthorities
250 opacbookbag
251 OpacBrowser
252 OpacBrowseResults
253 OpacCloud
254 OPACFinesTab
255 OpacHoldNotes
256 OpacItemLocation
257 OpacPasswordChange
258 OPACPatronDetails
259 OPACpatronimages
260 OPACPopupAuthorsSearch
261 OpacTopissue
262 opacuserlogin
263 QuoteOfTheDay
264 RequestOnOpac
265 reviewson
266 ShowReviewer
267 ShowReviewerPhoto
268 SocialNetworks
269 suggestion
270 AllowPurchaseSuggestionBranchChoice
271 OpacAllowPublicListCreation
272 OpacAllowSharingPrivateLists
273 OpacRenewalAllowed
274 OpacRenewalBranch
275 OPACViewOthersSuggestions
276 SearchMyLibraryFirst
277 AnonSuggestions
278 EnableOpacSearchHistory
279 OPACPrivacy
280 opacreadinghistory
281 TrackClicks
282 PatronSelfRegistration
283 OPACShelfBrowser
284 AutoEmailOpacUser
285 AutoEmailPrimaryAddress
286 autoMemberNum
287 BorrowerRenewalPeriodBase
288 EnableBorrowerFiles
289 EnhancedMessagingPreferences
290 ExtendedPatronAttributes
291 intranetreadinghistory
292 patronimages
293 TalkingTechItivaPhoneNotification
294 uppercasesurnames
295 IncludeSeeFromInSearches
296 OpacGroupResults
297 QueryAutoTruncate
298 QueryFuzzy
299 QueryStemming
300 QueryWeightFields
301 TraceCompleteSubfields
302 TraceSubjectSubdivisions
303 UseICU
304 defaultSortField
305 displayFacetCount
306 OPACdefaultSortField
307 OPACItemsResultsDisplay
308 expandedSearchOption
309 IntranetNumbersPreferPhrase
310 OPACNumbersPreferPhrase
311 opacSerialDefaultTab
312 RenewSerialAddsSuggestion
313 RoutingListAddReserves
314 RoutingSerials
315 SubscriptionHistory
316 Display856uAsImage
317 DisplayIconsXSLT
318 template
319 yuipath
320 HidePatronName
321 intranetbookbag
322 StaffDetailItemSelection
323 viewISBD
324 viewLabeledMARC
325 viewMARC
326 ILS-DI
327 OAI-PMH
328 version
332 $report->{systempreferences}{$_} = C4::Context->preference($_);
334 return $report;
337 =head2 ReportToCommunity
339 ReportToCommunity;
341 Send to hea.koha-community.org database informations
343 =cut
345 sub ReportToCommunity {
346 my $data = shift;
347 my $json = encode_json($data);
349 my $url = "https://hea.koha-community.org/upload.pl";
350 my $ua = LWP::UserAgent->new;
351 my $res = $ua->post(
352 $url,
353 'Content-type' => 'application/json;charset=utf-8',
354 Content => $json,
356 my $content = decode_json( $res->decoded_content );
357 if ( $content->{koha_id} ) {
358 C4::Context->set_preference( 'UsageStatsID', $content->{koha_id} );
360 if ( $content->{id} ) {
361 C4::Context->set_preference( 'UsageStatsPublicID', $content->{id} );
365 =head2 _count
367 $data = _count($table);
369 Count the number of records in $table tables
371 =cut
373 sub _count {
374 my $table = shift;
376 my $dbh = C4::Context->dbh;
377 my $sth = $dbh->prepare("SELECT count(*) from $table");
378 $sth->execute;
379 return $sth->fetchrow_array;