products.class.php 7.45 KB
<?php
Class Products{
	private $db;
	private $lang;
	
 
	function __construct($lang){
		$this->db = sdb::getInstance();
		$this->lang = $lang;
	}
	
	public function valid($data){
		$error = array();
		if(isset($data['order_name'])){
			if( !preg_match("/.{1,100}/i",$data['order_name']) ) $error[] = "Îøèáêà ââîäà ïîëÿ Èìÿ (Ìàêñèìóì 100 ñèìâîëîâ).";
		}
  
		if(isset($data['order_adress'])){
			if( !preg_match("/.{1,200}/i",$data['order_adress']) ) $error[] = "Îøèáêà ââîäà ïîëÿ Àäðåñ (Ìàêñèìóì 200 ñèìâîëîâ).";
		}
		
		if(isset($data['order_phone'])){
			if( !preg_match("/.{1,200}/i",$data['order_phone']) ) $error[] = "Îøèáêà ââîäà ïîëÿ Ìîáèëüíûé òåëåôîí";
		}
		
		if(isset($data['order_email'])){
			if( !preg_match("/^([^@]+)+@([^@]+)\.([^@]+)$/i",$data['order_email']) || strlen($data['order_email'])>80 ) $error[] = "Îøèáêà ââîäà ïîëÿ E-mail, äî 80 ñèìâîëîâ.";
		}		
  
		return $error;
	}

	public function getHit(){
		$sql = "select * from catalogs_products where hit=1";
		return $this->db->getAll($sql,array(),DB_FETCHMODE_ASSOC);
	}
	
	public function getTop(){
		$sql = "select * from catalogs_products where top=1";
		return $this->db->getAll($sql,array(),DB_FETCHMODE_ASSOC);
	}

	public function addViewProduct($product_id){
        $i = 0;
        if(isset($_SESSION['view_product']) && count($_SESSION['view_product'])>0){
		foreach($_SESSION['view_product'] as $id){
                if($product_id==$id)$i++;
        }}
        if($i==0)$_SESSION['view_product'][] = $product_id;
	}
	
	public function getUserProducts($limit = "all"){ //unset($_SESSION['view_product']);
		if(isset($_SESSION['view_product']) && count($_SESSION['view_product'])>0){        
		$sql = "select p.*,r.translit as rubric_translit from catalogs_products p LEFT JOIN catalogs_rubrics r ON r.id=p.catalog_id 
		WHERE p.id IN (".implode(",",$_SESSION['view_product']).") ";
		if($limit != "all")$sql .= "LIMIT ".$limit;
		return $this->db->getAll($sql,array(),DB_FETCHMODE_ASSOC);
		}
	}

	public function getRecommended($product_id){
		$id_s = $this->db->getOne("select recommended from catalogs_products where id=?",array($product_id));
		if(strlen($id_s)>0){
		return $this->db->getAll("select p.*,r.translit as rubric_translit from catalogs_products p LEFT JOIN catalogs_rubrics r ON r.id=p.catalog_id where p.id in ($id_s)",array(),DB_FETCHMODE_ASSOC);	
		}else return array();
	}
	
	public function getView($brend_id,$catalog_id,$params = array()){
		$search = array();
		$sort = array();
		$left = '';
		if($catalog_id>0){
			//if($catalog_id==46)$catalog_id = 22;
			$search[] = sprintf("p.catalog_id='%d'", $catalog_id);
		}
		if($brend_id>0){
			$search[] = sprintf("p.brend_id='%d'", $brend_id);
		}		
		if(isset($params['search_str']) && strlen($params['search_str'])>0)$search[] = "(p.name LIKE  '%".$params['search_str']."%' or p.code LIKE  '%".$params['search_str']."%' or p.text LIKE  '%".$params['search_str']."%')";
		if(isset($params['filter_id']) && $params['filter_id']>0){
			$left .= "Left Join catalogs_filters_keys k ON k.product_id=p.id";
			$search[] = sprintf("k.filter_id='%d'", $params['filter_id']);
		}
		$sql = "select p.*,r.name as rubric_name,r.translit as rubric_translit,b.translit as brend_translit from catalogs_products p LEFT JOIN catalogs_rubrics r ON r.id=p.catalog_id LEFT JOIN catalogs_brends b ON b.id=p.brend_id $left where 1=1 ";
		if(count($search))$sql .= "AND " . implode(" AND ",$search)." ";
		$sql .= "order by ";

		if(isset($params['filter_id']) && $params['filter_id']>0){
		$sort[] = "k.sort";
		$sort[] = "asc";
		}else{
		$sort[] = (isset($params['sort'])) ? $params['sort'] : "p.catalog_id";
		$sort[] = (isset($params['order'])) ? $params['order'] : " asc";
		}
		$sql .= implode(" ",$sort);
		//print $sql;
		$pagerOptions = Array(
			'mode' => 'Sliding',
			'delta' => 6,
			'perPage' => 12,
			'spacesBeforeSeparator' => 1,
			'spacesAfterSeparator' => 1
		); 
		$res = Pager_Wrapper_DB($this->db, $sql, $pagerOptions, false, DB_FETCHMODE_ASSOC, array());
		
	return 	$res;
	}
	
	public function getProduct($id){
		return $this->db->getRow("select p.*,r.name as rubric_name,b.translit as brend_translit from catalogs_products p LEFT JOIN catalogs_rubrics r ON r.id=p.catalog_id LEFT JOIN catalogs_brends b ON b.id=p.brend_id where p.id=?",array($id),DB_FETCHMODE_ASSOC);
	}
	
	private function getProductCost($id){
		return $this->db->getOne("select cost from catalogs_products where id=?",array($id));
	}
	
	
	public function addBasket($product_id,$count){
		$i = 0; 
		if(isset($_SESSION['basket'])){
		foreach($_SESSION['basket'] as $key=>$basket){
			if($product_id == $basket['id']){$_SESSION['basket'][$key]['count'] += $count;$i++;}
		}}
		if($i == 0)$_SESSION['basket'][] = array('id'=>$product_id, 'count'=>$count);
		//print_r($_SESSION['basket']);
	}
	
	public function clearBasket(){
		$_SESSION['basket'] = array();
	}
	
	public function rowBasket(){
		$cost = 0;$count = 0;
		if(isset($_SESSION['basket']) && count($_SESSION['basket'])){
			
			foreach($_SESSION['basket'] as $product){
				$cost += ($this->getProductCost($product['id'])*$product['count']);
				$count += $product['count'];
			}
			//$count = count($_SESSION['basket']);	
		}
		return array('cost'=>$cost,'count'=>$count);
	}
	
	public function getBasketProducts(){
		$products = array();
		foreach($_SESSION['basket'] as $product){
			$row = $this->db->getRow("select * from catalogs_products where id=?",array($product['id']),DB_FETCHMODE_ASSOC);
			$row['count'] = $product['count'];
			$row['sum_cost'] = $product['count'] * $row['cost'];
			$products[] = $row;
		}
	return $products;	
	}
	
	public function updateBasket($data){
		$_SESSION['basket'] = array();
		foreach($data['product_id'] as $key=>$product_id){
			if($data['product_count'][$key]>0) $_SESSION['basket'][] = array('id'=>$product_id, 'count'=>$data['product_count'][$key]);
		}
	}
	
	public function getSumCost(){
		$cost = 0;
		foreach($_SESSION['basket'] as $product){
			$cost += ($this->getProductCost($product['id'])*$product['count']);
		}
	return $cost;	
	}

	public function getBasketFull(){
		$count = 0;
		foreach($_SESSION['basket'] as $product){
			$count += $product['count'];
		}
		return $count;
	}
	
	public function sendOrder($data){
  $mail = new PHPMailer();
  $mail->CharSet = "windows-1251";
  $mail->From = (strlen($data['order_email'])>0) ? $data['order_email'] : "send@gopro.com.ua";
  $mail->FromName = $data['order_name'];
  $mail->AddAddress("v.izubenko@extremepride.com.ua", "v.izubenko");
  $mail->AddAddress("anton7779@gmail.com", "anton7779");
  $mail->Subject = "Îôîðìèòü çàêàç!";
  $msg = "";
  foreach($data['product_id'] as $key=>$value){
   $msg .= "ID: ".$value." ";
   $msg .= "Íàçâàíèå: ".$data['product_name'][$key]." ";
   $msg .= "Öåíà çà îäèí: ".$data['product_cost'][$key]." ";
   $msg .= "Êîëè÷åñòâî: ".$data['product_count'][$key]." ";
   $msg .= "Çà âåñü òîâàð: ".$data['product_sum_cost'][$key]." ";
   $msg .= "<br>";
  }
   $msg .= "<br>";
   $msg .= "<br>";
   $msg .= "Îáùàÿ ñóìà: ".$data['sumCost'];
   $msg .= "<br>";
   $msg .= "<b>Êîíòàêòíûå äàííûå:</b>";
   $msg .= "<br>";
   $msg .= "Èìÿ: ".$data['order_name'];
   $msg .= "<br>";
   $msg .= "Àäðåñ: ".$data['order_adress'];
   $msg .= "<br>";
   $msg .= "E-mail: ".$data['order_email'];
   $msg .= "<br>";
   $msg .= "Òåëåôîí: ".$data['order_phone'];
   $msg .= "<br>";
   $msg .= "Êîììåíòàðèé: ".$data['order_comment'];

  $mail->MsgHTML($msg);
   
   if(!$mail->Send()){echo "There has been a mail error sending to <br>";return false;}
   $mail->ClearAddresses();
   $mail->ClearAttachments();	
	}

}
?>