| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | <?php  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Cloudlog\Label\PDF_Label; | 
					
						
							| 
									
										
										
										
											2023-06-12 14:20:24 +08:00
										 |  |  | use Cloudlog\Label\tfpdf; | 
					
						
							|  |  |  | use Cloudlog\Label\font\unifont\ttfonts; | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | if ( ! defined('BASEPATH')) exit('No direct script access allowed'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Labels extends CI_Controller { | 
					
						
							|  |  |  |  	/* | 
					
						
							|  |  |  | 	|-------------------------------------------------------------------------- | 
					
						
							|  |  |  | 	| Controller: Labels | 
					
						
							|  |  |  | 	|-------------------------------------------------------------------------- | 
					
						
							|  |  |  | 	|  | 
					
						
							|  |  |  | 	| This Controller handles all things Labels, creating, editing and printing | 
					
						
							|  |  |  | 	| | 
					
						
							|  |  |  | 	| | 
					
						
							|  |  |  | 	*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function __construct() { | 
					
						
							|  |  |  | 		parent::__construct(); | 
					
						
							|  |  |  | 		$this->load->helper(array('form', 'url', 'psr4_autoloader')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->load->model('user_model'); | 
					
						
							|  |  |  | 		if(!$this->user_model->authorize(2)) { $this->session->set_flashdata('notice', 'You\'re not allowed to do that!'); redirect('dashboard'); } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* | 
					
						
							|  |  |  | 	|-------------------------------------------------------------------------- | 
					
						
							|  |  |  | 	| Function: index | 
					
						
							|  |  |  | 	|-------------------------------------------------------------------------- | 
					
						
							|  |  |  | 	|  | 
					
						
							|  |  |  | 	| Nothing fancy just shows the main display of how many labels are waiting  | 
					
						
							|  |  |  | 	| to be printed per station profile. | 
					
						
							|  |  |  | 	| | 
					
						
							|  |  |  | 	*/ | 
					
						
							|  |  |  | 	public function index() { | 
					
						
							|  |  |  | 		$data['page_title'] = "QSL Card Labels"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->load->model('labels_model'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$data['labels'] = $this->labels_model->fetchLabels($this->session->userdata('user_id')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$data['qsos'] = $this->labels_model->fetchQsos($this->session->userdata('user_id')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$footerData = []; | 
					
						
							|  |  |  | 		$footerData['scripts'] = [ | 
					
						
							|  |  |  | 			'assets/js/sections/labels.js', | 
					
						
							|  |  |  | 		]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->load->view('interface_assets/header', $data); | 
					
						
							|  |  |  | 		$this->load->view('labels/index'); | 
					
						
							|  |  |  | 		$this->load->view('interface_assets/footer', $footerData); | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* | 
					
						
							|  |  |  | 	|-------------------------------------------------------------------------- | 
					
						
							|  |  |  | 	| Function: create | 
					
						
							|  |  |  | 	|-------------------------------------------------------------------------- | 
					
						
							|  |  |  | 	|  | 
					
						
							|  |  |  | 	| Shows the form used to create a label type. | 
					
						
							|  |  |  | 	| | 
					
						
							|  |  |  | 	*/ | 
					
						
							|  |  |  | 	public function create() { | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		$data['page_title'] = "Create Label Type"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->load->library('form_validation'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->form_validation->set_rules('label_name', 'Label Name', 'required'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if ($this->form_validation->run() == FALSE) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			$this->load->view('interface_assets/header', $data); | 
					
						
							|  |  |  | 			$this->load->view('labels/create'); | 
					
						
							|  |  |  | 			$this->load->view('interface_assets/footer'); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		{	 | 
					
						
							|  |  |  | 			$this->load->model('labels_model'); | 
					
						
							|  |  |  | 			$this->labels_model->addLabel(); | 
					
						
							|  |  |  | 			 | 
					
						
							|  |  |  | 			redirect('labels'); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function print($station_id) { | 
					
						
							|  |  |  | 		$clean_id = xss_clean($station_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->load->model('labels_model'); | 
					
						
							| 
									
										
										
										
											2023-06-14 22:28:12 +08:00
										 |  |  | 		$result = $this->labels_model->export_printrequested($clean_id); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 		$label = $this->labels_model->getDefaultLabel(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// require_once('fpdf.php');
 | 
					
						
							|  |  |  | 		// require('PDF_Label.php');
 | 
					
						
							|  |  |  | 		// require_once APPPATH."/src/Label/PDF_Label.php";
 | 
					
						
							|  |  |  | 		// require_once APPPATH."/src/Label/fpdf.php";
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Example of custom format
 | 
					
						
							|  |  |  | 		// $pdf = new PDF_Label(array('paper-size'=>'A4', 'metric'=>'mm', 'marginLeft'=>1, 'marginTop'=>1, 'NX'=>2, 'NY'=>7, 'SpaceX'=>0, 'SpaceY'=>0, 'width'=>99, 'height'=>38, 'font-size'=>14));
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-04 00:22:11 +08:00
										 |  |  | 		try { | 
					
						
							|  |  |  | 			if ($label) { | 
					
						
							|  |  |  | 				$pdf = new PDF_Label(array( | 
					
						
							|  |  |  | 					'paper-size'	=> $label->paper_type,  | 
					
						
							|  |  |  | 					'metric'		=> $label->metric,  | 
					
						
							|  |  |  | 					'marginLeft'	=> $label->marginleft,  | 
					
						
							|  |  |  | 					'marginTop'		=> $label->margintop,  | 
					
						
							|  |  |  | 					'NX'			=> $label->nx,  | 
					
						
							|  |  |  | 					'NY'			=> $label->ny,  | 
					
						
							|  |  |  | 					'SpaceX'		=> $label->spacex,  | 
					
						
							|  |  |  | 					'SpaceY'		=> $label->spacey,  | 
					
						
							|  |  |  | 					'width'			=> $label->width,  | 
					
						
							|  |  |  | 					'height'		=> $label->height,  | 
					
						
							|  |  |  | 					'font-size'		=> $label->font_size | 
					
						
							| 
									
										
										
										
											2023-06-05 22:53:06 +08:00
										 |  |  | 				)); | 
					
						
							| 
									
										
										
										
											2023-06-04 00:22:11 +08:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2023-06-16 15:04:50 +08:00
										 |  |  | 				$this->session->set_flashdata('error', 'You need to create a label and set it to be used for print.');  | 
					
						
							|  |  |  | 				redirect('labels'); | 
					
						
							| 
									
										
										
										
											2023-06-04 00:22:11 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} catch (\Throwable $th) { | 
					
						
							|  |  |  | 			$this->session->set_flashdata('error', 'Something went wrong! The label could not be generated. Check label size and font size.');  | 
					
						
							|  |  |  | 			redirect('labels'); | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2023-06-12 14:20:24 +08:00
										 |  |  | 		define('FPDF_FONTPATH', './src/Label/font/'); | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		$pdf->AddPage(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-12 14:20:24 +08:00
										 |  |  | 		if ($label->font == 'DejaVuSans') { | 
					
						
							|  |  |  | 			$pdf->AddFont($label->font,'','DejaVuSansMono.ttf',true); | 
					
						
							|  |  |  | 			$pdf->SetFont($label->font); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			$pdf->AddFont($label->font); | 
					
						
							|  |  |  | 			$pdf->SetFont($label->font); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 		if ($result->num_rows() > 0) { | 
					
						
							| 
									
										
										
										
											2023-06-06 23:36:30 +08:00
										 |  |  | 			if ($label->qsos == 1) { | 
					
						
							| 
									
										
										
										
											2023-06-05 22:53:06 +08:00
										 |  |  | 				$this->makeOneQsoLabel($result->result(), $pdf); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				$this->makeMultiQsoLabel($result->result(), $pdf, $label->qsos); | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2023-06-05 22:53:06 +08:00
										 |  |  | 			$this->session->set_flashdata('message', '0 QSOs found for print!');  | 
					
						
							|  |  |  | 			redirect('labels'); | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		$pdf->Output(); | 
					
						
							| 
									
										
										
										
											2023-06-05 22:53:06 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function makeOneQsoLabel($qsos, $pdf) { | 
					
						
							|  |  |  | 		foreach($qsos as $qso) { | 
					
						
							|  |  |  | 			$time = strtotime($qso->COL_TIME_ON); | 
					
						
							|  |  |  | 			$myFormatForView = date("d/m/Y H:i", $time); | 
					
						
							|  |  |  | 				if($qso->COL_SAT_NAME != "") { | 
					
						
							|  |  |  | 					$text = sprintf("%s\n\n%s %s\n%s %s \n\n%s", 'To: '.$qso->COL_CALL, $myFormatForView, 'on '.$qso->COL_BAND.' 2x'.$qso->COL_MODE.' RST '.$qso->COL_RST_SENT.'', 'Satellite: '.$qso->COL_SAT_NAME.' Mode: '.strtoupper($qso->COL_SAT_MODE).' ', '', 'Thanks for QSO.'); | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					$text = sprintf("%s\n\n%s %s\n%s %s \n\n%s", 'To: '.$qso->COL_CALL, $myFormatForView, 'on '.$qso->COL_BAND.' 2x'.$qso->COL_MODE.' RST '.$qso->COL_RST_SENT.'', '', '', 'Thanks for QSO.'); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				$pdf->Add_Label($text); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function makeMultiQsoLabel($qsos, $pdf, $numberofqsos) { | 
					
						
							|  |  |  | 		$text = ''; | 
					
						
							|  |  |  | 		$current_callsign = ''; | 
					
						
							|  |  |  | 		$qso_data = []; | 
					
						
							|  |  |  | 		foreach($qsos as $qso) { | 
					
						
							|  |  |  | 			if ($qso->COL_CALL !== $current_callsign) { | 
					
						
							|  |  |  | 				if (!empty($qso_data)) { | 
					
						
							|  |  |  | 					$this->makeLabel($pdf, $current_callsign, $qso_data, $numberofqsos); | 
					
						
							|  |  |  | 					$qso_data = []; | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				$current_callsign = $qso->COL_CALL; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			$qso_data[] = [ | 
					
						
							|  |  |  | 				'time' => $qso->COL_TIME_ON, | 
					
						
							|  |  |  | 				'band' => $qso->COL_BAND, | 
					
						
							|  |  |  | 				'mode' => $qso->COL_MODE, | 
					
						
							|  |  |  | 				'rst' => $qso->COL_RST_SENT, | 
					
						
							|  |  |  | 				'mygrid' => $qso->station_gridsquare, | 
					
						
							|  |  |  | 				'sat' => $qso->COL_SAT_NAME, | 
					
						
							|  |  |  | 				'sat_mode' => $qso->COL_SAT_MODE, | 
					
						
							|  |  |  | 			]; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if (!empty($qso_data)) { | 
					
						
							|  |  |  | 			$this->makeLabel($pdf, $current_callsign, $qso_data, $numberofqsos); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function makeLabel($pdf, $current_callsign, $qso_data, $numberofqsos) { | 
					
						
							|  |  |  | 		$text = 'To: ' . $current_callsign . "\n\n"; | 
					
						
							|  |  |  | 		$count = 0; | 
					
						
							|  |  |  | 		$qsotext = ''; | 
					
						
							|  |  |  | 		foreach ($qso_data as $key => $qso) { | 
					
						
							|  |  |  | 			$time = strtotime($qso['time']); | 
					
						
							|  |  |  | 			$myFormatForView = date("d/m/Y H:i", $time); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if($qso['sat'] != "") { | 
					
						
							|  |  |  | 				$qsotext .= sprintf("%s %s %s %s\n", $myFormatForView, 'on '.$qso['band'].' 2x'.$qso['mode'].' RST '.$qso['rst'].'', 'Satellite: '.$qso['sat'].' Mode: '.strtoupper($qso['sat_mode']).' ', ''); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				$qsotext .= sprintf("%s %s\n", $myFormatForView, 'on '.$qso['band'].' 2x'.$qso['mode'].' RST '.$qso['rst']); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			$count++; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if ($count == $numberofqsos) { | 
					
						
							|  |  |  | 				$text .= $qsotext; | 
					
						
							|  |  |  | 				$text .= "\n" . 'Thanks for QSOs.'; | 
					
						
							|  |  |  | 				$pdf->Add_Label($text); | 
					
						
							|  |  |  | 				$text = 'To: ' . $current_callsign . "\n\n"; | 
					
						
							|  |  |  | 				$count = 0; | 
					
						
							|  |  |  | 				$qsotext = ''; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			unset($qso_data[$key]); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if ($qsotext != '') { | 
					
						
							|  |  |  | 			$text .= $qsotext; | 
					
						
							|  |  |  | 			$text .= "\n" . 'Thanks for QSOs.'; | 
					
						
							|  |  |  | 			$pdf->Add_Label($text); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-03 14:46:52 +08:00
										 |  |  | 	public function edit($id) { | 
					
						
							|  |  |  | 		$this->load->model('labels_model'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$cleanid = $this->security->xss_clean($id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$data['label'] = $this->labels_model->getLabel($cleanid); | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-03 14:46:52 +08:00
										 |  |  | 		$data['page_title'] = "Edit Label"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$this->load->view('interface_assets/header', $data); | 
					
						
							|  |  |  | 		$this->load->view('labels/edit'); | 
					
						
							|  |  |  | 		$this->load->view('interface_assets/footer'); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function updateLabel($id) { | 
					
						
							|  |  |  | 		$this->load->model('labels_model'); | 
					
						
							|  |  |  | 		$this->labels_model->updateLabel($id); | 
					
						
							| 
									
										
										
										
											2023-06-04 00:22:11 +08:00
										 |  |  | 		$this->session->set_flashdata('message', 'Label was saved.');  | 
					
						
							| 
									
										
										
										
											2023-06-03 14:46:52 +08:00
										 |  |  | 		redirect('labels'); | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function delete($id) { | 
					
						
							|  |  |  | 		$this->load->model('labels_model'); | 
					
						
							|  |  |  | 		$this->labels_model->deleteLabel($id); | 
					
						
							| 
									
										
										
										
											2023-06-04 00:22:11 +08:00
										 |  |  | 		$this->session->set_flashdata('warning', 'Label was deleted.');  | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 		redirect('labels'); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public function saveDefaultLabel() { | 
					
						
							|  |  |  | 		$id = $this->input->post('id'); | 
					
						
							|  |  |  | 		$this->load->model('labels_model'); | 
					
						
							|  |  |  | 		$this->labels_model->saveDefaultLabel($id); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |