Files
AtomicOld/view/OrderView.php
2026-02-14 19:34:54 +03:00

182 lines
4.9 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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;
}
}