1<?php 2class 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'] = (int)$this->request->get['order_id']; 180 181 $data['user_token'] = $this->session->data['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}