Example #1
0
 /**
  * Display a user's cart
  */
 public function read()
 {
     $id = $this->inputfilter->clean($this->app->get('PARAMS.id'), 'alnum');
     $user_id = $this->input->get('user_id', '', 'alnum');
     // check, if we're not forcing user to view a certain cart (i. e. after they click on link in email)
     if (!empty($id)) {
         $cart = (new \Shop\Models\Carts())->setState('filter.id', $id)->getItem();
         if (empty($cart)) {
             // this cart does not exist so let's not disclose that to people. rather, we say the cart is empty (which is true)
             $this->app->reroute('/shop/cart');
             return;
         }
         $identity = $this->getIdentity();
         if (empty($identity->id)) {
             $token = $this->input->get('auto_login_token', '', 'alnum');
             if (empty($user_id) || empty($token)) {
                 \Dsc\System::instance()->get('session')->set('site.login.redirect', '/shop/cart');
                 $this->app->reroute('/sign-in');
             } else {
                 // try to auto log in user
                 $notification_idx = $this->input->get("idx", 0, 'int');
                 $this->auth->loginWithToken($user_id, $token, '/shop/cart?email=1&user_id=' . $user_id . '&idx=' . $notification_idx);
             }
         } else {
             if ((string) $cart->user_id != (string) $identity->id) {
                 $this->app->reroute('/shop/cart');
                 return;
             }
         }
     }
     $referal_email = $this->input->get("email", 0, 'int');
     if ($referal_email) {
         $identity = $this->getIdentity();
         if ($identity->id == $user_id) {
             // only if the right user is logged in
             $notification_idx = $this->input->get("idx", 0, 'int');
             \Dsc\Activities::track('User clicked on link in abandoned cart email', array('Notification' => $notification_idx));
             \Dsc\System::instance()->get('session')->set('shop.notification_email', 1);
         }
         $this->app->reroute('/shop/cart');
         return;
     }
     $cart = \Shop\Models\Carts::fetch();
     // Update product fields stored in cart
     foreach ($cart->validateProducts() as $change) {
         \Dsc\System::addMessage($change);
     }
     $cart->applyCredit();
     \Base::instance()->set('cart', $cart);
     $this->app->set('meta.title', 'Shopping Cart');
     \Shop\Models\Activities::track('Viewed Cart', array('cart_id' => (string) $cart->id));
     $view = \Dsc\System::instance()->get('theme');
     echo $view->renderTheme('Shop/Site/Views::cart/read.php');
 }
Example #2
0
 /**
  * Gets paginated results from a source
  */
 protected function filteredSearch()
 {
     $current_source = array('id' => 'invalid', 'title' => '');
     $paginated = null;
     $q = trim($this->input->get('q', null, 'default'));
     try {
         if (!empty($q)) {
             $current_source = \Search\Models\Source::current();
             $paginated = \Search\Models\Source::paginate($current_source, $q);
             \Dsc\Activities::track('Performed Search', array('Search Term' => $q, 'Search Source' => $current_source['title'], 'page_number' => $paginated->current_page, 'app' => 'search'));
         }
     } catch (\Exception $e) {
         \Dsc\System::addMessage($e->getMessage(), 'error');
     }
     $this->app->set('current_source', $current_source);
     $this->app->set('paginated', $paginated);
     $this->app->set('q', $q);
     $this->app->set('meta.title', trim('Search ' . $current_source['title']));
     echo $this->theme->render('Search/Site/Views::search/index.php');
 }
Example #3
0
 public static function track($action, $properties = array())
 {
     $action_properties = $properties + array('app' => 'pages');
     return parent::track($action, $action_properties);
 }
Example #4
0
 /**
  * 
  * @param unknown $cart_id
  * @param unknown $notification_idx
  */
 public static function sendAbandonedEmailNotification($cart_id, $notification_idx)
 {
     $settings = \Shop\Models\Settings::fetch();
     if (empty($settings->abandoned_cart_emails_enabled)) {
         return;
     }
     $cart = (new static())->setState('filter.id', $cart_id)->getItem();
     // cart was deleted so dont do anything
     if (empty($cart->id)) {
         return;
     }
     // Has the cart been updated recently?  if so, don't send this email
     $abandoned_time = $settings->get('abandoned_cart_time') * 60;
     $abandoned_time = time() - $abandoned_time;
     if ($cart->{'metadata.last_modified.time'} > $abandoned_time) {
         return;
     }
     if ($cart->quantity() == 0) {
         return;
     }
     $user = $cart->user();
     if (empty($user->id) || $user->id != $cart->user_id || $user->guest) {
         return;
     }
     // get correct user email
     $recipients = array();
     if (empty($cart->{'user_email'})) {
         if (!empty($user->email)) {
             $recipients = array($user->email);
         }
     } else {
         $recipients = array($cart->{'user_email'});
     }
     if (empty($recipients)) {
         return;
     }
     $token = \Dsc\System::instance()->get('auth')->getAutoLoginToken($user, true);
     \Base::instance()->set('cart', $cart);
     \Base::instance()->set('user', $user);
     \Base::instance()->set('idx', $notification_idx);
     \Base::instance()->set('token', $token);
     $subject = $settings->get('abandoned_cart_emails.' . $notification_idx . '.subject');
     if (empty($subject)) {
         $subject = $settings->get('abandoned_cart_subject');
         if (empty($subject)) {
             $subject = "Complete your purchase";
         }
     }
     $notification = $settings->get('abandoned_cart_emails.' . $notification_idx);
     if (empty($notification)) {
         $notification = array('text' => array('html' => '', 'plain' => ''));
     }
     \Base::instance()->set('notification', $notification);
     $html = \Dsc\System::instance()->get('theme')->renderView('Shop/Views::emails_html/abandoned_cart.php');
     $text = \Dsc\System::instance()->get('theme')->renderView('Shop/Views::emails_text/abandoned_cart.php');
     foreach ($recipients as $recipient) {
         \Dsc\System::instance()->get('mailer')->send($recipient, $subject, array($html, $text));
     }
     $num = $notification_idx + 1;
     \Dsc\Activities::trackActor($user->email, 'Received abandoned cart email notification #' . $num, array('cart_value' => (string) $cart->total(), 'cart_items_count' => (string) $cart->quantity()));
 }