Re-structuring shelf browser markup for improved robustness; Including GoogleJackets...
[koha.git] / admin / systempreferences.pl
index f3986ad..76a08d2 100755 (executable)
@@ -45,16 +45,24 @@ use CGI;
 use C4::Auth;
 use C4::Context;
 use C4::Koha;
-use C4::Languages;
+use C4::Languages qw(getTranslatedLanguages);
 use C4::ClassSource;
+use C4::Log;
 use C4::Output;
-use C4::Context;
 
 # 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";
@@ -68,10 +76,8 @@ my %tabsysprefs;
     $tabsysprefs{OpacMaintenance}="Admin";
     $tabsysprefs{FrameworksLoaded}="Admin";
     $tabsysprefs{libraryAddress}="Admin";
-    $tabsysprefs{dateformat}="Admin";
     $tabsysprefs{delimiter}="Admin";
     $tabsysprefs{IndependantBranches}="Admin";
-    $tabsysprefs{HomeOrHoldingBranch}="Admin";
     $tabsysprefs{insecure}="Admin";
     $tabsysprefs{KohaAdmin}="Admin";
     $tabsysprefs{KohaAdminEmailAddress}="Admin";
@@ -82,6 +88,8 @@ my %tabsysprefs;
     $tabsysprefs{DebugLevel}="Admin";
     $tabsysprefs{SessionStorage}="Admin";
     $tabsysprefs{noItemTypeImages}="Admin";
+    $tabsysprefs{OPACBaseURL}="Admin";
+    $tabsysprefs{GranularPermissions}="Admin";
 
 # Authorities
     $tabsysprefs{authoritysep}="Authorities";
@@ -98,7 +106,6 @@ my %tabsysprefs;
     $tabsysprefs{LabelMARCView}="Cataloguing";
     $tabsysprefs{marc}="Cataloguing";
     $tabsysprefs{marcflavour}="Cataloguing";
-    $tabsysprefs{serialsadditems}="Cataloguing";
     $tabsysprefs{MARCOrgCode}="Cataloguing";
     $tabsysprefs{z3950AuthorAuthFields}="Cataloguing";
     $tabsysprefs{z3950NormalizeAuthor}="Cataloguing";
@@ -138,6 +145,7 @@ my %tabsysprefs;
     $tabsysprefs{finesCalendar}="Circulation";
     $tabsysprefs{previousIssuesDefaultSortOrder}="Circulation";
     $tabsysprefs{todaysIssuesDefaultSortOrder}="Circulation";
+    $tabsysprefs{HomeOrHoldingBranch}="Circulation";
 
 # Staff Client
     $tabsysprefs{TemplateEncoding}="StaffClient";
@@ -150,7 +158,7 @@ my %tabsysprefs;
     $tabsysprefs{IntranetmainUserblock}="StaffClient";
     
 # Patrons
-    $tabsysprefs{automembernum}="Patrons";
+    $tabsysprefs{autoMemberNum}="Patrons";
     $tabsysprefs{checkdigit}="Patrons";
     $tabsysprefs{intranetreadinghistory}="Patrons";
     $tabsysprefs{NotifyBorrowerDeparture}="Patrons";
@@ -165,21 +173,13 @@ my %tabsysprefs;
     $tabsysprefs{NoReturnSetLost}="Patrons";
     $tabsysprefs{MaxFine}="Patrons";
     $tabsysprefs{NotifyBorrowerDeparture}="Patrons";
-
-# FRBR
-    $tabsysprefs{FRBRizeEditions}="FRBR";
-    $tabsysprefs{XISBN}="FRBR";
-    $tabsysprefs{OCLCAffiliateID}="FRBR";
-    $tabsysprefs{XISBNDailyLimit}="FRBR";
-    $tabsysprefs{PINESISBN}="FRBR";
-    $tabsysprefs{ThingISBN}="FRBR";
-    $tabsysprefs{OPACFRBRizeEditions}="FRBR";
-    $tabsysprefs{XISBNAmazonSimilarItems}="FRBR";
+    $tabsysprefs{PatronsPerPage}="Patrons";
 
 # I18N/L10N
     $tabsysprefs{dateformat}="I18N/L10N";
     $tabsysprefs{opaclanguages}="I18N/L10N";
     $tabsysprefs{opacthemes}="I18N/L10N";
+    $tabsysprefs{language}="I18N/L10N";
 
 # Searching
     $tabsysprefs{defaultSortField}="Searching";
@@ -195,14 +195,41 @@ my %tabsysprefs;
     $tabsysprefs{QueryWeightFields}="Searching";
     $tabsysprefs{expandedSearchOption}="Searching";
     $tabsysprefs{sortbynonfiling}="Searching";
