text: <?php
  class ControllerAccountReturn extends Controller {
  	private $error = array();
  
  	public function index() {
  		if (!$this->customer->isLogged()) {
  			$this->session->data['redirect'] = $this->url->link('account/return', '', true);
  
  			$this->response->redirect($this->url->link('account/login', '', true));
  		}
  
  		$this->load->language('account/return');
  
  		$this->document->setTitle($this->language->get('heading_title'));
  
  		$data['breadcrumbs'] = array();
  
  		$data['breadcrumbs'][] = array(
  			'text' => $this->language->get('text_home'),
  			'href' => $this->url->link('common/home')
  		);
  
  		$data['breadcrumbs'][] = array(
  			'text' => $this->language->get('text_account'),
  			'href' => $this->url->link('account/account', '', true)
  		);
  
  		$url = '';
  
  		if (isset($this->request->get['page'])) {
  			$url .= '&page=' . $this->request->get['page'];
  		}
  
  		$data['breadcrumbs'][] = array(
  			'text' => $this->language->get('heading_title'),
  			'href' => $this->url->link('account/return', $url, true)
  		);
  
  		$data['heading_title'] = $this->language->get('heading_title');
  
  		$data['text_empty'] = $this->language->get('text_empty');
  
  		$data['column_return_id'] = $this->language->get('column_return_id');
  		$data['column_order_id'] = $this->language->get('column_order_id');
  		$data['column_status'] = $this->language->get('column_status');
  		$data['column_date_added'] = $this->language->get('column_date_added');
  		$data['column_customer'] = $this->language->get('column_customer');
  
  		$data['button_view'] = $this->language->get('button_view');
  		$data['button_continue'] = $this->language->get('button_continue');
  
  		$this->load->model('account/return');
  
  		if (isset($this->request->get['page'])) {
  			$page = $this->request->get['page'];
  		} else {
  			$page = 1;
  		}
  
  		$data['returns'] = array();
  
  		$return_total = $this->model_account_return->getTotalReturns();
  
  		$results = $this->model_account_return->getReturns(($page - 1) * 10, 10);
  
  		foreach ($results as $result) {
  			$data['returns'][] = array(
  				'return_id'  => $result['return_id'],
  				'order_id'   => $result['order_id'],
  				'name'       => $result['firstname'] . ' ' . $result['lastname'],
  				'status'     => $result['status'],
  				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
  				'href'       => $this->url->link('account/return/info', 'return_id=' . $result['return_id'] . $url, true)
  			);
  		}
  
  		$pagination = new Pagination();
  		$pagination->total = $return_total;
  		$pagination->page = $page;
  		$pagination->limit = $this->config->get($this->config->get('config_theme') . '_product_limit');
  		$pagination->url = $this->url->link('account/return', 'page={page}', true);
  
  		$data['pagination'] = $pagination->render();
  
  		$data['results'] = sprintf($this->language->get('text_pagination'), ($return_total) ? (($page - 1) * $this->config->get($this->config->get('config_theme') . '_product_limit')) + 1 : 0, ((($page - 1) * $this->config->get($this->config->get('config_theme') . '_product_limit')) > ($return_total - $this->config->get($this->config->get('config_theme') . '_product_limit'))) ? $return_total : ((($page - 1) * $this->config->get($this->config->get('config_theme') . '_product_limit')) + $this->config->get($this->config->get('config_theme') . '_product_limit')), $return_total, ceil($return_total / $this->config->get($this->config->get('config_theme') . '_product_limit')));
  
  		$data['continue'] = $this->url->link('account/account', '', true);
  
  		$data['column_left'] = $this->load->controller('common/column_left');
  		$data['column_right'] = $this->load->controller('common/column_right');
  		$data['content_top'] = $this->load->controller('common/content_top');
  		$data['content_bottom'] = $this->load->controller('common/content_bottom');
  		$data['footer'] = $this->load->controller('common/footer');
  		$data['header'] = $this->load->controller('common/header');
  
  		$this->response->setOutput($this->load->view('account/return_list', $data));
  	}
  
  	public function info() {
  		$this->load->language('account/return');
  
  		if (isset($this->request->get['return_id'])) {
  			$return_id = $this->request->get['return_id'];
  		} else {
  			$return_id = 0;
  		}
  
  		if (!$this->customer->isLogged()) {
  			$this->session->data['redirect'] = $this->url->link('account/return/info', 'return_id=' . $return_id, true);
  
  			$this->response->redirect($this->url->link('account/login', '', true));
  		}
  
  		$this->load->model('account/return');
  
  		$return_info = $this->model_account_return->getReturn($return_id);
  
  		if ($return_info) {
  			$this->document->setTitle($this->language->get('text_return'));
  
  			$data['breadcrumbs'] = array();
  
  			$data['breadcrumbs'][] = array(
  				'text' => $this->language->get('text_home'),
  				'href' => $this->url->link('common/home', '', true)
  			);
  
  			$data['breadcrumbs'][] = array(
  				'text' => $this->language->get('text_account'),
  				'href' => $this->url->link('account/account', '', true)
  			);
  
  			$url = '';
  
  			if (isset($this->request->get['page'])) {
  				$url .= '&page=' . $this->request->get['page'];
  			}
  
  			$data['breadcrumbs'][] = array(
  				'text' => $this->language->get('heading_title'),
  				'href' => $this->url->link('account/return', $url, true)
  			);
  
  			$data['breadcrumbs'][] = array(
  				'text' => $this->language->get('text_return'),
  				'href' => $this->url->link('account/return/info', 'return_id=' . $this->request->get['return_id'] . $url, true)
  			);
  
  			$data['heading_title'] = $this->language->get('text_return');
  
  			$data['text_return_detail'] = $this->language->get('text_return_detail');
  			$data['text_return_id'] = $this->language->get('text_return_id');
  			$data['text_order_id'] = $this->language->get('text_order_id');
  			$data['text_date_ordered'] = $this->language->get('text_date_ordered');
  			$data['text_customer'] = $this->language->get('text_customer');
  			$data['text_email'] = $this->language->get('text_email');
  			$data['text_telephone'] = $this->language->get('text_telephone');
  			$data['text_status'] = $this->language->get('text_status');
  			$data['text_date_added'] = $this->language->get('text_date_added');
  			$data['text_product'] = $this->language->get('text_product');
  			$data['text_reason'] = $this->language->get('text_reason');
  			$data['text_comment'] = $this->language->get('text_comment');
  			$data['text_history'] = $this->language->get('text_history');
  			$data['text_no_results'] = $this->language->get('text_no_results');
  
  			$data['column_product'] = $this->language->get('column_product');
  			$data['column_model'] = $this->language->get('column_model');
  			$data['column_quantity'] = $this->language->get('column_quantity');
  			$data['column_opened'] = $this->language->get('column_opened');
  			$data['column_reason'] = $this->language->get('column_reason');
  			$data['column_action'] = $this->language->get('column_action');
  			$data['column_date_added'] = $this->language->get('column_date_added');
  			$data['column_status'] = $this->language->get('column_status');
  			$data['column_comment'] = $this->language->get('column_comment');
  
  			$data['button_continue'] = $this->language->get('button_continue');
  
  			$data['return_id'] = $return_info['return_id'];
  			$data['order_id'] = $return_info['order_id'];
  			$data['date_ordered'] = date($this->language->get('date_format_short'), strtotime($return_info['date_ordered']));
  			$data['date_added'] = date($this->language->get('date_format_short'), strtotime($return_info['date_added']));
  			$data['firstname'] = $return_info['firstname'];
  			$data['lastname'] = $return_info['lastname'];
  			$data['email'] = $return_info['email'];
  			$data['telephone'] = $return_info['telephone'];
  			$data['product'] = $return_info['product'];
  			$data['model'] = $return_info['model'];
  			$data['quantity'] = $return_info['quantity'];
  			$data['reason'] = $return_info['reason'];
  			$data['opened'] = $return_info['opened'] ? $this->language->get('text_yes') : $this->language->get('text_no');
  			$data['comment'] = nl2br($return_info['comment']);
  			$data['action'] = $return_info['action'];
  
  			$data['histories'] = array();
  
  			$results = $this->model_account_return->getReturnHistories($this->request->get['return_id']);
  
  			foreach ($results as $result) {
  				$data['histories'][] = array(
  					'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
  					'status'     => $result['status'],
  					'comment'    => nl2br($result['comment'])
  				);
  			}
  
  			$data['continue'] = $this->url->link('account/return', $url, true);
  
  			$data['column_left'] = $this->load->controller('common/column_left');
  			$data['column_right'] = $this->load->controller('common/column_right');
  			$data['content_top'] = $this->load->controller('common/content_top');
  			$data['content_bottom'] = $this->load->controller('common/content_bottom');
  			$data['footer'] = $this->load->controller('common/footer');
  			$data['header'] = $this->load->controller('common/header');
  
  			$this->response->setOutput($this->load->view('account/return_info', $data));
  		} else {
  			$this->document->setTitle($this->language->get('text_return'));
  
  			$data['breadcrumbs'] = array();
  
  			$data['breadcrumbs'][] = array(
  				'text' => $this->language->get('text_home'),
  				'href' => $this->url->link('common/home')
  			);
  
  			$data['breadcrumbs'][] = array(
  				'text' => $this->language->get('text_account'),
  				'href' => $this->url->link('account/account', '', true)
  			);
  
  			$data['breadcrumbs'][] = array(
  				'text' => $this->language->get('heading_title'),
  				'href' => $this->url->link('account/return', '', true)
  			);
  
  			$url = '';
  
  			if (isset($this->request->get['page'])) {
  				$url .= '&page=' . $this->request->get['page'];
  			}
  
  			$data['breadcrumbs'][] = array(
  				'text' => $this->language->get('text_return'),
  				'href' => $this->url->link('account/return/info', 'return_id=' . $return_id . $url, true)
  			);
  
  			$data['heading_title'] = $this->language->get('text_return');
  
  			$data['text_error'] = $this->language->get('text_error');
  
  			$data['button_continue'] = $this->language->get('button_continue');
  
  			$data['continue'] = $this->url->link('account/return', '', true);
  
  			$data['column_left'] = $this->load->controller('common/column_left');
  			$data['column_right'] = $this->load->controller('common/column_right');
  			$data['content_top'] = $this->load->controller('common/content_top');
  			$data['content_bottom'] = $this->load->controller('common/content_bottom');
  			$data['footer'] = $this->load->controller('common/footer');
  			$data['header'] = $this->load->controller('common/header');
  
  			$this->response->setOutput($this->load->view('error/not_found', $data));
  		}
  	}
  
  	public function add() {
  		$this->load->language('account/return');
  
  		$this->load->model('account/return');
  
  		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
  			$return_id = $this->model_account_return->addReturn($this->request->post);
  
  			// Add to activity log
  			if ($this->config->get('config_customer_activity')) {
  				$this->load->model('account/activity');
  
  				if ($this->customer->isLogged()) {
  					$activity_data = array(
  						'customer_id' => $this->customer->getId(),
  						'name'        => $this->customer->getFirstName() . ' ' . $this->customer->getLastName(),
  						'return_id'   => $return_id
  					);
  
  					$this->model_account_activity->addActivity('return_account', $activity_data);
  				} else {
  					$activity_data = array(
  						'name'      => $this->request->post['firstname'] . ' ' . $this->request->post['lastname'],
  						'return_id' => $return_id
  					);
  
  					$this->model_account_activity->addActivity('return_guest', $activity_data);
  				}
  			}
  
  			$this->response->redirect($this->url->link('account/return/success', '', true));
  		}
  
  		$this->document->setTitle($this->language->get('heading_title'));
  		$this->document->addScript('catalog/view/javascript/jquery/datetimepicker/moment.js');
  		$this->document->addScript('catalog/view/javascript/jquery/datetimepicker/locale/'.$this->session->data['language'].'.js');
  		$this->document->addScript('catalog/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.js');
  		$this->document->addStyle('catalog/view/javascript/jquery/datetimepicker/bootstrap-datetimepicker.min.css');
  
  		$data['breadcrumbs'] = array();
  
  		$data['breadcrumbs'][] = array(
  			'text' => $this->language->get('text_home'),
  			'href' => $this->url->link('common/home')
  		);
  
  		$data['breadcrumbs'][] = array(
  			'text' => $this->language->get('text_account'),
  			'href' => $this->url->link('account/account', '', true)
  		);
  
  		$data['breadcrumbs'][] = array(
  			'text' => $this->language->get('heading_title'),
  			'href' => $this->url->link('account/return/add', '', true)
  		);
  
  		$data['heading_title'] = $this->language->get('heading_title');
  
  		$data['text_description'] = $this->language->get('text_description');
  		$data['text_order'] = $this->language->get('text_order');
  		$data['text_product'] = $this->language->get('text_product');
  		$data['text_yes'] = $this->language->get('text_yes');
  		$data['text_no'] = $this->language->get('text_no');
  
  		$data['entry_order_id'] = $this->language->get('entry_order_id');
  		$data['entry_date_ordered'] = $this->language->get('entry_date_ordered');
  		$data['entry_firstname'] = $this->language->get('entry_firstname');
  		$data['entry_lastname'] = $this->language->get('entry_lastname');
  		$data['entry_email'] = $this->language->get('entry_email');
  		$data['entry_telephone'] = $this->language->get('entry_telephone');
  		$data['entry_product'] = $this->language->get('entry_product');
  		$data['entry_model'] = $this->language->get('entry_model');
  		$data['entry_quantity'] = $this->language->get('entry_quantity');
  		$data['entry_reason'] = $this->language->get('entry_reason');
  		$data['entry_opened'] = $this->language->get('entry_opened');
  		$data['entry_fault_detail'] = $this->language->get('entry_fault_detail');
  
  		$data['button_submit'] = $this->language->get('button_submit');
  		$data['button_back'] = $this->language->get('button_back');
  
  		if (isset($this->error['warning'])) {
  			$data['error_warning'] = $this->error['warning'];
  		} else {
  			$data['error_warning'] = '';
  		}
  
  		if (isset($this->error['order_id'])) {
  			$data['error_order_id'] = $this->error['order_id'];
  		} else {
  			$data['error_order_id'] = '';
  		}
  
  		if (isset($this->error['firstname'])) {
  			$data['error_firstname'] = $this->error['firstname'];
  		} else {
  			$data['error_firstname'] = '';
  		}
  
  		if (isset($this->error['lastname'])) {
  			$data['error_lastname'] = $this->error['lastname'];
  		} else {
  			$data['error_lastname'] = '';
  		}
  
  		if (isset($this->error['email'])) {
  			$data['error_email'] = $this->error['email'];
  		} else {
  			$data['error_email'] = '';
  		}
  
  		if (isset($this->error['telephone'])) {
  			$data['error_telephone'] = $this->error['telephone'];
  		} else {
  			$data['error_telephone'] = '';
  		}
  
  		if (isset($this->error['product'])) {
  			$data['error_product'] = $this->error['product'];
  		} else {
  			$data['error_product'] = '';
  		}
  
  		if (isset($this->error['model'])) {
  			$data['error_model'] = $this->error['model'];
  		} else {
  			$data['error_model'] = '';
  		}
  
  		if (isset($this->error['reason'])) {
  			$data['error_reason'] = $this->error['reason'];
  		} else {
  			$data['error_reason'] = '';
  		}
  
  		$data['action'] = $this->url->link('account/return/add', '', true);
  
  		$this->load->model('account/order');
  
  		if (isset($this->request->get['order_id'])) {
  			$order_info = $this->model_account_order->getOrder($this->request->get['order_id']);
  		}
  
  		$this->load->model('catalog/product');
  
  		if (isset($this->request->get['product_id'])) {
  			$product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
  		}
  
  		if (isset($this->request->post['order_id'])) {
  			$data['order_id'] = $this->request->post['order_id'];
  		} elseif (!empty($order_info)) {
  			$data['order_id'] = $order_info['order_id'];
  		} else {
  			$data['order_id'] = '';
  		}
  
  		if (isset($this->request->post['date_ordered'])) {
  			$data['date_ordered'] = $this->request->post['date_ordered'];
  		} elseif (!empty($order_info)) {
  			$data['date_ordered'] = date('Y-m-d', strtotime($order_info['date_added']));
  		} else {
  			$data['date_ordered'] = '';
  		}
  
  		if (isset($this->request->post['firstname'])) {
  			$data['firstname'] = $this->request->post['firstname'];
  		} elseif (!empty($order_info)) {
  			$data['firstname'] = $order_info['firstname'];
  		} else {
  			$data['firstname'] = $this->customer->getFirstName();
  		}
  
  		if (isset($this->request->post['lastname'])) {
  			$data['lastname'] = $this->request->post['lastname'];
  		} elseif (!empty($order_info)) {
  			$data['lastname'] = $order_info['lastname'];
  		} else {
  			$data['lastname'] = $this->customer->getLastName();
  		}
  
  		if (isset($this->request->post['email'])) {
  			$data['email'] = $this->request->post['email'];
  		} elseif (!empty($order_info)) {
  			$data['email'] = $order_info['email'];
  		} else {
  			$data['email'] = $this->customer->getEmail();
  		}
  
  		if (isset($this->request->post['telephone'])) {
  			$data['telephone'] = $this->request->post['telephone'];
  		} elseif (!empty($order_info)) {
  			$data['telephone'] = $order_info['telephone'];
  		} else {
  			$data['telephone'] = $this->customer->getTelephone();
  		}
  
  		if (isset($this->request->post['product'])) {
  			$data['product'] = $this->request->post['product'];
  		} elseif (!empty($product_info)) {
  			$data['product'] = $product_info['name'];
  		} else {
  			$data['product'] = '';
  		}
  
  		if (isset($this->request->post['model'])) {
  			$data['model'] = $this->request->post['model'];
  		} elseif (!empty($product_info)) {
  			$data['model'] = $product_info['model'];
  		} else {
  			$data['model'] = '';
  		}
  
  		if (isset($this->request->post['quantity'])) {
  			$data['quantity'] = $this->request->post['quantity'];
  		} else {
  			$data['quantity'] = 1;
  		}
  
  		if (isset($this->request->post['opened'])) {
  			$data['opened'] = $this->request->post['opened'];
  		} else {
  			$data['opened'] = false;
  		}
  
  		if (isset($this->request->post['return_reason_id'])) {
  			$data['return_reason_id'] = $this->request->post['return_reason_id'];
  		} else {
  			$data['return_reason_id'] = '';
  		}
  
  		$this->load->model('localisation/return_reason');
  
  		$data['return_reasons'] = $this->model_localisation_return_reason->getReturnReasons();
  
  		if (isset($this->request->post['comment'])) {
  			$data['comment'] = $this->request->post['comment'];
  		} else {
  			$data['comment'] = '';
  		}
  
  		// Captcha
  		if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('return', (array)$this->config->get('config_captcha_page'))) {
  			$data['captcha'] = $this->load->controller('extension/captcha/' . $this->config->get('config_captcha'), $this->error);
  		} else {
  			$data['captcha'] = '';
  		}
  
  		if ($this->config->get('config_return_id')) {
  			$this->load->model('catalog/information');
  
  			$information_info = $this->model_catalog_information->getInformation($this->config->get('config_return_id'));
  
  			if ($information_info) {
  				$data['text_agree'] = sprintf($this->language->get('text_agree'), $this->url->link('information/information/agree', 'information_id=' . $this->config->get('config_return_id'), true), $information_info['title'], $information_info['title']);
  			} else {
  				$data['text_agree'] = '';
  			}
  		} else {
  			$data['text_agree'] = '';
  		}
  
  		if (isset($this->request->post['agree'])) {
  			$data['agree'] = $this->request->post['agree'];
  		} else {
  			$data['agree'] = false;
  		}
  
  		$data['back'] = $this->url->link('account/account', '', true);
  
  		$data['column_left'] = $this->load->controller('common/column_left');
  		$data['column_right'] = $this->load->controller('common/column_right');
  		$data['content_top'] = $this->load->controller('common/content_top');
  		$data['content_bottom'] = $this->load->controller('common/content_bottom');
  		$data['footer'] = $this->load->controller('common/footer');
  		$data['header'] = $this->load->controller('common/header');
  
  		$this->response->setOutput($this->load->view('account/return_form', $data));
  	}
  
  	protected function validate() {
  		if (!$this->request->post['order_id']) {
  			$this->error['order_id'] = $this->language->get('error_order_id');
  		}
  
  		if ((utf8_strlen(trim($this->request->post['firstname'])) < 1) || (utf8_strlen(trim($this->request->post['firstname'])) > 32)) {
  			$this->error['firstname'] = $this->language->get('error_firstname');
  		}
  
  		if ((utf8_strlen(trim($this->request->post['lastname'])) < 1) || (utf8_strlen(trim($this->request->post['lastname'])) > 32)) {
  			$this->error['lastname'] = $this->language->get('error_lastname');
  		}
  
  		if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match($this->config->get('config_mail_regexp'), $this->request->post['email'])) {
  			$this->error['email'] = $this->language->get('error_email');
  		}
  
  		if ((utf8_strlen($this->request->post['telephone']) < 3) || (utf8_strlen($this->request->post['telephone']) > 32)) {
  			$this->error['telephone'] = $this->language->get('error_telephone');
  		}
  
  		if ((utf8_strlen($this->request->post['product']) < 1) || (utf8_strlen($this->request->post['product']) > 255)) {
  			$this->error['product'] = $this->language->get('error_product');
  		}
  
  		if ((utf8_strlen($this->request->post['model']) < 1) || (utf8_strlen($this->request->post['model']) > 64)) {
  			$this->error['model'] = $this->language->get('error_model');
  		}
  
  		if (empty($this->request->post['return_reason_id'])) {
  			$this->error['reason'] = $this->language->get('error_reason');
  		}
  
  		if ($this->config->get($this->config->get('config_captcha') . '_status') && in_array('return', (array)$this->config->get('config_captcha_page'))) {
  			$captcha = $this->load->controller('extension/captcha/' . $this->config->get('config_captcha') . '/validate');
  
  			if ($captcha) {
  				$this->error['captcha'] = $captcha;
  			}
  		}
  
  		if ($this->config->get('config_return_id')) {
  			$this->load->model('catalog/information');
  
  			$information_info = $this->model_catalog_information->getInformation($this->config->get('config_return_id'));
  
  			if ($information_info && !isset($this->request->post['agree'])) {
  				$this->error['warning'] = sprintf($this->language->get('error_agree'), $information_info['title']);
  			}
  		}
  
  		return !$this->error;
  	}
  
  	public function success() {
  		$this->load->language('account/return');
  
  		$this->document->setTitle($this->language->get('heading_title'));
  
  		$data['breadcrumbs'] = array();
  
  		$data['breadcrumbs'][] = array(
  			'text' => $this->language->get('text_home'),
  			'href' => $this->url->link('common/home')
  		);
  
  		$data['breadcrumbs'][] = array(
  			'text' => $this->language->get('heading_title'),
  			'href' => $this->url->link('account/return', '', true)
  		);
  
  		$data['heading_title'] = $this->language->get('heading_title');
  
  		$data['text_message'] = $this->language->get('text_message');
  
  		$data['button_continue'] = $this->language->get('button_continue');
  
  		$data['continue'] = $this->url->link('common/home');
  
  		$data['column_left'] = $this->load->controller('common/column_left');
  		$data['column_right'] = $this->load->controller('common/column_right');
  		$data['content_top'] = $this->load->controller('common/content_top');
  		$data['content_bottom'] = $this->load->controller('common/content_bottom');
  		$data['footer'] = $this->load->controller('common/footer');
  		$data['header'] = $this->load->controller('common/header');
  
  		$this->response->setOutput($this->load->view('common/success', $data));
  	}
  }
  