<?php
class ControllerCiReviewProCiReviewProCronLog extends Controller {
	private $error = array();
	private $module_token = '';
	private $ci_token = '';

	public function __construct($registry) {
		parent :: __construct($registry);

		require_once DIR_SYSTEM .'library/cireviewpro/cireviewpro_admin.php';

		$registry->set('cireviewpro_admin', new Cireviewpro\cireviewpro_admin($registry));
		$this->module_token = $this->cireviewpro_admin->token;
		$this->ci_token = $this->session->data[$this->cireviewpro_admin->token];
	}

	public function index() {
		$this->document->addStyle('view/stylesheet/cireviewpro/cireview.css');
		$this->load->language('cireviewpro/cireviewpro_cronlog');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('setting/setting');

		$this->load->model('cireviewpro/ciratingtype');
		$this->model_cireviewpro_ciratingtype->Buildtable();

		$store_id = 0;
		if(isset($this->request->get['store_id'])) {
			$store_id = $this->request->get['store_id'];
		}

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {

			$this->model_setting_setting->editSetting('cireviewpro_cronlog',  $this->request->post, $store_id);

			$this->session->data['success'] = $this->language->get('text_success');

			$this->response->redirect($this->url->link('cireviewpro/cireviewpro_cronlog', $this->module_token .'=' . $this->ci_token, true));
		}

		$data['heading_title'] = $this->language->get('heading_title');
		$data['heading_sub_title'] = $this->language->get('heading_sub_title');

		$data['text_list'] = $this->language->get('text_list');
		$data['text_confirm'] = $this->language->get('text_confirm');
		$data['text_loading'] = $this->language->get('text_loading');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');
		$data['text_yes'] = $this->language->get('text_yes');
		$data['text_no'] = $this->language->get('text_no');
		$data['text_none'] = $this->language->get('text_none');

		$data['entry_status'] = $this->language->get('entry_status');
		$data['entry_filename'] = $this->language->get('entry_filename');
		$data['entry_filesize'] = $this->language->get('entry_filesize');
		$data['entry_is_maildisable'] = $this->language->get('entry_is_maildisable');
		/*21112019 start*/
		$data['entry_use_testemail'] = $this->language->get('entry_use_testemail');
		$data['entry_testemail'] = $this->language->get('entry_testemail');
		/*21112019 end*/
		$data['entry_is_maillog'] = $this->language->get('entry_is_maillog');
		$data['entry_querylog'] = $this->language->get('entry_querylog');
		$data['entry_resultcount'] = $this->language->get('entry_resultcount');
		$data['entry_resultall'] = $this->language->get('entry_resultall');
		$data['entry_result'] = $this->language->get('entry_result');

		$data['help_filesize'] = $this->language->get('help_filesize');
		/*21112019 start*/
		$data['help_use_testemail'] = $this->language->get('help_use_testemail');
		/*21112019 end*/
		$data['button_save'] = $this->language->get('button_save');
		$data['button_download'] = $this->language->get('button_download');
		$data['button_clear'] = $this->language->get('button_clear');
		$data['button_cron'] = $this->language->get('button_cron');

		$data['tab_general'] = $this->language->get('tab_general');
		$data['tab_cronlog'] = $this->language->get('tab_cronlog');

		if (isset($this->session->data['error'])) {
			$data['error_warning'] = $this->session->data['error'];

			unset($this->session->data['error']);
		} elseif (isset($this->error['warning'])) {
			$data['error_warning'] = $this->error['warning'];
		} else {
			$data['error_warning'] = '';
		}

		if (isset($this->error['cronlog_filename'])) {
			$data['error_cronlog_filename'] = $this->error['cronlog_filename'];
		} else {
			$data['error_cronlog_filename'] = '';
		}

		if (isset($this->error['cronlog_filesize'])) {
			$data['error_cronlog_filesize'] = $this->error['cronlog_filesize'];
		} else {
			$data['error_cronlog_filesize'] = '';
		}
		/*21112019 start*/
		if (isset($this->error['cronlog_testemail'])) {
			$data['error_cronlog_testemail'] = $this->error['cronlog_testemail'];
		} else {
			$data['error_cronlog_testemail'] = '';
		}
		/*21112019 end*/
		if (isset($this->session->data['success'])) {
			$data['success'] = $this->session->data['success'];

			unset($this->session->data['success']);
		} else {
			$data['success'] = '';
		}

		$data['breadcrumbs'] = array();

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/dashboard', $this->module_token .'=' . $this->ci_token, true)
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('cireviewpro/cireviewpro_cronlog', $this->module_token .'=' . $this->ci_token, true)
		);

