shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

sagepay_server.php (14701B)


      1 <?php
      2 class ControllerExtensionPaymentSagepayServer extends Controller {
      3 	private $error = array();
      4 
      5 	public function index() {
      6 
      7 		$this->load->language('extension/payment/sagepay_server');
      8 
      9 		$this->document->setTitle($this->language->get('heading_title'));
     10 
     11 		$this->load->model('setting/setting');
     12 
     13 		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
     14 			$this->model_setting_setting->editSetting('payment_sagepay_server', $this->request->post);
     15 
     16 			$this->session->data['success'] = $this->language->get('text_success');
     17 
     18 			$this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true));
     19 		}
     20 
     21 		if (isset($this->error['warning'])) {
     22 			$data['error_warning'] = $this->error['warning'];
     23 		} else {
     24 			$data['error_warning'] = '';
     25 		}
     26 
     27 		if (isset($this->error['vendor'])) {
     28 			$data['error_vendor'] = $this->error['vendor'];
     29 		} else {
     30 			$data['error_vendor'] = '';
     31 		}
     32 
     33 		$data['breadcrumbs'] = array();
     34 
     35 		$data['breadcrumbs'][] = array(
     36 			'text' => $this->language->get('text_home'),
     37 			'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
     38 		);
     39 
     40 		$data['breadcrumbs'][] = array(
     41 			'text' => $this->language->get('text_extension'),
     42 			'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)
     43 		);
     44 
     45 		$data['breadcrumbs'][] = array(
     46 			'text' => $this->language->get('heading_title'),
     47 			'href' => $this->url->link('extension/payment/sagepay_server', 'user_token=' . $this->session->data['user_token'], true)
     48 		);
     49 
     50 		$data['action'] = $this->url->link('extension/payment/sagepay_server', 'user_token=' . $this->session->data['user_token'], true);
     51 
     52 		$data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true);
     53 
     54 		if (isset($this->request->post['payment_sagepay_server_vendor'])) {
     55 			$data['payment_sagepay_server_vendor'] = $this->request->post['payment_sagepay_server_vendor'];
     56 		} else {
     57 			$data['payment_sagepay_server_vendor'] = $this->config->get('payment_sagepay_server_vendor');
     58 		}
     59 
     60 		if (isset($this->request->post['payment_sagepay_server_password'])) {
     61 			$data['payment_sagepay_server_password'] = $this->request->post['payment_sagepay_server_password'];
     62 		} else {
     63 			$data['payment_sagepay_server_password'] = $this->config->get('payment_sagepay_server_password');
     64 		}
     65 
     66 		if (isset($this->request->post['payment_sagepay_server_test'])) {
     67 			$data['payment_sagepay_server_test'] = $this->request->post['payment_sagepay_server_test'];
     68 		} else {
     69 			$data['payment_sagepay_server_test'] = $this->config->get('payment_sagepay_server_test');
     70 		}
     71 
     72 		if (isset($this->request->post['payment_sagepay_server_transaction'])) {
     73 			$data['payment_sagepay_server_transaction'] = $this->request->post['payment_sagepay_server_transaction'];
     74 		} else {
     75 			$data['payment_sagepay_server_transaction'] = $this->config->get('payment_sagepay_server_transaction');
     76 		}
     77 
     78 		if (isset($this->request->post['payment_sagepay_server_total'])) {
     79 			$data['payment_sagepay_server_total'] = $this->request->post['payment_sagepay_server_total'];
     80 		} else {
     81 			$data['payment_sagepay_server_total'] = $this->config->get('payment_sagepay_server_total');
     82 		}
     83 
     84 		if (isset($this->request->post['payment_sagepay_server_card'])) {
     85 			$data['payment_sagepay_server_card'] = $this->request->post['payment_sagepay_server_card'];
     86 		} else {
     87 			$data['payment_sagepay_server_card'] = $this->config->get('payment_sagepay_server_card');
     88 		}
     89 
     90 		if (isset($this->request->post['payment_sagepay_server_order_status_id'])) {
     91 			$data['payment_sagepay_server_order_status_id'] = $this->request->post['payment_sagepay_server_order_status_id'];
     92 		} else {
     93 			$data['payment_sagepay_server_order_status_id'] = $this->config->get('payment_sagepay_server_order_status_id');
     94 		}
     95 
     96 		if (isset($this->request->post['payment_sagepay_server_cron_job_token'])) {
     97 			$data['payment_sagepay_server_cron_job_token'] = $this->request->post['payment_sagepay_server_cron_job_token'];
     98 		} elseif ($this->config->get('payment_sagepay_server_cron_job_token')) {
     99 			$data['payment_sagepay_server_cron_job_token'] = $this->config->get('payment_sagepay_server_cron_job_token');
    100 		} else {
    101 			$data['payment_sagepay_server_cron_job_token'] = sha1(uniqid(mt_rand(), 1));
    102 		}
    103 
    104 		$data['sagepay_server_cron_job_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/sagepay_server/cron&token=' . $data['payment_sagepay_server_cron_job_token'];
    105 
    106 		if ($this->config->get('payment_sagepay_server_last_cron_job_run')) {
    107 			$data['payment_sagepay_server_last_cron_job_run'] = $this->config->get('payment_sagepay_server_last_cron_job_run');
    108 		} else {
    109 			$data['payment_sagepay_server_last_cron_job_run'] = '';
    110 		}
    111 
    112 		$this->load->model('localisation/order_status');
    113 
    114 		$data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
    115 
    116 		if (isset($this->request->post['payment_sagepay_server_geo_zone_id'])) {
    117 			$data['payment_sagepay_server_geo_zone_id'] = $this->request->post['payment_sagepay_server_geo_zone_id'];
    118 		} else {
    119 			$data['payment_sagepay_server_geo_zone_id'] = $this->config->get('payment_sagepay_server_geo_zone_id');
    120 		}
    121 
    122 		$this->load->model('localisation/geo_zone');
    123 
    124 		$data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones();
    125 
    126 		if (isset($this->request->post['payment_sagepay_server_status'])) {
    127 			$data['payment_sagepay_server_status'] = $this->request->post['payment_sagepay_server_status'];
    128 		} else {
    129 			$data['payment_sagepay_server_status'] = $this->config->get('payment_sagepay_server_status');
    130 		}
    131 
    132 		if (isset($this->request->post['payment_sagepay_server_debug'])) {
    133 			$data['payment_sagepay_server_debug'] = $this->request->post['payment_sagepay_server_debug'];
    134 		} else {
    135 			$data['payment_sagepay_server_debug'] = $this->config->get('payment_sagepay_server_debug');
    136 		}
    137 
    138 		if (isset($this->request->post['payment_sagepay_server_sort_order'])) {
    139 			$data['payment_sagepay_server_sort_order'] = $this->request->post['payment_sagepay_server_sort_order'];
    140 		} else {
    141 			$data['payment_sagepay_server_sort_order'] = $this->config->get('payment_sagepay_server_sort_order');
    142 		}
    143 
    144 		$data['header'] = $this->load->controller('common/header');
    145 		$data['column_left'] = $this->load->controller('common/column_left');
    146 		$data['footer'] = $this->load->controller('common/footer');
    147 
    148 		$this->response->setOutput($this->load->view('extension/payment/sagepay_server', $data));
    149 	}
    150 
    151 	public function install() {
    152 		$this->load->model('extension/payment/sagepay_server');
    153 		$this->model_extension_payment_sagepay_server->install();
    154 	}
    155 
    156 	public function uninstall() {
    157 		$this->load->model('extension/payment/sagepay_server');
    158 		$this->model_extension_payment_sagepay_server->uninstall();
    159 	}
    160 
    161 	public function order() {
    162 		if ($this->config->get('payment_sagepay_server_status')) {
    163 			$this->load->model('extension/payment/sagepay_server');
    164 
    165 			$sagepay_server_order = $this->model_extension_payment_sagepay_server->getOrder($this->request->get['order_id']);
    166 
    167 			if (!empty($sagepay_server_order)) {
    168 				$this->load->language('extension/payment/sagepay_server');
    169 
    170 				$sagepay_server_order['total_released'] = $this->model_extension_payment_sagepay_server->getTotalReleased($sagepay_server_order['sagepay_server_order_id']);
    171 
    172 				$sagepay_server_order['total_formatted'] = $this->currency->format($sagepay_server_order['total'], $sagepay_server_order['currency_code'], false, false);
    173 				$sagepay_server_order['total_released_formatted'] = $this->currency->format($sagepay_server_order['total_released'], $sagepay_server_order['currency_code'], false, false);
    174 
    175 				$data['sagepay_server_order'] = $sagepay_server_order;
    176 
    177 				$data['auto_settle'] = $sagepay_server_order['settle_type'];
    178 
    179 				$data['order_id'] = $this->request->get['order_id'];
    180 				
    181 				$data['user_token'] = $this->request->get['user_token'];
    182 
    183 				return $this->load->view('extension/payment/sagepay_server_order', $data);
    184 			}
    185 		}
    186 	}
    187 
    188 	public function void() {
    189 		$this->load->language('extension/payment/sagepay_server');
    190 		$json = array();
    191 
    192 		if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '') {
    193 			$this->load->model('extension/payment/sagepay_server');
    194 
    195 			$sagepay_server_order = $this->model_extension_payment_sagepay_server->getOrder($this->request->post['order_id']);
    196 
    197 			$void_response = $this->model_extension_payment_sagepay_server->void($this->request->post['order_id']);
    198 
    199 			$this->model_extension_payment_sagepay_server->logger('Void result', $void_response);
    200 
    201 			if ($void_response['Status'] == 'OK') {
    202 				$this->model_extension_payment_sagepay_server->addTransaction($sagepay_server_order['sagepay_server_order_id'], 'void', 0.00);
    203 				$this->model_extension_payment_sagepay_server->updateVoidStatus($sagepay_server_order['sagepay_server_order_id'], 1);
    204 
    205 				$json['msg'] = $this->language->get('text_void_ok');
    206 
    207 				$json['data'] = array();
    208 				$json['data']['date_added'] = date("Y-m-d H:i:s");
    209 				$json['error'] = false;
    210 			} else {
    211 				$json['error'] = true;
    212 				$json['msg'] = isset($void_response['StatuesDetail']) && !empty($void_response['StatuesDetail']) ? (string)$void_response['StatuesDetail'] : 'Unable to void';
    213 			}
    214 		} else {
    215 			$json['error'] = true;
    216 			$json['msg'] = 'Missing data';
    217 		}
    218 
    219 		$this->response->addHeader('Content-Type: application/json');
    220 		$this->response->setOutput(json_encode($json));
    221 	}
    222 
    223 	public function release() {
    224 		$this->load->language('extension/payment/sagepay_server');
    225 		$json = array();
    226 
    227 		if (isset($this->request->post['order_id']) && $this->request->post['order_id'] != '' && isset($this->request->post['amount']) && $this->request->post['amount'] > 0) {
    228 			$this->load->model('extension/payment/sagepay_server');
    229 
    230 			$sagepay_server_order = $this->model_extension_payment_sagepay_server->getOrder($this->request->post['order_id']);
    231 
    232 			$release_response = $this->model_extension_payment_sagepay_server->release($this->request->post['order_id'], $this->request->post['amount']);
    233 
    234 			$this->model_extension_payment_sagepay_server->logger('Release result', $release_response);
    235 
    236 			if ($release_response['Status'] == 'OK') {
    237 				$this->model_extension_payment_sagepay_server->addTransaction($sagepay_server_order['sagepay_server_order_id'], 'payment', $this->request->post['amount']);
    238 
    239 				$total_released = $this->model_extension_payment_sagepay_server->getTotalReleased($sagepay_server_order['sagepay_server_order_id']);
    240 
    241 				if ($total_released >= $sagepay_server_order['total'] || $sagepay_server_order['settle_type'] == 0) {
    242 					$this->model_extension_payment_sagepay_server->updateReleaseStatus($sagepay_server_order['sagepay_server_order_id'], 1);
    243 					$release_status = 1;
    244 					$json['msg'] = $this->language->get('text_release_ok_order');
    245 				} else {
    246 					$release_status = 0;
    247 					$json['msg'] = $this->language->get('text_release_ok');
    248 				}
    249 
    250 				$json['data'] = array();
    251 				$json['data']['date_added'] = date("Y-m-d H:i:s");
    252 				$json['data']['amount'] = $this->request->post['amount'];
    253 				$json['data']['release_status'] = $release_status;
    254 				$json['data']['total'] = (float)$total_released;
    255 				$json['error'] = false;
    256 			} else {
    257 				$json['error'] = true;
    258 				$json['msg'] = isset($release_response['StatusDetail']) && !empty($release_response['StatusDetail']) ? (string)$release_response['StatusDetail'] : 'Unable to release';
    259 			}
    260 		} else {
    261 			$json['error'] = true;
    262 			$json['msg'] = $this->language->get('error_data_missing');
    263 		}
    264 
    265 		$this->response->addHeader('Content-Type: application/json');
    266 		$this->response->setOutput(json_encode($json));
    267 	}
    268 
    269 	public function rebate() {
    270 		$this->load->language('extension/payment/sagepay_server');
    271 		$json = array();
    272 
    273 		if (isset($this->request->post['order_id']) && !empty($this->request->post['order_id'])) {
    274 			$this->load->model('extension/payment/sagepay_server');
    275 
    276 			$sagepay_server_order = $this->model_extension_payment_sagepay_server->getOrder($this->request->post['order_id']);
    277 
    278 			$rebate_response = $this->model_extension_payment_sagepay_server->rebate($this->request->post['order_id'], $this->request->post['amount']);
    279 
    280 			$this->model_extension_payment_sagepay_server->logger('Rebate result', $rebate_response);
    281 
    282 			if ($rebate_response['Status'] == 'OK') {
    283 				$this->model_extension_payment_sagepay_server->addTransaction($sagepay_server_order['sagepay_server_order_id'], 'rebate', $this->request->post['amount'] * -1);
    284 
    285 				$total_rebated = $this->model_extension_payment_sagepay_server->getTotalRebated($sagepay_server_order['sagepay_server_order_id']);
    286 				$total_released = $this->model_extension_payment_sagepay_server->getTotalReleased($sagepay_server_order['sagepay_server_order_id']);
    287 
    288 				if ($total_released <= 0 && $sagepay_server_order['release_status'] == 1) {
    289 					$this->model_extension_payment_sagepay_server->updateRebateStatus($sagepay_server_order['sagepay_server_order_id'], 1);
    290 					$rebate_status = 1;
    291 					$json['msg'] = $this->language->get('text_rebate_ok_order');
    292 				} else {
    293 					$rebate_status = 0;
    294 					$json['msg'] = $this->language->get('text_rebate_ok');
    295 				}
    296 
    297 				$json['data'] = array();
    298 				$json['data']['date_added'] = date("Y-m-d H:i:s");
    299 				$json['data']['amount'] = $this->request->post['amount'] * -1;
    300 				$json['data']['total_released'] = (float)$total_released;
    301 				$json['data']['total_rebated'] = (float)$total_rebated;
    302 				$json['data']['rebate_status'] = $rebate_status;
    303 				$json['error'] = false;
    304 			} else {
    305 				$json['error'] = true;
    306 				$json['msg'] = isset($rebate_response['StatusDetail']) && !empty($rebate_response['StatusDetail']) ? (string)$rebate_response['StatusDetail'] : 'Unable to rebate';
    307 			}
    308 		} else {
    309 			$json['error'] = true;
    310 			$json['msg'] = 'Missing data';
    311 		}
    312 
    313 		$this->response->addHeader('Content-Type: application/json');
    314 		$this->response->setOutput(json_encode($json));
    315 	}
    316 
    317 	protected function validate() {
    318 		if (!$this->user->hasPermission('modify', 'extension/payment/sagepay_server')) {
    319 			$this->error['warning'] = $this->language->get('error_permission');
    320 		}
    321 
    322 		if (!$this->request->post['payment_sagepay_server_vendor']) {
    323 			$this->error['vendor'] = $this->language->get('error_vendor');
    324 		}
    325 
    326 		return !$this->error;
    327 	}
    328 }