classification sources part 1 - system preferences
[koha.git] / admin / classsources.pl
diff --git a/admin/classsources.pl b/admin/classsources.pl
new file mode 100755 (executable)
index 0000000..3e4bfe8
--- /dev/null
@@ -0,0 +1,276 @@
+#! /usr/bin/perl
+#
+# Copyright 2007 LibLime
+#
+# 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 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., 59 Temple Place,
+# Suite 330, Boston, MA  02111-1307 USA
+#
+
+use strict;
+use CGI;
+use C4::Auth;
+use C4::Context;
+use C4::Output;
+use C4::Koha;
+use C4::ClassSource;
+
+my $script_name = "/cgi-bin/koha/admin/classsources.pl";
+
+my $input = new CGI;
+my $op = $input->param('op');
+my $source_code = $input->param('class_source');
+my $rule_code = $input->param('sort_rule');
+
+my ($template, $loggedinuser, $cookie)
+    = get_template_and_user({template_name => "admin/classsources.tmpl",
+                 query => $input,
+                 type => "intranet",
+                 authnotrequired => 0,
+                 flagsrequired => {parameters => 1},
+                 debug => 1,
+                 });
+
+if ($op) {
+    $template->param(script_name => $script_name, $op => 1);
+} else {
+    $template->param(script_name => $script_name);
+}
+
+my $display_lists = 0;
+if ($op eq "add_source") {
+    add_class_source_form($template);
+} elsif ($op eq "add_source_confirmed") {
+    add_class_source($template,
+                     $source_code,
+                     $input->param('description'),
+                     $input->param('used') eq "used" ? 1 : 0,
+                     $rule_code);
+    $display_lists = 1;
+} elsif ($op eq "delete_source") {
+    delete_class_source_form($template);
+} elsif ($op eq "delete_source_confirmed") {
+    delete_class_source($template, $source_code);
+    $display_lists = 1;
+} elsif ($op eq "edit_source") {
+    edit_class_source_form($template, $source_code);
+} elsif ($op eq "edit_source_confirmed") {
+    edit_class_source($template,
+                     $source_code,
+                     $input->param('description'),
+                     $input->param('used') eq "used" ? 1 : 0,
+                     $rule_code);
+    $display_lists = 1;
+} elsif ($op eq "add_sort_rule") {
+    add_class_sort_rule_form($template);
+} elsif ($op eq "add_sort_rule_confirmed") {
+    add_class_sort_rule($template,
+                        $rule_code,
+                        $input->param('description'),
+                        $input->param('sort_routine'));
+    $display_lists = 1;
+} elsif ($op eq "delete_sort_rule") {
+    delete_sort_rule_form($template, $rule_code);
+} elsif ($op eq "delete_sort_rule_confirmed") { 
+    delete_sort_rule($template, $rule_code);
+    $display_lists = 1;
+} elsif ($op eq "edit_sort_rule") { 
+    edit_class_sort_rule_form($template, $rule_code);
+} elsif ($op eq "edit_sort_rule_confirmed") {
+    edit_class_sort_rule($template,
+                         $rule_code,
+                         $input->param('description'),
+                         $input->param('sort_routine'));
+    $display_lists = 1;
+} else {
+    $display_lists = 1;
+}
+
+if ($display_lists) {
+    $template->param(display_lists => 1);
+    class_source_list($template);
+    class_sort_rule_list($template);
+}
+
+output_html_with_http_headers $input, $cookie, $template->output;
+
+exit 0;
+
+sub add_class_source_form {
+    my ($template) = @_;
+    $template->param(
+        class_source_form => 1,
+        confirm_op => "add_source_confirmed",
+        used => 0
+    );
+    get_sort_rule_codes($template, '');
+}
+
+sub add_class_source {
+    my ($template, $source_code, $description, $used, $sort_rule) = @_;
+    AddClassSource($source_code, $description, $used, $sort_rule);
+    $template->param(added_source => $source_code);
+}
+
+sub edit_class_source_form {
+    my ($template, $source_code) = @_;
+
+    my $source = GetClassSource($source_code);
+    $template->param(
+        class_source_form => 1,
+        edit_class_source => 1,
+        class_source => $source_code,
+        confirm_op => "edit_source_confirmed",
+        description => $source->{'description'},
+        used => $source->{'used'},
+    );
+
+    get_sort_rule_codes($template, $source->{'rule_code'});
+}
+
+sub edit_class_source {
+    my ($template, $source_code, $description, $used, $sort_rule) = @_;
+    ModClassSource($source_code, $description, $used, $sort_rule);
+    $template->param(edited_source => $source_code);
+}
+
+
+sub delete_class_source_form {
+    my ($template) = @_;
+    $template->param(
+        delete_class_source_form => 1,
+        confirm_op => "delete_source_confirmed",
+        class_source => $source_code,
+    );
+}
+
+sub delete_class_source { 
+    my ($template, $source_code) = @_;
+    DelClassSource($source_code);
+    $template->param(deleted_source => $source_code);
+}
+
+sub get_sort_rule_codes {
+    my ($template, $current_rule) = @_;
+
+    my $sort_rules = GetClassSortRules();
+
+    my @sort_rules = ();
+    foreach my $sort_rule (sort keys %$sort_rules) {
+        my $sort_rule = $sort_rules->{$sort_rule};
+        push @sort_rules,
+          {
+            rule        => $sort_rule->{'class_sort_rule'},
+            description => $sort_rule->{'description'},
+            selected => $sort_rule->{'class_sort_rule'} eq $current_rule ? 1 : 0
+          }
+    }
+    $template->param(rules_dropdown => \@sort_rules);
+}
+
+sub add_class_sort_rule_form {
+    my ($template) = @_;
+    $template->param(
+        sort_rule_form => 1,
+        confirm_op => "add_sort_rule_confirmed"
+    );
+}
+
+sub add_class_sort_rule {
+    my ($template, $rule_code, $description, $sort_routine) = @_;
+    AddClassSortRule($rule_code, $description, $sort_routine);
+    $template->param(added_rule => $rule_code);
+}
+
+sub delete_sort_rule_form {
+    my ($template, $rule_code) = @_;
+
+    my @sources = GetSourcesForSortRule($rule_code);
+    if ($#sources == -1) {
+        $template->param(
+            delete_sort_rule_form => 1,
+            confirm_op => "delete_sort_rule_confirmed",
+            sort_rule => $rule_code,
+        );
+    } else {
+        $template->param(
+            delete_sort_rule_impossible => 1,
+            sort_rule => $rule_code
+        );
+    }
+}
+
+sub delete_sort_rule { 
+    my ($template, $rule_code) = @_;
+    DelClassSortRule($rule_code);
+    $template->param(deleted_rule => $rule_code);
+}
+
+sub edit_class_sort_rule_form {
+    my ($template, $rule_code) = @_;
+
+    my $rule = GetClassSortRule($rule_code);
+    $template->param(
+        sort_rule_form => 1,
+        edit_sort_rule => 1,
+        confirm_op => "edit_sort_rule_confirmed",
+        sort_rule => $rule_code,
+        description => $rule->{'description'},
+        sort_routine => $rule->{'sort_routine'}
+    );
+
+}
+
+sub edit_class_sort_rule {
+    my ($template, $rule_code, $description, $sort_routine) = @_;
+    ModClassSortRule($rule_code, $description, $sort_routine);
+    $template->param(edited_rule => $rule_code);
+} 
+
+sub class_source_list {
+    my ($template) = @_;
+    my $sources = GetClassSources();
+
+    my @sources = ();
+    foreach my $cn_source (sort keys %$sources) {
+        my $source = $sources->{$cn_source};
+        push @sources,
+          { 
+            code        => $source->{'cn_source'},
+            description => $source->{'description'},
+            used => $source->{'used'},
+            sortrule    => $source->{'class_sort_rule'}
+          } 
+    }
+    $template->param(class_sources => \@sources);
+}
+
+sub class_sort_rule_list {
+
+    my ($template) = @_;
+    my $sort_rules = GetClassSortRules();
+
+    my @sort_rules = ();
+    foreach my $sort_rule (sort keys %$sort_rules) {
+        my $sort_rule = $sort_rules->{$sort_rule};
+        push @sort_rules, 
+          {  
+            rule        => $sort_rule->{'class_sort_rule'},
+            description => $sort_rule->{'description'},
+            sort_routine    => $sort_rule->{'sort_routine'}
+          } 
+    }
+    $template->param(class_sort_rules => \@sort_rules);
+}