Bug 7143: Update about page for new dev - Pongtawat Chippimolchai
[koha.git] / C4 / UsageStats.pm
blob678b84570f0159bd25559e0f753e30fbeeb0eae3
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 virtualshelves
104 AutoLocation
105 IndependentBranches
106 SessionStorage
107 Persona
108 AuthDisplayHierarchy
109 AutoCreateAuthorities
110 BiblioAddsAuthorities
111 AuthorityMergeLimit
112 AuthorityMergeMode
113 UseAuthoritiesForTracings
114 CatalogModuleRelink
115 hide_marc
116 IntranetBiblioDefaultView
117 LabelMARCView
118 OpacSuppression
119 SeparateHoldings
120 UseControlNumber
121 advancedMARCeditor
122 DefaultClassificationSource
123 EasyAnalyticalRecords
124 autoBarcode
125 item-level_itypes
126 marcflavour
127 PrefillItem
128 z3950NormalizeAuthor
129 SpineLabelAutoPrint
130 SpineLabelShowPrintOnBibDetails
131 BlockReturnOfLostItems
132 BlockReturnOfWithdrawnItems
133 CalculateFinesOnReturn
134 AgeRestrictionOverride
135 AllFinesNeedOverride
136 AllowFineOverride
137 AllowItemsOnHoldCheckout
138 AllowItemsOnHoldCheckoutSCO
139 AllowNotForLoanOverride
140 AllowRenewalLimitOverride
141 AllowReturnToBranch
142 AllowTooManyOverride
143 AutomaticItemReturn
144 AutoRemoveOverduesRestrictions
145 CircControl
146 HomeOrHoldingBranch
147 InProcessingToShelvingCart
148 IssueLostItem
149 IssuingInProcess
150 ManInvInNoissuesCharge
151 OverduesBlockCirc
152 RenewalPeriodBase
153 RenewalSendNotice
154 RentalsInNoissuesCharge
155 ReturnBeforeExpiry
156 ReturnToShelvingCart
157 TransfersMaxDaysWarning
158 UseBranchTransferLimits
159 useDaysMode
160 UseTransportCostMatrix
161 UseCourseReserves
162 finesCalendar
163 FinesIncludeGracePeriod
164 finesMode
165 RefundLostOnReturnControl
166 WhenLostChargeReplacementFee
167 WhenLostForgiveFine
168 AllowHoldDateInFuture
169 AllowHoldPolicyOverride
170 AllowHoldsOnDamagedItems
171 AllowHoldsOnPatronsPossessions
172 AutoResumeSuspendedHolds
173 canreservefromotherbranches
174 decreaseLoanHighHolds
175 DisplayMultiPlaceHold
176 emailLibrarianWhenHoldIsPlaced
177 ExpireReservesMaxPickUpDelay
178 OPACAllowHoldDateInFuture
179 OPACAllowUserToChooseBranch
180 ReservesControlBranch
181 ReservesNeedReturns
182 SuspendHoldsIntranet
183 SuspendHoldsOpac
184 TransferWhenCancelAllWaitingHolds
185 AllowAllMessageDeletion
186 AllowOfflineCirculation
187 CircAutocompl
188 CircAutoPrintQuickSlip
189 DisplayClearScreenButton
190 FilterBeforeOverdueReport
191 FineNotifyAtCheckin
192 itemBarcodeFallbackSearch
193 itemBarcodeInputFilter
194 previousIssuesDefaultSortOrder
195 RecordLocalUseOnReturn
196 AudioAlerts
197 SpecifyDueDate
198 todaysIssuesDefaultSortOrder
199 UpdateTotalIssuesOnCirc
200 UseTablesortForCirc
201 WaitingNotifyAtCheckin
202 AllowSelfCheckReturns
203 AutoSelfCheckAllowed
204 FRBRizeEditions
205 OPACFRBRizeEditions
206 AmazonCoverImages
207 OPACAmazonCoverImages
208 Babeltheque
209 BakerTaylorEnabled
210 GoogleJackets
211 HTML5MediaEnabled
212 IDreamBooksReadometer
213 IDreamBooksResults
214 IDreamBooksReviews
215 LibraryThingForLibrariesEnabled
216 LocalCoverImages
217 OPACLocalCoverImages
218 NovelistSelectEnabled
219 XISBN
220 OpenLibraryCovers
221 OpenLibrarySearch
222 UseKohaPlugins
223 SyndeticsEnabled
224 TagsEnabled
225 CalendarFirstDayOfWeek
226 opaclanguagesdisplay
227 AuthoritiesLog
228 BorrowersLog
229 CataloguingLog
230 FinesLog
231 IssueLog
232 LetterLog
233 ReturnLog
234 SubscriptionLog
235 BiblioDefaultView
236 COinSinOPACResults
237 DisplayOPACiconsXSLT
238 hidelostitems
239 HighlightOwnItemsOnOPAC
240 OpacAddMastheadLibraryPulldown
241 OPACDisplay856uAsImage
242 OpacHighlightedWords
243 OpacKohaUrl
244 OpacMaintenance
245 OpacPublic
246 OpacSeparateHoldings
247 OPACShowCheckoutName
248 OpacShowFiltersPulldownMobile
249 OPACShowHoldQueueDetails
250 OpacShowRecentComments
251 OPACShowUnusedAuthorities
252 OpacStarRatings
253 opacthemes
254 OPACURLOpenInNewWindow
255 OpacAuthorities
256 opacbookbag
257 OpacBrowser
258 OpacBrowseResults
259 OpacCloud
260 OPACFinesTab
261 OpacHoldNotes
262 OpacItemLocation
263 OpacPasswordChange
264 OPACPatronDetails
265 OPACpatronimages
266 OPACPopupAuthorsSearch
267 OpacTopissue
268 opacuserlogin
269 QuoteOfTheDay
270 RequestOnOpac
271 reviewson
272 ShowReviewer
273 ShowReviewerPhoto
274 SocialNetworks
275 suggestion
276 AllowPurchaseSuggestionBranchChoice
277 OpacAllowPublicListCreation
278 OpacAllowSharingPrivateLists
279 OpacRenewalAllowed
280 OpacRenewalBranch
281 OPACViewOthersSuggestions
282 SearchMyLibraryFirst
283 AnonSuggestions
284 EnableOpacSearchHistory
285 OPACPrivacy
286 opacreadinghistory
287 TrackClicks
288 PatronSelfRegistration
289 OPACShelfBrowser
290 AutoEmailOpacUser
291 AutoEmailPrimaryAddress
292 autoMemberNum
293 BorrowerRenewalPeriodBase
294 checkdigit
295 EnableBorrowerFiles
296 EnhancedMessagingPreferences
297 ExtendedPatronAttributes
298 intranetreadinghistory
299 patronimages
300 TalkingTechItivaPhoneNotification
301 uppercasesurnames
302 IncludeSeeFromInSearches
303 OpacGroupResults
304 QueryAutoTruncate
305 QueryFuzzy
306 QueryStemming
307 QueryWeightFields
308 TraceCompleteSubfields
309 TraceSubjectSubdivisions
310 UseICU
311 UseQueryParser
312 defaultSortField
313 displayFacetCount
314 OPACdefaultSortField
315 OPACItemsResultsDisplay
316 expandedSearchOption
317 IntranetNumbersPreferPhrase
318 OPACNumbersPreferPhrase
319 opacSerialDefaultTab
320 RenewSerialAddsSuggestion
321 RoutingListAddReserves
322 RoutingSerials
323 SubscriptionHistory
324 Display856uAsImage
325 DisplayIconsXSLT
326 template
327 yuipath
328 HidePatronName
329 intranetbookbag
330 StaffDetailItemSelection
331 viewISBD
332 viewLabeledMARC
333 viewMARC
334 ILS-DI
335 OAI-PMH
336 version
340 $report->{systempreferences}{$_} = C4::Context->preference($_);
342 return $report;
345 =head2 ReportToCommunity
347 ReportToCommunity;
349 Send to hea.koha-community.org database informations
351 =cut
353 sub ReportToCommunity {
354 my $data = shift;
355 my $json = encode_json($data);
357 my $url = "https://hea.koha-community.org/upload.pl";
358 my $ua = LWP::UserAgent->new;
359 my $res = $ua->post(
360 $url,
361 'Content-type' => 'application/json;charset=utf-8',
362 Content => $json,
364 my $content = decode_json( $res->decoded_content );
365 if ( $content->{koha_id} ) {
366 C4::Context->set_preference( 'UsageStatsID', $content->{koha_id} );
368 if ( $content->{id} ) {
369 C4::Context->set_preference( 'UsageStatsPublicID', $content->{id} );
373 =head2 _count
375 $data = _count($table);
377 Count the number of records in $table tables
379 =cut
381 sub _count {
382 my $table = shift;
384 my $dbh = C4::Context->dbh;
385 my $sth = $dbh->prepare("SELECT count(*) from $table");
386 $sth->execute;
387 return $sth->fetchrow_array;