X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=admin%2Fsystempreferences.pl;h=b16143f723bbe5ae2aa0d896aceefba6cac2ce2b;hb=56c50a66169f956584050a8630a71cfa7d5984cb;hp=175f6a04815b3594cd202c67b36bdec95c0e2eec;hpb=81ee945a580189e79a268f60d9e7638e92e85f26;p=koha.git diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl index 175f6a0481..b16143f723 100755 --- a/admin/systempreferences.pl +++ b/admin/systempreferences.pl @@ -8,18 +8,18 @@ # # 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. +# 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 . =head1 systempreferences.pl @@ -40,371 +40,24 @@ ALSO : =cut -use strict; -use warnings; +use Modern::Perl; -use CGI; +use CGI qw ( -utf8 ); use MIME::Base64; use C4::Auth; use C4::Context; use C4::Koha; use C4::Languages qw(getTranslatedLanguages); use C4::ClassSource; -use C4::Log; use C4::Output; use YAML::Syck qw( Dump LoadFile ); - -# use Smart::Comments; - -# FIXME, shouldnt we store this stuff in the systempreferences table? - -# FIXME: This uses hash in a backwards way. What we really want is: -# $tabsysprefs{key} = $array_ref; -# like -# $tabsysprefs{Cataloguing} = [qw(autoBarcode ISBD marc ...)]; -# -# Because some things *should* be on more than one tab. -# And the tabname is the unique part (the key). - -my %tabsysprefs; - -# Acquisitions - $tabsysprefs{gist}="Acquisitions"; - $tabsysprefs{emailPurchaseSuggestions}="Acquisitions"; - $tabsysprefs{RenewSerialAddsSuggestion}="Acquisitions"; - $tabsysprefs{AcqCreateItem}="Acquisitions"; - $tabsysprefs{OrderPdfFormat}="Acquisitions"; - $tabsysprefs{CurrencyFormat}="Acquisitions"; - $tabsysprefs{AcqViewBaskets}="Acquisitions"; - -# Admin -$tabsysprefs{singleBranchMode} = "Admin"; -$tabsysprefs{staffClientBaseURL} = "Admin"; -$tabsysprefs{Version} = "Admin"; -$tabsysprefs{OpacMaintenance} = "Admin"; -$tabsysprefs{FrameworksLoaded} = "Admin"; -$tabsysprefs{delimiter} = "Admin"; -$tabsysprefs{IndependantBranches} = "Admin"; -$tabsysprefs{insecure} = "Admin"; -$tabsysprefs{KohaAdmin} = "Admin"; -$tabsysprefs{KohaAdminEmailAddress} = "Admin"; -$tabsysprefs{timeout} = "Admin"; -$tabsysprefs{Intranet_includes} = "Admin"; -$tabsysprefs{AutoLocation} = "Admin"; -$tabsysprefs{DebugLevel} = "Admin"; -$tabsysprefs{SessionStorage} = "Admin"; - -# This script is deprecated so all of these prefs are lumped here to avoid their being displayed in the local use prefs tab - -$tabsysprefs{noItemTypeImages} = "Admin"; -$tabsysprefs{OPACBaseURL} = "Admin"; -$tabsysprefs{AnonymousPatron} = "Admin"; -$tabsysprefs{casAuthentication} = "Admin"; -$tabsysprefs{casLogout} = "Admin"; -$tabsysprefs{casServerUrl} = "Admin"; -$tabsysprefs{Disable_Dictionary} = "Admin"; -$tabsysprefs{EnableOpacSearchHistory} = "Admin"; -$tabsysprefs{Intranetbookbag} = "Admin"; -$tabsysprefs{maxitemsinSearchResults} = "Admin"; -$tabsysprefs{noOPACUserLogin} = "Admin"; -$tabsysprefs{'OAI-PMH:ConfFile'} = "Admin"; -$tabsysprefs{OpacAddMastheadLibraryPulldown} = "Admin"; -$tabsysprefs{opaclargeimage} = "Admin"; -$tabsysprefs{OPACXSLTDetailsDisplay} = "Admin"; -$tabsysprefs{OPACXSLTResultsDisplay} = "Admin"; -$tabsysprefs{PDFFontType} = "Admin"; -$tabsysprefs{PrintNoticesMaxLines} = "Admin"; -$tabsysprefs{ReservesControlBranch} = "Admin"; -$tabsysprefs{ResultsDisplay} = "Admin"; -$tabsysprefs{NoReturnSetLost} = "Admin"; -$tabsysprefs{SearchURL} = "Admin"; -$tabsysprefs{ShowPictures} = "Admin"; -$tabsysprefs{soundon} = "Admin"; -$tabsysprefs{SpineLabelShowPrintOnBibDetails} = "Admin"; -$tabsysprefs{WebBasedSelfCheckHeader} = "Admin"; -$tabsysprefs{WebBasedSelfCheckTimeout} = "Admin"; - -# Authorities -$tabsysprefs{authoritysep} = "Authorities"; -$tabsysprefs{AuthDisplayHierarchy} = "Authorities"; -$tabsysprefs{dontmerge} = "Authorities"; -$tabsysprefs{BiblioAddsAuthorities} = "Authorities"; - -# Cataloguing -$tabsysprefs{advancedMARCeditor} = "Cataloging"; -$tabsysprefs{autoBarcode} = "Cataloging"; -$tabsysprefs{hide_marc} = "Cataloging"; -$tabsysprefs{IntranetBiblioDefaultView} = "Cataloging"; -$tabsysprefs{ISBD} = "Cataloging"; -$tabsysprefs{itemcallnumber} = "Cataloging"; -$tabsysprefs{LabelMARCView} = "Cataloging"; -$tabsysprefs{marcflavour} = "Cataloging"; -$tabsysprefs{MARCOrgCode} = "Cataloging"; -$tabsysprefs{z3950AuthorAuthFields} = "Cataloging"; -$tabsysprefs{z3950NormalizeAuthor} = "Cataloging"; -$tabsysprefs{Stemming} = "Cataloging"; -$tabsysprefs{WeightFields} = "Cataloging"; -$tabsysprefs{NoZebra} = "Cataloging"; -$tabsysprefs{NoZebraIndexes} = "Cataloging"; -$tabsysprefs{ReceiveBackIssues} = "Cataloging"; -$tabsysprefs{DefaultClassificationSource} = "Cataloging"; -$tabsysprefs{RoutingSerials} = "Cataloging"; -$tabsysprefs{'item-level_itypes'} = "Cataloging"; -$tabsysprefs{OpacSuppression} = "Cataloging"; -$tabsysprefs{SpineLabelFormat} = "Cataloging"; -$tabsysprefs{SpineLabelAutoPrint} = "Cataloging"; - -# Circulation -$tabsysprefs{maxoutstanding} = "Circulation"; -$tabsysprefs{maxreserves} = "Circulation"; -$tabsysprefs{noissuescharge} = "Circulation"; -$tabsysprefs{IssuingInProcess} = "Circulation"; -$tabsysprefs{patronimages} = "Circulation"; -$tabsysprefs{printcirculationslips} = "Circulation"; -$tabsysprefs{ReturnBeforeExpiry} = "Circulation"; -$tabsysprefs{SpecifyDueDate} = "Circulation"; -$tabsysprefs{AutomaticItemReturn} = "Circulation"; -$tabsysprefs{ReservesMaxPickUpDelay} = "Circulation"; -$tabsysprefs{TransfersMaxDaysWarning} = "Circulation"; -$tabsysprefs{useDaysMode} = "Circulation"; -$tabsysprefs{ReservesNeedReturns} = "Circulation"; -$tabsysprefs{CircAutocompl} = "Circulation"; -$tabsysprefs{AllowRenewalLimitOverride} = "Circulation"; -$tabsysprefs{canreservefromotherbranches} = "Circulation"; -$tabsysprefs{finesMode} = "Circulation"; -$tabsysprefs{numReturnedItemsToShow} = "Circulation"; -$tabsysprefs{emailLibrarianWhenHoldIsPlaced} = "Circulation"; -$tabsysprefs{itemBarcodeInputFilter} = "Circulation"; -$tabsysprefs{WebBasedSelfCheck} = "Circulation"; -$tabsysprefs{ShowPatronImageInWebBasedSelfCheck} = "Circulation"; -$tabsysprefs{CircControl} = "Circulation"; -$tabsysprefs{finesCalendar} = "Circulation"; -$tabsysprefs{previousIssuesDefaultSortOrder} = "Circulation"; -$tabsysprefs{todaysIssuesDefaultSortOrder} = "Circulation"; -$tabsysprefs{HomeOrHoldingBranch} = "Circulation"; -$tabsysprefs{HomeOrHoldingBranchReturn} = "Circulation"; -$tabsysprefs{RandomizeHoldsQueueWeight} = "Circulation"; -$tabsysprefs{StaticHoldsQueueWeight} = "Circulation"; -$tabsysprefs{AllowOnShelfHolds} = "Circulation"; -$tabsysprefs{AllowHoldsOnDamagedItems} = "Circulation"; -$tabsysprefs{UseBranchTransferLimits} = "Circulation"; -$tabsysprefs{AllowHoldPolicyOverride} = "Circulation"; -$tabsysprefs{BranchTransferLimitsType} = "Circulation"; -$tabsysprefs{AllowNotForLoanOverride} = "Circulation"; -$tabsysprefs{RenewalPeriodBase} = "Circulation"; -$tabsysprefs{FilterBeforeOverdueReport} = "Circulation"; -$tabsysprefs{AllowHoldDateInFuture} = "Circulation"; -$tabsysprefs{OPACFineNoRenewals} = "Circulation"; -$tabsysprefs{InProcessingToShelvingCart} = "Circulation"; -$tabsysprefs{NewItemsDefaultLocation} = "Circulation"; -$tabsysprefs{ReturnToShelvingCart} = "Circulation"; -$tabsysprefs{DisplayClearScreenButton} = "Circulation"; -$tabsysprefs{AllowAllMessageDeletion} = "Circulation"; -$tabsysprefs{OverdueNoticeBcc} = "Circulation"; -$tabsysprefs{OverduesBlockCirc} = "Circulation"; -$tabsysprefs{UseTransportCostMatrix} = "Circulation"; -$tabsysprefs{AllowReturnToBranch} = "Circulation"; - -# Staff Client -$tabsysprefs{template} = "StaffClient"; -$tabsysprefs{intranetstylesheet} = "StaffClient"; -$tabsysprefs{IntranetNav} = "StaffClient"; -$tabsysprefs{intranetcolorstylesheet} = "StaffClient"; -$tabsysprefs{intranetuserjs} = "StaffClient"; -$tabsysprefs{yuipath} = "StaffClient"; -$tabsysprefs{IntranetmainUserblock} = "StaffClient"; -$tabsysprefs{viewMARC} = "StaffClient"; -$tabsysprefs{viewLabeledMARC} = "StaffClient"; -$tabsysprefs{viewISBD} = "StaffClient"; - -# Patrons -$tabsysprefs{autoMemberNum} = "Patrons"; -$tabsysprefs{checkdigit} = "Patrons"; -$tabsysprefs{intranetreadinghistory} = "Patrons"; -$tabsysprefs{NotifyBorrowerDeparture} = "Patrons"; -$tabsysprefs{memberofinstitution} = "Patrons"; -$tabsysprefs{BorrowerMandatoryField} = "Patrons"; -$tabsysprefs{BorrowerUnwantedField} = "Patrons"; -$tabsysprefs{borrowerRelationship} = "Patrons"; -$tabsysprefs{BorrowersTitles} = "Patrons"; -$tabsysprefs{patronimages} = "Patrons"; -$tabsysprefs{minPasswordLength} = "Patrons"; -$tabsysprefs{uppercasesurnames} = "Patrons"; -$tabsysprefs{MaxFine} = "Patrons"; -$tabsysprefs{NotifyBorrowerDeparture} = "Patrons"; -$tabsysprefs{AddPatronLists} = "Patrons"; -$tabsysprefs{PatronsPerPage} = "Patrons"; -$tabsysprefs{ExtendedPatronAttributes} = "Patrons"; -$tabsysprefs{AutoEmailOpacUser} = "Patrons"; -$tabsysprefs{AutoEmailPrimaryAddress} = "Patrons"; -$tabsysprefs{EnhancedMessagingPreferences} = "Patrons"; -$tabsysprefs{'SMSSendDriver'} = 'Patrons'; -$tabsysprefs{HidePatronName} = "Patrons"; - - -# I18N/L10N -$tabsysprefs{dateformat} = "I18N/L10N"; -$tabsysprefs{opaclanguages} = "I18N/L10N"; -$tabsysprefs{opaclanguagesdisplay} = "I18N/L10N"; -$tabsysprefs{language} = "I18N/L10N"; - -# Searching -$tabsysprefs{defaultSortField} = "Searching"; -$tabsysprefs{defaultSortOrder} = "Searching"; -$tabsysprefs{numSearchResults} = "Searching"; -$tabsysprefs{OPACdefaultSortField} = "Searching"; -$tabsysprefs{OPACdefaultSortOrder} = "Searching"; -$tabsysprefs{OPACItemsResultsDisplay} = "Searching"; -$tabsysprefs{OPACnumSearchResults} = "Searching"; -$tabsysprefs{QueryFuzzy} = "Searching"; -$tabsysprefs{QueryStemming} = "Searching"; -$tabsysprefs{QueryWeightFields} = "Searching"; -$tabsysprefs{expandedSearchOption} = "Searching"; -$tabsysprefs{QueryAutoTruncate} = "Searching"; -$tabsysprefs{QueryRemoveStopwords} = "Searching"; -$tabsysprefs{AdvancedSearchTypes} = "Searching"; -$tabsysprefs{DisplayMultiPlaceHold} = "Searching"; - -# EnhancedContent -$tabsysprefs{AmazonCoverImages} = "EnhancedContent"; -$tabsysprefs{OPACAmazonCoverImages} = "EnhancedContent"; -$tabsysprefs{AmazonLocale} = "EnhancedContent"; -$tabsysprefs{AmazonAssocTag} = "EnhancedContent"; - -# Babelthèque -$tabsysprefs{Babeltheque} = "EnhancedContent"; - -# Baker & Taylor -$tabsysprefs{BakerTaylorBookstoreURL} = 'EnhancedContent'; -$tabsysprefs{BakerTaylorEnabled} = 'EnhancedContent'; -$tabsysprefs{BakerTaylorPassword} = 'EnhancedContent'; -$tabsysprefs{BakerTaylorUsername} = 'EnhancedContent'; - -# Library Thing for Libraries -$tabsysprefs{LibraryThingForLibrariesID} = "EnhancedContent"; -$tabsysprefs{LibraryThingForLibrariesEnabled} = "EnhancedContent"; -$tabsysprefs{LibraryThingForLibrariesTabbedView} = "EnhancedContent"; - -# Syndetics -$tabsysprefs{SyndeticsClientCode} = 'EnhancedContent'; -$tabsysprefs{SyndeticsEnabled} = 'EnhancedContent'; -$tabsysprefs{SyndeticsCoverImages} = 'EnhancedContent'; -$tabsysprefs{SyndeticsTOC} = 'EnhancedContent'; -$tabsysprefs{SyndeticsSummary} = 'EnhancedContent'; -$tabsysprefs{SyndeticsEditions} = 'EnhancedContent'; -$tabsysprefs{SyndeticsExcerpt} = 'EnhancedContent'; -$tabsysprefs{SyndeticsReviews} = 'EnhancedContent'; -$tabsysprefs{SyndeticsAuthorNotes} = 'EnhancedContent'; -$tabsysprefs{SyndeticsAwards} = 'EnhancedContent'; -$tabsysprefs{SyndeticsSeries} = 'EnhancedContent'; -$tabsysprefs{SyndeticsCoverImageSize} = 'EnhancedContent'; - - -# FRBR -$tabsysprefs{FRBRizeEditions} = "EnhancedContent"; -$tabsysprefs{XISBN} = "EnhancedContent"; -$tabsysprefs{OCLCAffiliateID} = "EnhancedContent"; -$tabsysprefs{XISBNDailyLimit} = "EnhancedContent"; -$tabsysprefs{ThingISBN} = "EnhancedContent"; -$tabsysprefs{OPACFRBRizeEditions} = "EnhancedContent"; - -# Tags -$tabsysprefs{TagsEnabled} = 'EnhancedContent'; -$tabsysprefs{TagsExternalDictionary} = 'EnhancedContent'; -$tabsysprefs{TagsInputOnDetail} = 'EnhancedContent'; -$tabsysprefs{TagsInputOnList} = 'EnhancedContent'; -$tabsysprefs{TagsShowOnDetail} = 'EnhancedContent'; -$tabsysprefs{TagsShowOnList} = 'EnhancedContent'; -$tabsysprefs{TagsModeration} = 'EnhancedContent'; -$tabsysprefs{GoogleJackets} = 'EnhancedContent'; -$tabsysprefs{AuthorisedValueImages} = "EnhancedContent"; - -# OPAC -$tabsysprefs{BiblioDefaultView} = "OPAC"; -$tabsysprefs{LibraryName} = "OPAC"; -$tabsysprefs{opaccolorstylesheet} = "OPAC"; -$tabsysprefs{opaccredits} = "OPAC"; -$tabsysprefs{opaclayoutstylesheet} = "OPAC"; -$tabsysprefs{OpacNav} = "OPAC"; -$tabsysprefs{opacsmallimage} = "OPAC"; -$tabsysprefs{opacthemes} = "OPAC"; -$tabsysprefs{opacuserjs} = "OPAC"; -$tabsysprefs{opacheader} = "OPAC"; -$tabsysprefs{hideBiblioNumber} = "OPAC"; -$tabsysprefs{OpacMainUserBlock} = "OPAC"; -$tabsysprefs{OPACURLOpenInNewWindow} = "OPAC"; -$tabsysprefs{OPACUserCSS} = "OPAC"; -$tabsysprefs{OPACHighlightedWords} = "OPAC"; -$tabsysprefs{OPACViewOthersSuggestions} = "OPAC"; -$tabsysprefs{URLLinkText} = "OPAC"; -$tabsysprefs{OPACSearchForTitleIn} = "OPAC"; -$tabsysprefs{OPACShelfBrowser} = "OPAC"; -$tabsysprefs{OPACShowHoldQueueDetails} = "OPAC"; -$tabsysprefs{OPACAllowHoldDateInFuture} = "OPAC"; -$tabsysprefs{OPACPatronDetails} = "OPAC"; -$tabsysprefs{OPACFinesTab} = "OPAC"; -$tabsysprefs{DisplayOPACiconsXSLT} = "OPAC"; -$tabsysprefs{AutoSelfCheckAllowed} = "OPAC"; -$tabsysprefs{AutoSelfCheckID} = "OPAC"; -$tabsysprefs{AutoSelfCheckPass} = "OPAC"; - -# OPAC -$tabsysprefs{SearchMyLibraryFirst} = "OPAC"; -$tabsysprefs{hidelostitems} = "OPAC"; -$tabsysprefs{opacbookbag} = "OPAC"; -$tabsysprefs{OpacPasswordChange} = "OPAC"; -$tabsysprefs{opacreadinghistory} = "OPAC"; -$tabsysprefs{virtualshelves} = "OPAC"; -$tabsysprefs{RequestOnOpac} = "OPAC"; -$tabsysprefs{reviewson} = "OPAC"; -$tabsysprefs{OpacTopissues} = "OPAC"; -$tabsysprefs{OpacAuthorities} = "OPAC"; -$tabsysprefs{OpacCloud} = "OPAC"; -$tabsysprefs{opacuserlogin} = "OPAC"; -$tabsysprefs{AnonSuggestions} = "OPAC"; -$tabsysprefs{suggestion} = "OPAC"; -$tabsysprefs{OpacTopissue} = "OPAC"; -$tabsysprefs{OpacBrowser} = "OPAC"; -$tabsysprefs{OpacRenewalAllowed} = "OPAC"; -$tabsysprefs{OPACItemHolds} = "OPAC"; -$tabsysprefs{OPACGroupResults} = "OPAC"; -$tabsysprefs{XSLTDetailsDisplay} = "OPAC"; -$tabsysprefs{XSLTResultsDisplay} = "OPAC"; -$tabsysprefs{OPACShowCheckoutName} = "OPAC"; -$tabsysprefs{AllowPurchaseSuggestionBranchChoice} = "OPAC"; - -# Serials -$tabsysprefs{RoutingListAddReserves} = "Serials"; -$tabsysprefs{OPACSerialIssueDisplayCount} = "Serials"; -$tabsysprefs{StaffSerialIssueDisplayCount} = "Serials"; -$tabsysprefs{RenewSerialAddsSuggestion} = "Serials"; -$tabsysprefs{SubscriptionHistory} = "Serials"; - -# LOGFeatures -$tabsysprefs{CataloguingLog} = "Logs"; -$tabsysprefs{BorrowersLog} = "Logs"; -$tabsysprefs{SubscriptionLog} = "Logs"; -$tabsysprefs{IssueLog} = "Logs"; -$tabsysprefs{ReturnLog} = "Logs"; -$tabsysprefs{LetterLog} = "Logs"; -$tabsysprefs{FinesLog} = "Logs"; - -# OAI-PMH variables -$tabsysprefs{'OAI-PMH'} = "OAI-PMH"; -$tabsysprefs{'OAI-PMH:archiveID'} = "OAI-PMH"; -$tabsysprefs{'OAI-PMH:MaxCount'} = "OAI-PMH"; - -# ILS-DI variables -$tabsysprefs{'ILS-DI'} = "ILS-DI"; -$tabsysprefs{'ILS-DI:AuthorizedIPs'} = "Admin"; - -# Creator variables - -$tabsysprefs{'ImageLimit'} = "Creators"; +my %tabsysprefs; #we do no longer need to keep track of a tab per pref (yaml) sub StringSearch { - my ( $searchstring, $type ) = @_; + my ( $searchstring, $tab ) = @_; + return (0,[]) if $tab ne 'local_use'; + my $dbh = C4::Context->dbh; $searchstring =~ s/\'/\\\'/g; my @data = split( ' ', $searchstring ); @@ -413,53 +66,27 @@ sub StringSearch { my $cnt = 0; my $sth; - # used for doing a plain-old sys-pref search - if ( $type && $type ne 'all' ) { - foreach my $syspref ( sort { lc $a cmp lc $b } keys %tabsysprefs ) { - if ( $tabsysprefs{$syspref} eq $type ) { - my $sth = $dbh->prepare("Select variable,value,explanation,type,options from systempreferences where (variable like ?) order by variable"); - $sth->execute($syspref); - while ( my $data = $sth->fetchrow_hashref ) { - $data->{shortvalue} = $data->{value}; - $data->{shortvalue} = substr( $data->{value}, 0, 60 ) . "..." if defined( $data->{value} ) and length( $data->{value} ) > 60; - push( @results, $data ); - $cnt++; - } - $sth->finish; - } - } - } else { - my $sth; - - if ( $type and $type eq 'all' ) { - $sth = $dbh->prepare( " - SELECT * - FROM systempreferences - WHERE variable LIKE ? OR explanation LIKE ? - ORDER BY VARIABLE" ); - $sth->execute( "%$searchstring%", "%$searchstring%" ); - } else { - my $strsth = "Select variable,value,explanation,type,options from systempreferences where variable in ("; - my $first = 1; - for my $name ( get_local_prefs() ) { + my $strsth = "Select variable,value,explanation,type,options from systempreferences where variable in ("; + my $first = 1; + my @sql_bind; + for my $name ( get_local_prefs() ) { $strsth .= ',' unless $first; - $strsth .= "'$name'"; + $strsth .= "?"; + push(@sql_bind,$name); $first = 0; - } - $strsth .= ") order by variable"; - $sth = $dbh->prepare($strsth); - $sth->execute(); - } + } + $strsth .= ") order by variable"; + $sth = $dbh->prepare($strsth); + $sth->execute(@sql_bind); - while ( my $data = $sth->fetchrow_hashref ) { + while ( my $data = $sth->fetchrow_hashref ) { + unless (defined $data->{value}) { $data->{value} = "";} $data->{shortvalue} = $data->{value}; $data->{shortvalue} = substr( $data->{value}, 0, 60 ) . "..." if length( $data->{value} ) > 60; push( @results, $data ); $cnt++; - } - - $sth->finish; } + return ( $cnt, \@results ); } @@ -501,6 +128,11 @@ sub GetPrefParams { $data->{options} =~ /(.*)\|(.*)/; $params->{'cols'} = $1; $params->{'rows'} = $2; + } elsif ( $data->{'type'} eq 'Htmlarea' ) { + $params->{'type_htmlarea'} = 1; + $data->{options} =~ /(.*)\|(.*)/; + $params->{'cols'} = $1; + $params->{'rows'} = $2; } elsif ( $data->{'type'} eq 'Themes' ) { $params->{'type_choice'} = 1; my $type = ''; @@ -580,7 +212,7 @@ my $offset = $input->param('offset') || 0; my $script_name = "/cgi-bin/koha/admin/systempreferences.pl"; my ( $template, $borrowernumber, $cookie ) = get_template_and_user( - { template_name => "admin/systempreferences.tmpl", + { template_name => "admin/systempreferences.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -642,27 +274,8 @@ if ( $op eq 'update_and_reedit' ) { ); # we show only the TMPL_VAR names $op } } - my $dbh = C4::Context->dbh; - my $query = "select * from systempreferences where variable=?"; - my $sth = $dbh->prepare($query); - $sth->execute( $input->param('variable') ); - if ( $sth->rows ) { - unless ( C4::Context->config('demo') ) { - my $sth = $dbh->prepare("update systempreferences set value=?,explanation=?,type=?,options=? where variable=?"); - $sth->execute( $value, $input->param('explanation'), $input->param('variable'), $input->param('preftype'), $input->param('prefoptions') ); - $sth->finish; - logaction( 'SYSTEMPREFERENCE', 'MODIFY', undef, $input->param('variable') . " | " . $value ); - } - } else { - unless ( C4::Context->config('demo') ) { - my $sth = $dbh->prepare("insert into systempreferences (variable,value,explanation) values (?,?,?,?,?)"); - $sth->execute( $input->param('variable'), $input->param('value'), $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions') ); - $sth->finish; - logaction( 'SYSTEMPREFERENCE', 'ADD', undef, $input->param('variable') . " | " . $input->param('value') ); - } - } - $sth->finish; - + my $variable = $input->param('variable'); + C4::Context->set_preference($variable, $value); } ################## ADD_FORM ################################## @@ -677,7 +290,6 @@ if ( $op eq 'add_form' ) { my $sth = $dbh->prepare("select variable,value,explanation,type,options from systempreferences where variable=?"); $sth->execute($searchfield); $data = $sth->fetchrow_hashref; - $sth->finish; $template->param( modify => 1 ); # save tab to return to if user cancels edit @@ -692,13 +304,14 @@ if ( $op eq 'add_form' ) { ################## ADD_VALIDATE ################################## # called by add_form, used to insert/modify data in DB } elsif ( $op eq 'add_validate' ) { - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("select * from systempreferences where variable=?"); - $sth->execute( $input->param('variable') ); - # to handle multiple values my $value; + my $variable = $input->param('variable'); + my $expl = $input->param('explanation'); + my $type = $input->param('preftype'); + my $options = $input->param('prefoptions'); + # handle multiple value strings (separated by ',') my $params = $input->Vars; if ( defined $params->{'value'} ) { @@ -715,59 +328,34 @@ if ( $op eq 'add_form' ) { } } - if ( $input->param('preftype') eq 'Upload' ) { + if ( $type eq 'Upload' ) { my $lgtfh = $input->upload('value'); $value = join '', <$lgtfh>; $value = encode_base64($value); } - if ( $sth->rows ) { - unless ( C4::Context->config('demo') ) { - my $sth = $dbh->prepare("update systempreferences set value=?,explanation=?,type=?,options=? where variable=?"); - $sth->execute( $value, $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'), $input->param('variable') ); - $sth->finish; - logaction( 'SYSTEMPREFERENCE', 'MODIFY', undef, $input->param('variable') . " | " . $value ); - } - } else { - unless ( C4::Context->config('demo') ) { - my $sth = $dbh->prepare("insert into systempreferences (variable,value,explanation,type,options) values (?,?,?,?,?)"); - $sth->execute( $input->param('variable'), $value, $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions') ); - $sth->finish; - logaction( 'SYSTEMPREFERENCE', 'ADD', undef, $input->param('variable') . " | " . $value ); - } - } - $sth->finish; - print "Content-Type: text/html\n\n"; + C4::Context->set_preference( $variable, $value, $expl, $type, $options ); + print $input->redirect("/cgi-bin/koha/admin/systempreferences.pl?tab="); exit; ################## DELETE_CONFIRM ################################## # called by default form, used to confirm deletion of data in DB } elsif ( $op eq 'delete_confirm' ) { - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("select variable,value,explanation,type,options from systempreferences where variable=?"); - $sth->execute($searchfield); - my $data = $sth->fetchrow_hashref; - $sth->finish; + my $value = C4::Context->preference($searchfield); $template->param( searchfield => $searchfield, - Tvalue => $data->{'value'}, + Tvalue => $value, ); # END $OP eq DELETE_CONFIRM ################## DELETE_CONFIRMED ################################## # called by delete_confirm, used to effectively confirm deletion of data in DB } elsif ( $op eq 'delete_confirmed' ) { - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("delete from systempreferences where variable=?"); - $sth->execute($searchfield); - my $logstring = $searchfield . " | " . $Tvalue; - logaction( 'SYSTEMPREFERENCE', 'DELETE', undef, $logstring ); - $sth->finish; - + C4::Context->delete_preference($searchfield); # END $OP eq DELETE_CONFIRMED ################## DEFAULT ################################## } else { # DEFAULT #Adding tab management for system preferences - my $tab = $input->param('tab'); + my $tab = $input->param('tab')||'local_use'; $template->param( $tab => 1 ); my ( $count, $results ) = StringSearch( $searchfield, $tab ); my @loop_data = (); @@ -779,8 +367,7 @@ if ( $op eq 'add_form' ) { $row_data->{delete} = "$script_name?op=delete_confirm&searchfield=" . $results->[$i]{'variable'}; push( @loop_data, $row_data ); } - $tab = ( $tab ? $tab : "local_use" ); - $template->param( loop => \@loop_data, $tab => 1 ); + $template->param( loop => \@loop_data ); if ( $offset > 0 ) { my $prevpage = $offset - $pagesize; $template->param( "' ); @@ -803,7 +390,7 @@ sub get_prefs_from_files { '/prog/en/modules/admin/preferences'; # Get all .pref file names opendir ( my $fh, $path_pref_en ); - my @pref_files = grep { /.pref/ } readdir($fh); + my @pref_files = grep { /.pref$/ } readdir($fh); close $fh; my @names = (); @@ -859,10 +446,10 @@ sub get_local_prefs { my @prefs_file = get_prefs_from_files(); my @prefs_db = get_prefs_from_db(); - my %prefs_file = map { $_ => 1 } @prefs_file; + my %prefs_file = map { lc $_ => 1 } @prefs_file; my @names = (); foreach my $name (@prefs_db) { - push @names, $name unless $prefs_file{$name}; + push @names, $name unless $prefs_file{lc $name}; } return @names;