Example #1
0
 /**
  * Remove user credits depending of order
  *
  * @access public
  * @param  object	          $order = Order object
  * @param  array of objects   $products = Products from order
  * @return void
  */
 public static function remove_credits($order = false, $products = false)
 {
     if (!is_numeric($order->user_id)) {
         return false;
     }
     // Get user to edit
     if (!\Sentry::user_exists((int) $order->user_id)) {
         return false;
     }
     $user = new \Sentry_User((int) $order->user_id);
     // Remove user credits
     $seek = $user->get('metadata.seek_credits') - ($order->seek > 0 ? 1 : 0);
     $seek >= 0 or $seek = 0;
     $careerone = $user->get('metadata.careerone_credits') - ($order->careerone > 0 ? 1 : 0);
     $careerone >= 0 or $careerone = 0;
     $update = array('metadata' => array('seek_credits' => $seek, 'careerone_credits' => $careerone));
     // Update user credits
     if ($user->update($update)) {
         return true;
     }
     return false;
 }
Example #2
0
 public function action_create()
 {
     if (!Sentry::user()->has_access('users_create')) {
         Response::redirect('');
     }
     if (Input::method() == 'POST') {
         $val = Model_Users::validate('create');
         if (!$val->run()) {
             // no valid values
             Session::set_flash('error', implode(' ', $val->error()));
         } else {
             // valid values
             if (Sentry::user_exists(Input::post('username'))) {
                 // the user exist
                 Session::set_flash('error', 'User ' . Input::post('username') . ' already exists');
             } else {
                 $user_id = Sentry::user()->create(array('username' => Input::post('username'), 'email' => Input::post('email'), 'password' => Input::post('password'), 'metadata' => array('department' => Input::post('department'), 'first_name' => Input::post('first_name'), 'last_name' => Input::post('last_name'))));
                 if (!$user_id) {
                     // user has not been created
                     Session::set_flash('error', 'User not created');
                 } else {
                     // user has been created
                     $user = Sentry::user($user_id);
                     $user->add_to_group(Input::post('group'));
                     Session::set_flash('success', 'User successfuly created');
                     Response::redirect('users');
                 }
             }
         }
     }
     View::set_global('groups', Sentry::group()->all());
     $this->template->h2 = 'Create a new user';
     $this->template->title = 'User » Create';
     $this->template->js .= Asset::js(array('mylibs/jquery.validate.js', 'script.js'));
     $this->template->content = View::forge('users/create');
 }
Example #3
0
 public function action_login()
 {
     $redirect = Session::get('redirect');
     $vars = array('email' => '*****@*****.**', 'password' => '123456', 'username' => 'jonathan', 'metadata' => array('first_name' => 'jonathan', 'last_name' => 'de montalembert', 'department' => 'test'));
     // $user_id = Sentry::user()->create($vars, true);
     if (Sentry::check()) {
         Response::redirect($redirect);
     }
     $this->template = \View::forge('login');
     if (Input::post()) {
         if (Sentry::user_exists(Input::post('username'))) {
             // User exists
             if (Sentry::attempts()->get_limit() > Sentry::attempts(Input::post('username'))->get()) {
                 // max attempts not reached
                 $valid_login = Sentry::login(Input::post('username'), Input::post('password'));
                 if ($valid_login) {
                     Session::set_flash('success', 'Welcome back ' . ucwords(Input::post('username')));
                     Response::redirect($redirect);
                 } else {
                     $data['username'] = Input::post('username');
                     $data['password'] = Input::post('password');
                     Session::set_flash('error', 'Username OR/AND Password incorrects. You tried ' . Sentry::attempts(Input::post('username'))->get() . '/' . Sentry::attempts()->get_limit());
                 }
             } else {
                 // max attempts reached
                 Session::set_flash('error', 'You\'ve reached your max attempts and will have to wait for ' . Sentry::attempts(Input::post('username'))->get_time() . ' minutes');
             }
         } else {
             // user do not exists
             Session::set_flash('error', 'User do not exists');
         }
     }
     $this->template->title = $data['title'] = 'Welcome to IKON backoffice';
     $this->template->custom_class = 'special_page';
     $this->template->content = View::forge('welcome/login', $data);
 }
