[13/40] Work on profile editor interface.
authorChris Nighswonger <cnighswonger@foundations.edu>
Tue, 28 Jul 2009 18:44:24 +0000 (14:44 -0400)
committerChris Nighswonger <cnighswonger@foundations.edu>
Tue, 1 Sep 2009 19:49:53 +0000 (15:49 -0400)
C4/Labels/Lib.pm
C4/Labels/Profile.pm
koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-profile.tmpl
koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manage.tmpl
labels/label-edit-profile.pl

index 2d996ab..cd09e86 100644 (file)
@@ -106,13 +106,15 @@ my $unit_values = [
 =cut
 
 sub get_all_templates {
+    my %params = @_;
     my @templates = ();
-    my $query = "SELECT * FROM labels_templates;";
+    my $query = "SELECT " . ($params{'field_list'} ? $params{'field_list'} : '*') . " FROM labels_templates";
+    $query .= ($params{'filter'} ? " WHERE $params{'filter'};" : ';');
     my $sth = C4::Context->dbh->prepare($query);
     $sth->execute();
     if ($sth->err) {
         syslog("LOG_ERR", "C4::Labels::Lib::get_all_templates : Database returned the following error: %s", $sth->errstr);
-        return 1;
+        return -1;
     }
     ADD_TEMPLATES:
     while (my $template = $sth->fetchrow_hashref) {
@@ -138,7 +140,7 @@ sub get_all_layouts {
     $sth->execute();
     if ($sth->err) {
         syslog("LOG_ERR", "C4::Labels::Lib::get_all_layouts : Database returned the following error: %s", $sth->errstr);
-        return 1;
+        return -1;
     }
     ADD_LAYOUTS:
     while (my $layout = $sth->fetchrow_hashref) {
@@ -171,7 +173,7 @@ sub get_all_profiles {
     $sth->execute();
     if ($sth->err) {
         syslog("LOG_ERR", "C4::Labels::Lib::get_all_profiles : Database returned the following error: %s", $sth->errstr);
-        return 1;
+        return -1;
     }
     ADD_LAYOUTS:
     while (my $profile = $sth->fetchrow_hashref) {
index 2d54b97..faa9008 100644 (file)
@@ -35,7 +35,7 @@ sub _check_params {
     my $exit_code = 0;
     my @valid_profile_params = (
         'printer_name',
-        'tmpl_id',
+        'template_id',
         'paper_bin',
         'offset_horz',
         'offset_vert',
@@ -93,13 +93,13 @@ C4::Labels::Profile - A class for creating and manipulating profile objects in K
 sub new {
     my $invocant = shift;
     if (_check_params(@_) eq 1) {
-        return 1;
+        return -1;
     }
     my $type = ref($invocant) || $invocant;
     my $self = {
-        printer_name    => '',
-        tmpl_id         => '',
-        paper_bin       => '',
+        printer_name    => 'Default Printer',
+        template_id     => '',
+        paper_bin       => 'Tray 1',
         offset_horz     => 0,
         offset_vert     => 0,
         creep_horz      => 0,
@@ -135,7 +135,7 @@ sub retrieve {
     $sth->execute($opts{profile_id});
     if ($sth->err) {
         syslog("LOG_ERR", "Database returned the following error: %s", $sth->errstr);
-        return 1;
+        return -1;
     }
     my $self = $sth->fetchrow_hashref;
     $self = _conv_points($self) if ($opts{convert} && $opts{convert} == 1);
@@ -143,26 +143,40 @@ sub retrieve {
     return $self;
 }
 
-=head2 C4::Labels::Profile->delete(profile_id => profile_id) |  $profile->delete()
+=head2 C4::Labels::Profile::delete(profile_id => profile_id) | $profile->delete()
 
     Invoking the delete method attempts to delete the profile from the database. The method returns 0 upon success
     and 1 upon failure. Errors are logged to the syslog.
 
     examples:
         my $exitstat = $profile->delete(); # to delete the record behind the $profile object
-        my $exitstat = C4::Labels::Profile->delete(profile_id => 1); # to delete profile record 1
+        my $exitstat = C4::Labels::Profile::delete(profile_id => 1); # to delete profile record 1
 
 =cut
 
 sub delete {
-    my $self = shift;
-    if (!$self->{'profile_id'}) {   # If there is no profile profile_id then we cannot delete it
-        syslog("LOG_ERR", "Cannot delete profile as it has not been saved.");
-        return 1;
+    my $self = {};
+    my %opts = ();
+    my $call_type = '';
+    my $query_param = '';
+    if (ref($_[0])) {
+        $self = shift;  # check to see if this is a method call
+        $call_type = 'C4::Labels::Profile->delete';
+        $query_param = $self->{'profile_id'};
+    }
+    else {
+        %opts = @_;
+        $call_type = 'C4::Labels::Profile::delete';
+        $query_param = $opts{'profile_id'};
+    }
+    if ($query_param eq '') {   # If there is no profile id then we cannot delete it
+        syslog("LOG_ERR", "%s : Cannot delete layout as the profile id is invalid or non-existant.", $call_type);
+        return -1;
     }
     my $query = "DELETE FROM printers_profile WHERE profile_id = ?";  
     my $sth = C4::Context->dbh->prepare($query);
-    $sth->execute($self->{'profile_id'});
+#    $sth->{'TraceLevel'} = 3;
+    $sth->execute($query_param);
     return 0;
 }
 
@@ -190,11 +204,11 @@ sub save {
         $query = substr($query, 0, (length($query)-2));
         push (@params, $self->{'profile_id'});
         $query .= " WHERE profile_id=?;";
-        warn "DEBUG: Updating: $query\n" if $debug;
         my $sth = C4::Context->dbh->prepare($query);
+#        $sth->{'TraceLevel'} = 3;
         $sth->execute(@params);
         if ($sth->err) {
-            syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error: %s", $sth->errstr);
+            syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error on attempted UPDATE: %s", $sth->errstr);
             return -1;
         }
         return $self->{'profile_id'};
@@ -213,11 +227,10 @@ sub save {
         }
         $query = substr($query, 0, (length($query)-1));
         $query .= ");";
-        warn "DEBUG: Saving: $query\n" if $debug;
         my $sth = C4::Context->dbh->prepare($query);
         $sth->execute(@params);
         if ($sth->err) {
-            syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error: %s", $sth->errstr);
+            syslog("LOG_ERR", "C4::Labels::Profile : Database returned the following error on attempted INSERT: %s", $sth->errstr);
             return -1;
         }
         my $sth1 = C4::Context->dbh->prepare("SELECT MAX(profile_id) FROM printers_profile;");
@@ -239,7 +252,7 @@ sub save {
 sub get_attr {
     my $self = shift;
     if (_check_params(@_) eq 1) {
-        return 1;
+        return -1;
     }
     my ($attr) = @_;
     if (exists($self->{$attr})) {
@@ -247,7 +260,7 @@ sub get_attr {
     }
     else {
         syslog("LOG_ERR", "C4::Labels::Profile : %s is currently undefined.", $attr);
-        return 1;
+        return -1;
     }
 }
 
@@ -263,10 +276,12 @@ sub get_attr {
 sub set_attr {
     my $self = shift;
     if (_check_params(@_) eq 1) {
-        return 1;
+        return -1;
     }
-    my ($attr, $value) = @_;
-    $self->{$attr} = $value;
+    my %attrs = @_;
+    foreach my $attrib (keys(%attrs)) {
+        $self->{$attrib} = $attrs{$attrib};
+    };
     return 0;
 }
 
index c0ce14a..d4cbdbe 100644 (file)
@@ -1,74 +1,98 @@
-<!-- TMPL_INCLUDE NAME="doc-head-open.inc" --><title>Koha &rsaquo; Tools &rsaquo; Labels</title>
-<!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
+    <!-- TMPL_INCLUDE NAME="doc-head-open.inc" -->i
+    <title>Koha &rsaquo; Tools &rsaquo; Labels</title>
+    <!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
 </head>
 <body>
-<!-- TMPL_INCLUDE NAME="header.inc" -->
-<!-- TMPL_INCLUDE NAME="cat-search.inc" -->
-
-<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a>&rsaquo; <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> &rsaquo; <a href="/cgi-bin/koha/labels/label-home.pl">Labels</a> &rsaquo; <a href="/cgi-bin/koha/labels/label-profiles.pl">Printer Profiles</a> &rsaquo; Edit Printer Profile</div>
-
-<div id="doc3" class="yui-t2">
-   
-   <div id="bd">
-       <div id="yui-main">
-       <div class="yui-b">
-<form name="input" action="/cgi-bin/koha/labels/label-edit-profile.pl" method="get">
-
-<div class="yui-g">
-<h3>Edit Printer Profile</h3>
-<div class="yui-g first">
-<fieldset class="rows"><legend>Profile Settings</legend>
-
-<ol>
-<li>
-    <label>Printer Name:</label> <!-- TMPL_VAR NAME="printername" -->
-</li>
-<li>
-    <label>Paper Bin:</label> <!-- TMPL_VAR NAME="paper_bin" -->
-</li>
-<li>
-    <label>Template Name:</label> <!-- TMPL_VAR NAME="tmpl_code" -->
-</li>
-<li>
-    <label><h4>Offset:</h4></label>
-</li>
-<li>
-    <label for="offset_horz">Horizontal: </label><input type="text"  size="4" name="offset_horz" id="offset_horz" value="<!-- TMPL_VAR NAME="offset_horz" -->" />
-</li>
-<li>
-    <label for="offset_vert">Vertical: </label><input type="text" size="4" name="offset_vert" id="offset_vert" value="<!-- TMPL_VAR NAME="offset_vert" -->" />
-</li>
-<li>
-    <label><h4>Creep:</h4></label>
-</li>
-<li>
-    <label for="creep_horz">Horizontal: </label><input type="text"  size="4" name="creep_horz" id="creep_horz" value="<!-- TMPL_VAR NAME="creep_horz" -->" />
-</li>
-<li>
-    <label for="creep_vert">Vertical: </label><input type="text" size="4" name="creep_vert" id="creep_vert" value="<!-- TMPL_VAR NAME="creep_vert" -->" />
-</li>
-<li><label for="unit">Units: </label><select id="unit" name="unit">
-    <!-- TMPL_LOOP NAME="units" -->
-        <!-- TMPL_IF NAME="selected" -->
-            <option value="<!-- TMPL_VAR NAME="unit" -->" selected="selected">
-        <!-- TMPL_ELSE -->
-            <option value="<!-- TMPL_VAR NAME="unit" -->">
-        <!-- /TMPL_IF --><!-- TMPL_VAR NAME="desc" --></option>
-    <!-- /TMPL_LOOP -->
-</select>
-</li>
-<input type="hidden" name="prof_id" value="<!-- TMPL_VAR NAME="prof_id" -->" />
-</ol>
-</fieldset>
-<fieldset class="action">
-        <input type="submit" name ="op" value="Save" /> <input type="submit" name="op" value="Cancel" />
-</fieldset></div>
-</div>
-</div></form>
-
-</div>
-<div class="yui-b">
-<!-- TMPL_INCLUDE NAME="labels-menu.inc" -->
-</div>
-</div>
-<!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->
+    <!-- TMPL_INCLUDE NAME="header.inc" -->
+    <!-- TMPL_INCLUDE NAME="cat-search.inc" -->
+    <div id="breadcrumbs">
+        <a href="/cgi-bin/koha/mainpage.pl">Home</a>&rsaquo;
+        <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a>&rsaquo;
+        <a href="/cgi-bin/koha/labels/label-home.pl">Labels</a>&rsaquo;
+        <a href="/cgi-bin/koha/labels/label-manage.pl?label_element=profile">Printer Profiles</a>&rsaquo;
+        Edit Printer Profile
+    </div>
+    <div id="doc3" class="yui-t2">
+        <div id="bd">
+           <div id="yui-main">
+               <div class="yui-b">
+                    <form name="input" action="/cgi-bin/koha/labels/label-edit-profile.pl" method="get">
+                        <div class="yui-g">
+                            <h3>Edit Printer Profile</h3>
+                                <div class="yui-g first">
+                                    <fieldset class="rows"><legend>Profile Settings</legend>
+                                        <ol>
+                                            <li>
+                                                <label for="printer_name">Printer Name:</label>
+                                                <!-- TMPL_IF NAME="profile_id" -->
+                                                 <!-- TMPL_VAR NAME="printer_name" -->
+                                                <!-- TMPL_ELSE -->
+                                                <input type="text"  size="20" name="printer_name" id="printer_name" />
+                                                <!-- /TMPL_IF -->
+                                            </li>
+                                            <li>
+                                                <label for="paper_bin">Paper Bin:</label>
+                                                <!-- TMPL_IF NAME="profile_id" -->
+                                                <!-- TMPL_VAR NAME="paper_bin" -->
+                                                <!-- TMPL_ELSE -->
+                                                <input type="text"  size="20" name="paper_bin" id="paper_bin" />
+                                                <!-- /TMPL_IF -->
+                                            </li>
+                                            <li>
+                                                <label for="template_name">Template Name:</label>
+                                                <!-- TMPL_IF NAME="label_template" -->
+                                                 <!-- TMPL_VAR NAME="label_template" -->
+                                                <!-- TMPL_ELSE -->
+                                                 Profile Unassigned
+                                                <!-- /TMPL_IF -->
+                                            </li>
+                                            </li>
+                                            <li>
+                                                <label><h4>Offset:</h4></label>
+                                            </li>
+                                            <li>
+                                                <label for="offset_horz">Horizontal: </label><input type="text"  size="4" name="offset_horz" id="offset_horz" value="<!-- TMPL_VAR NAME="offset_horz" -->" />
+                                            </li>
+                                            <li>
+                                                <label for="offset_vert">Vertical: </label><input type="text" size="4" name="offset_vert" id="offset_vert" value="<!-- TMPL_VAR NAME="offset_vert" -->" />
+                                            </li>
+                                            <li>
+                                                <label><h4>Creep:</h4></label>
+                                            </li>
+                                            <li>
+                                                <label for="creep_horz">Horizontal: </label><input type="text"  size="4" name="creep_horz" id="creep_horz" value="<!-- TMPL_VAR NAME="creep_horz" -->" />
+                                            </li>
+                                            <li>
+                                                <label for="creep_vert">Vertical: </label><input type="text" size="4" name="creep_vert" id="creep_vert" value="<!-- TMPL_VAR NAME="creep_vert" -->" />
+                                            </li>
+                                            <li>
+                                                <label for="units">Units: </label>
+                                                <select id="units" name="units">
+                                                    <!-- TMPL_LOOP NAME="units" -->
+                                                    <!-- TMPL_IF NAME="selected" -->
+                                                    <option value="<!-- TMPL_VAR NAME="type" -->" selected="selected">
+                                                    <!-- TMPL_ELSE -->
+                                                    <option value="<!-- TMPL_VAR NAME="type" -->">
+                                                    <!-- /TMPL_IF -->
+                                                    <!-- TMPL_VAR NAME="desc" -->
+                                                    </option>
+                                                    <!-- /TMPL_LOOP -->
+                                                </select>
+                                            </li>
+                                        </ol>
+                                    </fieldset>
+                                    <fieldset class="action">
+                                        <input type="submit" value="Submit" /><a class="cancel" href="/cgi-bin/koha/labels/label-manage.pl?label_element=profile">Cancel</a>
+                                        <input type="hidden" name="op" value="save" />
+                                        <input type="hidden" name="profile_id" value="<!-- TMPL_VAR NAME="profile_id" -->" />
+                                    </fieldset>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+                <div class="yui-b">
+                    <!-- TMPL_INCLUDE NAME="labels-menu.inc" -->
+                </div>
+            </div>
+            <!-- TMPL_INCLUDE NAME="intranet-bottom.inc" -->
index d434495..ece572e 100644 (file)
@@ -6,7 +6,7 @@
             function DeleteConfirm() {
                 var element_id = selected_layout();
                 if (element_id>-1) {
-                    var msg = "Are you sure you want to delete template " + element_id + "?"
+                    var msg = "Are you sure you want to delete <!-- TMPL_VAR NAME="label_element" --> " + element_id + "?"
                     var answer = confirm(msg);
                     if (answer) {
                         window.location = "/cgi-bin/koha/labels/label-manage.pl?op=delete&amp;label_element=<!-- TMPL_VAR NAME="label_element" -->&amp;element_id=" + element_id;
index 4643b1c..e5d8bdd 100755 (executable)
 #!/usr/bin/perl
+#
+# Copyright 2006 Katipo Communications.
+# Parts Copyright 2009 Foundations Bible College.
+#
+# 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 warnings;
+use Sys::Syslog qw(syslog);
 use CGI;
-use C4::Auth;
-use C4::Context;
-use C4::Output;
-use C4::Labels;
 use HTML::Template::Pro;
-use POSIX;
-
-my $DEBUG = 0;
-my $dbh       = C4::Context->dbh;
-my $query     = new CGI;
+use Data::Dumper;
 
-my $op          = $query->param('op');
-my $prof_id     = $query->param('prof_id');
-my $offset_horz = $query->param('offset_horz');
-my $offset_vert = $query->param('offset_vert');
-my $creep_horz  = $query->param('creep_horz');
-my $creep_vert  = $query->param('creep_vert');
-my $units       = $query->param('unit');
+use C4::Auth;
+use C4::Output;
+use C4::Context;
+use C4::Debug;
+use C4::Labels::Lib 1.000000 qw(get_all_templates get_unit_values);
+use C4::Labels::Profile 1.000000;
 
+my $cgi = new CGI;
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
         template_name   => "labels/label-edit-profile.tmpl",
-        query           => $query,
+        query           => $cgi,
         type            => "intranet",
-        authnotrequired => 1,
+        authnotrequired => 0,
         flagsrequired   => { catalogue => 1 },
         debug           => 1,
     }
 );
-
-if ($op eq '' || undef) {
-    my $prof = GetSinglePrinterProfile($prof_id);
-
-    my $tmpl = GetSingleLabelTemplate($prof->{'tmpl_id'});
-
-    if ( $DEBUG ) {
-        use Data::Dumper;
-        warn Dumper($prof);
-        warn Dumper($tmpl);
-    }       
-
-    my @units = (
-        { unit => 'INCH',  desc => 'Inches' },
-        { unit => 'CM',    desc => 'Centimeters' },
-        { unit => 'MM',    desc => 'Millimeters' },
-        { unit => 'POINT', desc => 'Postscript Points' },
+my $op = $cgi->param('op') || $ARGV[0] || '';
+my $profile_id = $cgi->param('profile_id') || $cgi->param('element_id') || $ARGV[1] || '';
+my $profile = '';
+my $template_list = '';
+my @label_template = ();
+my $units = get_unit_values();
+
+if ($op eq 'edit') {
+    $profile = C4::Labels::Profile->retrieve(profile_id => $profile_id);
+    $template_list = get_all_templates(field_list => 'template_id,template_code, profile_id');
+}
+elsif ($op eq 'save') {
+    my @params = (
+        printer_name        => $cgi->param('printer_name'),
+        paper_bin           => $cgi->param('paper_bin'),
+        offset_horz         => $cgi->param('offset_horz'),
+        offset_vert         => $cgi->param('offset_vert'),
+        creep_horz          => $cgi->param('creep_horz'),
+        creep_vert          => $cgi->param('creep_vert'),
+        units               => $cgi->param('units'),
     );
-
-    foreach my $unit (@units) {
-        if ( $unit->{'unit'} eq $prof->{'unit'} ) {
-            $unit->{'selected'} = 1;
-        }
+    if ($profile_id) {   # if a label_id was passed in, this is an update to an existing layout
+        $profile = C4::Labels::Profile->retrieve(profile_id => $profile_id);
+        $profile->set_attr(@params);
+        $profile->save();
     }
-
-    $template->param(
-
-        units => \@units,
-
-        prof_id      => $prof->{'prof_id'},
-        printername  => $prof->{'printername'},
-        paper_bin    => $prof->{'paper_bin'},
-        tmpl_code    => $tmpl->{'tmpl_code'},
-        prof_code    => $prof->{'prof_code'},
-        offset_horz  => $prof->{'offset_horz'},
-        offset_vert  => $prof->{'offset_vert'},
-        creep_horz   => $prof->{'creep_horz'},
-        creep_vert   => $prof->{'creep_vert'},
-    );
+    else {      # if no label_id, this is a new layout so insert it
+        $profile = C4::Labels::Profile->new(@params);
+        $profile->save();
+    }
+    print $cgi->redirect("label-manage.pl?label_element=profile");
+    exit;
+}
+else {  # if we get here, this is a new layout
+    $profile = C4::Labels::Profile->new();
 }
 
-elsif ($op eq 'Save') {
-    warn "Units are now $units";
-
-    SaveProfile( $prof_id,   $offset_horz,   $offset_vert,   $creep_horz,    $creep_vert,    $units );
-    print $query->redirect("./label-profiles.pl");
-    exit;
+if ($profile_id) {
+    @label_template = grep{($_->{'profile_id'} == $profile->get_attr('profile_id')) && ($_->{'template_id'} == $profile->get_attr('template_id'))} @$template_list;
 }
 
-elsif ($op eq 'Cancel') {
-    print $query->redirect("./label-profiles.pl");
-    exit;
+foreach my $unit (@$units) {
+    if ($unit->{'type'} eq $profile->get_attr('units')) {
+        $unit->{'selected'} = 1;
+    }
 }
 
-output_html_with_http_headers $query, $cookie, $template->output;
+$template->param(profile_id => $profile->get_attr('profile_id')) if $profile->get_attr('profile_id') > 0;
+
+$template->param(
+    label_template      => $label_template[0]->{'template_code'} || '',
+    printer_name        => $profile->get_attr('printer_name'),
+    paper_bin           => $profile->get_attr('paper_bin'),
+    offset_horz         => $profile->get_attr('offset_horz'),
+    offset_vert         => $profile->get_attr('offset_vert'),
+    creep_horz          => $profile->get_attr('creep_horz'),
+    creep_vert          => $profile->get_attr('creep_vert'),
+    units               => $units,
+    op                  => $op,
+);
+
+output_html_with_http_headers $cgi, $cookie, $template->output;