X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=admin%2Fsystempreferences.pl;h=d41f2a7a6715e86b10e1e4597d5d2082b4e2d3db;hb=a9ab843118ab4c45734a21b156f8e940542ba0a6;hp=ded82ae141a550e7872cb18a839696a3b88769f1;hpb=40ad4d2129fd276ea8e166c7c48b0107ec98f7df;p=koha_fer diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl index ded82ae141..d41f2a7a67 100755 --- a/admin/systempreferences.pl +++ b/admin/systempreferences.pl @@ -17,13 +17,13 @@ # 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., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# 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. =head1 systempreferences.pl -ALGO : +ALSO : this script use an $op to know what to do. if $op is empty or none of the above values, - the default screen is build (with all records, or filtered datas). @@ -44,6 +44,7 @@ use strict; use warnings; use CGI; +use MIME::Base64; use C4::Auth; use C4::Context; use C4::Koha; @@ -51,321 +52,14 @@ 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{acquisitions} = "Acquisitions"; -$tabsysprefs{gist} = "Acquisitions"; -$tabsysprefs{emailPurchaseSuggestions} = "Acquisitions"; - -# Admin -$tabsysprefs{singleBranchMode} = "Admin"; -$tabsysprefs{staffClientBaseURL} = "Admin"; -$tabsysprefs{Version} = "Admin"; -$tabsysprefs{OpacMaintenance} = "Admin"; -$tabsysprefs{FrameworksLoaded} = "Admin"; -$tabsysprefs{libraryAddress} = "Admin"; -$tabsysprefs{delimiter} = "Admin"; -$tabsysprefs{IndependantBranches} = "Admin"; -$tabsysprefs{insecure} = "Admin"; -$tabsysprefs{KohaAdmin} = "Admin"; -$tabsysprefs{KohaAdminEmailAddress} = "Admin"; -$tabsysprefs{MIME} = "Admin"; -$tabsysprefs{timeout} = "Admin"; -$tabsysprefs{Intranet_includes} = "Admin"; -$tabsysprefs{AutoLocation} = "Admin"; -$tabsysprefs{DebugLevel} = "Admin"; -$tabsysprefs{SessionStorage} = "Admin"; -$tabsysprefs{noItemTypeImages} = "Admin"; -$tabsysprefs{OPACBaseURL} = "Admin"; -$tabsysprefs{GranularPermissions} = "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{marc} = "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{ceilingDueDate} = "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{globalDueDate} = "Circulation"; -$tabsysprefs{holdCancelLength} = "Circulation"; -$tabsysprefs{itemBarcodeInputFilter} = "Circulation"; -$tabsysprefs{WebBasedSelfCheck} = "Circulation"; -$tabsysprefs{CircControl} = "Circulation"; -$tabsysprefs{finesCalendar} = "Circulation"; -$tabsysprefs{previousIssuesDefaultSortOrder} = "Circulation"; -$tabsysprefs{todaysIssuesDefaultSortOrder} = "Circulation"; -$tabsysprefs{HomeOrHoldingBranch} = "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"; - -# Staff Client -$tabsysprefs{TemplateEncoding} = "StaffClient"; -$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{ReadingHistory} = "Patrons"; -$tabsysprefs{BorrowerMandatoryField} = "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'; - -# 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{sortbynonfiling} = "Searching"; -$tabsysprefs{QueryAutoTruncate} = "Searching"; -$tabsysprefs{QueryRemoveStopwords} = "Searching"; -$tabsysprefs{AdvancedSearchTypes} = "Searching"; - -# EnhancedContent -$tabsysprefs{AmazonEnabled} = "EnhancedContent"; -$tabsysprefs{OPACAmazonEnabled} = "EnhancedContent"; -$tabsysprefs{AmazonCoverImages} = "EnhancedContent"; -$tabsysprefs{OPACAmazonCoverImages} = "EnhancedContent"; -$tabsysprefs{AWSAccessKeyID} = "EnhancedContent"; -$tabsysprefs{AWSPrivateKey} = "EnhancedContent"; -$tabsysprefs{AmazonLocale} = "EnhancedContent"; -$tabsysprefs{AmazonAssocTag} = "EnhancedContent"; -$tabsysprefs{AmazonSimilarItems} = "EnhancedContent"; -$tabsysprefs{OPACAmazonSimilarItems} = "EnhancedContent"; -$tabsysprefs{AmazonReviews} = "EnhancedContent"; -$tabsysprefs{OPACAmazonReviews} = "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{PINESISBN} = "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{opacstylesheet} = "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{OPACShelfBrowser} = "OPAC"; -$tabsysprefs{OPACDisplayRequestPriority} = "OPAC"; -$tabsysprefs{OPACAllowHoldDateInFuture} = "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{kohaspsuggest} = "OPAC"; -$tabsysprefs{OpacRenewalAllowed} = "OPAC"; -$tabsysprefs{OPACItemHolds} = "OPAC"; -$tabsysprefs{OPACGroupResults} = "OPAC"; -$tabsysprefs{XSLTDetailsDisplay} = "OPAC"; -$tabsysprefs{XSLTResultsDisplay} = "OPAC"; -$tabsysprefs{OPACShowCheckoutName} = "OPAC"; - -# Serials -$tabsysprefs{OPACSerialIssueDisplayCount} = "Serials"; -$tabsysprefs{StaffSerialIssueDisplayCount} = "Serials"; -$tabsysprefs{OPACDisplayExtendedSubInfo} = "Serials"; -$tabsysprefs{OPACSubscriptionDisplay} = "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"; -$tabsysprefs{'OAI-PMH:Set'} = "OAI-PMH"; -$tabsysprefs{'OAI-PMH:Subset'} = "OAI-PMH"; +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 ); @@ -374,51 +68,25 @@ 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 not in ("; - foreach my $syspref ( keys %tabsysprefs ) { - $strsth .= $dbh->quote($syspref) . ","; - } - $strsth =~ s/,$/) /; - $strsth .= " order by variable"; - $sth = $dbh->prepare($strsth); - $sth->execute(); - } + my $strsth = "Select variable,value,explanation,type,options from systempreferences where variable in ("; + my $first = 1; + for my $name ( get_local_prefs() ) { + $strsth .= ',' unless $first; + $strsth .= "'$name'"; + $first = 0; + } + $strsth .= ") order by variable"; + $sth = $dbh->prepare($strsth); + $sth->execute(); - 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 ); } @@ -438,28 +106,30 @@ sub GetPrefParams { $params->{'prefoptions'} = $data->{'options'}; if ( not defined( $data->{'type'} ) ) { - $params->{'type-free'} = 1; + $params->{'type_free'} = 1; $params->{'fieldlength'} = ( defined( $data->{'options'} ) and $data->{'options'} and $data->{'options'} > 0 ); + } elsif ( $data->{'type'} eq 'Upload' ) { + $params->{'type_upload'} = 1; } elsif ( $data->{'type'} eq 'Choice' ) { - $params->{'type-choice'} = 1; + $params->{'type_choice'} = 1; } elsif ( $data->{'type'} eq 'YesNo' ) { - $params->{'type-yesno'} = 1; + $params->{'type_yesno'} = 1; $data->{'value'} = C4::Context->boolean_preference( $data->{'variable'} ); if ( defined( $data->{'value'} ) and $data->{'value'} eq '1' ) { - $params->{'value-yes'} = 1; + $params->{'value_yes'} = 1; } else { - $params->{'value-no'} = 1; + $params->{'value_no'} = 1; } } elsif ( $data->{'type'} eq 'Integer' || $data->{'type'} eq 'Float' ) { - $params->{'type-free'} = 1; + $params->{'type_free'} = 1; $params->{'fieldlength'} = ( defined( $data->{'options'} ) and $data->{'options'} and $data->{'options'} > 0 ) ? $data->{'options'} : 10; } elsif ( $data->{'type'} eq 'Textarea' ) { - $params->{'type-textarea'} = 1; + $params->{'type_textarea'} = 1; $data->{options} =~ /(.*)\|(.*)/; $params->{'cols'} = $1; $params->{'rows'} = $2; } elsif ( $data->{'type'} eq 'Themes' ) { - $params->{'type-choice'} = 1; + $params->{'type_choice'} = 1; my $type = ''; ( $data->{'variable'} =~ m#opac#i ) ? ( $type = 'opac' ) : ( $type = 'intranet' ); @options = (); @@ -477,7 +147,7 @@ sub GetPrefParams { $counter++; } } elsif ( $data->{'type'} eq 'ClassSources' ) { - $params->{'type-choice'} = 1; + $params->{'type_choice'} = 1; my $type = ''; @options = (); my $sources = GetClassSources(); @@ -514,13 +184,13 @@ sub GetPrefParams { my $languages_loop = getTranslatedLanguages( $interface, $theme, $lang, $currently_selected_languages ); $params->{'languages_loop'} = $languages_loop; - $params->{'type-langselector'} = 1; + $params->{'type_langselector'} = 1; } else { - $params->{'type-free'} = 1; + $params->{'type_free'} = 1; $params->{'fieldlength'} = ( defined( $data->{'options'} ) and $data->{'options'} and $data->{'options'} > 0 ) ? $data->{'options'} : 30; } - if ( $params->{'type-choice'} || $params->{'type-free'} || $params->{'type-yesno'} ) { + if ( $params->{'type_choice'} || $params->{'type_free'} || $params->{'type_yesno'} ) { $params->{'oneline'} = 1; } @@ -541,7 +211,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { parameters => 1 }, + flagsrequired => { parameters => 'parameters_remaining_permissions' }, debug => 1, } ); @@ -607,18 +277,15 @@ if ( $op eq 'update_and_reedit' ) { 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; } @@ -634,7 +301,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 @@ -642,9 +308,8 @@ if ( $op eq 'add_form' ) { } $data->{'lang'} = $template->param('lang'); - - $template->param( GetPrefParams($data) ); - + my $prefparams = GetPrefParams($data); + $template->param( %$prefparams ); $template->param( searchfield => $searchfield ); ################## ADD_VALIDATE ################################## @@ -672,23 +337,27 @@ if ( $op eq 'add_form' ) { $value = $params->{'value'}; } } + + if ( $input->param('preftype') 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\nparam('variable') } . "\">"; + print "Content-Type: text/html\n\n"; exit; ################## DELETE_CONFIRM ################################## # called by default form, used to confirm deletion of data in DB @@ -697,7 +366,6 @@ if ( $op eq 'add_form' ) { my $sth = $dbh->prepare("select variable,value,explanation,type,options from systempreferences where variable=?"); $sth->execute($searchfield); my $data = $sth->fetchrow_hashref; - $sth->finish; $template->param( searchfield => $searchfield, Tvalue => $data->{'value'}, @@ -712,13 +380,12 @@ if ( $op eq 'add_form' ) { $sth->execute($searchfield); my $logstring = $searchfield . " | " . $Tvalue; logaction( 'SYSTEMPREFERENCE', 'DELETE', undef, $logstring ); - $sth->finish; # 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 = (); @@ -730,8 +397,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( "' ); @@ -743,3 +409,79 @@ if ( $op eq 'add_form' ) { $template->param( tab => $tab, ); } #---- END $OP eq DEFAULT output_html_with_http_headers $input, $cookie, $template->output; + + +# Return an array containing all preferences defined in current Koha instance +# .pref files. + +sub get_prefs_from_files { + my $context = C4::Context->new(); + my $path_pref_en = $context->config('intrahtdocs') . + '/prog/en/modules/admin/preferences'; + # Get all .pref file names + opendir ( my $fh, $path_pref_en ); + my @pref_files = grep { /.pref/ } readdir($fh); + close $fh; + + my @names = (); + my $append = sub { + my $prefs = shift; + for my $pref ( @$prefs ) { + for my $element ( @$pref ) { + if ( ref( $element) eq 'HASH' ) { + my $name = $element->{pref}; + next unless $name; + push @names, $name; + next; + } + } + } + }; + for my $file (@pref_files) { + my $pref = LoadFile( "$path_pref_en/$file" ); + for my $tab ( keys %$pref ) { + my $content = $pref->{$tab}; + if ( ref($content) eq 'ARRAY' ) { + $append->($content); + next; + } + for my $section ( keys %$content ) { + my $syspref = $content->{$section}; + $append->($syspref); + } + } + } + return @names; +} + + +# Return an array containg all preferences defined in DB + +sub get_prefs_from_db { + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT variable FROM systempreferences"); + $sth->execute; + my @names = (); + while ( (my $name) = $sth->fetchrow_array ) { + push @names, $name if $name; + } + return @names; +} + + +# Return an array containing all local preferences: those which are defined in +# DB and not defined in Koha .pref files. + +sub get_local_prefs { + my @prefs_file = get_prefs_from_files(); + my @prefs_db = get_prefs_from_db(); + + my %prefs_file = map { lc $_ => 1 } @prefs_file; + my @names = (); + foreach my $name (@prefs_db) { + push @names, $name unless $prefs_file{lc $name}; + } + + return @names; +} +