Example #4
0
 /**
  * Change user password
  * 
  * @access public
  * @return void
  */
 public function action_password()
 {
     \View::set_global('title', 'Forgot Password');
     if (\Input::post('forgot')) {
         $val = \User\Controller_Validate::forge('forgot_password');
         if ($val->run()) {
             // Get POST values
             $identity = \Input::post('identity', '');
             if (\Sentry::user_exists($identity)) {
                 try {
                     // reset the password
                     $reset = \Sentry::reset_password($identity);
                     if ($reset) {
                         $customer_email = $reset['email'];
                         // Load email package
                         \Package::load('email');
                         // Load email addresses from config (these will be bcc receivers)
                         \Config::load('auto_response_emails', true);
                         $bcc = \Config::get('autoresponders.forgot_password_emails');
                         if (!$bcc) {
                             $bcc = \Config::get('autoresponders.default_emails');
                         }
                         $settings = \Config::load('autoresponder.db');
                         $email_data = array('site_title' => $settings['company_name'], 'customer_identity' => $identity, 'reset_link' => \Uri::front_create('user/reset_password/' . $reset['link']));
                         $email = \Email::forge();
                         $email->to($customer_email);
                         $email->from(\Config::get('auto_response_emails.autoresponder_from_email'), $settings['company_name']);
                         if ($bcc) {
                             $email->bcc($bcc);
                         }
                         $email->subject($email_data['site_title'] . ' - Forgot Password');
                         $email_html = \Theme::instance()->view('views/_email/forgot_password')->set('email_data', $email_data, false);
                         $email->html_body($email_html);
                         try {
                             $email->send();
                             \Messages::success('You have been sent an email to reset your password.');
                         } catch (\EmailValidationFailedException $e) {
                             \Messages::error('Error while sending email.');
                         } catch (\EmailSendingFailedException $e) {
                             \Messages::error('Error while sending email.');
                         }
                         \Response::redirect(\Input::referrer(\Uri::front_create('/')));
                     } else {
                         \Messages::error('There was a problem while trying to change your password. Please try again.');
                     }
                 } catch (\Sentry\SentryException $e) {
                     // show validation errors
                     //\Messages::error('<h4>There was an error while trying to create user</h4>');
                     $errors = $e->getMessage();
                     \Messages::error($errors);
                 }
             } else {
                 \Messages::error('There doesn`t appear to be an account associated with this email address. Try a different email address or register for a new account on the homepage.');
             }
         } else {
             if ($val->error() != array()) {
                 // show validation errors
                 //\Messages::error('<h4>There was an error while trying to create user</h4>');
                 foreach ($val->error() as $e) {
                     \Messages::error($e->get_message());
                 }
             }
         }
     }
     if (\Input::is_ajax()) {
         echo \Theme::instance()->view($this->view_dir . 'forgot_password');
     } else {
         if (isset($val)) {
             \View::set_global('validation', $val, false);
         }
         \Theme::instance()->set_partial('content', $this->view_dir . 'single_forgot_password');
     }
 }
Example #5
0
 /**
  * Add user credits depending of order
  *
  * @access public
  * @param  object	          $order = Order object
  * @param  array of objects   $products = Products from order
  * @return void
  */
 public function add_credits($order = false, $products = false)
 {
     if (!is_numeric($order->user_id)) {
         return false;
     }
     // Get user to edit
     if (!\Sentry::user_exists((int) $order->user_id)) {
         return false;
     }
     $user = new \Sentry_User((int) $order->user_id);
     // Add user credits
     $update = array('metadata' => array('seek_credits' => $user->get('metadata.seek_credits') + $order->seek, 'careerone_credits' => $user->get('metadata.careerone_credits') + $order->careerone));
     // Update user credits
     if ($user->update($update)) {
         return true;
     }
     return false;
 }
