<?

// // собираем числа из графика диска
// // разбиты на столбцы
// fmSend_report::$graph_disk_cols = $cols = array(
// 	'disk_userfiles_display',
// 	'disk_slow_write',
// 	'disk_good_write_display',

// 	'disk_create_err_display',
// 	'disk_read_err_display',
// 	'disk_slow_auto_display',

// 	'disk_slow_auto_display',
// 	'disk_frag_display',
// 	'disk_result_space_display',
// );

// $GLOBALS['check_objs_start'] += $cols;

class fmSend_report extends Form_children {
	public $fmName;
	static $graph_disk_cols = array();

	function __construct() {
		parent::__construct('fmSend_report');
	}

	// открытие формы
	function open() {

		с($this->fmName)->autoScroll = true;

		$this->control_visible_report_upload_msg();

		// обязательно идет в конце, потому что дальше выполнение не будет происходить, пока окно не закроется
		parent::open();
	}

	// закрытие формы
	function close() {

		// чтобы не было бага с видимость. При open это бывает
		c($this->fmName.'->pn_report_upload')->visible = false;
		
		parent::close();
	}

	function control_visible_report_upload_msg() {
		GLOBAL $INFO;

		$pn_msg = c($this->fmName.'->pn_report_upload');
		
		if($INFO['site_report_id']) {
			$url = $this->link_to_report($INFO['site_report_id']);

			$link = c($this->fmName.'->pn_report_upload_link');
			$link->link = $url;
			$link->caption = $url;

			$pn_msg->visible = true;
		}
		else {
			$pn_msg->visible = false;
		}
		
	}

	// постинг результата в соц сетях
	// social это имя сети в которой запустить автопостинг после перехода на страницу
	function bt_posting_social($social) {
		GLOBAL $INFO, $Graphs ,$Paths, $setting;

		// // создаем архив
		// if(!$this->create_zip($this_error_report)) {
		// 	messageDlg("Ошибка при создании архива", mtError, MB_OK);
		// 	return false;
		// }

		// if($this_error_report) {
		// 	rename(Send_report::$fpath_zip, 'errors.zip');
		// 	$fpath_zip = 'errors.zip';
		// }
		// else	 {
		// 	$fpath_zip = Send_report::$fpath_zip;
		// }

		// если report_id уже известен, значит отчет отправляли и делать этого повторно не нужно
		if($INFO['site_report_id']) {
			$url = $this->link_to_report($INFO['site_report_id'], $social);
			Run($url, false);
			return true;
		}


		$graph_disk_legend = $Graphs['disk']->legend->get_all_values();
		$graph_disk_legend['disc_name'] = $Paths->disc_name;
		$graph_disk_legend['disc_size'] = c('Fm->disk_short_size')->text;

		// генерация изображений
		$Graphs['speed']->saveToPng('graph_speed.png', false, 400);
		$Graphs['frags']->saveToPng('graph_frags.png', false, 300);
		$Graphs['disk']->saveToPng('graph_disk.png', false, 60);

		$data = array(
		    'graph_speed' => '@'.'graph_speed.png',
		    'graph_frags' => '@'.'graph_frags.png',
		    'graph_disk' => '@'.'graph_disk.png',
		    'graph_disk_legend' => urlencode(serialize($graph_disk_legend)),
		);

		$ch = curl_init();   
		curl_setopt($ch, CURLOPT_URL, "http://diskfast.ru/top/social_image/recive_report.php");
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		
		$result = false;

		if($result_page = curl_exec($ch)) {
			n();
			$result = json_decode($result_page);
			y();
		}

		if($result_page and $result and $result->status == 'ok') {
			// отмечаем что данные отправленны
			//$INFO['sended_report'] = true;

			// проверяем на всякий случай
			if(!preg_match('#^[\da-z_-]+$#i', $result->report_id))
				throw new Error_def("Неправильные символы в report_id: {$result->report_id}");

			$INFO['site_report_id'] = $result->report_id;
			$setting->save();

			$this->control_visible_report_upload_msg();

			$url = $this->link_to_report($result->report_id, $social);
			Run($url, false);

			return true;
		}

		print $result_page;

		///curl_error($ch);

		messageDlg("Произошла ошибка. 
Проверьте соединение с интернетом и повторите попытку.", mtError, MB_OK);
		return false;
	}

	function link_to_report($report_id, $social_autopost='') {

		$url = "http://diskfast.ru/p/?i={$report_id}";
		if($social_autopost)
			$url .= "&social_autopost=$social_autopost";

		return $url;
	}


	// создание архива и отправка по интернету
	function bt_send($this_error_report=false) {
		GLOBAL $INFO;

		// создаем архив
		if(!$this->create_zip($this_error_report)) {
			messageDlg("Ошибка при создании архива", mtError, MB_OK);
			return false;
		}

		if($this_error_report) {
			rename(Send_report::$fpath_zip, 'errors.zip');
			$fpath_zip = 'errors.zip';
		}
		else	 {
			$fpath_zip = Send_report::$fpath_zip;
		}

		$data = array(
		    'zip_results' => '@'.$fpath_zip,
		    'error_report'=> $this_error_report,
		);

		$ch = curl_init();   
		curl_setopt($ch, CURLOPT_URL, "http://diskfast.ru/top/recive_zip_results.php");
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		
		$result = curl_exec($ch);

		//print $result;

		if($result and stristr($result, 'upload ok')) {
			if($this_error_report) {
				$msg = "Данные об ошибке успешно отправлены. 
Большое спасибо, они мне очень помогут!";
			}
			else  {
				$msg = "Данные успешно отправлены. 
Большое спасибо, они мне очень помогут!
Пока информация обрабатывается в ручном режиме. В ближайшее время она появится на сайте.";
				
				// отмечаем что данные отправленны
				$INFO['sended_report'] = true;
			}

			messageDlg($msg, mtInformation, MB_OK);

			return true;
		}

		messageDlg("Произошла ошибка. 
Проверьте соединение с интернетом и повторите попытку.
Либо отправьте результаты в ручном режиме.", mtError, MB_OK);



		return false;
	}

	// это функция строго для кнопки Отправить вручную
	function bt_create_zip($this_error_report = false) {
		GLOBAL $INFO;

		$res = $this->create_zip($this_error_report);
		if($res) {
			 messageDlg("Архив успешно создан", mtInformation, MB_OK);

			 // Отмечаем что данные отправленны. Гарантии нет конечно но человека напрягать окном не хочется.
			if(!$this_error_report) 
				$INFO['sended_report'] = true;
		}
		else messageDlg("Ошибка при создании архива", mtError, MB_OK);
	}

	function create_zip($this_error_report = false) {
		$Send_report = new Send_report();

		$info_file = '';

		if(!$this_error_report) {
			// сохраняем туда данные которые указал пользователь
			$info_file = 'add_info.txt';

			$fields = array(
				'cb_public_results' => c('cb_public_results')->state,
				'cb_top' => c('cb_top')->state,
				'user_name' => c('user_name')->text,
				'comments' => c('comments')->text,
			);

			file_put_contents($info_file, serialize($fields));
		}

		$res = $Send_report->create_zip(array($info_file));
		
		if($info_file)
			unlink($info_file);

		return $res;
	}

}

?>