fetchOrder($initData); } } public static function InitOrder($idOrder=null){ if($idOrder!=null){ self::$CurrentOrder = self::GetOrder($idOrder); $_SESSION["order_id"]=$idOrder; }else if(isset($_SESSION["order_id"]) && $_SESSION["order_id"]!=null){ self::$CurrentOrder = self::GetOrder($_SESSION["order_id"]); }else if($_COOKIE["order_id"]!=null){ $_SESSION["order_id"]=$_COOKIE["order_id"]; self::$CurrentOrder = self::GetOrder($_SESSION["order_id"]); } if($_SESSION["order_id"]!=null){ SetCookie("order_id",$_SESSION["order_id"],time()+3600*24*120,"/"); } if(self::$CurrentOrder->OrderStep=="finished"){ self::$CurrentOrder=null; $_SESSION["order_id"]=null; SetCookie("order_id",null,0,"/"); if($idOrder!=null){ return -1; } } if(getPar("nid")!=null){ $tmp = explode("-",getPar("nid")); $nid=(int)$tmp[0]; $uid=(int)$tmp[1]; SetCookie("newsl_id",$nid,time()+3600*24*30,'/'); db::Query("UPDATE newslettersentlog SET Visited=1 WHERE IdNewsletter='$nid' AND IdUser='$uid'",false,true); } if(getParNum("aid")!=null){ //SetCookie("affiliate_id",getPar("aid"),time()+3600*24*30,"/"); //$_SESSION["affiliate_id"]=getPar("aid"); if(!strpos($_SERVER['HTTP_USER_AGENT'],"screenshot-generator") && !strpos($_SERVER['HTTP_USER_AGENT'],"Googlebot")){ //db::Query("INSERT INTO affisource (IdUser,Source,Date) VALUES(".getParNum("aid").",'".mysql_real_escape_string( $_SERVER["HTTP_REFERER"])."','".date("c")."')"); } }else if(getSet("em")){ SetCookie("affiliate_id",19203,time()+3600*24*30,"/"); $_SESSION["affiliate_id"]=19203; }else if(isset($_COOKIE["affiliate_id"])){ $_SESSION["affiliate_id"]=$_COOKIE["affiliate_id"]; } } public function Expedice($idAdminUser,$adminUserName){ //echo "UPDATE orders SET Commission=-1,IdOrderStatus=6,ExpDate='".date("c")."' WHERE IdOrder=".$this->IdOrder; db::Query("UPDATE orders SET Commission=-1,IdOrderStatus=6,ExpDate='".date("c")."' WHERE IdOrder=".$this->IdOrder); db::Query("INSERT INTO orderhistory(IdOrder,IdAdminUser,AdminUserName,Type,Message,Date)VALUES ('".$this->IdOrder."','$idAdminUser','$adminUserName','status_change','osobní odběr => expedováno','".date("c")."')"); MailExpedice($this); } public static function CreateQuickOrders(){ $phones = db::Query("SELECT *,max(DateAdded) date FROM quickorderitem where Processed=0 GROUP BY Phone HAVING date<'".date("Y-m-d H:i:s",time()-1800)."'"); while(db::Fetch($phones)){ self::processQuickOrder(db::$data["Phone"],db::$data["Email"]); } } private static function processQuickOrder($phone,$email){ self::$CurrentOrder=null; self::RequireOrder(true, "bezpotisku",1); if($email==''){ $em=db::FQuery("SELECT Email FROM user u WHERE Phone LIKE ('".db::Escape($phone)."') AND Email!='' AND BadEmail=0 ORDER BY IdUser DESC",'Email'); if($em==null){ $phone= str_replace(" ", "", $phone); $em=db::FQuery("SELECT Email FROM user u WHERE Phone LIKE ('".db::Escape($phone)."') AND Email!='' AND BadEmail=0 ORDER BY IdUser DESC",'Email'); } if($em==null){ if(strlen($phone==13)){ $tmp= substr($phone, 4); } $em=db::FQuery("SELECT Email FROM user u WHERE Phone LIKE ('%".db::Escape($phone)."%') AND Email!='' AND BadEmail=0 ORDER BY IdUser DESC",'Email'); } $email=$em; } db::Query("INSERT INTO user(FirstName,LastName,Email,Phone)VALUES('Prodejna Express','','".db::Escape($email)."','".db::Escape($phone)."')"); $usrId=db::ReturnId(); User::InitUser($usrId); $adr=new Address(); $adr->Phone=$phone; $adr->FirstName='Prodejna QR'; $ord=self::$CurrentOrder; $ord->SetUser($usrId); $prodejna=3; $items= db::Query("SELECT s.PurchasePrice,AmountVyprodej,qo.IdAdminUser,qo.QuickOrderType,qo.TargetShop,qo.Count,p.IdProduct,IdQuickOrderItem,IdStore,s.IdProductSize,IdColorSetColor,s.SellPrice as ProductPrice,p.ActionPrice as ActionPrice,pps.Price as SizePrice,cc.Price as ColorPrice FROM quickorderitem qo INNER JOIN store s USING(IdStore) INNER JOIN product p USING(IdProduct) INNER JOIN product_productsize pps ON pps.IdProduct=p.IdProduct AND pps.IdProductSize=s.IdProductSize INNER JOIN colorset_color cc ON cc.IdColor=s.IdColor AND cc.IdColorSet=p.IdMainColorSet WHERE Phone='$phone' AND Processed=0"); $list=[]; $type=null; while(db::Fetch($items)){ if($type==null){ $type=db::$data["QuickOrderType"]; } if($type!=db::$data["QuickOrderType"]){ $type='assist-qr'; } $disc=0; $sellType='normal'; /*if(db::$data["ActionPrice"]>0){ $disc=round((1-db::$data["ActionPrice"]/db::$data["ProductPrice"])*100); $price=db::$data["ActionPrice"]+db::$data["ColorPrice"]+db::$data["SizePrice"]; $sellType='action'; }else*/ if(db::$data["AmountVyprodej"]>=db::$data["Count"]){ $sellType='sale'; $price=round(db::$data["PurchasePrice"]*1.21*1.1);//+db::$data["ColorPrice"]+db::$data["SizePrice"]); $disc = round((1-($price/(db::$data["SellPrice"])))*100); }else{ $price=db::$data["ProductPrice"];//+db::$data["ColorPrice"]+db::$data["SizePrice"]; } $ord->AddItem(0,db::$data["IdProduct"],db::$data["IdProductSize"],db::$data["IdColorSetColor"],db::$data["Count"],$price,false,$disc,0,null,$sellType); $prodejna=db::$data["TargetShop"]; $list[]=db::$data["IdQuickOrderItem"]; $idAdminUser=db::$data["IdAdminUser"]; } $adr->LastName="(".$type.")"; $ord->SetShipping(4,$prodejna); $ord->SetPayment(4); $ord->QuickOrder=true; $ord->SaveAddress($adr); $ord->Save(); $ord->SavePrice(); Order::$CurrentOrder->Confirm(); $num = db::FQuery("SELECT OrderNumber FROM orders o WHERE IdOrder=".$ord->IdOrder,"OrderNumber"); db::Query("UPDATE orders SET IdOrderAssistant='".(int)$idAdminUser."' WHERE IdOrder=".$ord->IdOrder); db::Query("UPDATE quickorderitem SET Processed=1,IdOrder='".$ord->IdOrder."' WHERE IdQuickOrderItem IN(".implode(',',$list).")"); $msg="Dekujeme za objednavku, dostala cislo $num. Uz na ni pracujeme, takze ji muzete brzy ocekavat na prodejne. Tym BezPotisku."; db::Query("INSERT INTO orderhistory(IdOrder,IdAdminUser,AdminUserName,Type,Message,Date)VALUES('".$ord->IdOrder."','0','[robot]','sms_sent','$msg','".date("c")."')"); require_once(__DIR__."/SMSQueue.php"); SMSQueue::Add($phone, $msg, true); } public function GetPaymentID(){ db::Query("SELECT * FROM orderpayment op WHERE IdOrder=".$this->IdOrder." AND Type in('faktura','extra') AND Paid=0"); db::Fetch(); return db::$data["IdOrderPayment"]; } public function IsPaid(){ db::Query("SELECT * FROM orderpayment op WHERE IdOrder=".$this->IdOrder." AND Type IN('faktura','extra') AND Paid=0"); while(db::Fetch()){ if(db::$data["Type"]=='faktura'){ return false; }else if(db::$data["Amount"]>=20){ return false; } } return true; } public function AddShowroomDemand($store=3){ if($this->IdOrder>0){ db::Query("SELECT * FROM orders o INNER JOIN orderitem oi USING(IdOrder) INNER JOIN colorset_color cc USING(IdColorSetColor) INNER JOIN store s ON s.IdProduct=oi.Product AND s.IdColor=cc.IdColor AND s.IdProductSize=oi.IdProductSize where IdOrder=".$this->IdOrder); db::Query("START TRANSACTION",false); while(db::Fetch()){ $amount=db::$data["Count"]; if($store==3){ db::Query("UPDATE store SET DemandPrahaAndel=DemandPrahaAndel+$amount WHERE IdStore=".db::$data["IdStore"],false); }else{ db::Query("UPDATE store SET DemandBrnoBehounska=DemandBrnoBehounska+$amount WHERE IdStore=".db::$data["IdStore"],false); } } db::Query("DELETE FROM orderitem WHERE IdOrder=".$this->IdOrder); db::Query("COMMIT"); } } public static function InitUsershopOrder(){ if(isset($_SESSION["u_order_id"]) && $_SESSION["u_order_id"]!=null){ self::$CurrentOrder = self::GetOrder($_SESSION["u_order_id"]); } if(self::$CurrentOrder->OrderStep=="finished"){ $_SESSION["u_order_id"]=null; $_SESSION["send_id"]=self::$CurrentOrder->IdOrder; self::$CurrentOrder=null; } } public static function RequireOrder($create=true,$source=null,$country=null,$ip=""){ if(self::$CurrentOrder==null){ if($create){ self::$CurrentOrder= self::GetNewOrder($source,$country,$ip); $_SESSION["order_id"]=self::$CurrentOrder->IdOrder; }else{ go("index.php"); exit; } } } public static function RequireUsershopOrder($create=true){ if(self::$CurrentOrder==null){ if($create){ self::$CurrentOrder= self::GetNewOrder(); $_SESSION["u_order_id"]=self::$CurrentOrder->IdOrder; }else{ go("index.php"); } } } public function GetCOD(){ db::Query("SELECT * FROM orderpayment op LEFT JOIN adminuser_orders USING(IdOrder) WHERE IdOrder=".$this->IdOrder." AND Paid=0 and isnull(IdAdminUserOrder) and (Type='faktura' OR Type='extra')"); if(db::Fetch()){ $cod=db::$data["Amount"]-db::$data["PaidAmount"]; if($cod>=20 || db::$data["Amount"]>=20){//pokud je Amount>=20, jde to do pohody s tou částkou a tedy musí sedět přijaté peníze k té faktuře, takže se musí poslat na dobírku return $cod; }else{ return 0; } }else{ return 0; } } public function CheckGift(){ return; //if(DEV){ if($this->Source=="of" && Country::$UserCountryId==1){ db::Query("UPDATE orderitem SET Count=0 WHERE IdOrder=".$this->IdOrder." AND Product=334"); return; $cnt=0; $ins=true; db::Query("SELECT * FROM orderitem oi WHERE IdOrder=".$this->IdOrder." AND Product=334"); if(db::Fetch()){ $ins=false; if(db::$data["Count"]>0){ $cnt=1; } } $total = $this->GetItemsTotalPrice(); if($total>=800){ if($cnt==0){ if($ins){ $this->AddItem(0,334,15,13928,1,0,true); }else{ db::Query("UPDATE orderitem SET Count=1 WHERE IdOrder=".$this->IdOrder." AND Product=334"); } } }else if($cnt>0){ db::Query("UPDATE orderitem SET Count=0 WHERE IdOrder=".$this->IdOrder." AND Product=334"); } } //} } public function GetItemsJSON(){ $data = array(); $items=array(); $data["Express"]=false; $itemsList = $this->GetItems(true,true); //$this->CheckGift(); foreach($itemsList as $item){ /* @var $item OrderItem */ $tmp=array(); $tmp["Id"]=$item->IdOrderItem; $tmp["Count"]=$item->Count; $tmp["ItemPrice"]=$item->Price; $tmp["TotalPrice"]=$item->TotalPrice(); $tmp["FullPrice"]=round($tmp["ItemPrice"]/(1-$item->Discount/100))*$tmp["Count"]; $tmp["Size"]=$item->Size; $tmp["Discount"]=$item->Discount; $tmp["Avail"]=$item->GetAvailText(); $tmp["returnPrice"]=$item->ReturnPrice(); if($item->Product==210){ $data["Express"]=true; } $items[]=$tmp; } $data["Items"]=$items; $data["Delivery"]=$this->GetShippingDeliveryList(); $data["Discount"]=$this->GetDiscount($this->GetItemsTotalPrice(false, false),false,false); $data["TotalPrice"]=$this->GetItemsTotalPrice(); return json_encode($data); } public function GetItemsJSON2(){ $data = array(); $items=array(); $data["Express"]=false; $itemsList = $this->GetItems(true,true); //$this->CheckGift(); $itemsPrice=0; foreach($itemsList as $item){ /* @var $item OrderItem */ $tmp=array(); $tmp["Id"]=$item->IdOrderItem; $tmp["Count"]=$item->Count; $tmp["ItemPrice"]=$item->Price; $tmp["TotalPrice"]=$item->TotalPrice(); $itemsPrice+=$tmp["TotalPrice"]; $tmp["FullPrice"]=round($tmp["ItemPrice"]/(1-$item->Discount/100))*$tmp["Count"]; $tmp["Size"]=$item->Size; $tmp["Discount"]=$item->Discount; $tmp["TargetItem"]=$item->Data["IdOrderItemTarget"]; $tmp["Product"]=$item->Product; $tmp["Avail"]=$item->GetAvailText(); $tmp["returnPrice"]=$item->ReturnPrice(); if($item->Product==210){ $data["Express"]=true; } $items[]=$tmp; } $data["Items"]=$items; $data["Delivery"]=$this->GetShippingDeliveryList(); $data["DeliveryAll"]=$this->GetShippingDeliveryListAll(); $data["CodAvail"]=(int)$this->OnDeliveryPermitted(); $data["Discount"]=$this->GetDiscount($this->GetItemsTotalPrice(false, false),false,false); $data["useCb"]=$this->Data["UseCashback"]; $data["cbValue"]=$this->cashback; $data["TotalPrice"]=(int)$this->TotalPrice; if($this->Data["PayWithoutTax"]){ $data["PayWithoutTax"] = 1; $data["PriceWithoutTax"] = $this->Data["PriceWithoutTax"]; } $data["ItemsPrice"]=$itemsPrice; if($this->TotalPrice>150000){ $data["toobig"]=true; }else{ $data["toobig"]=false; } return json_encode($data); } public function GetShippingDeliveryList(){ $we=$this->GetTotalWeight(); $pr=$this->GetItemsTotalPrice(); return Delivery::GetList(Shipping::GetShippingList(false),$this->GetItems(),$we,$pr); } public function GetShippingDeliveryListAll(){ $we=$this->GetTotalWeight(); $pr=$this->GetItemsTotalPrice(); return Delivery::GetListAll(Shipping::GetShippingList(false,true),$this->GetItems(),$we,$pr); } public function GetRMList(){ $orderItems = $this->GetItems(); $total=0; $prodIdStr="["; foreach($orderItems as $item){ if($prodIdStr!="["){ $prodIdStr.=","; } //$prodIdStr.="'design".$item->IdDesign."','".$item->Product."-blank'"; $prodIdStr.="'".$item->Product."blank'"; $list = $item->GetMotivesList(); foreach($list as $motivItem){ $prodIdStr.=",'pm".$item->Product."-".$motivItem."'"; $prodIdStr.=",'mot".$motivItem."'"; } if(count($list)>0){ //$ecId=GoogleEcomm::GetId($item->Product, $list[0]); $ecId2=$item->Product."-".$list[0]; if($prodIdStr!="["){ $prodIdStr.=","; } $prodIdStr.="'".$ecId."','$ecId2'"; $total+=Country::Price($item->TotalPrice()); } } $prodIdStr.="]"; return $prodIdStr; } public function GetCartTotal(){ $orderItems = $this->GetOrderItems(); $total=0; foreach($orderItems as $item){ $total+=$item->TotalPrice(); } return $total; } public function Reklamovano(){ if($this->Source=="bezpotisku"){ db::Query("SELECT * FROM orderhistory oh WHERE IdOrder='".$this->IdOrder."' AND Message LIKE ('% => Reklamace') LIMIT 1"); }else{ db::Query("SELECT * FROM orderhistory oh WHERE IdOrder='".$this->IdOrder."' AND Message LIKE ('Reklamace%') LIMIT 1"); } if(db::Fetch()){ return true; }else{ return false; } } public function Copy($forwardDiscount=false){ $list = $this->GetItems(); if(count($list)>0){ $ord = self::GetNewOrder(); db::Query("UPDATE orders o SET Source='".$this->Source."',Price='".$this->TotalPrice."' WHERE IdOrder=".$ord->IdOrder); foreach($list as $item){ $fee=db::FQuery("SELECT * FROM motivpublicfee WHERE IdOrderItem=".$item->IdOrderItem); db::Query("INSERT INTO orderitem(IdDesign,IdSpecialDesign,Product,IdOrder,IdColorSetColor,IdProductSize,Count,Price,Discount,Sewing) (SELECT IdDesign,IdSpecialDesign,Product,".$ord->IdOrder.",IdColorSetColor,IdProductSize,Count,Price,Discount,Sewing FROM orderitem oi WHERE IdOrderItem=".$item->IdOrderItem.")"); if($fee!=null){ $ret=db::ReturnId(); $ins=[]; $ins["IdOrderItem"]=$ret; $ins["IdMotivPublic"]=$fee["IdMotivPublic"]; $ins["Fee"]=$fee["Fee"]; $ins["State"]="none"; db::Insert("motivpublicfee", $ins); } } if($forwardDiscount && $this->IdDiscountCode>0){ db::Query("UPDATE orders SET IdDiscountCode=".$this->IdDiscountCode.",DiscountCodeAmount='".$this->DiscountCodeValue."' WHERE IdOrder=".$ord->IdOrder); db::Query("UPDATE discountcode SET Used=0 WHERE IdDiscountCode=".$this->IdDiscountCode); db::Query("UPDATE orders SET IdDiscountCode=0,Price=Price+DiscountCodeAmount,DiscountCodeAmount=0 WHERE IdOrder=".$this->IdOrder); } $ord = Order::GetOrder($ord->IdOrder); return $ord; }else{ return null; } } public static function CheckOrderHash($hash){ $list=explode("-",$hash); if(User::CheckTimeLimitedHash($list[0], $list[1], 24*3,'order')){ return self::GetOrderByNumber($list[0]); }else{ return false; } } public function GetOrderHash($num=null){ if($num!=null){ return $num."-".User::GetTimeLimitedHash($num, 24*3,0,'order'); }else{ return $this->OrderNumber."-".User::GetTimeLimitedHash($this->OrderNumber, 24*3,0,'order'); } } public function GetRecoveryLink($isBp=false,$country=1){ if($isBp){ if($country!=1){ return "//www.bezpotlace.sk/recovery/".$this->IdOrder."/".md5("no_hack42".$this->IdOrder); }else{ return "//www.bezpotisku.cz/recovery/".$this->IdOrder."/".md5("no_hack42".$this->IdOrder); } }else{ return PageHandler::GetLangVariantAddr()."/recovery.php?id=".$this->IdOrder."&hash=".md5("no_hack42".$this->IdOrder); } } public function ClearDiscount(){ db::Query("UPDATE discountcode SET Used=0 WHERE Unlimited=0 AND IdDiscountCode='".$this->IdDiscountCode."'"); db::Query("UPDATE orders SET IdDiscountCode=0 WHERE IdOrder=".$this->IdOrder); $this->IdDiscountCode=0; } public function GetDiscount($limitPrice=null,$clearDiscount=false,$obeyLimit=true){ if($this->IdDiscountCode!=0){ db::Query("SELECT * FROM discountcode WHERE IdDiscountCode='".$this->IdDiscountCode."' "); if( db::Fetch()){ if($this->OrderNumber==0 && (db::$data["IsActive"]==0 || (db::$data["Used"]==1 && db::$data["Unlimited"]==0))){ db::Query("UPDATE orders SET IdDiscountCode=0 WHERE IdOrder=".$this->IdOrder); $this->IdDiscountCode=0; return null; } $discount=new Discount(); $discount->Type=db::$data["Type"]; $discount->Amount=db::$data["Amount"]; $discount->Limit=db::$data["MinimalValue"]; $discount->Match=true; if($discount->Type=="fixed"){ $discount->ActualAmount=min($limitPrice,$discount->Amount); }else{ $discount->ActualAmount=round($limitPrice*$discount->Amount/100); } if($limitPrice!=null){ if($discount->Limit>$limitPrice){ if($clearDiscount){ $this->ClearDiscount(); } $discount->ActualAmount=0; if($obeyLimit){ return null; }else{ $discount->Match=false; } } } return $discount; } } return null; } public function GetBox(){ db::Query("SELECT * FROM productionbox WHERE IdProductionBox='".$this->Data["IdProductionBox"]."'"); if(db::Fetch()){ return db::$data; } } public function GetExpeditionNotes(){ return db::QueryArray("SELECT * FROM orderhistory oh WHERE IdOrder='".$this->IdOrder."' AND (Type='admin_note_change' OR Type='admin_note_orderitem_change') AND NoteType='expedition_warning' ORDER BY Date ASC"); } public function SetDiscountCode($code){ db::Query("SELECT IdDiscountCode,LimitSource FROM discountcode WHERE Code='$code' AND (Used=0 OR Unlimited=1) AND IsActive=1 AND ExpirationDate>=DATE('".date("Y-m-d")."')"); //db::FastLog("SELECT IdDiscountCode,LimitSource FROM discountcode WHERE Code='$code' AND (Used=0 OR Unlimited=1) AND IsActive=1 AND ExpirationDate>=DATE('".date("Y-m-d")."')"); //echo "SELECT IdDiscountCode FROM discountcode WHERE Code='$code' AND (Used=0 OR Unlimited=1) AND ExpirationDate>=DATE('".date("Y-m-d")."')"; if(db::Fetch()){ //db::FastLog("codee found".$code); if(db::$data["LimitSource"]!="" && db::$data["LimitSource"]!="none"){ if($this->Source!=db::$data["LimitSource"]){ return false; } } $id=db::$data["IdDiscountCode"]; $this->ClearDiscount(); //db::Query("UPDATE discountcode SET Used=1 WHERE IdDiscountCode=".$id); db::Query("UPDATE orders SET IdDiscountCode=".$id." WHERE IdOrder=".$this->IdOrder); $this->IdDiscountCode=$id; return true; }else{ return false; } } public function RequiresPackage(){ db::Query("SELECT SUM(SendAsPackage) as sm FROM orderitem oi INNER JOIN product p ON p.IdProduct=oi.Product WHERE oi.Count>0 AND oi.IdOrder=".$this->IdOrder); db::Fetch(); if(db::$data["sm"]>0){ return true; }else{ return false; } } public static function ClearCart(){ $_SESSION["order_id"]=null; $_COOKIE["order_id"]=null; SetCookie("order_id",null,0,"/"); Order::$CurrentOrder=null; } public static function GetNewOrder($source=null,$country=null,$ip=''){ if($country==null){ $country=Country::$UserCountryId; } if(Country::$UserCountryId==5){ $dest=3; }else{ $dest=Country::$UserCountry->DefaultDestination; } if($source!=null){ db::Query("INSERT INTO orders(Source,OrderDate,IdOrderCountry,IdDestinationCountry,IP) values('".db::Escape($source)."','".date("c")."','".$country."',$dest,'$ip')"); }else{ db::Query("INSERT INTO orders(OrderDate,IdOrderCountry,IdDestinationCountry,IP) values('".date("c")."','".$country."',$dest,'".Order::GetIP()."')"); } return self::GetOrder(db::ReturnId()); } public static function GetOrder($id){ db::Query("SELECT * FROM orders o WHERE IdOrder='".(int)$id."'"); if(db::Fetch()){ return (new Order(db::$data)); }else{ return null; } } public function StornoAvailable(){ if($this->Source=="bezpotisku"){ if(in_array($this->Data["IdOrderStatus"],array(1,2,3,4,7,10,13,17,29))&& $this->Data["Paid"]==0){ $items=$this->GetItems(false); db::Query("SELECT * FROM orderitem oi WHERE IdOrder=".$this->IdOrder." and ProducedCount>0"); if(db::Fetch()){ return false; } }else{ return false; } return true; }else{ return true; } } public function GetSimpleStatusName(){ $status=$this->Data["IdOrderStatus"]; if($status==8){ return "Stornováno"; }else if($status==6){ return "Expedováno"; }else if($status==17){ return "Nedovoláno"; }else if(in_array($status,array(1,2,3,7,12))){ return "Ověřuje se"; }else if($this->IdPayment==1 && $this->Data["Paid"]!=1){ return "Čeká na zaplacení"; }else{ return "Vyrábí se"; } } public function GetStatusName(){ //db::FastLog($this->Data["OrderNumber"]." ".$this->Data["IdOrderStatus"]); db::Query("SELECT * FROM orderstatusname WHERE IdCountry='".Country::$UserCountryId."' and IdOrderStatus='".$this->Data["IdOrderStatus"]."'"); db::Fetch(); if($this->Source=="bezpotisku" && db::$data["LocalStatusNameBP"]!=null){ return db::$data["LocalStatusNameBP"]; }else{ return db::$data["LocalStatusName"]; } } public static function GetOrderByNumber($id){ $data=db::Query("SELECT o.IdUserShop,o.DPH,o.*,sum(bp.Amount) as bonus,osn.* FROM orders o LEFT JOIN orderitem oi USING(IdOrder) LEFT JOIN bonuspoints bp USING(IdOrderItem) LEFT JOIN orderstatusname osn ON o.IdOrderStatus=osn.IdOrderStatus AND osn.IdCountry=".Country::$UserCountryId." WHERE o.OrderNumber='$id'"); return (new Order(db::Fetch($data))); } public static function GetOrderByGopay($id){ $data=db::Query("SELECT * FROM orders o WHERE GopayId='$id'"); return (new Order(db::Fetch($data))); } private function fetchOrder($data){ $this->IdOrder=$data["IdOrder"]; $this->UseDefaultAddress=$data["DefaultAddress"]; $this->IdPayment=$data["IdPayment"]; $this->IdShipping=$data["IdShipping"]; $this->DPH=$data["DPH"]; $this->cashback = $data["UsedCashback"]; $this->CustomerNote = $data["CustomerNote"]; $this->TotalPrice=$data["Price"]; $this->IdUser=$data["IdUser"]; $this->ShippingPrice=$data["ShippingPrice"]; $this->PaymentPrice=$data["PaymentPrice"]; $this->OrderStep=$data["OrderStep"]; $this->OrderNumber=$data["OrderNumber"]; $this->Tel=$data["Phone"]; $this->StatusName=$data["LocalStatusName"]; $this->Data=$data; $this->Bonus=$data["bonus"]; $this->UseBonus=$data["UseBonus"]; $this->BonusAmount=$data["BonusAmount"]; $this->postPSC=$data["DeliveryPost"]; $this->IdDiscountCode=$data["IdDiscountCode"]; $this->IdUserShop=$data["IdUserShop"]; $this->DiscountCodeValue=$data["DiscountCodeAmount"]; if($this->Bonus==null){ $this->Bonus=0; } $this->CurrencyRate=$data["CurrencyRate"]; $this->Source=$data["Source"]; } public function GetStatusChangeDate($format=true){ db::Query("SELECT * FROM orderhistory WHERE IdOrder=".$this->IdOrder." AND Type='status_change' ORDER BY IdOrderHistory DESC LIMIT 1"); if(db::Fetch()){ $time=strtotime(db::$data["Date"]); }else{ $time=strtotime($this->Data["OrderDate"]); } if($format){ return date("j.n. H:i",$time); }else{ return $time; } } public function Save(){ $data=array(); if($this->Source!=null){ $data["Source"]=$this->Source; } if($this->IdUserShop!=null && $this->IdUserShop!=0){ $data["IdUserShop"]=$this->IdUserShop; } if($this->Payment!=null){ $data["IdPayment"]=$this->Payment->Id; $data["PaymentPrice"]=$this->Payment->_price; } if($this->Shipping!=null){ $data["IdShipping"]=$this->Shipping->Id; $data["ShippingPrice"]=$this->Shipping->_price; } if($_SESSION["gomobile1"]==1){ $data["Mobile"]=1; } if($this->postPSC!==null){ $data["DeliveryPost"]=$this->postPSC; } if($this->IdUser!=null){ $data["IdUser"]=$this->IdUser; } $data["UseBonus"]=1;//$this->UseBonus; //db::FastLog(print_r($data,true)); db::Update("orders" , $data , "IdOrder=".$this->IdOrder); } public function SetUser($IdUser){ $this->IdUser=$IdUser; db::Query("UPDATE orders SET IdUser='$IdUser' WHERE IdOrder=".$this->IdOrder); } public function SetUseBonus($bonus){ $this->UseBonus=$bonus; } public function SetComment($comment){ $this->CustomerNote=$comment; db::Query("UPDATE orders SET customerNote='".db::Escape($comment)."' WHERE IdOrder=".$this->IdOrder); } public function GetComment($searchDeleted=false){ db::Query("SELECT customerNote FROM orders WHERE IdOrder=".$this->IdOrder); if(db::Fetch()){ if(db::$data["customerNote"]=="" && $searchDeleted){ db::Query("SELECT * FROM orderhistory WHERE Type='admin_note_change' AND IdOrder=".$this->IdOrder." AND Message LIKE('[Smazání zákazníkovy poznámky] %')"); if(db::Fetch()){ return str_replace("[Smazání zákazníkovy poznámky] ", "", db::$data["Message"]); }else{ return ""; } }else{ return db::$data["customerNote"]; } }else{ return ""; } } public function SetPayment($paymentId){ $this->Payment=Payment::GetPayment($paymentId); $this->IdPayment=$this->Payment->Id; } public function SetShipping($shipping,$zip=null){ if($shipping==13){ $s=substr($zip,0,1); //if($s=="Z"){ $shipping=10; //}else{ // $shipping=11; //} $zip=substr($zip,1); } if($shipping==4 ){ if(!in_array($zip,[1,2,3,4,5,6,7,8,9,10])){ $zip=1; } } $this->Shipping=Shipping::GetShipping($shipping); $this->IdShipping=$this->Shipping->Id; if($zip!=null){ $zip= str_replace(" ", "", $zip); } if($zip==null){ $zip=0; } $this->postPSC=$zip; } public function GetShipping(){ return Shipping::GetShipping($this->IdShipping); } public function GetPayment(){ return Payment::GetPayment($this->IdPayment); } public function GetOrderItemsIds($include0=true){ if($include0){ db::Query("SELECT IdOrderItem FROM orderitem WHERE IdOrder=".$this->IdOrder,true); }else{ db::Query("SELECT IdOrderItem FROM orderitem WHERE Count>0 AND IdOrder=".$this->IdOrder,true); } $items = array(); while(db::Fetch()){ array_push($items,db::$data["IdOrderItem"]); } return $items; } public static function ActivateAffiliate($id){ //db::Query("UPDATE user SET AffiliateActive=1 WHERE IdUser='$id'"); } private function getRandomString($length = 6) { $validCharacters = "ACDEFGHJKMNPQRSTUXYVWZ2345679"; $validCharNumber = strlen($validCharacters); $result = ""; for ($i = 0; $i < $length; $i++) { $index = mt_rand(0, $validCharNumber - 1); $result .= $validCharacters[$index]; } return $result; } public function GetSMSCode(){ return db::FQuery("SELECT SMSCode FROM orders WHERE IdOrder=".$this->IdOrder,"SMSCode"); } public static function OrderNumberSMS($number,$country,$service){ if(strlen($number)>9){ $number=substr($number,4); } $str="SELECT OrderNumber,IdOrderStatus,o.IdDestinationCountry,Email,o.Phone FROM orders o INNER JOIN user u USING(IdUser) WHERE OrderNumber>0 AND Source='".db::Escape($service)."' and OrderDate>'".date("Y-m-d",time()-3600*24*60)."' AND IdOrderCountry='".(int)$country."' AND o.Phone like('%".$number."%') ORDER BY OrderNumber DESC"; db::Query($str); //db::FastLog($str); while(db::Fetch()){ $stat=db::$data["IdOrderStatus"]; if($stat!=8 && $stat!=6 ){ $target=db::$data; break; } } if($target==null){ db::Seek(0); while(db::Fetch()){ $stat=db::$data["IdOrderStatus"]; if($stat!=8){ $target=db::$data; break; } } if($target==null){ db::Seek(0); while(db::Fetch()){ $stat=db::$data["IdOrderStatus"]; $target=db::$data; break; } } } if($target!=null){ $tel=db::$data["Phone"]; $dest=db::$data["IdDestinationCountry"]; if($adr->IdDestinationCountry==3){ if(substr($tel,0,1)!="+" && substr($tel,0,3)!="421"){ $tel="+421".$tel; } } if($service=="bezpotisku"){ if($adr->IdDestinationCountry==3){ $msg="BEZPOTLACE.SK Cislo vasi posledni objednavky je ".$target["OrderNumber"]." email ".$target["Email"]; }else{ $msg="BEZPOTISKU.CZ Cislo vasi posledni objednavky je ".$target["OrderNumber"]." email ".$target["Email"]; } }else if($service=="of"){ $msg="BELABEL.CZ Cislo vasi posledni objednavky je ".$target["OrderNumber"]." email ".$target["Email"]; } require_once(__DIR__."/SMSQueue.php"); SMSQueue::Add($tel, $msg, true); /* require_once(__DIR__.'/../sms/connect.php'); $sms = new CSMSConnect(); $sms->Create("Lemicom_h1","4aaedfbb",2); // inicializace a prihlaseni login, heslo, typ zabezpeceni $sms->Add_SMS( $tel , $msg ); $result = $sms->SendAllSMS(); $sms->Logout();*/ db::Log("OrderNumberSMS",$target["OrderNumber"]); return true; }else{ return false; } } public static function ConfirmCode($code){ $code=strtoupper($code); if(strlen($code)<4){ return false; } db::Query("SELECT * FROM orders WHERE SMSCode='$code' AND (IdOrderStatus=1 OR IdOrderStatus=17) "); if(db::Fetch()){ $id=db::$data["IdOrder"]; db::Query("INSERT INTO orderhistory(IdOrder,IdAdminUser,AdminUserName,Type,Message,Date)VALUES('$id','0','[robot]','order_confirmed','Objednávka potvrzena kódem $code','".date("c")."')"); db::Query("INSERT INTO orderhistory(IdOrder,IdAdminUser,AdminUserName,Type,Message,Date)VALUES('$id','0','[robot]','status_change','čeká na vyřízení => vyřizuje se','".date("c")."')"); if(db::$data["CustomerNote"]!=""){ db::Query("UPDATE orders SET IdOrderStatus=1 WHERE IdOrder=$id"); }else{ db::Query("UPDATE orders SET IdOrderStatus=2 WHERE IdOrder=$id"); } return true; }else{ db::Log("bad code ".$code); return false; } } private function sendSMS(){ $string=""; do{ $string=$this->getRandomString(4); db::Query("SELECT 1 FROM orders WHERE SMSCode='".$string."'"); }while(db::Fetch()); db::Query("UPDATE orders SET SMSCode='$string' WHERE IdOrder=".$this->IdOrder); $tel=$this->Tel; $adr=$this->GetAddress(); if($adr->IdDestinationCountry==3){ if(substr($tel,0,1)!="+" && substr($tel,0,3)!="421"){ $tel="+421".$tel; } } if($this->Source=="natriko"){ $msg="NATRIKO.CZ Overovaci kod: ".$string." Zadejte tento kod na strance prehledu dokoncene objednavky nebo na adrese www.belabel.cz/over . Dekujeme."; }else if($this->Source=="bezpotisku"){ if($adr->IdDestinationCountry==3){ $msg="BEZPOTLACE.SK Overovaci kod: ".$string." Zadejte tento kod na strance prehledu dokoncene objednavky nebo na adrese www.bezpotlace.sk/over . Dekujeme."; }else{ $msg="BEZPOTISKU.CZ Overovaci kod: ".$string." Zadejte tento kod na strance prehledu dokoncene objednavky nebo na adrese www.bezpotisku.cz/over . Dekujeme."; } }else if(Country::$UserCountryId==1){ $msg="BELABEL.CZ Overovaci kod: ".$string." Zadejte tento kod na strance prehledu dokoncene objednavky nebo na adrese www.belabel.cz/over . Dekujeme."; }else{ $msg="Belabel.sk Overovaci kod: ".$string." Zadejte tento kod na strance prehledu dokoncene objednavky nebo na adrese www.belabel.sk/over . Dekujeme."; } db::Query("INSERT INTO orderhistory(IdOrder,IdAdminUser,AdminUserName,Type,Message,Date)VALUES('".$this->IdOrder."','0','[robot]','sms_sent','$msg','".date("c")."')"); require_once(__DIR__."/SMSQueue.php"); SMSQueue::Add($tel, $msg, true); /*require_once(__DIR__.'/../sms/connect.php'); $sms = new CSMSConnect(); $sms->Create("Lemicom_h1","4aaedfbb",2); // inicializace a prihlaseni login, heslo, typ zabezpeceni $sms->Add_SMS( $tel , $msg ); $result = $sms->SendAllSMS(); $sms->Logout();*/ } public function GetUser(){ return User::GetUser($this->IdUser); } public function ConfirmUserShopOrder(){ require_once("php/MailNotify.php"); $items=$this->GetOrderItemsIds(true); if(Order::GetIP()=="91.223.89.139"){ return; } if(count($items)==0){ return; } foreach($items as $item){ db::Query("UPDATE orderitem SET IdProductSize='".postPar("size".$item)."',Count='".postPar("count".$item)."' WHERE IdOrderItem=".$item); } db::Query("SELECT sum(Count*Price) as sum FROM orderitem oi WHERE IdOrder=".$this->IdOrder); db::Fetch(); $sum=db::$data["sum"]; $addr=new Address(); $addr->FirstName=postPar("name"); $addr->LastName=postPar("lastname"); $addr->BLine1=postPar("BLine1"); $addr->BLine2=postPar("BLine2"); $addr->BNumber=postPar("BNum"); $addr->BZip=postPar("BZip"); $addr->Phone=postPar("Phone"); if($addr->Phone=="555-666-0606"){ return; } $addr->IdDestinationCountry=postPar("country"); $user=new User(); $user->Address=$addr; $user->Email=postPar("Email"); $user->Registered=false; $user->SaveUser(); if($_SESSION["USERSHOP"]==119){ User::$CurrentUser->SetSource("mothersucker"); } $this->SetUser($user->UserId); $this->UseDefaultAddress=true; $this->IdUserShop=$_SESSION["USERSHOP"]; $this->Source="usershop"; if(postPar("shipping")!=null && postPar("payment")!=null){ $this->SetPayment(postPar("payment")); $this->SetShipping(postPar("shipping"),postPar("osid")); $this->SetComment(postPar("comment")); $this->Save(); if(postPar("payment")=="3"){ if(getPar("host")!=null){ $_SESSION["UserHost"]=getPar("host").getPar("linkDir"); }else{ $_SESSION["UserHost"]=null; } if(UserShop::$Current!=null){ $_SESSION["UserShopName"]=UserShop::$Current->Name; } header("PaymentRedirect: ".UserShop::$Host."/goPaypal.php"); go("/goPaypal.php"); exit; }else if(postPar("payment")==6){ $hash=md5($this->IdOrder."no_hack_please"); if(UserShop::IsRemote()){ header("PaymentRedirect: ".UserShop::$Host."/goGopay.php?id=".$this->IdOrder."&h=".$hash."&"); }else{ go("/goGopay.php?id=".$this->IdOrder."&h=".$hash."&"); } return false; }else{ $this->Confirm(); $_SESSION["send_id"]=$this->IdOrder; UserOrderConfirmed($this->IdOrder); self::ClearCart(); User::SetUser(null); return true; } }else{ go("/"); return false; } } public function SetNewsletterId($id){ db::Query("UPDATE orders SET IdNewsletter='".(int)$id."' WHERE IdOrder='".$this->IdOrder."'"); } private function checkCTId($ctId){ $ctIdUpper = strtoupper(trim($ctId)); $first = substr($ctIdUpper, 0,2); if(ctype_alpha($first)){ return [$first, substr($ctId, 2)]; }else{ return [null,$ctId]; } } public function SetCTId($ctId,$IdDestinationCountry){ $ctId = str_replace(" ", "", $ctId); if($this->Data["CTId"]==$ctId){ //return; } list($countryCode,$vatNo) = $this->checkCTId($ctId); $dph = DPH; if($countryCode==null){ $cntr = db::FQuery("SELECT * FROM destinationcountry WHERE IdDesinationCountry=".(int)$IdDestinationCountry); if(!$cntr){ return false; } $code = $cntr["DestinationCode"]; $dph = $cntr["RateDPH"]; $countryCode = strtoupper($code); }else{ db::FastLog("codeeee"); db::FastLog($countryCode); $cntr = db::FQuery("SELECT * FROM destinationcountry WHERE DestinationCode='".$countryCode."'"); $dph = $cntr["RateDPH"]; db::FastLog("DPH-----".$dph); } if($countryCode=="CZ" || $countryCode==null || $countryCode=="" || $dph<=0){ if($this->Data["PayWithoutTax"]){ $this->Data["PayWithoutTax"]=0; db::Query("UPDATE orders SET PayWithoutTax=0 WHERE IdOrder=".$this->IdOrder); } }else{ try{ $client = new SoapClient("http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"); $result = $client->checkVat([ 'countryCode' => $countryCode, 'vatNumber' => $vatNo] ); if($result->valid){ $this->DPH = $dph; $this->Data["PayWithoutTax"]=true; db::Query("UPDATE orders SET CTId='".$ctId."',PayWithoutTax=1, DPH='$dph' WHERE IdOrder=".$this->IdOrder); }else{ $this->Data["PayWithoutTax"]=false; db::Query("UPDATE orders SET PayWithoutTax=0 WHERE IdOrder=".$this->IdOrder); } }catch(\Throwable $err){ db::FastLog(print_r($err,true)); } } } public function Confirm(){ require_once(__DIR__."/OrderHistory.php"); if($this->OrderStep!="finished"){ $userConfirmed=10; $this->SavePrice(true); $zeroPrice=false; if($this->TotalPrice==0){ $zeroPrice=true; } /*@var $adr Address*/ $adr=$this->GetAddress(); if($this->UseDefaultAddress){ $this->SaveAddress($adr); } $payment=$this->GetPayment(); $com=$this->GetComment(); $update=array(); db::Query("DELETE FROM orderitem WHERE IdOrder='".$this->IdOrder."' AND Count=0"); $vysNotify=false; $tempItems=db::Query("SELECT *,d.Vysivka as vys FROM orderitem oi INNER JOIN design d USING(IdDesign) INNER JOIN product p ON oi.Product=p.IdProduct WHERE IdOrder='".$this->IdOrder."'"); while(db::Fetch($tempItems)){ if(((int)db::$data["vys"])===1 && ((int)db::$data["ContainsUserPhoto"])===1){ $vysNotify=true; } if(db::$data["ProductType"]=='not_printable'){ OrderHistory::LogItemNoteV2($this->IdOrder, db::$data["IdOrderItem"], "Produkt Bezpotisku s potiskem", 'vyroba_kontrola_podkladu'); } } if($vysNotify){ $com.= " -- [Objednávka obsahuje vlastní výšivku. Zkontrolujte, zda je potřeba kalkulace]"; $update["CustomerNote"]=$com; } $services=array(); $resItems = db::Query("SELECT * FROM orderitem oi INNER JOIN product p ON p.IdProduct=oi.Product WHERE IdOrder='".$this->IdOrder."'"); $update["Express"]=0; $itemIds=""; while(db::Fetch($resItems)){ if(db::$data["IdOrderItemTarget"]>0){ $services[]=array(db::$data["IdOrderItemTarget"],db::$data["ProductName"],db::$data["Product"]); } if(db::$data["Product"]==210){ $update["Express"]=1; } if($itemIds!=""){ $itemIds.=","; } $itemIds.=db::$data["IdOrderItem"]; if(db::$data["Product"]==3091 || db::$data["Product"]==3092){ self::addMekejs(db::$data); } } if($this->IdShipping==4 && $this->postPSC==1){ //$update["Express"]=1; } if($itemIds!=""){ db::Query("UPDATE motivpublicfee SET State='pending' WHERE IdOrderItem IN($itemIds)"); } db::Query("SELECT GET_LOCK('confirm-order',1000)"); db::Query("SELECT MAX(OrderNumber) as max FROM orders"); db::Fetch(); $ordnum=(int)db::$data["max"]+1; db::Query("UPDATE orders SET OrderNumber=".$ordnum." WHERE IdOrder=".$this->IdOrder); db::Query("SELECT RELEASE_LOCK('confirm-order')"); if($this->IdDiscountCode>0){ db::Query("UPDATE discountcode SET Used=1 WHERE IdDiscountCode=".$this->IdDiscountCode); } foreach($services as $service){ $showProduction=true; if($service[2]==1714){ $showProduction=false; } OrderHistory::LogItemNoteV2($this->IdOrder, $service[0], "Extra služba: ".$service[1], 'vyroba_kontrola_podkladu'); } if( $payment->PaymentType=="on_delivery" || $payment->PaymentType=="personal"){ $this->Tel=$adr->Phone; $val=($this->TotalPrice-$this->PaymentPrice-$this->ShippingPrice); if($val>1500 && ($this->Source!="bezpotisku" ||$val>5000)){ $userConfirmed=0; }else{ if($this->IdUser!=113555 && !$this->QuickOrder){ db::Query("SELECT * FROM user_rating WHERE PhoneEmail='".$adr->Phone."' OR PhoneEmail='".User::$CurrentUser->Email."'"); if($this->Source=='bezpotisku'){ if(db::Fetch()){ $userConfirmed=db::$data["Rating"]; if(db::Fetch() && db::$data["Rating"]>0){ $userConfirmed=min($userConfirmed,db::$data["Rating"]); // hledáme pouze negativní rating, ne neutrální } if($userConfirmed==0){ $userConfirmed=6; // zákazníky bez ratingu považujem na bezpotisku jako ok, neposílat sms ani neověřovat na zákaznickým }else{ $userConfirmed+=1; // aby do stavu k ověření na zákaznickým spadly ratingy 4 a níž } }else{ $userConfirmed=6; // zákazník bez ratingu je ok } }else{ if(db::GetCount()!=2){ $userConfirmed=0; }else{ db::Fetch(); $userConfirmed=min($userConfirmed,db::$data["Rating"]); db::Fetch(); $userConfirmed=min($userConfirmed,db::$data["Rating"]); } if($userConfirmed<6){ $this->sendSMS(); } } } } } if($this->QuickOrder){ if($this->TotalPrice<3000){ $update["IdOrderStatus"]=29; }else{ OrderHistory::Reminder($this->IdOrder, "Velká QR Express objednávka na prodejnu! Prověřit, než se objedná zboží!",time()-3600*24*10,'zakaznicke'); $update["IdOrderStatus"]=1; } }else if(($payment->PaymentType=="transfer"||$payment->PaymentType=="gopay") && strlen($com)<2){ if($zeroPrice){ $update["IdOrderStatus"]=2; }else{ $update["IdOrderStatus"]=4; } }else if($payment->PaymentType=="paypal"){ $update["IdOrderStatus"]=2; }else if($payment->PaymentType=='personal' || $payment->PaymentType=='on_delivery'){ if($userConfirmed<6 || strlen($com)>=2){ $update["IdOrderStatus"]=1; }else{ $update["IdOrderStatus"]=2; } }else{ $update["IdOrderStatus"]=1; } $adr->CTId= strtoupper(trim($adr->CTId)); if(strlen($adr->CTId)>5 && substr($adr->CTId,0,2)!="CZ" && $this->Data["PayWithoutTax"]!=1 ){ OrderHistory::Reminder($this->IdOrder, "Kontrola DIČ. Bez této kontroly neposílejte obj do dalšího stavu! Ověřte správnost uvedeného DIČ - v případně neplatného DIČ toto DIČ vymažte.",time()-3600*24*10,'zakaznicke'); $update["IdOrderStatus"]=1; } if($this->Source=="bezpotisku" ){ if($this->TotalPrice>=7000 && strlen($adr->CId)<3){ $update["IdOrderStatus"]=7; }else if($this->TotalPrice>5000 ){ OrderHistory::Reminder($this->IdOrder, "Velká objednávka - proveď rychlou kontrolu / ověr dostupnost vybraného zboží",time()-3600*24*10,'zakaznicke'); } } if($this->IdUser==113555){ $update["IdOrderStatus"]=9; } $update["OrderDate"]=date("c"); if($this->Data["PayWithoutTax"]!=1){ if($adr->IdDestinationCountry==3){ $update["DPH"]=_SKDPH*100; }else{ $update["DPH"]=_CZDPH*100; } }else{ OrderHistory::RobotNote($this->IdOrder,"!! OBJEDNÁVKA BEZ DPH !! VŠECHNY UVEDENÉ CENY JSOU VČETNĚ DPH, PLATBY ALE MUSEJÍ BÝT V HODNOTÁCH BEZ DPH ".$this->Data["DPH"]); } $update["OrderStep"]="finished"; if((User::$CurrentUser!=null && User::$CurrentUser->UserId!=$_SESSION["affiliate_id"]) && ($this->IdUserShop==null||$this->IdUserShop==0)){ //$update["IdAffiliate"]=$_SESSION["affiliate_id"]; } $ip = Order::GetIP(); $update["IdOrderCountry"]=Country::$UserCountryId; //$update["OrderNumber"]=(((int)db::$data["max"])+1); if($zeroPrice){ $update["Paid"]=1; } if(isset($_COOKIE["newsl_id"]) && (int)$_COOKIE["newsl_id"]>0){ $update["IdNewsletter"]=(int)$_COOKIE["newsl_id"]; } if($this->cashback>0){ db::Query("START TRANSACTION"); } $orderPayment=array(); $orderPayment["IdOrder"]=$this->IdOrder; $orderPayment["Amount"]=$this->TotalPrice; if($this->Data["PayWithoutTax"]){ $orderPayment["Amount"]=$this->Data["PriceWithoutTax"]; } $orderPayment["IdAdminUser"]=472; $orderPayment["DateCreated"]=date("c"); $orderPayment["Type"]="faktura"; if($payment->PaymentType=='on_delivery'){ $orderPayment["Method"]='dobirka'; } db::Insert("orderpayment", $orderPayment); db::Update("orders",$update,"IdOrder=".$this->IdOrder); $this->OrderNumber=$ordnum; $OrderNumber=$ordnum; if($this->cashback>0){ if($this->Data["UserCashbackId"]>0){ $iduc=$this->Data["UserCashbackId"]; }else{ $iduc=db::FQuery("SELECT * FROM user_cashback WHERE IdUser=".$this->IdUser, "IdUserCashBack"); } $remainCashback=$this->cashback; $cashbacks=db::Query("SELECT * FROM user_cashback_item WHERE IdUserCashBack=$iduc AND State='active' ORDER BY ExpirationDate ASC"); while(db::Fetch($cashbacks) && $remainCashback>0){ $avail=db::$data["Value"]-db::$data["UsedValue"]; $ins=array("IdOrder"=>$this->IdOrder,"IdUserCashBackItem"=>db::$data["IdUserCashBackItem"]); if($remainCashback>=$avail){ db::Query("UPDATE user_cashback_item SET UsedValue=Value, State='used' WHERE IdUserCashBackItem=".db::$data["IdUserCashBackItem"]); $remainCashback-=$avail; $ins["Value"]=$avail; }else{ $used=db::$data["UsedValue"]+$remainCashback; db::Query("UPDATE user_cashback_item SET UsedValue='".$used."' WHERE IdUserCashBackItem=".db::$data["IdUserCashBackItem"]); $ins["Value"]=$remainCashback; $remainCashback=0; } db::Insert("user_cashback_item_order", $ins); } db::Query("UPDATE user_cashback SET AvailableValue=AvailableValue-".$this->cashback." WHERE IdUserCashback=".$iduc); db::Query("COMMIT"); } if($this->IdUser>0){ $this->addCashback(); }else{ db::FastLog("EEEEEEEEEEE"); } db::Query("SELECT * FROM orders o INNER JOIN orderitem oi USING(IdOrder) INNER JOIN colorset_color cc USING(IdColorSetColor) INNER JOIN store s ON s.IdProduct=oi.Product AND s.IdColor=cc.IdColor AND s.IdProductSize=oi.IdProductSize where IdOrder=".$this->IdOrder); while(db::Fetch()){ db::Query("UPDATE orderitem SET StoreId=".db::$data["IdStore"]." WHERE IdOrderItem=".db::$data["IdOrderItem"],false); } Order::AddSavedOrder($this->IdOrder); if(($adr->IdDestinationCountry==1 || $adr->IdDestinationCountry==3) && $this->Source!="bezpotisku" && $this->Source!="natriko"){ $items=Order::GetOrderItems(null,false); $itemids=""; foreach($items as $it){ $itemids.="&itemId[]="; $itemids.=$it->Product; } if($adr->IdDestinationCountry==1){ $str="http://www.heureka.cz/direct/dotaznik/objednavka.php?id=346bf48204d0b2a7d088643654ebc2ce&" . "email=".User::$CurrentUser->Email . $itemids . "&orderid=".$ordnum; }else{ $str="http://www.heureka.sk/direct/dotaznik/objednavka.php?id=1b925e6fd723f7e18f7945f18a90f322&" . "email=".User::$CurrentUser->Email . $itemids . "&orderid=".$ordnum; } file_get_contents($str); //db::Log($str); }else if(($adr->IdDestinationCountry==3 || $adr->IdDestinationCountry==1) && $this->Source=="bezpotisku" ){ $items=Order::GetOrderItems(null,false); $itemids=""; foreach($items as $it){ $itemids.="&itemId[]="; $itemids.=$it->Product."-".$it->Data["BaseColorId"]."-".$it->Data["IdProductSize"]; } if($adr->IdDestinationCountry==1){ $str="http://www.heureka.cz/direct/dotaznik/objednavka.php?id=7e422d2d90de3d2185eea0c902df56ed&" . "email=".User::$CurrentUser->Email . $itemids . "&orderid=".$ordnum; }else if($adr->IdDestinationCountry==3){ $str="http://www.heureka.sk/direct/dotaznik/objednavka.php?id=90ca8b7abe7d7a9ea44373408d559011&" . "email=".User::$CurrentUser->Email . $itemids . "&orderid=".$ordnum; } //db::Log("heu",$str); file_get_contents($str); } $this->SaveDesignCommisions(); if($this->UseBonus && $this->BonusAmount>0){ db::Query("INSERT INTO payout(IdUser,IdAdminUser,IdOrder,AdminUserName,Amount,Date,Type)VALUES( '".User::$CurrentUser->UserId."','0','".$this->IdOrder."','[robot]','".Country::BaseToEUR($this->BonusAmount)."','".date("c")."','order_payment')"); db::Query("UPDATE orders SET IdPayout=".db::ReturnId()." WHERE IdOrder=".$this->IdOrder); } $this->OrderStep="finished"; if($this->Source=="bezpotisku"){ /* $post_string = "hello"; $parts=parse_url("http://www.belabel.cz/cron/scripts/StoreAmountAvailable.php"); $fp = fsockopen($parts['host'], isset($parts['port'])?$parts['port']:80, $errno, $errstr, 30); $out = "POST ".$parts['path']." HTTP/1.1\r\n"; $out.= "Host: ".$parts['host']."\r\n"; $out.= "Content-Type: application/x-www-form-urlencoded\r\n"; $out.= "Content-Length: ".strlen($post_string)."\r\n"; $out.= "Connection: Close\r\n\r\n"; $out.= $post_string; fwrite($fp, $out); fclose($fp); */ }else{ if($this->TotalPrice>5000 ){ OrderHistory::Reminder($this->IdOrder, "Velká objednávka - zkontroluj dostupnost zboží / informuj zákazníka / zvaž nabídnutí výroby zkušebních kusů",time()-3600*24*10,'zakaznicke'); } } } if(User::$CurrentUser->UserId!=$_SESSION["affiliate_id"]){ //self::ActivateAffiliate($_SESSION["affiliate_id"]); } } public static function addMekejs($orderItem){ if(db::$data["Product"]==3091){ db::Query("DELETE FROM orderitem WHERE IdOrderItem=".$orderItem["IdOrderItem"]); $colors=[43565=>[40367,40363,40345], 43566=>[40370,40366,40372], 43567=>[42460,42461,42462], 43568=>[40368,40364,40347], ]; $values1=["IdOrder"=>$orderItem["IdOrder"],"Product"=>2515,"IdProductSize"=>15,"Count"=>1,"Price"=>420,"IdColorSetColor"=>$colors[$orderItem["IdColorSetColor"]][0]]; $values2=["IdOrder"=>$orderItem["IdOrder"],"Product"=>2516,"IdProductSize"=>15,"Count"=>1,"Price"=>307,"IdColorSetColor"=>$colors[$orderItem["IdColorSetColor"]][1]]; $values3=["IdOrder"=>$orderItem["IdOrder"],"Product"=>2517,"IdProductSize"=>15,"Count"=>1,"Price"=>258,"IdColorSetColor"=>$colors[$orderItem["IdColorSetColor"]][2]]; db::Insert("orderitem",$values1); db::Insert("orderitem",$values2); db::Insert("orderitem",$values3); }else if( db::$data["Product"]==3092){ db::Query("DELETE FROM orderitem WHERE IdOrderItem=".$orderItem["IdOrderItem"]); $colors=[43569=>[43354,36012], 43570=>[43356,36024], 43571=>[43356,36052], 43575=>[43353,36042], 43576=>[43353,36018], 43579=>[43355,36019], 43580=>[43353,36017] ]; $values1=["IdOrder"=>$orderItem["IdOrder"],"Product"=>2177,"IdProductSize"=>15,"Count"=>1,"Price"=>265,"IdColorSetColor"=>$colors[$orderItem["IdColorSetColor"]][1]]; $values2=["IdOrder"=>$orderItem["IdOrder"],"Product"=>3057,"IdProductSize"=>15,"Count"=>1,"Price"=>175,"IdColorSetColor"=>$colors[$orderItem["IdColorSetColor"]][0]]; db::Insert("orderitem",$values1); db::Insert("orderitem",$values2); } } public function GetEarnedCashback(){ $res=db::Query("SELECT * FROM user_cashback_item WHERE IdOrder=".$this->IdOrder,false); if($val=db::Fetch($res,false)){ return $val["Value"]; }else{ return 0; } } public function addCashback($echoOnly=false){ // // !!!! při změně nutno změnit i na win serveru // $bonus=0; $disc=$this->GetDiscount(); /*@var $disc Discount*/ //db::FastLog("go cashback ".$this->IdOrder); //db::FastLog($this->Source); if($this->Source=='bezpotisku'){ $log=""; db::Query("SELECT * FROM orderitem oi WHERE IdOrder=".$this->IdOrder); $price = $this->TotalPrice-$this->ShippingPrice - $this->PaymentPrice; $log.="init total ".$this->TotalPrice." ".$this->ShippingPrice." ". $this->PaymentPrice." ".$price; while(db::Fetch()){ $log.="\r\n item ".db::$data["IdOrderItem"]." ".db::$data["Price"]." ".db::$data["Count"]; if(db::$data["Discount"]>0 || db::$data["SellType"]!="normal"){ $price-=db::$data["Price"]*db::$data["Count"]; $log.="\r\n dec ".db::$data["Discount"]." ".db::$data["SellType"]; } } $log.="\r\n total ".$price; if($disc!=null && ($disc->Type=="percent" || ($disc->Type=="fixed" && $disc->Limit>0))){ $bonus = (floor($price/100)*100) * (2/100); } else{ $bonus = (floor($price/100)*100) * (5/*db::GetGlobalParamFloat("LOYALTY_PROGRAM_BEZPOTISKU_PERCENTS")*//100); } $log.="\r\n bonus ".$bonus; //db::FastLog($log); }else if(($this->Source==null || $this->Source=="of") && (Country::$UserCountryId==1 || Country::$UserCountryId==5)){ //db::FastLog("cb of"); db::Query("SELECT * FROM orderitem oi WHERE IdOrder=".$this->IdOrder); $price = $this->TotalPrice-$this->ShippingPrice - $this->PaymentPrice; $level=5; if($this->IdDiscountCode>0 || $this->DiscountCodeValue>0){ return; } while(db::Fetch()){ if(db::$data["Discount"]>20){ $level=1; }else if(db::$data["Discount"]>10){ $level=min(3,$level); } } $bonus = (floor($price/100)*100) * ($level/100); } if($echoOnly){ return $bonus; } if( $bonus > 0 ){ /*@var $user User*/ $user=User::GetUser($this->IdUser); $uid=0; //db::FastLog("user ok"); if($user->Registered){ $uid=$user->UserId; }else{ //db::FastLog("not registered"); } if($this->Data["UserCashbackId"]>0){ $idCashback=$this->Data["UserCashbackId"]; }else{ db::Query("SELECT * FROM user_cashback WHERE Email='".db::Escape(trim($user->Email))."'"); if(!db::Fetch()){ //db::FastLog("new user_cashback"); if($uid==0){ db::Query("SELECT * FROM user u WHERE Email='". db::Escape(trim($user->Email))."' AND Registered=1"); if(db::Fetch()){ $uid=db::$data["IdUser"]; } } //db::FastLog($uid." ".$user->Email); db::Query("INSERT INTO user_cashback(IdUser,Email)VALUES($uid, '". db::Escape(trim($user->Email))."')"); $idCashback=db::ReturnId(); }else{ $idCashback=db::$data["IdUserCashBack"]; } } //db::FastLog("idc ".$idCashback); db::Query("INSERT INTO user_cashback_item(IdUserCashback,IdOrder,State,Value,UsedValue,ExpirationDate,ExpirationEmailSent)VALUES( $idCashback,".$this->IdOrder.",'pending',$bonus,0, '".date("c",time()+3600*24*180/*db::GetGlobalParamFloat("LOYALTY_PROGRAM_BONUS_VALIDITY_DAYS")*/)."',0 )"); } } public static function GetSavedOrders(){ $list = explode(",",$_COOKIE["saved_orders"]); return array_filter($list); } public static function RemoveSavedOrder($id){ $list = $_COOKIE["saved_orders"]; $list = str_replace(",$id","",$list); $list = str_replace("$id,","",$list); $list = str_replace("$id","",$list); setcookie("saved_orders", $str, time()+60*60*24*30,'/'); } public static function AddSavedOrder($id){ $list = explode(",",$_COOKIE["saved_orders"]); if(!in_array($id, $list)){ //array_push($list,$id); array_unshift($list,$id); $str= implode(",", $list); setcookie("saved_orders", $str, time()+60*60*24*30,'/'); } $_SESSION["hide_orders_line"]=null; } public function SetGopayId($id){ db::Query("UPDATE orders SET GopayId='$id' WHERE IdOrder=".$this->IdOrder); } public function SaveDesignCommisions(){ db::Query("SELECT * FROM orderitem oi INNER JOIN design d USING(IdDesign) WHERE oi.IdOrder=".$this->IdOrder." AND d.IdUserShopMotiv>0"); while(db::Fetch()){ db::Query("INSERT INTO designcommision(IdUserShopMotiv,IdOrderItem,Value)VALUES(".db::$data["IdUserShopMotiv"].",".db::$data["IdOrderItem"].",".db::$data["DesignCommision"].")",false); } } public static function GetIP(){ if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet { $ip=$_SERVER['HTTP_CLIENT_IP']; }elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; }else{ $ip=$_SERVER['REMOTE_ADDR']; } return $ip; } public function GetItemsPrice(){ $items=self::GetOrderItems($this->IdOrder); $total=0; foreach($items as $item){ $total+=$item->TotalPrice(); } return $total; } public function SOReklamaceAvailable(){ if($this->Data["CId"]!=null){ return false; } db::Query("SELECT * FROM orderhistory WHERE IdOrder=".$this->IdOrder." AND Data='samoobsluha-reklamace'"); if(db::Fetch()){ return false; }else{ return true; } } public function Storno($orderNumber,$idUser,$note,$restore,$bankAccount=""){ require_once(__DIR__."/OrderHistory.php"); require_once(__DIR__."/../MailNotify.php"); //db::FastLog($orderNumber." ".$this->IdOrder." ".$idUser." ".$restore." ".$note); if($this->OrderNumber==$orderNumber && $orderNumber>0 && $this->IdUser==$idUser && $idUser>0){ $update=array(); db::Query("SELECT * FROM orderpayment WHERE IdOrder=".$this->IdOrder." AND PaidAmount>0"); if(db::Fetch()){ $update["IdOrderStatus"]=24; }else{ $update["IdOrderStatus"]=8; } if($bankAccount!=""){ $update["ReturnMoneyBankAccount"]=$bankAccount; $update["ReturnMoneyMethod"]='wire'; } db::Update("orders", $update, "IdOrder=".$this->IdOrder); //db::Query("UPDATE orders o SET IdOrderStatus=8 WHERE IdOrder=".$this->IdOrder); OrderHistory::LogStorno($this->IdOrder,$note); AutoMail(127,$this); if($restore){ $order=$this->Copy(true); OrderHistory::SOOrderNote($order->IdOrder, "Vytvořeno vrácením objednávky č.$orderNumber zpět do košíku"); return $order->IdOrder; } } } public static function Reklamace($orderNumber,$itemsData,$paymentType,$accountNumber,$userNote){ /*@var $o Order */ /*@var $u User */ ob_start(); $o=Order::GetOrderByNumber($orderNumber); $u=$o->GetUser(); db::Query("SELECT * FROM orderhistory WHERE IdOrder=".$o->IdOrder." AND Data='samoobsluha-reklamace'"); if(db::Fetch()){ $time= strtotime(db::$data["Date"]); if(time()-$time>3600*24){ return -1; }else{ db::Query("DELETE FROM orderhistory WHERE IdOrder=".$o->IdOrder." AND IdAdminUser=458 "); } } $itemsList=array(); $specialNote=""; foreach($itemsData as $item){ db::Query("SELECT * FROM orderitem oi INNER JOIN product p ON p.IdProduct=oi.Product INNER JOIN productname pn USING(IdProduct) INNER JOIN productsize ps USING(IdProductSize) INNER JOIN colorset_color USING(IdColorSetColor) INNER JOIN color c USING(IdColor) INNER JOIN colorname cn USING(IdColor) WHERE pn.IdCountry=".$o->Data["IdOrderCountry"]." and cn.IdCountry=".$o->Data["IdOrderCountry"]." and IdOrder=".$o->IdOrder." AND IdOrderItem='".(int)$item->id."'"); if(db::Fetch()){ $orderItem=db::$data; db::Query("DELETE FROM vratky WHERE IdOrderItem=".db::$data["IdOrderItem"],false); $v=array(); $v["IdOrderItem"]=db::$data["IdOrderItem"]; $v["IdProduct"]=db::$data["Product"]; $v["IdAdminUser"]=458; $v["Date"]=date("c"); $v["Reason"]=$item->reason; $v["Note"]=$item->text; $v["ReturnMoney"]=1; db::Insert("vratky", $v); //db::Query("UPDATE orderitem SET SpecialState='vraceno' WHERE IdOrderItem=".$orderItem["IdOrderItem"]); db::Query("UPDATE orderitem SET ReturnedState='vraceno_zakaznik' WHERE ReturnedState='none' and IdOrderItem=".$orderItem["IdOrderItem"]); $itemName=$item->amount."x ".$orderItem["ProductName"]." ".$orderItem["ProductSizeName"].", ".$orderItem["AdminColorName"]; $itemName2=$item->amount."x ".$orderItem["LocalProductName"]." ".$orderItem["ProductSizeName"].", ".$orderItem["LocalColorName"]; $itemsList[]=array("Amount"=>$item->amount,"ItemName"=>$itemName2); if($item->amount<$orderItem["Count"]){ $specialNote.=" ! ".$itemName." vraceno ".$item->amount." z ".$orderItem["Count"]; } $v=array(); $v["IdOrder"]=$o->IdOrder; $v["IdOrderItem"]=$orderItem["IdOrderItem"]; $v["IdAdminUser"]=458; $v["AdminUserName"]="[samoobsluha]"; $v["Type"]="reclamation"; $v["Message"]="vrácené zboží Zákazník: $itemName"; $v["Date"]=date("c"); $v["Data"]="samoobsluha-reklamace"; db::Insert("orderhistory",$v); } } /*$payDetails=""; if($paymentType=="1"){ $payDetails.=" E-KUPON."; }else if($paymentType=="2"){ $payDetails.=" PŘEVODEM."; }*/ if($userNote!=""){ $payDetails.=": ".$userNote; } $payDetails.=$specialNote; $v=array(); $v["IdOrder"]=$o->IdOrder; $v["IdOrderItem"]=0; $v["IdAdminUser"]=458; $v["AdminUserName"]="[samoobsluha]"; $v["Type"]="admin_note_change"; $v["Message"]="Samoobsluha$payDetails"; $v["Date"]=date("c"); $v["NoteType"]='only_orders'; $v["Data"]="samoobsluha-reklamace"; if($userNote!=""){ db::Insert("orderhistory",$v); } $update=[]; if($paymentType=="1"){ $update["ReturnMoneyMethod"]="ekupon"; }else if($paymentType=="2"){ $update["ReturnMoneyMethod"]="wire"; } if($accountNumber!=""){ $update["ReturnMoneyBankAccount"]=$accountNumber; } if(count($update)>0){ db::Update("orders", $update, "IdOrder=".$o->IdOrder); } require_once (__DIR__."/../MailNotify.php"); NotifyReklamace($o,$u,$itemsList,$paymentType,$accountNumber,$userNote); $ss= ob_get_clean(); } public function ToggleCashback($val){ db::Query("UPDATE orders SET UseCashback=".(int)$val." WHERE IdOrder=".$this->IdOrder); $this->Data["UseCashback"]=(int)$val; } public function GetItemsTotalPrice($noExpress=false,$useDiscount=true){ $items=$this->GetItems(); $total=0; foreach($items as $item){ if(!$noExpress || $item->Product!=210){ $total+=$item->TotalPrice(); } } if($useDiscount){ $discount=$this->GetDiscount($total); if($discount!=null){ if($discount->Type=="fixed"){ $discVal=min($total,$discount->Amount); }else{ $discVal=floor($total*$discount->Amount/100); } $total-=$discVal; } } return $total; } public function SavePrice($clearDiscount=false){ $items=self::GetOrderItems($this->IdOrder); $total=0; $coupon=0; foreach($items as $item){ //kontrola na duplicitní služby nebo služby, které odkazují na neexistující produkt if($item->Data["ProductType"]=='services'){ if($item->Data["IdOrderItemTarget"]>0){ $found=false; foreach($items as $item2){ if($item2->IdOrderItem==$item->Data["IdOrderItemTarget"]){ $found=true; break; } } if(!$found){ db::Query("DELETE FROM orderitem WHERE IdOrderItem=".$item->IdOrderItem); return $this->SavePrice($clearDiscount); } $found=false; foreach($items as $item2){ if($item2->Data["IdOrderItemTarget"]==$item->Data["IdOrderItemTarget"] && $item2->Product == $item->Product && $item2->IdOrderItem != $item->IdOrderItem){ $found=true; break; } } if($found){ db::Query("DELETE FROM orderitem WHERE IdOrderItem=".$item->IdOrderItem); return $this->SavePrice($clearDiscount); } }else if(in_array($item->Data["Product"], [1713,1714,1715,2876])){ db::Query("DELETE FROM orderitem WHERE IdOrderItem=".$item->IdOrderItem); return $this->SavePrice($clearDiscount); } } } foreach($items as $item){ $total+=$item->TotalPrice(); if($item->Product==1921){ if($coupon==0){ $coupon=1; } }else{ $coupon=-1; } } $this->ItemsPrice=$total; $discount=$this->GetDiscount($total,$clearDiscount); $discVal=0; if($discount!=null){ if($discount->Type=="fixed"){ $discVal=$discount->Amount;//min($total,$discount->Amount); }else{ $discVal=floor($total*$discount->Amount/100); } } if(User::$CurrentUser!=null && User::$CurrentUser->Registered && $this->IdUser!=User::$CurrentUser->UserId){ $this->SetUser(User::$CurrentUser->UserId); } $ship=$this->GetShipping(); $pay=$this->GetPayment(); $adr=$this->GetAddress(); if($ship!=null){ $shipPrice=$ship->GetPrice($adr->IdDestinationCountry,$this->GetTotalWeight(),$total,$this->Source,$this->postPSC); }else{ $shipPrice=0; } /*if($ship->Id==4 && $this->postPSC==8 && $this->Source=='bezpotisku'){ $shipPrice=0; }*/ if($pay!=null){ $payPrice=$pay->GetPrice($this->Source); if($adr->IdDestinationCountry!=1 && $ship && ($ship->Id==9 || $ship->Id==10) && $pay->Id==5){ $payPrice=22; } }else{ $payPrice=0; } if($this->IdUserShop>0){ if($ship->Id==3 || $ship->Id==7){ $shipPrice=self::USERSHOP_SHIPPING_PRICE; } } if($this->IdUser==113555 || $this->QuickOrder){ $shipPrice=0; } if($coupon==1){ $shipPrice=0; } if(0 && $this->ItemsPrice>=1200 && (User::$CurrentUser==null || User::$CurrentUser->DestinationCountry==1) && $this->Source=='bezpotisku' && in_array($ship->Id, [4,14,13,10,9])){ $shipPrice=0; } $value=$total; $total+=$shipPrice+$payPrice; if($discVal){ $discVal=min($discVal,$total); } $total-=$discVal; $bonus=0; if($this->UseBonus && User::$CurrentUser!=null){ require_once("Affiliates.php"); Payout::FetchUser(); $bonus=(int)min($total,Country::PriceText2(Payout::$AmountAvailableTotal,true)); $this->BonusAmount=$bonus; } $total-=$bonus; /*db::FastLog("SAVEPRICE"); if($this->cashback>0){ db::FastLog("CASHBACK"); db::FastLog($this->IdUser); }*/ if($this->IdUser>0 && $this->Data["UseCashback"]){ $this->cashback=min($this->GetAvailableCashback(),$total); $total-=$this->cashback; }else{ $this->cashback=0; } $update=array(); $update["PaymentPrice"]=$payPrice; $update["UsedCashback"]=$this->cashback; $update["ShippingPrice"]=$shipPrice; $update["Price"]=$total; $this->Data["PriceWithoutTax"]=$update["PriceWithoutTax"]=0; if($this->Data["PayWithoutTax"]){ $this->Data["PriceWithoutTax"]=$update["PriceWithoutTax"]=round($update["Price"]/(1+$this->DPH/100),2); } $update["InitialPrice"]=$total; $update["DiscountCodeAmount"]=$discVal; $update["BonusAmount"]=$bonus; $update["CurrencyRate"]=Country::$UserCountry->Rate; if($_SESSION["affiliate_id"]!=null && $_SESSION["affiliate_id"]!=User::$CurrentUser->UserId){ $eur=Country::GetEurRate(); db::Query("SELECT sum(Commision) as com FROM motivcommision mc INNER JOIN orderitem oi USING(IdOrderItem) WHERE IdOrder=".$this->IdOrder. " AND Count>0"); db::Fetch(); if(db::$data["com"]!=null){ $value-=db::$data["com"]*$eur; } $update["AffiliateCommision"]=round($value/(1+_DPH)*0.15/$eur*100)/100; } $this->TotalPrice=$total; $this->ShippingPrice=$shipPrice; $this->PaymentPrice=$payPrice; db::Update("orders",$update,"IdOrder=".$this->IdOrder); } public function GetAvailableCashback(){ if($this->IdUser>0){ if($this->IdUser==113555){ if($this->Data["UserCashbackId"]>0){ db::Query("SELECT * FROM user_cashback WHERE IdUserCashback='".$this->Data["UserCashbackId"]."'"); }else{ return 0; } }else{ db::Query("SELECT * FROM user_cashback WHERE IdUser='".$this->IdUser."'"); } if(db::Fetch()){ return db::$data["AvailableValue"]; }else{ return 0; } } } public function Pay(){ $comm=$this->GetComment(); if(strlen($comm)>1){ db::Query("UPDATE orders SET Paid=1,PaidAmount=Price,IdOrderStatus=1,OrderDatePohoda='".date("c")."' WHERE IdOrder=".$this->IdOrder); }else{ db::Query("UPDATE orders SET Paid=1,PaidAmount=Price,IdOrderStatus=2,OrderDatePohoda='".date("c")."' WHERE IdOrder=".$this->IdOrder); } db::Query("UPDATE orderpayment SET Paid=1,PaidAmount=Amount,DatePaid='".date("c")."',Method='gopay' WHERE IdOrder=".$this->IdOrder." AND Type='faktura'",false,true); db::Query("SELECT * FROM orderpayment op WHERE IdOrder=".$this->IdOrder." AND Type='faktura'"); db::Fetch(); if(db::$data["BKP"]==""){ // $result=file_get_contents('http://217.16.188.52/eet/client/eetSubmit.php?test=0&pass=hnpKJh9e&id_provoz=21&id_invoice='.db::$data["IdOrderPayment"]); } } public function GetAddress(){ if($this->Address==null){ if($this->UseDefaultAddress){ $data=db::Query("SELECT DFirstName,FirstName,DLastName,LastName,DLine1,DNum,DLine2,DZip,BLine1,BNum,BLine2,BZip,IdDestinationCountry,BNote,DNote,CName,CId,CTId,Phone FROM user WHERE IdUser='".$this->IdUser."'",true); }else{ $data=db::Query("SELECT DFirstName,DLastName,FirstName,LastName,DLine1,DNum,DLine2,DZip,BLine1,BNum,BLine2,BZip,IdDestinationCountry,BNote,DNote,CName,CId,CTId,Phone FROM orders WHERE IdOrder=".$this->IdOrder,true); } $this->Address = new Address(db::Fetch($data)); } return $this->Address; } public function SaveAddress($addr){ $this->UseDefaultAddress=false; //$this->SetCTId($addr->CTId); db::Query("UPDATE orders SET ".$addr->GetUpdateString().",DefaultAddress=0 WHERE IdOrder=".$this->IdOrder); } public static function GetOrderItems($idOrder=null,$include0=true){ if($idOrder==null){ if(self::$CurrentOrder!=null){ $idOrder=self::$CurrentOrder->IdOrder; } } if($idOrder!=null){ $items=OrderItem::GetOrderItems($idOrder,$include0); return $items; }else{ return array(); } } public function GetDestinationCountry(){ $addr = $this->GetAddress(); return DestinationCountry::GetById($addr->IdDestinationCountry); } public function GetDestinationBankAccount(){ $addr=$this->GetAddress(); $cntry=DestinationCountry::GetById($addr->IdDestinationCountry); return $cntry->BankAccount; } public function GetItems($include0=true,$force=false){ if($this->orderItems==null || $force){ $this->orderItems = OrderItem::GetOrderItems($this->IdOrder,$include0); } return $this->orderItems; } public function GetProductsCount(){ $list = $this->GetItems(); $tmpList=array(); foreach($list as $item){ /* @var $item OrderItem */ if(!isset($tmpList[$item->Product])){ $tmpList[$item->Product]=0; } $tmpList[$item->Product]+=$item->Count; } $list2=array(); foreach($tmpList as $key=>$item){ $list2[]=array($key,$item); } return $list2; } public function GetDesignsCount(){ $list = $this->GetItems(); $tmpList=array(); foreach($list as $item){ /* @var $item OrderItem */ if(!isset($tmpList[$item->IdDesign])){ $tmpList[$item->IdDesign]=0; } $tmpList[$item->IdDesign]+=$item->Count; } $list2=array(); foreach($tmpList as $key=>$item){ $list2[]=array($key,$item); } return $list2; } public function UpdateService($idOrderItem,$service,$state){ $items=$this->GetItems(true,true); foreach($items as $item){ if($item->Data["IdOrderItemTarget"]==$idOrderItem && $item->Product==$service){ if($state==0){ $this->RemoveItem($item->IdOrderItem); $item=OrderItem::GetItem($idOrderItem); $this->ChangeItem($item->IdOrderItem, $item->Size, $item->Count); return; } } } if($state==1){ $this->AddService($service,$idOrderItem); } } public function AddService($service,$targetId){ switch($service){ case 1715: $id=Order::$CurrentOrder->AddItem(0,1715,15,28789,1,85); break; case 1714: $id=Order::$CurrentOrder->AddItem(0,1714,15,28788,1,190); break; case 1713: $id=Order::$CurrentOrder->AddItem(0,1713,15,28787,1,128); break; case 2876: $id=Order::$CurrentOrder->AddItem(0,2876,15,42466,1,490); break; default: echo "err"; break; } if($id>0 && $targetId>0){ db::Query("UPDATE orderitem oi SET IdOrderItemTarget=$targetId WHERE IdOrderItem=$id"); } $item=OrderItem::GetItem($targetId); $this->ChangeItem($item->IdOrderItem, $item->Size, $item->Count); } public function ChangeItem($idOrderItem,$size,$count){ $count=max(0,$count); OrderItem::UpdateOrderItem($idOrderItem, $count, $size); $items=$this->GetItems(true,true); $designsCount = $this->GetDesignsCount(); $productsCount = $this->GetProductsCount(); foreach($items as $item){ /* @var $item OrderItem */ if($item->IdOrderItem == $idOrderItem){ $targetDesign=$item->IdDesign; $targetProduct=$item->Product; break; } } $allowed=[166,19,27,32,33,34,39,45,46,47,54,55,56,63,64,71,72,73,74,75,76,77,80,81,83,87,90,91,92,109,110,111,155,156,161,162,166,196,199,216,228,230,231,248,249,250,252,264,265,270,279,280,283,284,285,291,297,301,302,304,306,316,327,331,343,344,345,394,595,645,678,754,755,759,760,867,945,1125,1126,1127,1202,1380,1432,1537,1570,1597,1604,1605,1614,1615,1616,1621,1622,1630,1632,1642,1643,1644,1649,1651,1652,1661,1663,1664,1675,1678,1679,1680,1681,1691,1692,1695,1702,1727,1756,1758,1766,1767,1768,1770,1779,1780,1783,1789,1790,1829,1861,1872,1883,1887,1907,1908,1909,1920,1928,1932,1933,1938,1949,1951,1958,1963,1968,1969,1972,1973,1974,1998,2014,2118,2135,2172,2173,2174,2175,2192,2193,2199,2202,2203,2221,2222,2227,2243,2275]; foreach($items as $item){ /* @var $item OrderItem */ if($targetProduct==$item->Product){ OrderItem::UpdateOrderItem($item->IdOrderItem, $item->Count, $item->Size, $designsCount,$productsCount); } } } public function RefreshItem($idOrderItem){ db::Query("SELECT * FROM orderitem WHERE IdOrderItem=".$idOrderItem); db::Fetch(); $count=db::$data["Count"]; $targetDesign=db::$data["IdDesign"]; $targetProduct=db::$data["Product"]; $items=$this->GetItems(true,true); $designsCount = $this->GetDesignsCount(); $productsCount = $this->GetProductsCount(); $allowed=[166,19,27,32,33,34,39,45,46,47,54,55,56,63,64,71,72,73,74,75,76,77,80,81,83,87,90,91,92,109,110,111,155,156,161,162,166,196,199,216,228,230,231,248,249,250,252,264,265,270,279,280,283,284,285,291,297,301,302,304,306,316,327,331,343,344,345,394,595,645,678,754,755,759,760,867,945,1125,1126,1127,1202,1380,1432,1537,1570,1597,1604,1605,1614,1615,1616,1621,1622,1630,1632,1642,1643,1644,1649,1651,1652,1661,1663,1664,1675,1678,1679,1680,1681,1691,1692,1695,1702,1727,1756,1758,1766,1767,1768,1770,1779,1780,1783,1789,1790,1829,1861,1872,1883,1887,1907,1908,1909,1920,1928,1932,1933,1938,1949,1951,1958,1963,1968,1969,1972,1973,1974,1998,2014,2118,2135,2172,2173,2174,2175,2192,2193,2199,2202,2203,2221,2222,2227,2243,2275]; if($targetDesign>0){ foreach($items as $item){ /* @var $item OrderItem */ if($targetProduct==$item->Product){ OrderItem::UpdateOrderItem($item->IdOrderItem, $item->Count, $item->Size, $designsCount,$productsCount); } } } } public static function ItemsCount(){ if(self::$itemsCount!=null){ return self::$itemsCount; }else{ self::$itemsCount=0; if(self::$CurrentOrder!=null){ $items = self::$CurrentOrder->GetItems(); $count=0; foreach($items as $item){ /* @var $item OrderItem */ if($item->IdDesign>0){ $count+=$item->Count; } } self::$itemsCount=$count; return self::$itemsCount; }else{ return 0; } } } public function SaveAnketa($comment,$total){ $update=array(); $update["AnketaKomentar"]=$comment; $update["AnketaCelkem"]=(int)$total; $update["AnketaDate"]=date("c"); $update["AnketaState"]="open"; db::Update("orders", $update, "IdOrder=".$this->IdOrder); } public function SaveItemAnketa($IdOrderItem,$AnketaProduct,$AnketaPrint,$AnketaComment){ $update=array(); $update["AnketaKoment"]=$AnketaComment; $update["AnketaProduct"]=(int)$AnketaProduct; $update["AnketaPrint"]=(int)$AnketaPrint; $update["ShowComment"]=2; db::Update("orderitem", $update, "IdOrderItem='".$IdOrderItem."' AND IdOrder='".$this->IdOrder."'"); } public function RemoveProduct($prod){ db::Query("DELETE FROM orderitem WHERE Product='$prod' AND IdOrder=".$this->IdOrder); } public function AddSimpleItem($idProduct,$idSize=null,$idColor=null){ db::Query("SELECT * FROM product p WHERE IdProduct='$idProduct'"); if(db::Fetch()){ $product=db::$data; if($idSize==null){ db::Query("SELECT * FROM product_productsize WHERE IdProduct='$idProduct' AND Available=1"); if(db::Fetch()){ $idSize=db::$data["IdProductSize"]; } } if($idColor==null){ db::Query("SELECT * FROM colorset_color WHERE IdColorSet='".$product["IdMainColorSet"]."' AND Available=1"); if(db::Fetch()){ $idColor=db::$data["IdColorSetColor"]; } } if($idSize!=null && $idColor!=null){ $this->AddItem(0, $idProduct, $idSize, $idColor,1, $product["Price"]); } } } public function AddItem($idDesign,$idProduct,$size,$color,$count,$price,$uniqueProduct=false,$discount=0,$idSpecialDesign=0,$itemParam=null,$sellType='normal'){ if($uniqueProduct){ db::Query("SELECT * FROM orderitem oi WHERE Product='$idProduct' AND IdOrder=".$this->IdOrder); if(db::Fetch()){ return; } } $item=new OrderItem(); $item->IdDesign=$idDesign; $item->Size=$size; $item->Color=$color; $item->Product = $idProduct; $item->Count=$count; $item->Price=$price; $item->Discount=$discount; $item->IdSpecialDesign=$idSpecialDesign; $item->Attribute = $itemParam; $item->SellType=$sellType; $r=$item->Save(); $idc =db::FQuery("SELECT IdColor FROM colorset_color cc WHERE cc.IdColorSetColor='$color'",'IdColor'); $storeId=db::FQuery("SELECT IdStore FROM store s WHERE s.IdProduct='$idProduct' AND s.IdProductSize='$size' AND s.IdColor='$idc'",'IdStore'); db::Query("UPDATE orderitem SET StoreId='$storeId' WHERE IdOrderItem='$r'",false); return $r; } public function AddUserShopItem($variant,$idMotiv,$size,$color){ $e=Country::GetEURRate(); db::Query("SELECT IdProduct,DesignPrice,d.IdDesign,d.IdProduct,u.Price FROM usershopmotiv u INNER JOIN usershopmotivcolor uc USING(IdUserShopMotiv) INNER JOIN design d USING(IdDesign) WHERE u.IdUserShopMotiv='$idMotiv' AND uc.IdColorSetColor='$color' AND uc.Type='$variant'"); db::Fetch(); $price=db::$data["DesignPrice"];//+db::$data["Price"]*$e; db::Query("INSERT INTO orderitem(IdDesign,IdOrder,Product,IdProductSize,IdColorSetColor,Count,Price)VALUES( '".db::$data["IdDesign"]."', '".$this->IdOrder."', '".db::$data["IdProduct"]."', '$size', '$color', '1', '".$price."' )"); echo "ok,".$variant.",".$idMotiv.",".$size.",".$color.",".$this->IdOrder; } public function RemoveItem($item){ if($item!=null){ db::Query("UPDATE orderitem SET Count=0 WHERE IdOrderItem='$item' AND IdOrder=".$this->IdOrder); $this->RefreshItem($item); db::Query("DELETE FROM orderitem WHERE IdOrderItem='$item' AND IdOrder=".$this->IdOrder); db::Query("DELETE FROM orderitem WHERE IdOrderItemTarget>0 AND IdOrderItemTarget='$item' AND IdOrder=".$this->IdOrder); } } public function RemoveServices($item){ db::Query("DELETE FROM orderitem WHERE IdOrderItemTarget>0 AND IdOrderItemTarget='$item' AND IdOrder=".$this->IdOrder); } public function GetTotalWeight(){ db::Query("SELECT SUM(oi.Count*GREATEST(10,p.Weight)) as weight FROM orderitem oi INNER JOIN product p ON p.IdProduct=oi.Product WHERE oi.IdOrder='".$this->IdOrder."'"); if(db::Fetch()){ return ((int)db::$data["weight"]); }else{ return 0; } } public function OnDeliveryPermitted(){ if($this->IdShipping==4 && $this->postPSC==1){ return false; } if($this->ondelivery==null){ $limit=800; if($this->GetItemsTotalPrice(true)>=$limit){ $this->ondelivery=false; return false; }else{ $this->ondelivery=true; return true; } }else{ return $this->ondelivery; } } } class Discount{ public $Type; public $Amount; public $Expired; public $Limit; public $Match; public $ActualAmount; } ?>fetchUser($initData); } } public static function FastReg($name,$email){ $d= explode(" ",$name); $fname=$d[0]; $lastname=$d[1]; if(count($d)>2){ $lastname.=" ".$d[2]; } db::Query("SELECT * FROM user u WHERE Email='".$email."' AND Registered=0"); if(db::Fetch()){ self::InitUser(db::$data["IdUser"]); }else{ db::Query("INSERT INTO user(FirstName,LastName,Email)VALUES('".$fname."','".$lastname."','".$email."')"); } return true; } public function GetRegHash(){ $hash= substr(md5($this->Email."supertajneheslo.123"),0,10); return $hash; } public function IsAdminUser(){ db::Query("SELECT * FROM adminuser WHERE Email='".$this->Email."' AND Email!=''"); if(db::Fetch()){ return true; }else{ return false; } } public static function CheckLoginHash($hash){ $list=explode("-",$hash); if(self::CheckTimeLimitedHash($list[0], $list[1], 24*11)){ User::InitUser($list[0]); return User::$CurrentUser; }else{ return false; } } public function GetLoginHash(){ $hash= $this->UserId."-".self::GetTimeLimitedHash($this->UserId,24*11); return $hash; } public static function InitUser($idUser=null){ if($idUser!=null){ self::SetUser(self::GetUser($idUser)); }else if(isset($_SESSION["user_id"]) && $_SESSION["user_id"]!=null){ self::SetUser( self::GetUser($_SESSION["user_id"]) ); } if($_COOKIE["user_id"]!=null && self::$CurrentUser==null){ self::SetUser(self::GetUser($_COOKIE["user_id"])); } if(getPar("l")!=null){ db::Query("SELECT * FROM user WHERE IdUser=".getParNum("l")." AND Pass='".getPar("h")."'"); if(db::Fetch()){ self::SetUser( self::GetUser(db::$data["IdUser"]) ); } }else if(getPar("l2")!=null){ if(md5(getPar("l2")."no_hack_please")==getPar("h")){ db::Query("SELECT * FROM user WHERE IdUser=".getParNum("l2")); if(db::Fetch()){ self::SetUser( self::GetUser(db::$data["IdUser"]) ); } } } if(User::$CurrentUser->UserId==17142 || User::$CurrentUser->UserId==20142){ User::SetUser(null); } } public static function Logout(){ if(self::$CurrentUser!=null){ SetCookie("last_user",self::$CurrentUser->UserId,time()+3600*24*365,"/"); } self::SetUser(null); if(Order::$CurrentOrder!=null){ Order::$CurrentOrder->SetUser(null); Order::$CurrentOrder->SavePrice(); } } public static function SetUser($user){ self::$CurrentUser=$user; if($user!=null){ $_SESSION["user_id"]=$user->UserId; SetCookie("user_id",$_SESSION["user_id"],time()+3600*24*365,"/"); }else{ $_SESSION["user_id"]=null; SetCookie("user_id",null,time(),"/"); } } public function CheckPass($pass){ /*if(User::CalcPassHash($pass)==$this->PassHash){ return true; }else{ return false; }*/ if(crypt(hash("sha256",$pass), $this->PassHash) == $this->PassHash) { return true; }else{ return false; } } public function GetAvailableCashback(){ if($this->availableCashback!==null){ return $this->availableCashback; }else{ db::Query("SELECT * FROM user_cashback WHERE IdUser=".$this->UserId); db::Fetch(); $this->availableCashback=db::$data["AvailableValue"]; if($this->availableCashback==null){ $this->availableCashback=0; } return $this->availableCashback; } } public static function GetCashback($email){ db::Query("SELECT uc.IdUser,uc.Email,uc.AvailableValue,u.UserSource FROM user_cashback uc LEFT JOIN user u USING(IdUser) WHERE uc.Email='".$email."'"); return db::Fetch(); } public static function Registration($userData){ $passChange=true; $values=array(); if($userData["IdUser"]>0){ $u=User::GetUser($userData["IdUser"]); if($userData["Pass"]!=null){ if(!$u->CheckPass($userData["OldPass"])){ return -2; } }else{ $passChange=false; } }else{ db::Query("SELECT * FROM user u WHERE Email='".db::Escape($userData["Email"])."' AND Registered=1"); if(db::Fetch()){ return -4; } $values["Notify"]=1; $values["NewsletterAgreeDate"]=date("c"); } if($u!=null){ $id=$u->UserId; }else{ if($userData["Email"]==""){ return -5; } db::Query("SELECT * FROM user u INNER JOIN orders o USING(IdUser) WHERE Email='".db::Escape($userData["Email"])."' ORDER BY IdUser DESC LIMIT 1"); if(!db::Fetch()){ $id=null; $values["Email"]=$userData["Email"]; }else if($userData["NewRegistration"]){ //není možné vytvořit novou registraci, když už existuje objednávka - je nutné přes ověřovací email dokončit registraci return -3; }else{ $id=db::$data["IdUser"]; db::Query("UPDATE user_cashback SET IdUser=$id WHERE Email='".db::Escape($userData["Email"])."'"); } } $values["FirstName"]=$userData["FirstName"]; $values["LastName"]=$userData["LastName"]; $values["DFirstName"]=$userData["DFirstName"]; $values["DLastName"]=$userData["DLastName"]; $values["BNum"]=$userData["BNum"]; $values["BLine1"]=$userData["BLine1"]; $values["BLine2"]=$userData["BLine2"]; $values["BZip"]=$userData["BZip"]; $values["BNote"]=$userData["BNote"]; $values["Phone"]=$userData["Phone"]; $values["IdDestinationCountry"]=$userData["IdDestinationCountry"]; if($passChange){ $values["Pass"]=User::CalcPassHash($userData["Pass"]); } $values["Registered"]=1; $values["UserSource"]=$userData["UserSource"]; if($id!=null){ db::Update("user", $values, "IdUser=".$id); }else{ db::Insert("user", $values); $id=db::ReturnId(); } return $id; } public static function GetUser($id,$login=null,$checkReg=false){ if($id!=null){ db::Query("SELECT OldProfile,UserSource,IdUser,DFirstName,DLastName,FirstName,LastName,Login,Email,Pass,IdDestinationCountry,Registered,Notify FROM user WHERE IdUser=".((int)$id),true); }else{ if($checkReg){ db::Query("SELECT OldProfile,IdUser,DFirstName,DLastName,FirstName,LastName,Login,Email,Pass,IdDestinationCountry,Registered,Notify FROM user WHERE Registered=1 AND Email='$login'",true); }else{ db::Query("SELECT IdUser,DFirstName,DLastName,FirstName,LastName,Login,Email,Pass,IdDestinationCountry,Registered,Notify FROM user WHERE Email='$login'",true); } } if(db::Fetch()){ return (new User(db::$data)); }else{ return null; } } public function SetSource($src){ db::Query("UPDATE user SET UserSource='$src' WHERE IdUser=".$this->UserId,false); } public function SaveUser(){ $set=false; if($this->UserId==null){ $set=true; db::Query("INSERT INTO user()VALUES()"); $this->UserId=db::ReturnId(); } db::Query("UPDATE user SET ".$this->GetSaveString()." WHERE IdUser=".$this->UserId); if($set){ self::SetUser(self::GetUser($this->UserId)); } } public function CheckEmail(){ //Vrací true, pokud je možné tohoto uživatele zaregistrovat s daným emailem, jinak false if($this->UserId!=null){ db::Query("SELECT IdUser FROM user WHERE Registered=1 AND Email='".$this->Email."' AND IdUser!=".$this->UserId); }else{ db::Query("SELECT IdUser FROM user WHERE Registered=1 AND Email='".$this->Email."'"); } if(db::Fetch()){ return false; }else{ return true; } } public function EnableNotify($value){ $value=(int)$value; db::Query("UPDATE user SET Notify='".$value."',NewsletterAgreeDate='".date("c")."' WHERE IdUser='".$this->UserId."'",false); } public function ResetEmail(){ $this->Email=$this->_baseEmail; } private function fetchUser($data){ $this->PassHash=$data["Pass"]; $this->UserId=$data["IdUser"]; $this->DestinationCountry=$data["IdDestinationCountry"]; $this->Email=$data["Email"]; $this->Source=$data["UserSource"]; $this->Registered=$data["Registered"]; $this->Notify=$data["Notify"]; $this->_baseEmail=$this->Email; $this->FullName= $data["FirstName"]." ".$data["LastName"]; $this->FirstName = $data["FirstName"]; $this->FBId = $data["FBId"]; $this->UserDiscount = $data["UserDiscount"]; if($this->UserDiscount==null){ $this->UserDiscount=0; } $this->OldProfile=$data["OldProfile"]; $this->Data=$data; } private function getSaveString(){ $str=""; if($this->Address!=null){ $str.=$this->Address->GetUpdateString(); } //db::FastLog($str); if($str!=""){ $str.=","; } $str.="Notify='".$this->Notify."'"; $str.=",FBId='".$this->FBId."'"; if($this->CheckEmail()|| !$this->Registered){ $str.=",Email='".$this->Email."'"; } if($this->Pass!=null){ $str.=",Pass='".User::CalcPassHash($this->Pass)."'"; } return $str; } public static function CheckLogin($allowUnregistered=false){ if(self::$CurrentUser!=null && (self::$CurrentUser->Registered||$allowUnregistered)){ return true; }else{ return false; } } public function Register(){ $this->Registered=true; db::Query("UPDATE user SET Registered=1 WHERE IdUser=".$this->UserId); } public static function LoadFromResource($res){ return new User($res); } public static function GetTimeLimitedHash($value,$hourLimit,$inc=0,$salt=''){ return substr(md5($value."supertajneheslo.123".$salt.floor((time()+$inc*3600*$hourLimit)/3600/$hourLimit)),0,10); } public static function CheckTimeLimitedHash($value,$hash,$hourLimit,$salt=''){ $h1=self::GetTimeLimitedHash($value, $hourLimit, 0,$salt); $h2=self::GetTimeLimitedHash($value, $hourLimit, -1,$salt); if($h1==$hash || $h2==$hash){ return true; }else{ return false; } } public static function GetHash($email){ db::Query("SELECT Pass FROM user WHERE Email='$email' AND Registered=1"); if(db::Fetch()){ return db::$data["Pass"]; }else{ return null; } } public static function CheckHash($hash,$email){ db::Query("SELECT 1 FROM user WHERE email='$email' AND pass='$hash'"); if(db::Fetch()){ self::SetUser(self::GetUser(null,$email,true)); return true; }else{ return false; } } public function SetPassword($pass){ db::Query("UPDATE user SET Pass='".User::CalcPassHash($pass)."' WHERE IdUser=".$this->UserId); } public static function LoginFB($fbResult){ db::Query("SELECT IdUser FROM user WHERE FBId='".$fbResult["id"]."'"); if(db::Fetch()){ $_SESSION["first_login"]=false; self::SetUser(self::GetUser(db::$data["IdUser"])); }else{ db::Query("SELECT IdUser FROM user WHERE Email='".$fbResult["email"]."' AND Registered='1'"); if($fbResult["email"]!="" && db::Fetch()){ $_SESSION["first_login"]=false; self::SetUser(self::GetUser(db::$data["IdUser"])); db::Query("UPDATE user SET FBId='".$fbResult["id"]."' WHERE IdUser='".self::$CurrentUser->UserId."'"); }else{ db::Query("SELECT * FROM user WHERE Email='".$fbResult["email"]."' ORDER BY IdUser DESC"); if($fbResult["email"]!="" && db::Fetch()){ $user = self::GetUser(db::$data["IdUser"]); $user->Register(); self::SetUser($user); $_SESSION["first_login"]=false; }else{ $user = new User(); $user->FBId = $fbResult["id"]; $user->Email = $fbResult["email"]; $user->Address = new Address(); $user->Address->FirstName = $fbResult["first_name"]; $user->Address->LastName = $fbResult["last_name"]; $user->DestinationCountry = Country::$UserCountry->DefaultDestination; $user->SaveUser(); if($fbResult["email"]!=""){ $user->Register(); } } } } } public static function LoginGoogle($fbResult){ db::Query("SELECT IdUser FROM user WHERE FBId='".$fbResult->id."'"); if(db::Fetch()){ $_SESSION["first_login"]=false; self::SetUser(self::GetUser(db::$data["IdUser"])); }else{ db::Query("SELECT IdUser FROM user WHERE Email='".$fbResult->emails[0]->value."' AND Registered='1'"); if(db::Fetch()){ $_SESSION["first_login"]=false; self::SetUser(self::GetUser(db::$data["IdUser"])); db::Query("UPDATE user SET FBId='".$fbResult->id."' WHERE IdUser='".self::$CurrentUser->UserId."'"); }else{ $_SESSION["first_login"]=true; $user = new User(); $user->FBId = $fbResult->id; $user->Email = $fbResult->emails[0]->value; $user->Address = new Address(); $user->Address->FirstName = $fbResult->name->givenName; $user->Address->LastName = $fbResult->name->familyName; $user->DestinationCountry = Country::$UserCountry->DefaultDestination; $user->SaveUser(); $user->Register(); } } } public static function CalcPassHash($pass){ //return hash("sha256",$pass); //return md5("tajneheslo123456".hash("sha256",$pass)); $salt = "$2a$10$"; for ($i = 0; $i < 22; $i++) { $salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_rand(0, 63), 1); } return crypt(hash("sha256",$pass), $salt); } public static function Login($user,$pass){ $user=self::GetUser(null,$user,true); if($user!=null && $user->CheckPass($pass)){ self::SetUser($user); if(Order::$CurrentOrder!=null){ Order::$CurrentOrder->SetUser($user->UserId); Order::$CurrentOrder->SaveAddress($user->GetAddress()); Order::$CurrentOrder->SavePrice(); } return true; }else{ return false; } } public function GetAddress(){ if($this->Address==null){ $data=db::Query("SELECT DFirstName,DLastName,FirstName,LastName,DLine1,DNum,DLine2,DZip,BLine1,BNum,BLine2,BZip,IdDestinationCountry,Phone,CName,CId,CTId,BNote,DNote FROM user WHERE IdUser='".$this->UserId."'",true); $this->Address = new Address(db::Fetch($data)); } return $this->Address; } } ?>