Example #6
0
 /**
  * Update user profile
  * 
  * @param int 
  * @access public
  * @return void
  */
 public function action_update($id = false)
 {
     if (!is_numeric($id)) {
         \Response::redirect('admin/settings/user/list');
     }
     // Cast user id param to int
     $id = (int) $id;
     // Redirect if user don't exists
     if (!\Sentry::user_exists($id)) {
         \Response::redirect('admin/settings/user/list');
     }
     $user = \Sentry::user($id);
     $user_group = new \Sentry_User((int) $id);
     $user_group1 = $user_group->groups();
     $user_group2 = current($user_group1);
     $user_data = array('id' => $user->get('id'), 'first_name' => $user->get('metadata.first_name'), 'last_name' => $user->get('metadata.last_name'), 'email' => $user->get('email'), 'username' => $user->get('username'), 'user_group' => $user_group2['name']);
     if (\Input::post()) {
         // Validate input parameters
         $val = \Validation::forge('admin_details_validation');
         $val->add('first_name', 'First Name')->add_rule('required')->add_rule('min_length', 2)->add_rule('max_length', 255);
         $val->add('last_name', 'Last Name')->add_rule('required')->add_rule('min_length', 2)->add_rule('max_length', 255);
         $val->add('email', 'Email')->add_rule('required')->add_rule('valid_email');
         $val->add('password', 'Password')->add_rule('min_length', 8);
         $val->add('confirm_password', 'Confirm Password')->add_rule('required_with', 'password')->add_rule('match_field', 'password');
         $val->add('username', 'Username')->add_rule('required')->add_rule('unique', array('users', 'username', $id));
         if ($val->run()) {
             // Get Input parameters
             $post_data = \Input::post();
             try {
                 $fields = array('username' => $post_data['username'], 'email' => $post_data['email'], 'password' => $post_data['password'], 'user_group' => $post_data['user_group'], 'metadata' => array('first_name' => $post_data['first_name'], 'last_name' => $post_data['last_name']));
                 if (empty($post_data['password'])) {
                     unset($fields['password']);
                 }
                 $item = new \Sentry_User((int) $id);
                 $update = $item->update($fields);
                 // $item->remove_from_group((int)$fields['user_group']);
                 // $item->add_to_group((int)$fields['user_group']);
                 if ($update) {
                     $user_groups = $item->groups();
                     if (!empty($user_groups)) {
                         // Remove user from all other groups...
                         foreach ($user_groups as $value) {
                             $item->remove_from_group((int) $value['id']);
                         }
                     }
                     $item = new \Sentry_User((int) $id);
                     // ...and add it to selected one
                     $item->add_to_group((int) $fields['user_group']);
                     \Messages::success('User Details Successfully updated.');
                     \Response::redirect(\Uri::admin('current'));
                 } else {
                     \Messages::error('There was an error while trying to update User details.');
                 }
             } catch (Sentry\SentryException $e) {
                 \Messages::error($e->get_message());
             }
         } else {
             if ($val->error() != array()) {
                 // Show validation errors
                 \Messages::error('<strong>There was an error while trying to update User details</strong>');
                 foreach ($val->error() as $e) {
                     \Messages::error($e->get_message());
                 }
             }
         }
     }
     \View::set_global('title', 'Update User Details');
     \Theme::instance()->set_partial('content', $this->view_dir . 'update')->set('user_data', $user_data);
 }
Example #7
0
 public static function credit_account($user_id = null, $new_amount = 0)
 {
     if (is_numeric($user_id) && \Sentry::user_exists((int) $user_id)) {
         $user = \Sentry::user((int) $user_id);
     } else {
         $user = \Sentry::user();
     }
     $out['credit'] = false;
     if ($user->get('metadata.credit_account') != 1) {
         return $out;
     }
     $out['credit'] = true;
     if ($month = $user->get('metadata.purchase_limit_period')) {
         $start = strtotime(date('m-01-Y', strtotime("-{$month} month")));
         $orders_total = 0;
         $orders = \Order\Model_Order::find(array('where' => array(array('created_at', '>', $start), 'user_id' => $user->get('id'), 'finished' => 1)));
         if ($orders) {
             foreach ($orders as $order) {
                 $orders_total += $order->total_price + $order->shipping_price;
             }
         }
         if ($orders_total + $new_amount > $user->get('metadata.purchase_limit_value')) {
             $out['over_limit'] = true;
             $out['over_limit_amount'] = $orders_total + $new_amount - $user->get('metadata.purchase_limit_value');
         } else {
             $out['over_limit'] = false;
             $out['over_limit_amount'] = 0;
         }
         $out['orders_total'] = $orders_total;
         $out['limit'] = $user->get('metadata.purchase_limit_value');
         $out['period'] = $user->get('metadata.purchase_limit_period');
     }
     if (is_numeric(\Session::get('order.id'))) {
         $order = \Order\Model_Order::find_one_by_id(\Session::get('order.id'));
         if (isset($order)) {
             $new_amount = $order->total_price + $order->shipping_price - $order->discount_amount;
         }
     }
     $out['current_total'] = $new_amount;
     return $out;
 }
 public function action_check_login()
 {
     $user_not_exists = true;
     if (\Sentry::user_exists(\Input::get('fieldValue'))) {
         $user_not_exists = false;
     }
     $out = array(\Input::get('fieldId'), $user_not_exists);
     echo json_encode($out);
 }
 protected function get_user()
 {
     if (!\Sentry::user_exists((int) $this->user_id)) {
         return false;
     }
     return \Sentry::user((int) $this->user_id);
 }