		$data['action'] = $this->url->link('cireviewpro/cireviewpro_cronlog', $this->module_token .'=' . $this->ci_token, true);

		$data['cancel'] = $this->url->link('cireviewpro/cireviewpro_cron', $this->module_token .'=' . $this->ci_token, true);

		$module_info = $this->model_setting_setting->getSetting('cireviewpro_cronlog', $store_id);

		$data['store_id'] = $store_id;

		if (isset($this->request->post['cireviewpro_cronlog_status'])) {
			$data['cireviewpro_cronlog_status'] = $this->request->post['cireviewpro_cronlog_status'];
		} else if(isset($module_info['cireviewpro_cronlog_status'])) {
			$data['cireviewpro_cronlog_status'] = $module_info['cireviewpro_cronlog_status'];
		}  else {
			$data['cireviewpro_cronlog_status'] = 0;
		}

		if (isset($this->request->post['cireviewpro_cronlog_filename'])) {
			$data['cireviewpro_cronlog_filename'] = $this->request->post['cireviewpro_cronlog_filename'];
		} else if(isset($module_info['cireviewpro_cronlog_filename'])) {
			$data['cireviewpro_cronlog_filename'] = $module_info['cireviewpro_cronlog_filename'];
		}  else {
			$data['cireviewpro_cronlog_filename'] = 'cronlog.log';
		}

