| 
					
				 | 
			
			
				@@ -22,81 +22,71 @@ func (this *Modules) RegisterAction_ShopUploadImage() *Action { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		WantAdmin: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}, func(wrap *wrapper.Wrapper) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		pf_id := wrap.R.FormValue("id") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		pf_count := wrap.R.FormValue("count") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if !utils.IsNumeric(pf_id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			wrap.MsgError(`Inner system error`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// Read file from request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		file, handler, err := wrap.R.FormFile("file") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			wrap.MsgError(err.Error()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		defer file.Close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// Check file name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if handler.Filename == "" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if !utils.IsNumeric(pf_count) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			wrap.MsgError(`Inner system error`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// Read file to bytes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fileBytes, err := ioutil.ReadAll(file) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			wrap.MsgError(err.Error()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// Check if file is really an image 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if _, _, err := image.Decode(bytes.NewReader(fileBytes)); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			wrap.MsgError(err.Error()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		// Create dirs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if err := os.MkdirAll(wrap.DHtdocs+string(os.PathSeparator)+"products"+string(os.PathSeparator)+"images"+string(os.PathSeparator)+pf_id, os.ModePerm); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			wrap.MsgError(err.Error()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		pf_count_int := utils.StrToInt(pf_count) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if pf_count_int <= 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			wrap.MsgError(`Inner system error`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		target_file_name := utils.Int64ToStr(time.Now().Unix()) + filepath.Ext(handler.Filename) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		target_file_full := wrap.DHtdocs + string(os.PathSeparator) + "products" + string(os.PathSeparator) + "images" + string(os.PathSeparator) + pf_id + string(os.PathSeparator) + target_file_name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if err := wrap.DB.Transaction(func(tx *wrapper.Tx) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// Block rows 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if _, err := tx.Exec("SELECT id FROM shop_products WHERE id = ? FOR UPDATE;", utils.StrToInt(pf_id)); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// Insert row 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if _, err := tx.Exec( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				`INSERT INTO shop_product_images SET 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					product_id = ?, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					filename = ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				;`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				utils.StrToInt(pf_id), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				target_file_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// Proccess all files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for i := 1; i <= pf_count_int; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			post_field_name := "file_" + utils.IntToStr(i-1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if file, handler, err := wrap.R.FormFile(post_field_name); err == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if handler.Filename != "" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if fileBytes, err := ioutil.ReadAll(file); err == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if _, _, err := image.Decode(bytes.NewReader(fileBytes)); err == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if err := os.MkdirAll(wrap.DHtdocs+string(os.PathSeparator)+"products"+string(os.PathSeparator)+"images"+string(os.PathSeparator)+pf_id, os.ModePerm); err == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								target_file_name := utils.Int64ToStr(time.Now().Unix()+int64(i-1)) + filepath.Ext(handler.Filename) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								target_file_full := wrap.DHtdocs + string(os.PathSeparator) + "products" + string(os.PathSeparator) + "images" + string(os.PathSeparator) + pf_id + string(os.PathSeparator) + target_file_name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								if err := wrap.DB.Transaction(func(tx *wrapper.Tx) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									// Block rows 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									if _, err := tx.Exec("SELECT id FROM shop_products WHERE id = ? FOR UPDATE;", utils.StrToInt(pf_id)); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									// Insert row 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									if _, err := tx.Exec( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										`INSERT INTO shop_product_images SET 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											product_id = ?, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+											filename = ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										;`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										utils.StrToInt(pf_id), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										target_file_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									// Write file to disk 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									if err := ioutil.WriteFile(target_file_full, fileBytes, 0664); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+										return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								}); err == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									wrap.Write(`$('#list-images').append('<div class="attached-img"><a href="/products/images/` + pf_id + `/` + target_file_name + `" title="` + target_file_name + `" target="_blank"><img src="/products/images/` + pf_id + `/thumb-0-` + target_file_name + `" /></a>, <a href="javascript:fave.ShopProductsDeleteImage(this, ` + pf_id + `, \'` + target_file_name + `\');">Delete</a></div>');`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				file.Close() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// Write file to disk 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if err := ioutil.WriteFile(target_file_full, fileBytes, 0664); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}); err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			wrap.MsgError(err.Error()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// Delete products XML cache 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		wrap.RemoveProductXmlCacheFile() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		wrap.ResetCacheBlocks() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		wrap.Write(`$('#list-images').append('<div class="attached-img"><a href="/products/images/` + pf_id + `/` + target_file_name + `" title="` + target_file_name + `" target="_blank"><img src="/products/images/` + pf_id + `/thumb-0-` + target_file_name + `" /></a>, <a href="javascript:fave.ShopProductsDeleteImage(this, ` + pf_id + `, \'` + target_file_name + `\');">Delete</a></div>');`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |