Bug 16089: Acquisitions -> Invoice broken by Bug 15084
[koha.git] / C4 / UsageStats.pm
blobba97fef39c089fe1da900be8107c792fd91291c3
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 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 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 StaffAuthorisedValueImages
316 template
317 yuipath
318 HidePatronName
319 intranetbookbag
320 StaffDetailItemSelection
321 viewISBD
322 viewLabeledMARC
323 viewMARC
324 ILS-DI
325 OAI-PMH
326 version
330 $report->{systempreferences}{$_} = C4::Context->preference($_);
332 return $report;
335 =head2 ReportToCommunity
337 ReportToCommunity;
339 Send to hea.koha-community.org database informations
341 =cut
343 sub ReportToCommunity {
344 my $data = shift;
345 my $json = encode_json($data);
347 my $url = "http://hea.koha-community.org/upload.pl";
348 my $ua = LWP::UserAgent->new;
349 my $res = $ua->post(
350 $url,
351 'Content-type' => 'application/json;charset=utf-8',
352 Content => $json,
354 my $content = decode_json( $res->decoded_content );
355 C4::Context->set_preference( 'UsageStatsID',
356 $content->{library}{id} );
359 =head2 _count
361 $data = _count($table);
363 Count the number of records in $table tables
365 =cut
367 sub _count {
368 my $table = shift;
370 my $dbh = C4::Context->dbh;
371 my $sth = $dbh->prepare("SELECT count(*) from $table");
372 $sth->execute;
373 return $sth->fetchrow_array;