Example #10
0
 public function get_search_customer_products($user_id = false)
 {
     // Override group_id if its a search
     $user_id = \Input::get('user_id', $user_id);
     if ($user_id && \Sentry::user_exists((int) $user_id)) {
         $user = \Sentry::user((int) $user_id);
     }
     $items = \Order\Model_Order::find(function ($query) {
         if (isset($user)) {
             $query->where('user_id', $user->id);
         }
         //get customer only -- start
         $customer_list = \Sentry::user()->all('front');
         $customer_id_list = array();
         foreach ($customer_list as $customer) {
             array_push($customer_id_list, $customer['id']);
         }
         $query->where('user_id', 'in', $customer_id_list);
         //get customer only -- end
         $query->where('finished', '1');
         $query->order_by('id', 'desc');
     });
     foreach (\Input::get() as $key => $value) {
         if (!empty($value) || $value == '0') {
             switch ($key) {
                 case 'title':
                     if ($value != 'customer_order_select') {
                         foreach ($items as $number => $item) {
                             $full_name = $item->first_name . ' ' . $item->last_name;
                             if (stripos($item->company, $value) === false && stripos($item->id, $value) === false) {
                                 if (stripos($full_name, $value) === false) {
                                     unset($items[$number]);
                                 }
                             }
                         }
                     }
                     break;
                 case 'email':
                     foreach ($items as $number => $item) {
                         if (stripos($item->email, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'order_total_from':
                     is_numeric($value) or $value == 0;
                     foreach ($items as $number => $item) {
                         $item_details = \Order\Model_Order::order_info($item->id);
                         if (isset($item_details['total_price']) && $item_details['total_price'] < $value) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'order_total_to':
                     is_numeric($value) or $value == 0;
                     foreach ($items as $number => $item) {
                         $item_details = \Order\Model_Order::order_info($item->id);
                         if (isset($item_details['total_price']) && $item_details['total_price'] > $value) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'date_from':
                     // convert format date to m/d/Y
                     $parts = explode('/', $value);
                     $value = $parts[1] . '/' . $parts[0] . '/' . $parts[2];
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->created_at < $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'date_to':
                     // convert format date to m/d/Y
                     $parts = explode('/', $value);
                     $value = $parts[1] . '/' . $parts[0] . '/' . $parts[2];
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->created_at > $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'status':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->status, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'tracking_no':
                     foreach ($items as $number => $item) {
                         if (!$value != '') {
                             break;
                         }
                         if (stripos($item->tracking_no, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'payment_method':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (!empty($item->last_payment)) {
                             if ($item->last_payment->method != $value) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'user_group':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if ($item->user_id && \Sentry::user_exists((int) $item->user_id)) {
                             $user = \Sentry::user((int) $item->user_id);
                             if ($user->in_group($value)) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'country':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->country, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'state':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->country, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'product_category':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         // Get order products
                         if (!empty($item->products)) {
                             $exists = array();
                             foreach ($item->products as $product) {
                                 // Find category
                                 if (\Product\Model_Product_To_Categories::find(array('where' => array('product_id' => $product->product_id, 'category_id' => $value)))) {
                                     $exists[] = $product->id;
                                 }
                             }
                             if (empty($exists)) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
             }
         }
     }
     // Reset to empty array if there are no result found by query
     if (empty($items)) {
         $items = array();
     }
     return array('items' => $items);
 }
Example #11
0
 public function get_user($user_id = false)
 {
     if (\Sentry::user_exists((int) $user_id)) {
         return \Sentry::user((int) $user_id);
     }
     return false;
 }
Example #12
0
 public function get_search_items2($user_id = false)
 {
     // Override group_id if its a search
     $user_id = \Input::get('user_id', $user_id);
     if ($user_id && \Sentry::user_exists((int) $user_id)) {
         $user = \Sentry::user((int) $user_id);
     }
     $items = \Order\Model_Order::find(function ($query) {
         if (isset($user)) {
             $query->where('user_id', $user->id);
         }
         $query->order_by('main_number', 'desc');
         $query->order_by('id', 'asc');
     });
     foreach (\Input::get() as $key => $value) {
         if (!empty($value) || $value == '0') {
             switch ($key) {
                 case 'title':
                     foreach ($items as $number => $item) {
                         $full_name = $item->first_name . ' ' . $item->last_name;
                         if (stripos($item->company, $value) === false) {
                             if (stripos($full_name, $value) === false) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'email':
                     foreach ($items as $number => $item) {
                         if (stripos($item->email, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'custom_order_status':
                     if (array_key_exists($value, \Config::get('details.status', array()))) {
                         foreach ($items as $number => $item) {
                             if ($item->status != $value) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'order_total_from':
                     is_numeric($value) or $value = 0;
                     foreach ($items as $number => $item) {
                         $item_details = \Order\Model_Order::order_info($item->id);
                         if ($item_details['total_price'] < $value) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'order_total_to':
                     is_numeric($value) or $value = 0;
                     foreach ($items as $number => $item) {
                         $item_details = \Order\Model_Order::order_info($item->id);
                         if ($item_details['total_price'] > $value) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'date_from':
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->created_at < $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'date_to':
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->created_at > $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'sch_from':
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->sch_delivery < $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'sch_to':
                     if ($date = strtotime($value)) {
                         foreach ($items as $number => $item) {
                             if ($item->sch_delivery > $date) {
                                 unset($items[$number]);
                             }
                         }
                     }
                     break;
                 case 'status':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->status, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'invoice_status':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->invoice_status, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'delivery_status':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (stripos($item->delivery_status, $value) === false) {
                             unset($items[$number]);
                         }
                     }
                     break;
                 case 'user_group':
                     foreach ($items as $number => $item) {
                         if ($value == 'false') {
                             break;
                         }
                         if (!\Sentry::user_exists((int) $item->user_id) || !\Sentry::user((int) $item->user_id)->in_group($value)) {
                             unset($items[$number]);
                         }
                     }
                     break;
             }
         }
     }
     // Reset to empty array if there are no result found by query
     if (is_null($items)) {
         $items = array();
     }
     // Initiate pagination
     $pagination = \Hybrid\Pagination::make(array('total_items' => count($items), 'per_page' => \Input::get('per_page', 10), 'uri_segment' => null));
     // Remove unwanted items, and show only required ones
     $items = array_slice($items, $pagination->offset, $pagination->per_page);
     return array('items' => $items, 'pagination' => $pagination);
 }