bug_6624: Added Open Library Search and Read API calls to opac-results.tt and opac...
[koha.git] / C4 / UsageStats.pm
1 package C4::UsageStats;
2
3 # This file is part of Koha.
4 #
5 # Copyright 2014 BibLibre
6 #
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.
11 #
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.
16 #
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>.
19
20 use Modern::Perl;
21 use C4::Context;
22 use POSIX qw(strftime);
23 use LWP::UserAgent;
24 use JSON;
25
26 =head1 NAME
27
28 C4::UsageStats
29
30 =head1 DESCRIPTION
31
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,...
36
37 =head2 NeedUpdate
38
39   $needUpdateYN = C4::UsageStats::NeedUpdate;
40
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 !
44
45 =cut
46
47 sub NeedUpdate {
48     my $lastupdated = C4::Context->preference('UsageStatsLastUpdateTime') || 0;
49     my $now = strftime( "%s", localtime );
50
51     # Need to launch cron.
52     return 1 if $now - $lastupdated >= 2592000;
53
54     # Data don't need to be updated
55     return 0;
56 }
57
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||,
66         },
67     };
68
69     # Get database volumetry.
70     foreach (
71         qw/biblio items auth_header old_issues old_reserves borrowers aqorders subscription/
72       )
73     {
74         $report->{volumetry}{$_} = _count($_);
75     }
76
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         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
328         /
329       )
330     {
331         $report->{systempreferences}{$_} = C4::Context->preference($_);
332     }
333     return $report;
334 }
335
336 =head2 ReportToCommunity
337
338   ReportToCommunity;
339
340 Send to hea.koha-community.org database informations
341
342 =cut
343
344 sub ReportToCommunity {
345     my $data = shift;
346     my $json = encode_json($data);
347
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,
354     );
355     my $content = decode_json( $res->decoded_content );
356     C4::Context->set_preference( 'UsageStatsID',
357         $content->{library}{id} );
358 }
359
360 =head2 _count
361
362   $data = _count($table);
363
364 Count the number of records in $table tables
365
366 =cut
367
368 sub _count {
369     my $table = shift;
370
371     my $dbh = C4::Context->dbh;
372     my $sth = $dbh->prepare("SELECT count(*) from $table");
373     $sth->execute;
374     return $sth->fetchrow_array;
375 }
376
377 1;