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>.
22 use POSIX qw( strftime );
24 use JSON qw( decode_json encode_json );
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,
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
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
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, };
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.
83 qw/biblio items auth_header old_issues old_reserves borrowers aqorders subscription/
86 $report->{volumetry}{$_} = _count($_);
89 # Get systempreferences.
90 foreach ( @{ _shared_preferences() } )
92 $report->{systempreferences}{$_} = C4::Context->preference($_);
97 =head2 ReportToCommunity
101 Send to hea.koha-community.org database informations
105 sub ReportToCommunity {
107 my $json = encode_json($data);
109 my $url = "https://hea.koha-community.org/upload.pl";
110 my $ua = LWP::UserAgent->new;
113 'Content-type' => 'application/json;charset=utf-8',
116 my $content = decode_json( $res->decoded_content );
117 if ( $content->{koha_id} ) {
118 C4::Context->set_preference( 'UsageStatsID', $content->{koha_id} );
120 if ( $content->{id} ) {
121 C4::Context->set_preference( 'UsageStatsPublicID', $content->{id} );
125 =head2 _shared_preferences
127 my $preferences = C4::UsageStats::_shared_preferences
129 Returns an I<arreyref> with the system preferences to be shared.
133 sub _shared_preferences {
135 my @preferences = qw/
137 AcqWarnOnDuplicateInvoice
154 AutoCreateAuthorities
155 BiblioAddsAuthorities
158 UseAuthoritiesForTracings
161 IntranetBiblioDefaultView
167 DefaultClassificationSource
168 EasyAnalyticalRecords
175 SpineLabelShowPrintOnBibDetails
176 BlockReturnOfLostItems
177 BlockReturnOfWithdrawnItems
178 CalculateFinesOnReturn
179 AgeRestrictionOverride
182 AllowItemsOnHoldCheckoutSIP
183 AllowItemsOnHoldCheckoutSCO
184 AllowNotForLoanOverride
185 AllowRenewalLimitOverride
189 AutoRemoveOverduesRestrictions
194 ManInvInNoissuesCharge
198 RentalsInNoissuesCharge
200 TransfersMaxDaysWarning
201 UseBranchTransferLimits
202 UseTransportCostMatrix
205 FinesIncludeGracePeriod
207 RefundLostOnReturnControl
208 WhenLostChargeReplacementFee
210 AllowHoldDateInFuture
211 AllowHoldItemTypeSelection
212 AllowHoldPolicyOverride
213 AllowHoldsOnDamagedItems
214 AllowHoldsOnPatronsPossessions
215 AutoResumeSuspendedHolds
216 canreservefromotherbranches
217 decreaseLoanHighHolds
218 DisplayMultiPlaceHold
219 emailLibrarianWhenHoldIsPlaced
220 ExpireReservesMaxPickUpDelay
221 OPACAllowHoldDateInFuture
222 OPACAllowUserToChooseBranch
223 ReservesControlBranch
227 TransferWhenCancelAllWaitingHolds
228 AllowAllMessageDeletion
229 AllowOfflineCirculation
231 CircAutoPrintQuickSlip
232 DisplayClearScreenButton
233 FilterBeforeOverdueReport
235 itemBarcodeFallbackSearch
236 itemBarcodeInputFilter
237 previousIssuesDefaultSortOrder
238 RecordLocalUseOnReturn
241 todaysIssuesDefaultSortOrder
242 UpdateTotalIssuesOnCirc
244 WaitingNotifyAtCheckin
250 OPACAmazonCoverImages
255 LibraryThingForLibrariesEnabled
258 NovelistSelectEnabled
263 CalendarFirstDayOfWeek
278 OpacAddMastheadLibraryPulldown
279 OPACDisplay856uAsImage
286 OpacShowFiltersPulldownMobile
287 OPACShowHoldQueueDetails
288 OpacShowRecentComments
289 OPACShowUnusedAuthorities
292 OPACURLOpenInNewWindow
304 OPACPopupAuthorsSearch
314 OpacAllowPublicListCreation
315 OpacAllowSharingPrivateLists
318 OPACViewOthersSuggestions
321 EnableOpacSearchHistory
325 PatronSelfRegistration
328 AutoEmailPrimaryAddress
330 BorrowerRenewalPeriodBase
332 EnhancedMessagingPreferences
333 ExtendedPatronAttributes
334 intranetreadinghistory
336 TalkingTechItivaPhoneNotification
338 IncludeSeeFromInSearches
343 TraceCompleteSubfields
344 TraceSubjectSubdivisions
350 IntranetNumbersPreferPhrase
351 OPACNumbersPreferPhrase
353 RenewSerialAddsSuggestion
354 RoutingListAddReserves
363 StaffDetailItemSelection
372 return \@preferences;
377 $data = _count($table);
379 Count the number of records in $table tables
386 my $dbh = C4::Context->dbh;
387 my $sth = $dbh->prepare("SELECT count(*) from $table");
389 return $sth->fetchrow_array;