diff --git a/resources/inc/class.bo_resources.inc.php b/resources/inc/class.bo_resources.inc.php index 4b21177717..6f125f7d83 100755 --- a/resources/inc/class.bo_resources.inc.php +++ b/resources/inc/class.bo_resources.inc.php @@ -91,47 +91,92 @@ class bo_resources @abstract saves a resource including picture upload ... @param array $resource array with key => value of all needed datas @return string msg if somthing went wrong + TODO make thumb an picture sizes choosable by preferences + TODO better handling for not 4:3 images */ function save($resource) { + if(!$this->acl->is_permitted($resource['cat_id'],PHPGW_ACL_EDIT)) + { + return lang('You are not permitted to edit this reource!'); + } + if($resource['own_file']['size']>0 && ($resource['picture_src']=='db_src' || sizeof($resource['picture_src'])<1)) { $resource['picture_src'] = 'db_src'; switch($resource['own_file']['type']) { case 'image/gif': - $resource['db_src'] = imagecreatefromgif($resource['own_file']['tmp_name']); + $src_img = imagecreatefromgif($resource['own_file']['tmp_name']); break; case 'image/jpeg': case 'image/pjpeg': - $resource['db_src'] = imagecreatefromjpeg($resource['own_file']['tmp_name']); + $src_img = imagecreatefromjpeg($resource['own_file']['tmp_name']); break; case 'image/png': case 'image/x-png': - $resource['db_src'] = imagecreatefrompng($resource['own_file']['tmp_name']); + $src_img = imagecreatefrompng($resource['own_file']['tmp_name']); break; default: - return 'Picture type is not supported, sorry!'; + return lang('Picture type is not supported, sorry!'); } + + $img_size = getimagesize($resource['own_file']['tmp_name']); + if($img_size[0] > 64 || $img_size[1] > 48) + { + $dst_img = imagecreatetruecolor(64, 48); + imagecopyresized($dst_img,$src_img,0,0,0,0,64,48,$img_size[0],$img_size[1]); + ob_start(); + imagepng($dst_img); + $resource['picture_thumb'] = ob_get_contents(); + ob_end_clean(); + + if($img_size[0] > 320 || $img_size[1] > 240) + { + $dst_img = imagecreatetruecolor(320, 240); + imagecopyresized($dst_img,$src_img,0,0,0,0,320,240,$img_size[0],$img_size[1]); + ob_start(); + imagepng($dst_img); + $resource['picture'] = ob_get_contents(); + ob_end_clean(); + } + else + { + ob_start(); + imagepng($src_img); + $resource['picture'] = ob_get_contents(); + ob_end_clean(); + } + imagedestroy($dst_img); + } + else + { + ob_start(); + imagepng($src_img); + $resource['picture'] = ob_get_contents(); + $resource['picture_thumb'] = ob_get_contents(); + ob_end_clean(); + } + imagedestroy($src_img); } if($resource['picture_src'] == 'gen_src') { + // welches bild? --> picture_src = dateiname } - - - return $this->so->save_data($resource); + + return $this->so->save($resource) ? false : lang('Something went wrong by saving resource'); } function delete($id) { - return $this->so->delete(array('id'=>$id)); + return $this->so->delete(array('id'=>$id)) ? false : lang('Something went wrong by saving resource'); } function get_images($params) { $id = implode($params); - $picture = $this->so->get_value('picture',$id); + $picture = $this->so->get_value('picture_thumb',$id); if($picture) { // $picture = GD($picture); diff --git a/resources/inc/class.so_resources.inc.php b/resources/inc/class.so_resources.inc.php index 91c48d8084..3c7190bca3 100755 --- a/resources/inc/class.so_resources.inc.php +++ b/resources/inc/class.so_resources.inc.php @@ -110,4 +110,32 @@ class so_resources } return false; } + + /*! + @function save + @abstract saves a resource including binary datas + @param array $resource key => value + @return array with key => value or false if not found + */ + function save($resource) + { + $where = array('id' => $resource['id']); + $data = array( 'name' => $resource['name'], + 'cat_id' => $resource['cat_id'], + 'short_description' => $resource['short_description'], + 'long_description' => $resource['long_description'], + 'location' => $resource['location'], + 'quantity' => $resource['quantity'], + 'useable' => $resource['useable'], + 'bookable' => $resource['bookable'], + 'buyable' => $resource['buyable'], + 'prize' => $resource['prize'], + 'accessories' => $resource['accessories'], + 'picture_src' => $resource['picture_src'], + 'picture_thumb' => $resource['picture_thumb'], + 'picture' => $resource['picture'] + ); + return $this->db->insert($this->rs_table,$data,$where,__LINE__,__FILE__) ? true : false; + } + } diff --git a/resources/setup/setup.inc.php b/resources/setup/setup.inc.php index c06d82b785..91c08f12f7 100755 --- a/resources/setup/setup.inc.php +++ b/resources/setup/setup.inc.php @@ -13,7 +13,7 @@ $setup_info['resources']['name'] = 'resources'; $setup_info['resources']['title'] = 'resources'; - $setup_info['resources']['version'] = '0.0.1.012'; + $setup_info['resources']['version'] = '0.0.1.013'; $setup_info['resources']['app_order'] = 1; $setup_info['resources']['tables'] = array('egw_resources'); $setup_info['resources']['enable'] = 1; @@ -46,3 +46,4 @@ + diff --git a/resources/setup/tables_current.inc.php b/resources/setup/tables_current.inc.php index a9fcba6cac..892c4441fd 100755 --- a/resources/setup/tables_current.inc.php +++ b/resources/setup/tables_current.inc.php @@ -29,7 +29,8 @@ 'long_description' => array('type' => 'longtext'), 'picture' => array('type' => 'blob'), 'accessories' => array('type' => 'varchar','precision' => '50'), - 'picture_src' => array('type' => 'varchar','precision' => '20') + 'picture_src' => array('type' => 'varchar','precision' => '20'), + 'picture_thumb' => array('type' => 'blob') ), 'pk' => array('id'), 'fk' => array(),