summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcos <cos>2015-01-10 22:14:34 +0100
committercos <cos>2015-01-10 22:14:34 +0100
commit8c5f07a1775c3a4f5930b90f4e01622b4181fc6d (patch)
tree8798a0f07cfcd9ebe1bb8fba7b03aa44a071ca88
parent19b326f2764880a4b07effcb78c5cb06c4f7943d (diff)
parent56cc3091ed3074c6deca5345e5ce775c6077bf13 (diff)
downloadmat-8c5f07a1775c3a4f5930b90f4e01622b4181fc6d.zip
Merge branch 'master' into debian
-rw-r--r--Makefile2
-rwxr-xr-xcgi-bin/mat.cgi86
-rwxr-xr-xmat21
-rwxr-xr-xsts6
4 files changed, 96 insertions, 19 deletions
diff --git a/Makefile b/Makefile
index a759288..8acae4d 100644
--- a/Makefile
+++ b/Makefile
@@ -19,3 +19,5 @@ all:
install: $(INSTALLDIRS)
install -d $(DESTDIR)/usr/bin/
install mat $(DESTDIR)/usr/bin/
+ install -d $(DESTDIR)/usr/lib/netizen-mat/
+ install authenticate_session $(DESTDIR)/usr/lib/netizen-mat/
diff --git a/cgi-bin/mat.cgi b/cgi-bin/mat.cgi
index 7b31e87..793671a 100755
--- a/cgi-bin/mat.cgi
+++ b/cgi-bin/mat.cgi
@@ -5,6 +5,7 @@ use warnings;
use Config::Simple;
use CGI::Simple;
+use CGI::Session;
use DBI;
tie my %Config, "Config::Simple", '/etc/mat.conf';
@@ -12,6 +13,9 @@ tie my %Config, "Config::Simple", '/etc/mat.conf';
my $q = new CGI::Simple;
my $id = $q->param('id');
my $action = $q->param('action');
+my $storage = $q->param('storage');
+my $session = CGI::Session->new(undef, undef, {Directory =>
+ $Config{'session_directory'}});
sub misconfigured
{
@@ -27,20 +31,80 @@ sub invalid_input()
exit 1;
}
+sub unauthorized()
+{
+ print "Content-Type: text/plain; charset=utf-8\n\r\n\r";
+ print "Not authorized!\n";
+ exit 1;
+}
+
+sub send_cookie()
+{
+ print $session->header(-type => 'text/html', -charset => 'utf8');
+}
+
+sub cmd_view($)
+{
+ my ( $id ) = @_;
+
+ my $db = DBI->connect($Config{'database'}, "", "",
+ {HandleError => \&misconfigured, AutoCommit => 1});
+
+ my $recipe_row = $db->selectrow_arrayref("SELECT name, storage, uri FROM ".
+ "recipes AS r JOIN inventory AS i ON i.recipe_id=r.id WHERE i.id=".$id.
+ ";");
+
+ print $id, "<br />", $$recipe_row[0], "<br />", $$recipe_row[1], "<br />";
+ if(substr($$recipe_row[2], 0, 4) eq "http") {
+ print '<a href="'.$$recipe_row[2].'">'.$$recipe_row[2].'</a>', "<br />";
+ } else {
+ print $$recipe_row[2], "<br />";
+ }
+ if ($session->param('authenticated') eq "yes") {
+ print "<font size=20>\n";
+ for my $store ( split(" ", $Config{'relocate_stores'}) ) {
+ print " <a href=".$Config{'label_id_prefix'}."$id/relocate/$store>".
+ "$store</a> \n";
+ }
+ print "</font>";
+ }
+}
+
+sub cmd_relocate($$)
+{
+ my ( $id, $storage ) = @_;
+
+ my $db = DBI->connect($Config{'database'}, "", "",
+ {HandleError => \&misconfigured, AutoCommit => 1});
+
+ $db->do('UPDATE inventory SET storage="'.$storage.'" WHERE id='.$id);
+
+ cmd_view($id);
+}
+
### MAIN PROGRAM ##############################################################
misconfigured unless ($Config{'database'});
+misconfigured unless $session;
invalid_input unless ($id and $action);
-invalid_input unless (($id =~ m/^[0-9]+$/) and ($action =~ m/^view$/));
-
-my $db = DBI->connect($Config{'database'}, "", "",
- {HandleError => \&misconfigured, AutoCommit => 1});
+invalid_input unless (($id =~ m/^[0-9]+$/) and ($action =~ m/^view|relocate$/) and
+ ($storage =~ /^[a-z0-9]*$/));
+send_cookie;
-my $recipe_row = $db->selectrow_arrayref("SELECT name, storage, uri FROM ".
- "recipes AS r JOIN inventory AS i ON i.recipe_id=r.id WHERE i.id=".$id.
- ";");
-
-print "Content-Type: text/plain; charset=utf-8\n\r\n\r";
-print $id, "\n", $$recipe_row[0], "\n", $$recipe_row[1], "\n",
- $$recipe_row[2], "\n";
+for ($action) {
+ if (/^view$/) {
+ cmd_view($id);
+ }
+ elsif (/^relocate$/) {
+ if ($session->param('authenticated') eq "yes") {
+ $session->expire("5y");
+ cmd_relocate($id, $storage);
+ } else {
+ unauthorized();
+ }
+ }
+ else {
+ invalid_input;
+ }
+}
diff --git a/mat b/mat
index 16478fe..8e86cc2 100755
--- a/mat
+++ b/mat
@@ -14,9 +14,6 @@ use Text::Iconv;
tie my %Config, "Config::Simple", '/etc/mat.conf';
-use constant LABEL_NAME => $Config{'label_name'};
-use constant LABEL_ID_PREFIX => $Config{'label_id_prefix'};
-
#use Data::Dumper;
my $db = DBI->connect("dbi:SQLite:recipe.db", "", "", {RaiseError => 1,
@@ -188,7 +185,7 @@ sub cmd_inventory {
my $sql = "SELECT recipe_id, count(recipe_id), storage FROM inventory";
$sql .= " WHERE storage='$storage'" if ( $storage );
- $sql .= " GROUP BY storage, recipe_id";
+ $sql .= " GROUP BY storage, preparation_date, recipe_id";
my $all = $db->selectall_arrayref($sql);
foreach my $row (@$all) {
@@ -276,13 +273,18 @@ sub print_label {
my $y_border = 40;
my $iconv = Text::Iconv->new("UTF-8", "ISO8859-1");
- my $row0 = LABEL_NAME;
+ my $row0 = $Config{'label_name'};
my $row1 = $iconv->convert($dish_name);
my $row2 = `date +%Y%m%d|tr -d '\n'`.' ('.$amount.'g)';
- my $idbarcode = GD::Barcode::QRcode->new(sprintf("%s%d", LABEL_ID_PREFIX, $id), { Version=>3 });
+ my $idbarcode = GD::Barcode::QRcode->new(sprintf("%s%d", $Config{'label_id_prefix'}, $id), { Version=>3 });
my $idbarcode_image=$idbarcode->plot();
+ my $logo;
+ if ($ENV{'PRINT_WITH_LOGO'}) {
+ $logo = GD::Image->newFromPng("layer1.png");
+ }
+
my $idtext = new GD::Image(500, $fontsize * 2);
my $white = $idtext->colorAllocate(255,255,255);
my $black = $idtext->colorAllocate(0,0,0);
@@ -336,10 +338,15 @@ sub print_label {
$label->fill(0, 0, $white);
$label->copyResized($idbarcode_image, $x_border, $y_border, 0, 0, $idbarcode_image->width() * 5, $idbarcode_image->height() * 5, $idbarcode_image->width(), $idbarcode_image->height());
- $label->copyResized($idtext, $x_border * 2, $y_border + $idbarcode_image->height() * 5, 0, 0, $idtext->width() * 2, $idtext->height() * 2, $idtext->width(), $idtext->height());
+ $label->copyResized($idtext, $x_border * 3, $y_border + $idbarcode_image->height() * 5, 0, 0, $idtext->width() * 2, $idtext->height() * 2, $idtext->width(), $idtext->height());
$label->copyResized($text0_image, $label->width() - $x_border - 2 * $fontsize, $y_border, 0, 0, $bounds0[1] * 1, $bounds0[2], $bounds0[1], $bounds0[2]);
$label->copyResized($text1_image, $label->width() - $x_border - 4 * $fontsize, $y_border, 0, 0, $bounds1[1] * 1, $bounds1[2], $bounds1[1], $bounds1[2]);
$label->copyResized($text2_image, $label->width() - $x_border - 6 * $fontsize, $y_border, 0, 0, $bounds2[1] * 1, $bounds2[2], $bounds2[1], $bounds2[2]);
+ if ($ENV{'PRINT_WITH_LOGO'}) {
+ my ($logo_w, $logo_h ) = $logo->getBounds();
+ my $vl = $logo->copyRotate90();
+ $label->copy($vl, $x_border - 20, $label->height - $y_border + 20 - $logo_w, 0, 0, $logo_h, $logo_w);
+ }
open(PNGFILE, ">label.png");
print PNGFILE $label->png;
diff --git a/sts b/sts
index 2f910f7..72771bd 100755
--- a/sts
+++ b/sts
@@ -2,5 +2,9 @@
# scale triggered store
cd $HOME/mat/matplan/
-./mat storeportion `cat currently_cooking` "$1" hemfrys
+if (grep -q v currently_cooking); then
+ PRINT_WITH_LOGO=y ./mat storeportion `cat currently_cooking|sed 's/v//'` "$1" hemfrys
+else
+ ./mat storeportion `cat currently_cooking|sed 's/v//'` "$1" hemfrys
+fi