From 81ab8aef27da2a93a06296fd3b80cdba3376d956 Mon Sep 17 00:00:00 2001 From: Thomas Mudrunka Date: Tue, 23 Aug 2011 08:18:50 +0200 Subject: [PATCH] Pridana podpora generovani a cteni carovych kodu --- assistants/go.inc.php | 2 +- barcodes/.gitignore | 1 + index.php | 39 +++++++++++++++++++++-------- lib/Barcode.class.php | 57 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 11 deletions(-) create mode 100644 barcodes/.gitignore create mode 100755 lib/Barcode.class.php diff --git a/assistants/go.inc.php b/assistants/go.inc.php index a052101..8b09bb6 100644 --- a/assistants/go.inc.php +++ b/assistants/go.inc.php @@ -3,5 +3,5 @@ if(!isset($_GET['q'])) $this->post_redirect_get('',"This assistant shouldn't be $id=$_GET['q']; $barcode_prefix_regexp = '/^'.preg_replace('/\//', '\/', BARCODE_PREFIX).'/'; if(preg_match($barcode_prefix_regexp, $id)) $id=preg_replace($barcode_prefix_regexp, '', $id); -if(preg_match('/\//', $id)) $this->post_redirect_get($id); +if(preg_match('/\//', $id)) $this->post_redirect_get(strtolower($id)); else $this->post_redirect_get('?q='.urlencode($id)); diff --git a/barcodes/.gitignore b/barcodes/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/barcodes/.gitignore @@ -0,0 +1 @@ +* diff --git a/index.php b/index.php index ec062fa..db9e514 100755 --- a/index.php +++ b/index.php @@ -23,6 +23,7 @@ set_include_path(DIR_LIB.PATH_SEPARATOR.get_include_path()); require_once('Sklad_LMS-fake.class.php'); require_once('HTTP_Auth.class.php'); require_once('Locale.class.php'); +require_once('Barcode.class.php'); /** * Trida poskytuje vseobecne funkce pro generovani HTML kodu @@ -57,13 +58,15 @@ class HTML { return $html; } - function link($title='n/a', $link='#void', $internal=true) { + function link($title='n/a', $link='#void', $internal=true, $translate=true) { if($internal && (!isset($link[0]) || $link[0] != '#')) $link = $this->internal_url($link); - return "".T($title).""; + if($translate) $title = T($title); + return "".$title.""; } - function img($src='#void', $title='img') { - return "$title"; + function img($src='#void', $title='img', $options='width=64') { + $options = $options ? " $options" : ''; + return "$title"; } function input($name=false, $value=false, $type='text', $placeholder=false, $options=false, $prefix='') { @@ -212,7 +215,7 @@ EOF; $html .= '
'; $html .= $this->form("$script/assistant/go", 'GET', array( - array('q','','text','smart id...'), + array('q','','text','smart id...', 'autofocus'), array(false,'go','submit') ), 'style="float: left;"'); @@ -249,6 +252,19 @@ EOF; } } + function render_barcode($barcode,$opts=false) { + return $this->link($this->img($this->internal_url("barcode/$barcode"),$barcode,$opts),"barcode/$barcode",true,false); + } + + function table_add_barcodes(&$table) { + $image = array('model_barcode', 'item_serial'); + foreach($table as $id => $row) { + foreach($image as $column) if(isset($table[$id][$column])) { + $table[$id][$column]=$this->render_barcode($table[$id][$column]); + } + } + } + function table_collapse(&$table) { $collapse = array( 'item_id' => 'item_id', @@ -286,6 +302,7 @@ EOF; function render_item_table($table) { $this->table_add_images($table); + $this->table_add_barcodes($table); $this->table_collapse($table); $this->table_sort($table); return $this->table($table); @@ -631,6 +648,7 @@ class Sklad_UI { $html.= '
'; $html.= $this->html->link('edit', "$class/$id/edit/"); if($this->db->contains_history($class)) $html.= ' ][ '.$this->html->link('history', "$class/$id/history/"); + $html.='
'.$this->html->render_barcode(BARCODE_PREFIX.strtoupper("$class/$id")); return $html; } @@ -763,13 +781,11 @@ class Sklad_UI { } $PATH_INFO=@trim($_SERVER[PATH_INFO]); - if($_SERVER['REQUEST_METHOD'] != 'POST') echo $this->html->header($PATH_INFO); //TODO tahle podminka naznacuje ze je v navrhu nejaka drobna nedomyslenost... - - - //Sephirot: $PATH_CHUNKS = preg_split('/\//', $PATH_INFO); + //Sephirot: if(!isset($PATH_CHUNKS[1])) $PATH_CHUNKS[1]=''; - switch($PATH_CHUNKS[1]) { + if($_SERVER['REQUEST_METHOD'] != 'POST' && $PATH_CHUNKS[1]!='barcode') echo $this->html->header($PATH_INFO); //TODO: tyhle podminky naznacujou, ze je v navrhu nejaka drobna nedomyslenost... + switch($PATH_CHUNKS[1]) { //TODO: Move some branches to plugins if possible case 'test': //test die('Tell me why you cry'); break; @@ -780,6 +796,9 @@ class Sklad_UI { $assistant_vars['URL'] = $_SERVER['SCRIPT_NAME'].'/'.$assistant_vars['URL_INTERNAL']; echo $this->safe_include(DIR_ASSISTANTS,$PATH_CHUNKS[2],$assistant_vars); break; + case 'barcode': //barcode + Barcode::download_barcode(implode('/',array_slice($PATH_CHUNKS, 2))); + break; default: //? $search = (isset($_GET['q']) && trim($_GET['q']) != '') ? trim($_GET['q']) : false; $class = (isset($PATH_CHUNKS[1]) && $PATH_CHUNKS[1] != '') ? $PATH_CHUNKS[1] : 'item'; diff --git a/lib/Barcode.class.php b/lib/Barcode.class.php new file mode 100755 index 0000000..7292825 --- /dev/null +++ b/lib/Barcode.class.php @@ -0,0 +1,57 @@ +. +*/ + +/** +* Trida implementuje funkce pro praci s carovymi kody +* +* @package Barcode +* @author Tomas Mudrunka +*/ +class Barcode { + static function test() { + system('barcode -b test | convert - /dev/null', $ret); + if($ret == 0) { + return true; + } else { + trigger_error('Barcode-related features are disabled. Please install GNU Barcode and ImageMagick.'); + return false; + } + } + + static function generate_barcode($string='EXAMPLE', $convert='png', $enctype='code128b') { + $string = escapeshellarg($string); + $enctype = escapeshellarg($enctype); + $convert = $convert ? " | convert -colorspace gray -background white - $convert:-" : ''; + return shell_exec("barcode -e $enctype -E -b $string$convert"); + } + + static function cached_barcode($string='EXAMPLE', $convert='png', $enctype='code128b') { + $ext = $convert ? $convert : 'ps'; + $filename=DIR_BARCODES."/$enctype-".urlencode($string).".$ext"; + if(is_file($filename)) return file_get_contents($filename); + $barcode = self::generate_barcode($string,$convert,$enctype); + file_put_contents($filename,$barcode); + return $barcode; + } + + static function download_barcode($string='EXAMPLE', $convert='png', $enctype='code128b') { + if(self::test()) header('Content-Type: image/png'); else die(); + die(self::cached_barcode($string,$convert,$enctype)); + } +} -- 2.30.2