		if (isset($this->request->post['cireviewpro_cronlog_filesize'])) {
			$data['cireviewpro_cronlog_filesize'] = $this->request->post['cireviewpro_cronlog_filesize'];
		} else if(isset($module_info['cireviewpro_cronlog_filesize'])) {
			$data['cireviewpro_cronlog_filesize'] = (float)$module_info['cireviewpro_cronlog_filesize'];
		}  else {
			$data['cireviewpro_cronlog_filesize'] = 5;
		}
		if (isset($this->request->post['cireviewpro_cronlog_is_maildisable'])) {
			$data['cireviewpro_cronlog_is_maildisable'] = $this->request->post['cireviewpro_cronlog_is_maildisable'];
		} else if(isset($module_info['cireviewpro_cronlog_is_maildisable'])) {
			$data['cireviewpro_cronlog_is_maildisable'] = $module_info['cireviewpro_cronlog_is_maildisable'];
		}  else {
			$data['cireviewpro_cronlog_is_maildisable'] = 0;
		}
		/*21112019 start*/if (isset($this->request->post['cireviewpro_cronlog_use_testemail'])) {
			$data['cireviewpro_cronlog_use_testemail'] = $this->request->post['cireviewpro_cronlog_use_testemail'];
		} else if(isset($module_info['cireviewpro_cronlog_use_testemail'])) {
			$data['cireviewpro_cronlog_use_testemail'] = $module_info['cireviewpro_cronlog_use_testemail'];
		}  else {
			$data['cireviewpro_cronlog_use_testemail'] = 0;
		}
		if (isset($this->request->post['cireviewpro_cronlog_testemail'])) {
			$data['cireviewpro_cronlog_testemail'] = $this->request->post['cireviewpro_cronlog_testemail'];
		} else if(isset($module_info['cireviewpro_cronlog_testemail'])) {
			$data['cireviewpro_cronlog_testemail'] = $module_info['cireviewpro_cronlog_testemail'];
		}  else {
			$data['cireviewpro_cronlog_testemail'] = $this->config->get('config_email');
		}/*21112019 end*/
		if (isset($this->request->post['cireviewpro_cronlog_is_maillog'])) {
			$data['cireviewpro_cronlog_is_maillog'] = $this->request->post['cireviewpro_cronlog_is_maillog'];
		} else if(isset($module_info['cireviewpro_cronlog_is_maillog'])) {
			$data['cireviewpro_cronlog_is_maillog'] = $module_info['cireviewpro_cronlog_is_maillog'];
		}  else {
			$data['cireviewpro_cronlog_is_maillog'] = 0;
		}
		if (isset($this->request->post['cireviewpro_cronlog_querylog'])) {
			$data['cireviewpro_cronlog_querylog'] = $this->request->post['cireviewpro_cronlog_querylog'];
		} else if(isset($module_info['cireviewpro_cronlog_querylog'])) {
			$data['cireviewpro_cronlog_querylog'] = $module_info['cireviewpro_cronlog_querylog'];
		}  else {
			$data['cireviewpro_cronlog_querylog'] = 0;
		}
		if (isset($this->request->post['cireviewpro_cronlog_resultcount'])) {
			$data['cireviewpro_cronlog_resultcount'] = $this->request->post['cireviewpro_cronlog_resultcount'];
		} else if(isset($module_info['cireviewpro_cronlog_resultcount'])) {
			$data['cireviewpro_cronlog_resultcount'] = $module_info['cireviewpro_cronlog_resultcount'];
		}  else {
			$data['cireviewpro_cronlog_resultcount'] = 0;
		}
		if (isset($this->request->post['cireviewpro_cronlog_resultall'])) {
			$data['cireviewpro_cronlog_resultall'] = $this->request->post['cireviewpro_cronlog_resultall'];
		} else if(isset($module_info['cireviewpro_cronlog_resultall'])) {
			$data['cireviewpro_cronlog_resultall'] = $module_info['cireviewpro_cronlog_resultall'];
		}  else {
			$data['cireviewpro_cronlog_resultall'] = 0;
		}
		if (isset($this->request->post['cireviewpro_cronlog_result'])) {
			$data['cireviewpro_cronlog_result'] = $this->request->post['cireviewpro_cronlog_result'];
		} else if(isset($module_info['cireviewpro_cronlog_result'])) {
			$data['cireviewpro_cronlog_result'] = $module_info['cireviewpro_cronlog_result'];
		}  else {
			$data['cireviewpro_cronlog_result'] = 0;
		}

		// Log code
		$data['error_log_size'] = '';

		$data['download'] = $this->url->link('cireviewpro/cireviewpro_cronlog/download', $this->module_token .'=' . $this->ci_token, true);
		$data['clear'] = $this->url->link('cireviewpro/cireviewpro_cronlog/clear', $this->module_token .'=' . $this->ci_token, true);

		$data['cireviewpro_cronlog'] = '';

		$dir = 'cireviewpro_logs/';

		$odir = $dir;
		$dirs = explode("/", $dir);
		$mkdir = '';
		foreach ($dirs as $key => $value) {
			$mkdir .= $value.'/';
			$this->makedir(DIR_LOGS . $mkdir);
		}

		$file = DIR_LOGS . $dir . $this->config->get('cireviewpro_cronlog_filename');

		if (file_exists($file)) {
			$size = filesize($file);

			//5242880 = 1024 * 1024 * 5
			if ($size >= 1024 * 1024 * ((float)$this->config->get('cireviewpro_cronlog_filesize') ? (float)$this->config->get('cireviewpro_cronlog_filesize') : 5) ) {
				$suffix = array(
					'B',
					'KB',
					'MB',
					'GB',
					'TB',
					'PB',
					'EB',
					'ZB',
					'YB'
				);

				$i = 0;

				while (($size / 1024) > 1) {
					$size = $size / 1024;
					$i++;
				}

				$data['error_log_size'] = sprintf($this->language->get('error_cron_log_size'), basename($file), round(substr($size, 0, strpos($size, '.') + 4), 2) . $suffix[$i]);
			} else {
				$data['cireviewpro_cronlog'] = file_get_contents($file, FILE_USE_INCLUDE_PATH, null);
			}
		}

