182 lines
4.9 KiB
PHP
182 lines
4.9 KiB
PHP
<?PHP
|
||
|
||
/**
|
||
* Simpla CMS
|
||
*
|
||
* @copyright 2009 Denis Pikusov
|
||
* @link http://simp.la
|
||
* @author Denis Pikusov
|
||
*
|
||
* Корзина покупок
|
||
* Этот класс использует шаблон cart.tpl
|
||
*
|
||
*/
|
||
|
||
require_once('View.php');
|
||
|
||
class OrderView extends View
|
||
{
|
||
public function __construct()
|
||
{
|
||
parent::__construct();
|
||
$this->design->smarty->registerPlugin("function", "checkout_form", array($this, 'checkout_form'));
|
||
}
|
||
|
||
//////////////////////////////////////////
|
||
// Основная функция
|
||
//////////////////////////////////////////
|
||
function fetch()
|
||
{
|
||
// Скачивание файла
|
||
if($this->request->get('file'))
|
||
{
|
||
return $this->download();
|
||
}
|
||
else
|
||
{
|
||
return $this->fetch_order();
|
||
}
|
||
|
||
}
|
||
|
||
function fetch_order()
|
||
{
|
||
if($url = $this->request->get('url', 'string'))
|
||
$order = $this->orders->get_order((string)$url);
|
||
elseif(!empty($_SESSION['order_id']))
|
||
$order = $this->orders->get_order(intval($_SESSION['order_id']));
|
||
else
|
||
return false;
|
||
|
||
if(!$order)
|
||
return false;
|
||
|
||
$purchases = $this->orders->get_purchases(array('order_id'=>intval($order->id)));
|
||
if(!$purchases)
|
||
return false;
|
||
|
||
if($this->request->method('post'))
|
||
{
|
||
if($payment_method_id = $this->request->post('payment_method_id', 'integer'))
|
||
{
|
||
$this->orders->update_order($order->id, array('payment_method_id'=>$payment_method_id));
|
||
$order = $this->orders->get_order((integer)$order->id);
|
||
}
|
||
elseif($this->request->post('reset_payment_method'))
|
||
{
|
||
$this->orders->update_order($order->id, array('payment_method_id'=>null));
|
||
$order = $this->orders->get_order((integer)$order->id);
|
||
}
|
||
}
|
||
|
||
$products_ids = array();
|
||
$variants_ids = array();
|
||
foreach($purchases as $purchase)
|
||
{
|
||
$products_ids[] = $purchase->product_id;
|
||
$variants_ids[] = $purchase->variant_id;
|
||
}
|
||
$products = array();
|
||
foreach($this->products->get_products(array('id'=>$products_ids)) as $p)
|
||
$products[$p->id] = $p;
|
||
|
||
$images = $this->products->get_images(array('product_id'=>$products_ids));
|
||
foreach($images as $image)
|
||
$products[$image->product_id]->images[] = $image;
|
||
|
||
$variants = array();
|
||
foreach($this->variants->get_variants(array('id'=>$variants_ids)) as $v)
|
||
$variants[$v->id] = $v;
|
||
|
||
foreach($variants as $variant)
|
||
$products[$variant->product_id]->variants[] = $variant;
|
||
|
||
foreach($purchases as &$purchase)
|
||
{
|
||
$purchase->options = unserialize($purchase->options);
|
||
|
||
if(!empty($products[$purchase->product_id]))
|
||
$purchase->product = $products[$purchase->product_id];
|
||
if(!empty($variants[$purchase->variant_id]))
|
||
{
|
||
$purchase->variant = $variants[$purchase->variant_id];
|
||
}
|
||
}
|
||
|
||
$feat = $this->features->get_features(array('in_variant'=>1));
|
||
foreach($feat AS $fe){
|
||
$feat[$fe->id] = $fe;
|
||
}
|
||
$this->design->assign('features', $feat);
|
||
|
||
|
||
// Способ доставки
|
||
$delivery = $this->delivery->get_delivery($order->delivery_id);
|
||
$this->design->assign('delivery', $delivery);
|
||
|
||
$this->design->assign('order', $order);
|
||
$this->design->assign('purchases', $purchases);
|
||
|
||
// Способ оплаты
|
||
if($order->payment_method_id)
|
||
{
|
||
$payment_method = $this->payment->get_payment_method($order->payment_method_id);
|
||
$this->design->assign('payment_method', $payment_method);
|
||
}
|
||
|
||
// Варианты оплаты
|
||
$payment_methods = $this->payment->get_payment_methods(array('delivery_id'=>$order->delivery_id, 'enabled'=>1));
|
||
$this->design->assign('payment_methods', $payment_methods);
|
||
|
||
// Все валюты
|
||
$this->design->assign('all_currencies', $this->money->get_currencies());
|
||
|
||
|
||
|
||
// Выводим заказ
|
||
return $this->body = $this->design->fetch('order.tpl');
|
||
}
|
||
|
||
private function download()
|
||
{
|
||
$file = $this->request->get('file');
|
||
|
||
if(!$url = $this->request->get('url', 'string'))
|
||
return false;
|
||
|
||
$order = $this->orders->get_order((string)$url);
|
||
if(!$order)
|
||
return false;
|
||
|
||
if(!$order->paid)
|
||
return false;
|
||
|
||
// Проверяем, есть ли такой файл в покупках
|
||
$query = $this->db->placehold("SELECT p.id FROM __purchases p, __variants v WHERE p.variant_id=v.id AND p.order_id=?", $order->id);
|
||
$this->db->query($query);
|
||
if($this->db->num_rows()==0)
|
||
return false;
|
||
|
||
header("Content-type: application/force-download");
|
||
header("Content-Disposition: attachment; filename=\"$file\"");
|
||
header("Content-Length: ".filesize($this->config->root_dir.$this->config->downloads_dir.$file));
|
||
print file_get_contents($this->config->root_dir.$this->config->downloads_dir.$file);
|
||
|
||
exit();
|
||
}
|
||
|
||
public function checkout_form($params, &$smarty)
|
||
{
|
||
$module_name = preg_replace("/[^A-Za-z0-9]+/", "", $params['module']);
|
||
|
||
$form = '';
|
||
if(!empty($module_name) && is_file("payment/$module_name/$module_name.php"))
|
||
{
|
||
include_once("payment/$module_name/$module_name.php");
|
||
$module = new $module_name();
|
||
$form = $module->checkout_form($params['order_id'], $params['button_text']);
|
||
}
|
||
return $form;
|
||
}
|
||
|
||
}
|