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 HighlightOwnItemsOnOPAC
279 OpacAddMastheadLibraryPulldown
280 OPACDisplay856uAsImage
287 OpacShowFiltersPulldownMobile
288 OPACShowHoldQueueDetails
289 OpacShowRecentComments
290 OPACShowUnusedAuthorities
293 OPACURLOpenInNewWindow
305 OPACPopupAuthorsSearch
315 OpacAllowPublicListCreation
316 OpacAllowSharingPrivateLists
319 OPACViewOthersSuggestions
322 EnableOpacSearchHistory
326 PatronSelfRegistration
329 AutoEmailPrimaryAddress
331 BorrowerRenewalPeriodBase
333 EnhancedMessagingPreferences
334 ExtendedPatronAttributes
335 intranetreadinghistory
337 TalkingTechItivaPhoneNotification
339 IncludeSeeFromInSearches
344 TraceCompleteSubfields
345 TraceSubjectSubdivisions
350 OPACItemsResultsDisplay
352 IntranetNumbersPreferPhrase
353 OPACNumbersPreferPhrase
355 RenewSerialAddsSuggestion
356 RoutingListAddReserves
365 StaffDetailItemSelection
374 return \@preferences;
379 $data = _count($table);
381 Count the number of records in $table tables
388 my $dbh = C4::Context->dbh;
389 my $sth = $dbh->prepare("SELECT count(*) from $table");
391 return $sth->fetchrow_array;