X-Git-Url: https://git.harvie.cz/?a=blobdiff_plain;f=index.php;h=2bcad25297300418ae95e6bd46dbabc08bb6d2a5;hb=4d4ca2918fbfe23f3bbe9901057783a68a7c77e9;hp=6296552329f21e584583511ee65a902658dcf5a6;hpb=1f52346fa3205e61b1d0d406d60313095cbe5754;p=mirrors%2FSokoMan.git diff --git a/index.php b/index.php index 6296552..2bcad25 100755 --- a/index.php +++ b/index.php @@ -267,7 +267,7 @@ EOF; if($count) $assistants[$item] = "assistant/$item"; } - $tables=array('item','model','category','producer','vendor','room','status','location'); + $tables=array('item','barcode','model','category','producer','vendor','room','status','location'); foreach($tables as $table) { $listable[$table] = $table; @@ -334,11 +334,11 @@ EOF; } function render_barcode($barcode,$opts=false) { - return $this->img_link($this->internal_url("barcode/$barcode"),$this->internal_url("barcode/$barcode"),$barcode,false,false,$opts); + return $this->img_link($this->internal_url("barcodeimg/$barcode"),$this->internal_url("barcodeimg/$barcode"),$barcode,false,false,$opts); } function table_add_barcodes(&$table) { - $image = array('model_barcode', 'item_serial'); + $image = array('barcode_name', '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]); @@ -357,12 +357,18 @@ EOF; function table_add_relations(&$table, $class, $suffix_relations='_relations') { $where_url = '%d/?where[%c]==%v'; - $relations = array( //TODO: Autodetect??? + $relations = array( //TODO: Autodetect??? //TODO: Add [edit] link to all classes 'model' => array( 'model_id' => array(array('item',$where_url),array('edit','model/%v/edit/')), 'model_barcode' => array(array('store','assistant/%d?barcode=%v')), + 'barcode_name' => array(array('store','assistant/%d?barcode=%v')), 'model_name' => array(array('google','http://google.com/search?q=%v')) //TODO: add manufacturer to google query ), + 'barcode' => array( + 'model_id' => array(array('model',$where_url)), + 'barcode_id' => array(array('item',$where_url),array('edit','barcode/%v/edit/')), + 'barcode_name' => array(array('store','assistant/%d?barcode=%v')), + ), 'item' => array( 'item_serial' => array(array('dispose','assistant/%d?serial=%v','in_stock'),array('sell','assistant/%d?serial=%v','in_stock')), 'item_id' => array(array('edit','item/%v/edit/')) @@ -373,7 +379,7 @@ EOF; 'room' => array('room_id' => array(array('item',$where_url))), 'status' => array('status_id' => array(array('item',$where_url))), 'location' => array( - 'location_id' => array(array('item',$where_url)), + 'location_id' => array(array('item',$where_url),array('edit','location/%v/edit/')), 'location_name' => array(array('smokeping','http://tartarus.brevnov.czf/cgi-bin/smokeping.cgi?filter=%v')) ) ); @@ -451,7 +457,9 @@ EOF; function table_hide_columns(&$table, $class) { //TODO: Move to build_query_select() !!! :-))) $fields_hide = array( - 'item' => array('model_descript','model_price_in','model_price_out','model_barcode','model_countable','model_reserve','model_eshop_hide','room_descript','room_author','producer_name','producer_note','vendor_note','location_author','location_gps','location_description') + 'model' => array('model_barcode','barcode_name'), + 'barcode' => array('model_barcode'), + 'item' => array('model_descript','model_price_in','model_price_out','barcode_name','model_barcode','model_countable','model_reserve','model_eshop_hide','room_descript','room_author','producer_name','producer_note','vendor_note','location_author','location_gps','location_description') ); //print_r($table); die(); if(isset($fields_hide[$class])) foreach($table as $id => $row) { @@ -618,13 +626,20 @@ class Sklad_DB extends PDO { function build_query_select($class, $id=false, $limit=false, $offset=0, $where=false, $search=false, $history=false, $order=false, $suffix_id='_id') { //Configuration $join = array( - 'item' => array('model', 'category', 'producer', 'vendor', 'room', 'location', 'status'), + 'barcode' => array('model', 'category', 'producer'), + 'item' => array('barcode', 'model', 'category', 'producer', 'vendor', 'room', 'location', 'status'), 'model' => array('category', 'producer') ); //TODO Autodetect using foreign keys? + $join2 = array( + 'model' => array('barcode'=>'model_id') + ); $fields_search = array( - 'item' => array('item_id','item_serial','model_name','model_barcode','model_descript','producer_name','vendor_name'), - 'model' => array('model_id','model_name','model_barcode','model_descript','producer_name') + 'item' => array('item_id','item_serial','model_name','barcode_name','model_barcode','model_descript','producer_name','vendor_name'), + 'model' => array('model_id','model_name','barcode_name','model_barcode','model_descript','producer_name') ); //TODO Autodetect + $group_concat = array( + 'model' => array('barcode_name'=>'model_id') + ); //Init if(is_array($where)) foreach($where as $key => $value) $where[$key] = $key.' '.$value; //TODO: escape SQLi!!! @@ -632,10 +647,20 @@ class Sklad_DB extends PDO { //Escaping $class = $this->escape($class); + //GROUP_CONCAT + $group_concat_query = ''; + $group_by = ''; + if(isset($group_concat[$class])) foreach($group_concat[$class] as $gc => $gb) { + $group_concat_query .= ",group_concat($gc separator ', ')"; + $group_by .= "GROUP BY $gb\n"; + } + //SELECT - $sql="SELECT * FROM `$class`\n"; + $sql="SELECT *$group_concat_query FROM `$class`\n"; + //$sql="SELECT * FROM `$class`\n"; //JOIN if(isset($join[$class])) foreach($join[$class] as $j) $sql .= "LEFT JOIN `$j` USING($j$suffix_id)\n"; + if(isset($join2[$class])) foreach($join2[$class] as $j => $c) $sql .= "LEFT JOIN `$j` USING($c)\n"; //WHERE/REGEXP if($search) { $search = $this->quote($search); @@ -647,10 +672,14 @@ class Sklad_DB extends PDO { if(!$history && $this->contains_history($class)) $where[] = $class.'_valid_till=0'; if($where) $sql .= 'WHERE ('.implode(') AND (', $where).")\n"; + + //GROUP BY + $sql.=$group_by; + //ORDER if(!$order) $order = $class.$suffix_id.' DESC'; if($this->contains_history($class)) $order .= ",${class}_valid_from DESC"; - $sql .= "ORDER BY $order\n"; + //$sql .= "ORDER BY $order\n"; //TODO: fixnout az budou opraveny vicenasobny carovy kody //LIMIT/OFFSET if($limit) { $limit = $this->escape((int)$limit); @@ -976,6 +1005,7 @@ class Sklad_UI { function check_input_validity($field, $value='', $ruleset=0) { $rules = array(0 => array( 'model_barcode' => '/./', + 'barcode_name' => '/./', 'item_serial' => '/./', 'vendor_id' => '/^[0-9]*$/' )); @@ -1061,7 +1091,7 @@ class Sklad_UI { $PATH_CHUNKS = preg_split('/\//', $PATH_INFO); //Sephirot: if(!isset($PATH_CHUNKS[1])) $PATH_CHUNKS[1]=''; - if($_SERVER['REQUEST_METHOD'] != 'POST' && $PATH_CHUNKS[1]!='barcode' && $PATH_CHUNKS[1]!='api') //TODO: tyhle podminky naznacujou, ze je v navrhu nejaka drobna nedomyslenost... + if($_SERVER['REQUEST_METHOD'] != 'POST' && $PATH_CHUNKS[1]!='barcodeimg' && $PATH_CHUNKS[1]!='api') //TODO: tyhle podminky naznacujou, ze je v navrhu nejaka drobna nedomyslenost... echo $this->html->header($PATH_INFO,$this->db->auth->get_user()); switch($PATH_CHUNKS[1]) { //TODO: Move some branches to plugins if possible case 'test': //test @@ -1079,7 +1109,7 @@ class Sklad_UI { $assistant_vars['ASSISTANT'] = $PATH_CHUNKS[2]; echo $this->safe_include($incdirs[$PATH_CHUNKS[1]],$PATH_CHUNKS[2],$assistant_vars); break; - case 'barcode': //barcode + case 'barcodeimg': //barcode Barcode::download_barcode(implode('/',array_slice($PATH_CHUNKS, 2))); break; default: //?