-
+    $tabsysprefs{QueryAutoTruncate}="Searching";
+    $tabsysprefs{QueryRemoveStopwords}="Searching";
+
+# EnhancedContent
+   $tabsysprefs{AmazonContent}="EnhancedContent";
+   $tabsysprefs{AWSAccessKeyID}="EnhancedContent";
+   $tabsysprefs{AmazonLocale}="EnhancedContent";
+   $tabsysprefs{AmazonAssocTag}="EnhancedContent";
+   $tabsysprefs{AmazonSimilarItems}="EnhancedContent";
+   $tabsysprefs{OPACAmazonContent}="EnhancedContent";
+   $tabsysprefs{OPACAmazonSimilarItems}="EnhancedContent";
+# Baker & Taylor 
+   $tabsysprefs{BakerTaylorBookstoreURL} = 'EnhancedContent';
+   $tabsysprefs{BakerTaylorEnabled}      = 'EnhancedContent';
+   $tabsysprefs{BakerTaylorPassword}     = 'EnhancedContent';
+   $tabsysprefs{BakerTaylorUsername}     = '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';
 
 # OPAC
-    $tabsysprefs{AmazonAssocTag}="OPAC";
-    $tabsysprefs{AmazonSimilarItems}="OPAC";
-    $tabsysprefs{AmazonContent}="OPAC";
-    $tabsysprefs{OPACAmazonContent}="OPAC";
-    $tabsysprefs{AmazonDevKey}="OPAC";
     $tabsysprefs{BiblioDefaultView}="OPAC";
     $tabsysprefs{LibraryName}="OPAC";
     $tabsysprefs{opaccolorstylesheet}="OPAC";
@@ -216,8 +243,6 @@ my %tabsysprefs;
     $tabsysprefs{opacuserjs}="OPAC";
     $tabsysprefs{SubscriptionHistory}="OPAC";
     $tabsysprefs{opacheader}="OPAC";
-    $tabsysprefs{OPACAmazonSimilarItems}="OPAC";
-    $tabsysprefs{OPACXISBNAmazonSimilarItems}="OPAC";
 
     $tabsysprefs{hideBiblioNumber}="OPAC";
     $tabsysprefs{noOPACUserLogin}="OPAC";
@@ -226,39 +251,49 @@ my %tabsysprefs;
     $tabsysprefs{OPACSubscriptionDisplay}="OPAC";
     $tabsysprefs{OPACURLOpenInNewWindow}="OPAC";
     $tabsysprefs{OPACUserCSS}="OPAC";
+    $tabsysprefs{OPACHighlightedWords}="OPAC";
     $tabsysprefs{OPACViewOthersSuggestions}="OPAC";
     $tabsysprefs{URLLinkText}="OPAC";
+    $tabsysprefs{OPACShelfBrowser}="OPAC";
 
-# OPACFeatures
-    $tabsysprefs{SearchMyLibraryFirst}="OPACFeatures";
-    $tabsysprefs{Disable_Dictionary}="OPACFeatures";
-    $tabsysprefs{hidelostitems}="OPACFeatures";
-    $tabsysprefs{opacbookbag}="OPACFeatures";
-    $tabsysprefs{opaclanguagesdisplay}="OPACFeatures";
-    $tabsysprefs{OpacPasswordChange}="OPACFeatures";
-    $tabsysprefs{opacreadinghistory}="OPACFeatures";
-    $tabsysprefs{virtualshelves}="OPACFeatures";
-    $tabsysprefs{RequestOnOpac}="OPACFeatures";
-    $tabsysprefs{reviewson}="OPACFeatures";
-    $tabsysprefs{OpacTopissues}="OPACFeatures";
-    $tabsysprefs{OpacAuthorities}="OPACFeatures";
-    $tabsysprefs{OpacCloud}="OPACFeatures";
-    $tabsysprefs{opacuserlogin}="OPACFeatures";
-    $tabsysprefs{AnonSuggestions}="OPACFeatures";
-    $tabsysprefs{suggestion}="OPACFeatures";
-    $tabsysprefs{OpacTopissue}="OPACFeatures";
-    $tabsysprefs{OpacBrowser}="OPACFeatures";
-    $tabsysprefs{kohaspsuggest} = "OPACFeatures";
+# OPAC
+    $tabsysprefs{SearchMyLibraryFirst}="OPAC";
+    $tabsysprefs{Disable_Dictionary}="OPAC";
+    $tabsysprefs{hidelostitems}="OPAC";
+    $tabsysprefs{opacbookbag}="OPAC";
+    $tabsysprefs{opaclanguagesdisplay}="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";
 
 # LOGFeatures