		$data['header'] = $this->load->controller('common/header');
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['footer'] = $this->load->controller('common/footer');

		if(VERSION <= '2.3.0.2') {
			$this->response->setOutput($this->load->view('cireviewpro/cireviewpro_cronlog.tpl', $data));
		} else {
			$file_variable = 'template_engine';
			$file_type = 'template';
			$this->config->set($file_variable, $file_type);
			$this->response->setOutput($this->load->view('cireviewpro/cireviewpro_cronlog', $data));
		}
	}

	public function download() {
		$this->load->language('cireviewpro/cireviewpro_cronlog');
		$dir = 'cireviewpro_logs/';
		$file = DIR_LOGS . $dir . $this->config->get('cireviewpro_cronlog_filename');

		if (file_exists($file) && filesize($file) > 0) {
			$this->response->addheader('Pragma: public');
			$this->response->addheader('Expires: 0');
			$this->response->addheader('Content-Description: File Transfer');
			$this->response->addheader('Content-Type: application/octet-stream');
			$this->response->addheader('Content-Disposition: attachment; filename="' . $this->config->get('config_name') . '_' . date('Y-m-d_H-i-s', time()) . '_error.cireviewpro_cronlog"');
			$this->response->addheader('Content-Transfer-Encoding: binary');

			$this->response->setOutput(file_get_contents($file, FILE_USE_INCLUDE_PATH, null));
		} else {
			$this->session->data['error'] = sprintf($this->language->get('error_cron_log_size'), basename($file), '0B');

			$this->response->redirect($this->url->link('cireviewpro/cireviewpro_cronlog', $this->module_token .'=' . $this->ci_token, true));
		}
	}

	private function makedir($dir) {
		if(!is_dir($dir)) {
			$oldmask = umask(0);
			mkdir($dir, 0777);
			umask($oldmask);
		}
	}

	public function clear() {
		$this->load->language('cireviewpro/cireviewpro_cronlog');

		if (!$this->user->hasPermission('modify', 'cireviewpro/cireviewpro_cronlog')) {
			$this->session->data['error'] = $this->language->get('error_permission');
		} else {
			$dir = 'cireviewpro_logs/';
			$file = DIR_LOGS . $dir . $this->config->get('cireviewpro_cronlog_filename');

			$handle = fopen($file, 'w+');

			fclose($handle);

			$this->session->data['success'] = $this->language->get('text_success_log');
		}

		$this->response->redirect($this->url->link('cireviewpro/cireviewpro_cronlog', $this->module_token .'=' . $this->ci_token, true));
	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'cireviewpro/cireviewpro_cronlog')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		if(empty($this->request->post['cireviewpro_cronlog_filename'])) {
			$this->error['cronlog_filename'] = $this->language->get('error_cronlog_filename');
		}

		if(empty($this->request->post['cireviewpro_cronlog_filesize'])) {
			$this->error['cronlog_filesize'] = $this->language->get('error_cronlog_filesize');
		}
		/*21112019 start*/
		if($this->request->post['cireviewpro_cronlog_use_testemail'] == 1 && !empty($this->request->post['cireviewpro_cronlog_testemail'])) {
			if ((utf8_strlen($this->request->post['cireviewpro_cronlog_testemail']) > 96) || !filter_var($this->request->post['cireviewpro_cronlog_testemail'], FILTER_VALIDATE_EMAIL)) {
				$this->error['cronlog_testemail'] = $this->language->get('error_cronlog_testemail');
			}
		}
		/*21112019 end*/
		if ($this->error && !isset($this->error['warning'])) {
			$this->error['warning'] = $this->language->get('error_warning');
		}
		return !$this->error;
	}
}
