37 public $shipping_info;
45 public $layout =
"ShoppingCartWidget";
49 public $link_items_to_page =
false;
54 private $shoppingcart_link;
69 $itemsCount = count(Order::getOrder()->items);
71 if(!isset($this->shoppingcart_link)){
72 $this->shoppingcart_link = substr($_SERVER[
'REDIRECT_URL'],1);
74 if(!isset($this->thankyoupage)
75 && isset(Yii::app()->getModule(
'shoppingcart')->thankyoupage[Yii::app()->language])){
76 $this->thankyoupage = Yii::app()->getModule(
'shoppingcart')->thankyoupage[Yii::app()->language];
78 if(isset($this->thankyoupage)){
79 Yii::app()->user->setState(
'thankyoupage',$this->thankyoupage);
82 $this->step = isset($_REQUEST[
'step']) ? $_REQUEST[
'step'] : 1;
87 $order_id = Order::getOrder(
true);
88 $items =
Item::model()->findAll(
'order_id=:order_id',array(
':order_id'=>$order_id));
90 if(isset($_POST[
'Item']))
93 foreach($items as $i=>$item)
95 if(isset($_POST[
'Item'][$i]) && is_numeric($_POST[
'Item'][$i][
'quantity']) && $_POST[
'Item'][$i][
'quantity'] > 0)
96 $item->quantity = $_POST[
'Item'][$i][
'quantity'];
97 $valid = $item->validate(array(
'quantity'))
98 && is_numeric($_POST[
'Item'][$i][
'quantity'])
99 && $_POST[
'Item'][$i][
'quantity'] > 0
104 foreach($items as $item){
108 Yii::app()->user->setState(
'step_1',
true);
116 $model = Order::getUser();
119 if(isset($_POST[
'TmpUser']))
121 $model->attributes=$_POST[
'TmpUser'];
123 if($model->validate() && $model->unsetExistFields()->save(
false)){
125 Yii::app()->user->setState(
'step_2',
true);
128 $this->user = $model;
133 $model = Order::getOrder();
135 if(isset($_POST[
'Order']))
140 if(md5($model->shipping_info.$model->payment_info) == $_POST[
'checksum']){
141 if($model->save(
false)){
142 Yii::app()->user->setState(
'step_3',
true);
150 $model = Order::getOrder();
153 if(isset($_POST[
'Order'])){
155 $model->verifyCode = $_POST[
'Order'][
'verifyCode'];
158 if(!Yii::app()->user->getState(
'step_1')){
159 Yii::app()->controller->redirect(Yii::app()->createUrl($this->shoppingcart_link));
161 if(!Yii::app()->user->getState(
'step_2')){
162 Yii::app()->controller->redirect(Yii::app()->createUrl($this->shoppingcart_link , array(
'step'=>2)));
164 if(!Yii::app()->user->getState(
'step_3')){
165 Yii::app()->controller->redirect(Yii::app()->createUrl($this->shoppingcart_link , array(
'step'=>3)));
168 if($model->validate(array(
'verifyCode'))){
169 $model->ordered = Order::ORDERED;
170 $this->onOrdered($model);
171 if($model->save(
false)){
172 $items = $model->items;
173 $referrer = $items[count($items)-1]->referrer;
175 Yii::app()->user->setState(
'step_1', null);
176 Yii::app()->user->setState(
'step_2', null);
177 Yii::app()->user->setState(
'step_3', null);
180 if(isset($this->thankyoupage) && !empty($this->thankyoupage)){
181 Yii::app()->controller->redirect($this->thankyoupage);
183 Yii::app()->controller->redirect($referrer);
187 $this->order = $model;
194 $cookie =
new CHttpCookie(
'user_id', Order::getUser(
true));
195 $cookie->expire = time()+60 * Yii::app()->getModule(
'shoppingcart')->max_lifetime;
196 if(isset(Yii::app()->getModule(
'shoppingcart')->cookie_domain)){
197 $cookie->domain = Yii::app()->getModule(
'shoppingcart')->cookie_domain;
199 Yii::app()->request->cookies[
'user_id'] = $cookie;
202 if(!isset($this->order)){
203 $this->order = Order::getOrder();
209 if(!isset($this->user)){
210 $this->user = Order::getUser()->implementFromSession();
212 if(!isset($this->items)){
213 $this->items =
Item::model()->findAll(
'order_id=:order_id',array(
':order_id'=>$this->order->id));
233 $params[
'checksum'] = md5($this->shipping_info.$this->payment_info);
239 $widgetName =
"_shoppingStep_".$this->step;
241 $content = $this->render($widgetName, $params,
true);
243 $params[
'content'] = $content;
245 $this->render($this->layout, $params);
252 protected function onOrdered($order){
254 $user = Order::getUser()->implementFromSession();
255 $items = $order->items;
256 $itemsToAdmins = array();
257 foreach($items as $item){
258 $itemsToAdmins[$item->admin_email][] = $item;
261 $admin_email_template = Yii::app()->getModule(
'shoppingcart')->adminemail_template;
263 foreach($itemsToAdmins as $admin_email => $itemsToAdmin){
269 Yii::app()->controller->renderMail(
'shoppingcart.views.mail_templates.'.$admin_email_template, $subject, array(
'items' => $itemsToAdmin,
'user' => $user),
true)
272 $notification->recipients[] =
new EmailRecipient($admin_email, Yii::app()->getModule(
'shoppingcart')->notificationsEmail);
274 Yii::app()->notificationManager->notifyAbout($notification);
277 $usermail_template = Yii::app()->getModule(
'shoppingcart')->usermail_template;
286 Yii::app()->controller->renderMail(
'shoppingcart.views.mail_templates.'.$usermail_template, $subject, array(
'items' => $items),
true)
289 $notification->recipients[] =
new EmailRecipient($user->email, Yii::app()->getModule(
'shoppingcart')->notificationsEmail);
291 Yii::app()->notificationManager->notifyAbout($notification);
303 if(isset($_POST[
'ajax']))
306 echo CActiveForm::validate($model);
317 if(Yii::app()->request->isPostRequest && Yii::app()->request->enableCsrfValidation){
318 if(strcmp($_POST[
'YII_CSRF_TOKEN'], Yii::app()->request->getCsrfToken()) !== 0 ){
319 throw new CHttpException(403);