-    $tabsysprefs{CataloguingLog}  = "LOGFeatures";
-    $tabsysprefs{BorrowersLog}    = "LOGFeatures";
-    $tabsysprefs{SubscriptionLog} = "LOGFeatures";
-    $tabsysprefs{IssueLog}        = "LOGFeatures";
-    $tabsysprefs{ReturnLog}       = "LOGFeatures";
-    $tabsysprefs{LetterLog}       = "LOGFeatures";
-    $tabsysprefs{FinesLog}        = "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";
+
 sub StringSearch  {
     my ($searchstring,$type)=@_;
     my $dbh = C4::Context->dbh;
@@ -318,8 +353,9 @@ sub StringSearch  {
 }
 
 my $input = new CGI;
-my $searchfield=$input->param('searchfield');
-my $offset=$input->param('offset');
+my $searchfield = $input->param('searchfield');
+my $Tvalue = $input->param('Tvalue');
+my $offset = $input->param('offset');
 my $script_name="/cgi-bin/koha/admin/systempreferences.pl";
 
 my ($template, $borrowernumber, $cookie)
@@ -385,12 +421,16 @@ if ($op eq 'update_and_reedit') {
             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;
+                       warn "logaction !! mod ";
+                       logaction('SYSTEMPREFERENCE','MODIFY',undef, $input->param('variable') . " | " . $value );
         }
     } else {
         unless (C4::Context->config('demo') eq 1) {
             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;
+                       warn "logaction !! add ";
+                       logaction('SYSTEMPREFERENCE','ADD',undef, $input->param('variable') . " | " . $input->param('value') );
         }
     }
     $sth->finish;
@@ -469,25 +509,28 @@ if ($op eq 'add_form') {
             $counter++; 
         }
     } elsif ($data->{'type'} eq 'Languages') {
-        $template->param('type-choice' => 1);
-        my $type='';
-        @options=();
-        my $currently_selected_languages;
-        my $counter=0;
+       my $currently_selected_languages;
         foreach my $language (split /\s+/, $data->{'value'}) {
-            next if $language eq 'images';
-            push @options, { option => $language, counter => $counter };
             $currently_selected_languages->{$language}=1;
-            $counter++;
-        }
-        my $langavail = getTranslatedLanguages();
-        foreach my $language (@$langavail) {
-            my $selected='0';
-            next if $currently_selected_languages->{$language->{'language_code'}};
-            #FIXME: could add language_name and language_locale_name for better display
-            push @options, { option => $language->{'language_code'}, counter => $counter };
-            $counter++;
         }
+       # current language
+        my $lang = $template->param('lang');
+        my $theme;
+       my $interface;
+       if ($data->{'variable'} =~ /opac/) {
+               # this is the OPAC
+               $interface = 'opac';
+               $theme = C4::Context->preference('opacthemes');
+       }
+       else {
+               # this is the staff client      
+               $interface = 'intranet';
+               $theme = C4::Context->preference('template');
+       }
+       my $languages_loop = getTranslatedLanguages($interface,$theme,$lang,$currently_selected_languages);
+
+       $template->param('languages_loop' => $languages_loop);
+        $template->param('type-langselector' => 1);
     } else {
         $template->param('type-free' => 1);
         $template->param('fieldlength' => $data->{'options'}>0?$data->{'options'}:60);
@@ -506,17 +549,28 @@ if ($op eq 'add_form') {
     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;
+    # handle multiple value strings (separated by ',')
+    my $params = $input->Vars;
+    my @values = split("\0",$params->{'value'}) if $params->{'value'};
+    for my $vl (@values) {
+       $value .= "$vl,";
+    }
+    $value =~ s/,$//;
     if ($sth->rows) {
         unless (C4::Context->config('demo') eq 1) {
             my $sth=$dbh->prepare("update systempreferences set value=?,explanation=?,type=?,options=? where variable=?");
-            $sth->execute($input->param('value'), $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'), $input->param('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') eq 1) {
             my $sth=$dbh->prepare("insert into systempreferences (variable,value,explanation,type,options) values (?,?,?,?,?)");
-            $sth->execute($input->param('variable'), $input->param('value'), $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'));
+            $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;
@@ -541,6 +595,8 @@ if ($op eq 'add_form') {
     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;
 
                                                     # END $OP eq DELETE_CONFIRMED
@@ -569,7 +625,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:"Others");
+    $tab=($tab?$tab:"Local Use");
     $template->param(loop => \@loop_data, $tab => 1);
     if ($offset>0) {
         my $prevpage = $offset-$pagesize;