products.class.php 5.08 KB
<?php
Class Products{
	private $db;
	private $lang;
	private $path_pic = array('pic'=>"./pics/products/",
                           'pic_big'=>"./pics/products/big/");	
 
	function __construct($lang){
		$this->db = sdb::getInstance();
		$this->lang = $lang;
	}
	
	public function valid($data){
		$error = array();
		if(!preg_match("/.{1,50}/i",$data['name']))$error[] = "error name";
		return $error;
	}


	public function save($data,$upload){
		$table_name = "catalogs_products";
		$DB_AUTOQUERY = ($data['update_id']>0) ? DB_AUTOQUERY_UPDATE : DB_AUTOQUERY_INSERT;
		$fields_values = array(
								'catalog_id' => $data['catalog_id'],
								'brend_id' => $data['brend_id'],
								'status' => $data['status'],
								'name' => $data['name'],
								'code' => $data['code'],
								'translit' => ($data['translit']) ? $data['translit'] : translitIt($data['name']),
								'text' => $data['text'],
								'features' => $data['features'],
								'video_code' => $data['video_code'],
								'cost' => $data['cost'],
								'recommended' => $data['recommended'],
								'meta_title' => $data['meta_title'],
								'meta_description' => $data['meta_description'],
								'meta_keywords' => $data['meta_keywords'],
								'meta_about' => $data['meta_about']
								);
								
		if(isset($data['hit']))$fields_values['hit'] = 1;else $fields_values['hit'] = 0;
		if(isset($data['top']))$fields_values['top'] = 1;else $fields_values['top'] = 0;		
								
	if(isset($data['delete_pic']) && $data['delete_pic']==1){
		if($data['update_id']>0)$this->deletePic($data['update_id']);
		$fields_values['pic'] = null; $fields_values['pic_big'] = null;
	}
	if($upload['pic']['tmp_name']){
		if($data['update_id']>0)$this->deletePic($data['update_id']);
		$fields_values['pic'] = upload_ImageResize($upload['pic'],array('crop'=>true,'width'=>"147",'height'=>"147",'upload_path'=>$this->path_pic['pic']));
		$fields_values['pic_big'] = upload_ImageResize($upload['pic'],array('width'=>"700",'height'=>"700",'upload_path'=>$this->path_pic['pic_big']));
	}
  
		$res = $this->db->autoExecute($table_name,$fields_values,$DB_AUTOQUERY,"id={$data['update_id']}");
		if (PEAR::isError($res)) die($res->getMessage());
		$id = ($data['update_id']>0) ? $data['update_id'] : mysql_insert_id();
		
		$filters = new Filters($this->lang);
		$filters->saveKeys($id,$data['filter'],$data['filter_sort']);

 }
 
 
 
 
 private function deletePic($id){
  $sql = "select pic,pic_big from catalogs_products where id=?";
  $row = $this->db->getRow($sql,array($id),DB_FETCHMODE_ASSOC);
  @unlink($this->path_pic['pic'] . $row['pic']);
  @unlink($this->path_pic['pic_big'] . $row['pic_big']);
 } 


	public function getView($catalog_id,$params = array()){
		$search = array();
		$sort = array();
		if($catalog_id>0)$search[] = sprintf("catalog_id='%d'", $catalog_id);
		$sql = "select * from catalogs_products where 1=1 ";
		if(count($search))$sql .= "AND " . implode(" AND ",$search)." ";
		$sql .= "order by ";
		$sort[] = (isset($params['sort'])) ? $params['sort'] : "id";
		$sort[] = (isset($params['order'])) ? $params['order'] : " desc";
		$sql .= implode(" ",$sort);
		$pagerOptions = Array(
			'mode' => 'Sliding',
			'delta' => 6,
			'perPage' => 10,
			'spacesBeforeSeparator' => 1,
			'spacesAfterSeparator' => 1
		);
	return Pager_Wrapper_DB($this->db, $sql, $pagerOptions, false, DB_FETCHMODE_ASSOC, array());	
	}
	
	public function getProduct($id){
		return $this->db->getRow("select * from catalogs_products where id=?",array($id),DB_FETCHMODE_ASSOC);
	}

	public function deleteProduct($id){
		$this->deletePic($id);
		$this->db->query("delete from catalogs_products where id=?",array($id));
		$filters = new Filters($this->lang);	
		$filters->deleteKeysProduct($id);
	}

	public function deleteProducts($catalog_id){
		$res = $this->db->getAll("select * from catalogs_products where catalog_id=?",array($catalog_id),DB_FETCHMODE_ASSOC);
		foreach($res as $row){
			$this->deleteProduct($row['id']);
		}
	}

	public function export(){
		$tmpfname = "tmp/products.csv";
		$handle = fopen($tmpfname, "w");
		$res = $this->db->getAll("select code,name,text,'',cost from catalogs_products",array(),DB_FETCHMODE_ASSOC);
		foreach($res as $row){
			fputcsv($handle,$row,';');
		}
		
  fclose($handle);
   $params = array(
      'file'                => $tmpfname,
      'contenttype'         => 'application/xls',
      'contentdisposition'  => array(HTTP_DOWNLOAD_ATTACHMENT, 'products.csv'),
      'cache'               => false
      );
      $error = HTTP_Download::staticSend($params, false); //отдаём файл
      if ($error === true) {
           //если файл загружен успешно, обновляем дату последней закачки
      }

     unlink($tmpfname);		
	}
	
	public function import($file){
		if (($handle = fopen($file['tmp_name'], "r")) !== FALSE) {
			while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
				//print $data[4]."<br />";
				$code = trim($data[0]);
				if(strlen($code)>0){
					$this->db->autoExecute("catalogs_products", array('cost'=>$data[4]), DB_AUTOQUERY_UPDATE,"code='$code'");
				}
			}
			fclose($handle);
		}	
	}	

}
?>