@@ -, +, @@ --- C4/UsageStats.pm | 610 ++++++++++----------- installer/data/mysql/sysprefs.sql | 8 +- installer/data/mysql/updatedatabase.pl | 14 +- .../prog/en/modules/admin/preferences/admin.pref | 21 +- misc/cronjobs/share_usage_with_koha_community.pl | 98 ++++ 5 files changed, 410 insertions(+), 341 deletions(-) create mode 100644 misc/cronjobs/share_usage_with_koha_community.pl --- a/C4/UsageStats.pm +++ a/C4/UsageStats.pm @@ -1,25 +1,23 @@ package UsageStats; -# Copyright 2000-2003 Katipo Communications -# Copyright 2010 BibLibre -# Parts Copyright 2010 Catalyst IT -# # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Copyright 2014 BibLibre +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . -use strict; +use Modern::Perl; use C4::Context; use POSIX qw(strftime); use LWP::UserAgent; @@ -35,13 +33,6 @@ hea.koha-community.org is the server that centralize Koha setups informations Koha libraries are encouraged to provide informations about their collections, their structure,... -This package is normally only called by a cronjob, like -0 3 1 * * export KOHA_CONF=/home/koha/etc/koha-conf.xml; export PERL5LIB=/home/koha/src; perl /home/koha/src/C4/UsageStats.pm - -IMPORTANT : please do NOT run the cron on the 1st, but on another day. The idea is to avoid all -Koha libraries sending their data at the same time ! So choose any day between 1 and 28 ! - - =head2 NeedUpdate $needUpdateYN = C4::UsageStats::NeedUpdate; @@ -59,42 +50,15 @@ sub NeedUpdate { # Need to launch cron. return 1 if $now - $lastupdated >= 2592000; - # Cron no need to be launched. + # Data don't need to be updated return 0; } -=head2 LaunchCron - - LaunchCron(); - -Compute results and send them to the centralized server - -=cut - -sub LaunchCron { - if (!C4::Context->preference('UsageStatsShare')) { - die ("UsageStats is not configured"); - } - if (NeedUpdate) { - C4::Context->set_preference('UsageStatsLastUpdateTime', strftime("%s", localtime)); - my $data = BuildReport(); - ReportToCommunity($data); - } -} - -=head2 Builreport - - BuildReport(); - -retrieve some database volumety and systempreferences that will be sent to hea server - -=cut - sub BuildReport { my $report = { - 'library' => { - 'name' => C4::Context->preference('UsageStatsLibraryName'), - 'id' => C4::Context->preference('UsageStatsID') || 0, + library => { + name => C4::Context->preference('UsageStatsLibraryName') || q||, + id => C4::Context->preference('UsageStatsID') || 0, }, }; @@ -104,257 +68,262 @@ sub BuildReport { } # Get systempreferences. - foreach (qw/ AcqCreateItem - AcqWarnOnDuplicateInvoice - AcqViewBaskets - BasketConfirmations - OrderPdfFormat - casAuthentication - casLogout - AllowPkiAuth - DebugLevel - delimiter - noItemTypeImages - virtualshelves - AutoLocation - IndependentBranches - SessionStorage - Persona - AuthDisplayHierarchy - AutoCreateAuthorities - BiblioAddsAuthorities - dontmerge - UseAuthoritiesForTracings - CatalogModuleRelink - hide_marc - IntranetBiblioDefaultView - LabelMARCView - OpacSuppression - SeparateHoldings - UseControlNumber - advancedMARCeditor - DefaultClassificationSource - EasyAnalyticalRecords - autoBarcode - item-level_itypes - marcflavour - PrefillItem - z3950NormalizeAuthor - SpineLabelAutoPrint - SpineLabelShowPrintOnBibDetails - BlockReturnOfWithdrawnItems - CalculateFinesOnReturn - AgeRestrictionOverride - AllFinesNeedOverride - AllowFineOverride - AllowItemsOnHoldCheckout - AllowNotForLoanOverride - AllowRenewalLimitOverride - AllowReturnToBranch - AllowTooManyOverride - AutomaticItemReturn - AutoRemoveOverduesRestrictions - CircControl - HomeOrHoldingBranch - HomeOrHoldingBranchReturn - InProcessingToShelvingCart - IssueLostItem - IssuingInProcess - ManInvInNoissuesCharge - OverduesBlockCirc - RenewalPeriodBase - RenewalSendNotice - RentalsInNoissuesCharge - ReturnBeforeExpiry - ReturnToShelvingCart - TransfersMaxDaysWarning - UseBranchTransferLimits - useDaysMode - UseTransportCostMatrix - UseCourseReserves - finesCalendar - FinesIncludeGracePeriod - finesMode - RefundLostItemFeeOnReturn - WhenLostChargeReplacementFee - WhenLostForgiveFine - AllowHoldDateInFuture - AllowHoldPolicyOverride - AllowHoldsOnDamagedItems - AllowHoldsOnPatronsPossessions - AllowOnShelfHolds - AutoResumeSuspendedHolds - canreservefromotherbranches - decreaseLoanHighHolds - DisplayMultiPlaceHold - emailLibrarianWhenHoldIsPlaced - ExpireReservesMaxPickUpDelay - OPACAllowHoldDateInFuture - OPACAllowUserToChooseBranch - ReservesControlBranch - ReservesNeedReturns - SuspendHoldsIntranet - SuspendHoldsOpac - TransferWhenCancelAllWaitingHolds - AllowAllMessageDeletion - AllowOfflineCirculation - CircAutocompl - CircAutoPrintQuickSlip - DisplayClearScreenButton - FilterBeforeOverdueReport - FineNotifyAtCheckin - itemBarcodeFallbackSearch - itemBarcodeInputFilter - previousIssuesDefaultSortOrder - RecordLocalUseOnReturn - soundon - SpecifyDueDate - todaysIssuesDefaultSortOrder - UpdateTotalIssuesOnCirc - UseTablesortForCirc - WaitingNotifyAtCheckin - AllowSelfCheckReturns - AutoSelfCheckAllowed - FRBRizeEditions - OPACFRBRizeEditions - AmazonCoverImages - OPACAmazonCoverImages - Babeltheque - BakerTaylorEnabled - GoogleJackets - HTML5MediaEnabled - IDreamBooksReadometer - IDreamBooksResults - IDreamBooksReviews - LibraryThingForLibrariesEnabled - LocalCoverImages - OPACLocalCoverImages - NovelistSelectEnabled - XISBN - OpenLibraryCovers - UseKohaPlugins - SyndeticsEnabled - TagsEnabled - CalendarFirstDayOfWeek - opaclanguagesdisplay - AuthoritiesLog - BorrowersLog - CataloguingLog - FinesLog - IssueLog - LetterLog - ReturnLog - SubscriptionLog - AuthorisedValueImages - BiblioDefaultView - COinSinOPACResults - DisplayOPACiconsXSLT - hidelostitems - HighlightOwnItemsOnOPAC - OpacAddMastheadLibraryPulldown - OPACDisplay856uAsImage - OpacHighlightedWords - OpacKohaUrl - OpacMaintenance - OpacPublic - OpacSeparateHoldings - OPACShowBarcode - OPACShowCheckoutName - OpacShowFiltersPulldownMobile - OPACShowHoldQueueDetails - OpacShowLibrariesPulldownMobile - OpacShowRecentComments - OPACShowUnusedAuthorities - OpacStarRatings - opacthemes - OPACURLOpenInNewWindow - OpacAuthorities - opacbookbag - OpacBrowser - OpacBrowseResults - OpacCloud - OPACFinesTab - OpacHoldNotes - OpacItemLocation - OpacPasswordChange - OPACPatronDetails - OPACpatronimages - OPACPopupAuthorsSearch - OpacTopissue - opacuserlogin - QuoteOfTheDay - RequestOnOpac - reviewson - ShowReviewer - ShowReviewerPhoto - SocialNetworks - suggestion - AllowPurchaseSuggestionBranchChoice - OpacAllowPublicListCreation - OpacAllowSharingPrivateLists - OPACItemHolds - OpacRenewalAllowed - OpacRenewalBranch - OPACViewOthersSuggestions - SearchMyLibraryFirst - singleBranchMode - AnonSuggestions - EnableOpacSearchHistory - OPACPrivacy - opacreadinghistory - TrackClicks - PatronSelfRegistration - OPACShelfBrowser - AddPatronLists - AutoEmailOpacUser - AutoEmailPrimaryAddress - autoMemberNum - BorrowerRenewalPeriodBase - checkdigit - EnableBorrowerFiles - EnhancedMessagingPreferences - ExtendedPatronAttributes - intranetreadinghistory - memberofinstitution - patronimages - TalkingTechItivaPhoneNotification - uppercasesurnames - IncludeSeeFromInSearches - OpacGroupResults - QueryAutoTruncate - QueryFuzzy - QueryStemming - QueryWeightFields - TraceCompleteSubfields - TraceSubjectSubdivisions - UseICU - UseQueryParser - defaultSortField - displayFacetCount - OPACdefaultSortField - OPACItemsResultsDisplay - expandedSearchOption - IntranetNumbersPreferPhrase - OPACNumbersPreferPhrase - opacSerialDefaultTab - RenewSerialAddsSuggestion - RoutingListAddReserves - RoutingSerials - SubscriptionHistory - Display856uAsImage - DisplayIconsXSLT - StaffAuthorisedValueImages - template - yuipath - HidePatronName - intranetbookbag - StaffDetailItemSelection - viewISBD - viewLabeledMARC - viewMARC - ILS-DI - OAI-PMH - version/) { + foreach ( + qw/ + AcqCreateItem + AcqWarnOnDuplicateInvoice + AcqViewBaskets + BasketConfirmations + OrderPdfFormat + casAuthentication + casLogout + AllowPkiAuth + DebugLevel + delimiter + noItemTypeImages + virtualshelves + AutoLocation + IndependentBranches + SessionStorage + Persona + AuthDisplayHierarchy + AutoCreateAuthorities + BiblioAddsAuthorities + dontmerge + UseAuthoritiesForTracings + CatalogModuleRelink + hide_marc + IntranetBiblioDefaultView + LabelMARCView + OpacSuppression + SeparateHoldings + UseControlNumber + advancedMARCeditor + DefaultClassificationSource + EasyAnalyticalRecords + autoBarcode + item-level_itypes + marcflavour + PrefillItem + z3950NormalizeAuthor + SpineLabelAutoPrint + SpineLabelShowPrintOnBibDetails + BlockReturnOfWithdrawnItems + CalculateFinesOnReturn + AgeRestrictionOverride + AllFinesNeedOverride + AllowFineOverride + AllowItemsOnHoldCheckout + AllowNotForLoanOverride + AllowRenewalLimitOverride + AllowReturnToBranch + AllowTooManyOverride + AutomaticItemReturn + AutoRemoveOverduesRestrictions + CircControl + HomeOrHoldingBranch + HomeOrHoldingBranchReturn + InProcessingToShelvingCart + IssueLostItem + IssuingInProcess + ManInvInNoissuesCharge + OverduesBlockCirc + RenewalPeriodBase + RenewalSendNotice + RentalsInNoissuesCharge + ReturnBeforeExpiry + ReturnToShelvingCart + TransfersMaxDaysWarning + UseBranchTransferLimits + useDaysMode + UseTransportCostMatrix + UseCourseReserves + finesCalendar + FinesIncludeGracePeriod + finesMode + RefundLostItemFeeOnReturn + WhenLostChargeReplacementFee + WhenLostForgiveFine + AllowHoldDateInFuture + AllowHoldPolicyOverride + AllowHoldsOnDamagedItems + AllowHoldsOnPatronsPossessions + AllowOnShelfHolds + AutoResumeSuspendedHolds + canreservefromotherbranches + decreaseLoanHighHolds + DisplayMultiPlaceHold + emailLibrarianWhenHoldIsPlaced + ExpireReservesMaxPickUpDelay + OPACAllowHoldDateInFuture + OPACAllowUserToChooseBranch + ReservesControlBranch + ReservesNeedReturns + SuspendHoldsIntranet + SuspendHoldsOpac + TransferWhenCancelAllWaitingHolds + AllowAllMessageDeletion + AllowOfflineCirculation + CircAutocompl + CircAutoPrintQuickSlip + DisplayClearScreenButton + FilterBeforeOverdueReport + FineNotifyAtCheckin + itemBarcodeFallbackSearch + itemBarcodeInputFilter + previousIssuesDefaultSortOrder + RecordLocalUseOnReturn + soundon + SpecifyDueDate + todaysIssuesDefaultSortOrder + UpdateTotalIssuesOnCirc + UseTablesortForCirc + WaitingNotifyAtCheckin + AllowSelfCheckReturns + AutoSelfCheckAllowed + FRBRizeEditions + OPACFRBRizeEditions + AmazonCoverImages + OPACAmazonCoverImages + Babeltheque + BakerTaylorEnabled + GoogleJackets + HTML5MediaEnabled + IDreamBooksReadometer + IDreamBooksResults + IDreamBooksReviews + LibraryThingForLibrariesEnabled + LocalCoverImages + OPACLocalCoverImages + NovelistSelectEnabled + XISBN + OpenLibraryCovers + UseKohaPlugins + SyndeticsEnabled + TagsEnabled + CalendarFirstDayOfWeek + opaclanguagesdisplay + AuthoritiesLog + BorrowersLog + CataloguingLog + FinesLog + IssueLog + LetterLog + ReturnLog + SubscriptionLog + AuthorisedValueImages + BiblioDefaultView + COinSinOPACResults + DisplayOPACiconsXSLT + hidelostitems + HighlightOwnItemsOnOPAC + OpacAddMastheadLibraryPulldown + OPACDisplay856uAsImage + OpacHighlightedWords + OpacKohaUrl + OpacMaintenance + OpacPublic + OpacSeparateHoldings + OPACShowBarcode + OPACShowCheckoutName + OpacShowFiltersPulldownMobile + OPACShowHoldQueueDetails + OpacShowLibrariesPulldownMobile + OpacShowRecentComments + OPACShowUnusedAuthorities + OpacStarRatings + opacthemes + OPACURLOpenInNewWindow + OpacAuthorities + opacbookbag + OpacBrowser + OpacBrowseResults + OpacCloud + OPACFinesTab + OpacHoldNotes + OpacItemLocation + OpacPasswordChange + OPACPatronDetails + OPACpatronimages + OPACPopupAuthorsSearch + OpacTopissue + opacuserlogin + QuoteOfTheDay + RequestOnOpac + reviewson + ShowReviewer + ShowReviewerPhoto + SocialNetworks + suggestion + AllowPurchaseSuggestionBranchChoice + OpacAllowPublicListCreation + OpacAllowSharingPrivateLists + OPACItemHolds + OpacRenewalAllowed + OpacRenewalBranch + OPACViewOthersSuggestions + SearchMyLibraryFirst + singleBranchMode + AnonSuggestions + EnableOpacSearchHistory + OPACPrivacy + opacreadinghistory + TrackClicks + PatronSelfRegistration + OPACShelfBrowser + AddPatronLists + AutoEmailOpacUser + AutoEmailPrimaryAddress + autoMemberNum + BorrowerRenewalPeriodBase + checkdigit + EnableBorrowerFiles + EnhancedMessagingPreferences + ExtendedPatronAttributes + intranetreadinghistory + memberofinstitution + patronimages + TalkingTechItivaPhoneNotification + uppercasesurnames + IncludeSeeFromInSearches + OpacGroupResults + QueryAutoTruncate + QueryFuzzy + QueryStemming + QueryWeightFields + TraceCompleteSubfields + TraceSubjectSubdivisions + UseICU + UseQueryParser + defaultSortField + displayFacetCount + OPACdefaultSortField + OPACItemsResultsDisplay + expandedSearchOption + IntranetNumbersPreferPhrase + OPACNumbersPreferPhrase + opacSerialDefaultTab + RenewSerialAddsSuggestion + RoutingListAddReserves + RoutingSerials + SubscriptionHistory + Display856uAsImage + DisplayIconsXSLT + StaffAuthorisedValueImages + template + yuipath + HidePatronName + intranetbookbag + StaffDetailItemSelection + viewISBD + viewLabeledMARC + viewMARC + ILS-DI + OAI-PMH + version + / + ) + { $report->{systempreferences}{$_} = C4::Context->preference($_); } return $report; @@ -369,16 +338,18 @@ Send to hea.koha-community.org database informations =cut sub ReportToCommunity { - my $data = shift; - my $json = uri_encode(to_json($data), 1); - - my $ua = LWP::UserAgent->new; - my $req = HTTP::Request->new(POST => "http://hea.koha-community.org/upload.pl"); - $req->content_type('application/x-www-form-urlencoded'); - $req->content("data=$json"); - my $res = $ua->request($req); - my $content = from_json($res->decoded_content); - C4::Context->set_preference('UsageStatsID', $content->{library}{library_id}); + my $data = shift; + my $json = uri_encode( to_json($data), 1 ); + + my $ua = LWP::UserAgent->new; + my $req = + HTTP::Request->new( POST => "http://hea.koha-community.org/upload.pl" ); + $req->content_type('application/x-www-form-urlencoded'); + $req->content("data=$json"); + my $res = $ua->request($req); + my $content = from_json( $res->decoded_content ); + C4::Context->set_preference( 'UsageStatsID', + $content->{library}{library_id} ); } =head2 _count @@ -390,13 +361,12 @@ Count the number of records in $table tables =cut sub _count { - my $table = shift; + my $table = shift; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("SELECT count(*) from $table"); - $sth->execute; - return $sth->fetchrow_array; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT count(*) from $table"); + $sth->execute; + return $sth->fetchrow_array; } -&LaunchCron; 1; --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -419,10 +419,10 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('UpdateTotalIssuesOnCirc','0',NULL,'Whether to update the totalissues field in the biblio on each circ.','YesNo'), ('uppercasesurnames','0',NULL,'If ON, surnames are converted to upper case in patron entry form','YesNo'), ('URLLinkText','',NULL,'Text to display as the link anchor in the OPAC','free'), -('UsageStatsLastUpdateTime', '', '', '', 'Free'), -('UsageStatsID', '', '', '', 'Free'), -('UsageStatsShare', 'no', '0|1|2', 'Tell if you want to share you data volumetry with koha community. You can be anonymous', 'Choice'), -('UsageStatsLibraryName', '', '', 'Your library name shown on koha community site. Can be disabled with UsageStatsShare system preference.', 'Free'), +('UsageStatsID', '', 'This pref is part of Koha but it should not be deleted or updated manually.', '', 'Free'), +('UsageStatsLastUpdateTime', '', 'This pref is part of Koha but it should not be deleted or updated manually.', '', 'Free'), +('UsageStatsLibraryName', '', 'The library name to show on hea Koha community website', NULL, 'YesNo'), +('UsageStatsShare', 0, 'Share data volumetry with Koha community (HEA).', NULL, 'YesNo'), ('UseAuthoritiesForTracings','1','0','Use authority record numbers for subject tracings instead of heading strings.','YesNo'), ('UseBranchTransferLimits','0','','If ON, Koha will will use the rules defined in branch_transfer_limits to decide if an item transfer should be allowed.','YesNo'), ('UseControlNumber','0','','If ON, record control number (w subfields) and control number (001) are used for linking of bibliographic records.','YesNo'), --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -8707,11 +8707,15 @@ if ( CheckVersion($DBversion) ) { $DBversion = "3.17.00.XXX"; if ( CheckVersion($DBversion) ) { - $dbh->do("INSERT INTO systempreferences VALUES ('UsageStatsLastUpdateTime', '', '', '', 'Free');"); - $dbh->do("INSERT INTO systempreferences VALUES ('UsageStatsID', '', '', '', 'Free');"); - $dbh->do("INSERT INTO systempreferences VALUES ('UsageStatsShare', 'no', '0|1|2', 'Tell if you want to share you data volumetry with koha community. You can be anonymous', 'Choice');"); - $dbh->do("INSERT INTO systempreferences VALUES ('UsageStatsLibraryName', '', '', 'Your library name shown on koha community site. Can be disabled with UsageStatsShare system preference.', 'Free');"); - print "Upgrade to $DBversion done (Bug 11926: Setup basic config for community usage koha statistics)\n"; + $dbh->do(q| + INSERT INTO systempreferences (variable, value, explanation, options, type ) + VALUES + ('UsageStatsID', '', 'This pref is part of Koha but it should not be deleted or updated manually.', '', 'Free'), + ('UsageStatsLastUpdateTime', '', 'This pref is part of Koha but it should not be deleted or updated manually.', '', 'Free'), + ('UsageStatsLibraryName', '', 'The library name to show on hea Koha community website', NULL, 'YesNo'), + ('UsageStatsShare', 0, 'Share data volumetry with Koha community (HEA).', NULL, 'YesNo') + |); + print "Upgrade to $DBversion done (Bug 11926: Add UsageStats systempreferences (HEA))\n"; SetVersion ($DBversion); } --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref @@ -115,18 +115,15 @@ Administration: - is the search engine used. Usage Stats: - - - pref: UsageStatsLastUpdateTime - default: 0 - - stores the last time when cron were launch - - - - pref: UsageStatsID - default: - - - - - pref: UsageStatsShare - default: - - + default: 0 + choices: + yes: Share + no: "Don't share" + - data volumetry with Koha community. You can see the data on the Hea Koha community website. - + - The library name - pref: UsageStatsLibraryName - default: - - + - will be shown on Hea Koha community website. + - If this name is empty, you will sent data anonymously + - Note that this value has no effect if UsageStatsShare system preference is set to "Don't share" --- a/misc/cronjobs/share_usage_with_koha_community.pl +++ a/misc/cronjobs/share_usage_with_koha_community.pl @@ -0,0 +1,98 @@ +#!/usr/bin/perl + +use Modern::Perl; + +use Pod::Usage; +use Getopt::Long; + +use C4::Context; +use C4::UsageStats; + + +my ( $help, $verbose ); +GetOptions( + 'h|help' => \$help, + 'v|verbose' => \$verbose, +) || pod2usage(1); + +if ($help) { + pod2usage(1); +} + +unless( C4::Context->preference('UsageStatsShare') ) { + pod2usage (q|The UsageStats system preference is not set. If your library wants to share their usage statistics with the Koha community, you have to switch on this system preference|); + exit 1; +} + +my $need_update = C4::UsageStats::NeedUpdate(); + +if ( $need_update ) { + say "Data need to be updated" if $verbose; + my $report = C4::UsageStats::BuildReport(); + C4::UsageStats::ReportToCommunity($report); + C4::Context->set_preference('UsageStatsLastUpdateTime', strftime("%s", localtime)); +} elsif( $verbose ) { + say "Data don't need to be updated"; +} + +=head1 NAME + +share_usage_with_koha_community.pl - Share your library's usage with the Koha community + +=head1 SYNOPSIS + +share_usage_with_koha_community.pl [-h|--help] [-v|--verbose] + +If the UsageStatsShare system preference is set, you can launch this script to share your usage with the Koha community. + +Collecting Koha usage statistics will help developpers to know how Koha is used across the world. + +This script will sent the volumetry for the biblio and authority records, issues, reserves, orders and subscription. + +Only the total number is retrieved. In no case private data will be shared! + +In order to know which parts of Koha modules are used, this script will collect some system preference values. + +If you want to tell us who you are, you can fill the UsageStatsLibraryName system preference with your library name. + +All these data will be analysed on the http://hea.koha-community.org Koha community website. + +IMPORTANT : please do NOT run the cron on the 1st, but on another day. The idea is to avoid all +Koha libraries sending their data at the same time ! So choose any day between 1 and 28 ! + +=head1 OPTIONS + +=over + +=item B<-h|--help> + +Print a brief help message + +=item B<-v|--verbose> + +Verbose mode. + +=back + +=head1 AUTHOR + +Alex Arnaud + +Jonathan Druart + +=head1 COPYRIGHT + +Copyright 2014 BibLibre + +=head1 LICENSE + +This file is part of Koha. + +Koha is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software +Foundation; either version 3 of the License, or (at your option) any later version. + +You should have received a copy of the GNU General Public License along +with Koha; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +=cut --