37 public $shipping_info;
45 public $layout =
"ShoppingCartWidget";
49 public $link_items_to_page =
false;
54 private $shoppingcart_link;
69 $this->step = isset($_REQUEST[
'step']) ? $_REQUEST[
'step'] : 1;
71 if(Order::getOrder()===
false)
73 $itemsCount = count(Order::getOrder()->items);
75 if(!isset($this->shoppingcart_link)){
76 $this->shoppingcart_link = substr($_SERVER[
'REDIRECT_URL'],1);
78 if(!isset($this->thankyoupage)
79 && isset(Yii::app()->getModule(
'shoppingcart')->thankyoupage[Yii::app()->language])){
80 $this->thankyoupage = Yii::app()->getModule(
'shoppingcart')->thankyoupage[Yii::app()->language];
82 if(isset($this->thankyoupage)){
83 Yii::app()->user->setState(
'thankyoupage',$this->thankyoupage);
90 $order_id = Order::getOrder(
true);
91 $items =
Item::model()->findAll(
'order_id=:order_id',array(
':order_id'=>$order_id));
93 if(isset($_POST[
'Item']))
96 foreach($items as $i=>$item)
98 if(isset($_POST[
'Item'][$i]) && is_numeric($_POST[
'Item'][$i][
'quantity']) && $_POST[
'Item'][$i][
'quantity'] > 0)
99 $item->quantity = $_POST[
'Item'][$i][
'quantity'];
100 $valid = $item->validate(array(
'quantity'))
101 && is_numeric($_POST[
'Item'][$i][
'quantity'])
102 && $_POST[
'Item'][$i][
'quantity'] > 0
107 foreach($items as $item){
111 Yii::app()->user->setState(
'step_1',
true);
119 $model = Order::getUser();
122 if(isset($_POST[
'TmpUser']))
124 $model->attributes=$_POST[
'TmpUser'];
126 if($model->validate() && $model->unsetExistFields()->save(
false)){
128 Yii::app()->user->setState(
'step_2',
true);
131 $this->user = $model;
136 $model = Order::getOrder();
138 if(isset($_POST[
'Order']))
143 if(md5($model->shipping_info.$model->payment_info) == $_POST[
'checksum']){
144 if($model->save(
false)){
145 Yii::app()->user->setState(
'step_3',
true);
153 $model = Order::getOrder();
156 if(isset($_POST[
'Order'])){
158 $model->verifyCode = $_POST[
'Order'][
'verifyCode'];
161 if(!Yii::app()->user->getState(
'step_1')){
162 Yii::app()->controller->redirect(Yii::app()->createUrl($this->shoppingcart_link));
164 if(!Yii::app()->user->getState(
'step_2')){
165 Yii::app()->controller->redirect(Yii::app()->createUrl($this->shoppingcart_link , array(
'step'=>2)));
167 if(!Yii::app()->user->getState(
'step_3')){
168 Yii::app()->controller->redirect(Yii::app()->createUrl($this->shoppingcart_link , array(
'step'=>3)));
171 if($model->validate(array(
'verifyCode'))){
172 $model->ordered = Order::ORDERED;
173 $this->onOrdered($model);
174 if($model->save(
false)){
175 $items = $model->items;
176 $referrer = $items[count($items)-1]->referrer;
178 Yii::app()->user->setState(
'step_1', null);
179 Yii::app()->user->setState(
'step_2', null);
180 Yii::app()->user->setState(
'step_3', null);
183 if(isset($this->thankyoupage) && !empty($this->thankyoupage)){
184 Yii::app()->controller->redirect($this->thankyoupage);
186 Yii::app()->controller->redirect($referrer);
190 $this->order = $model;
197 $cookie =
new CHttpCookie(
'user_id', Order::getUser(
true));
198 $cookie->expire = time()+60 * Yii::app()->getModule(
'shoppingcart')->max_lifetime;
199 if(isset(Yii::app()->getModule(
'shoppingcart')->cookie_domain)){
200 $cookie->domain = Yii::app()->getModule(
'shoppingcart')->cookie_domain;
202 Yii::app()->request->cookies[
'user_id'] = $cookie;
205 if(!isset($this->order)){
206 $this->order = Order::getOrder();
212 if(!isset($this->user)){
213 $this->user = Order::getUser()->implementFromSession();
215 if(!isset($this->items)){
216 $this->items =
Item::model()->findAll(
'order_id=:order_id',array(
':order_id'=>$this->order->id));
236 $params[
'checksum'] = md5($this->shipping_info.$this->payment_info);
242 $widgetName =
"_shoppingStep_".$this->step;
245 if (Order::getOrder() !==
false) {
246 $content = $this->render($widgetName, $params,
true);
248 $params[
'content'] = $content;
250 $this->render($this->layout, $params);
257 protected function onOrdered($order){
259 $user = Order::getUser()->implementFromSession();
260 $items = $order->items;
261 $itemsToAdmins = array();
262 foreach($items as $item){
263 $itemsToAdmins[$item->admin_email][] = $item;
266 $admin_email_template = Yii::app()->getModule(
'shoppingcart')->adminemail_template;
268 foreach($itemsToAdmins as $admin_email => $itemsToAdmin){
274 Yii::app()->controller->renderMail(
'shoppingcart.views.mail_templates.'.$admin_email_template, $subject, array(
'items' => $itemsToAdmin,
'user' => $user),
true)
277 $notification->recipients[] =
new EmailRecipient($admin_email, Yii::app()->getModule(
'shoppingcart')->notificationsEmail);
279 Yii::app()->notificationManager->notifyAbout($notification);
282 $usermail_template = Yii::app()->getModule(
'shoppingcart')->usermail_template;
290 Yii::app()->controller->renderMail(
'shoppingcart.views.mail_templates.'.$usermail_template, $subject, array(
'items' => $items),
true)
293 $notification->recipients[] =
new EmailRecipient($user->email, Yii::app()->getModule(
'shoppingcart')->notificationsEmail);
296 Yii::app()->notificationManager->notifyAbout($notification);
297 }
catch (Exception $e) {
298 Yii::log($e->getMessage(),
'warning');
313 if(isset($_POST[
'ajax']))
316 echo CActiveForm::validate($model);
327 if(Yii::app()->request->isPostRequest && Yii::app()->request->enableCsrfValidation){
328 if(strcmp($_POST[
'YII_CSRF_TOKEN'], Yii::app()->request->getCsrfToken()) !== 0 ){
329 throw new CHttpException(403);