Merge pull request #2106 from AndreasK79/advanced_logbook_qsl_eqsl_lotw
[Advanced logbook] Added columns for QSL/LoTW/eQSL confirmations
这个提交包含在:
		
						当前提交
						d0e3408f34
					
				
					共有  4 个文件被更改,包括 346 次插入 和 47 次删除
				
			
		|  | @ -122,25 +122,7 @@ class Logbookadvanced_model extends CI_Model { | ||||||
| 			$where = "AND $where"; | 			$where = "AND $where"; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if ($sortorder != null) { | 		$order = $this->getSortorder($sortorder); | ||||||
| 			$sortorder = explode(',', $sortorder); |  | ||||||
| 	 |  | ||||||
| 			switch($sortorder[0]) { |  | ||||||
| 				case 1: $order = 'ORDER BY qsos.COL_TIME_ON ' . $sortorder[1]; break; |  | ||||||
| 				case 2: $order = 'ORDER BY station_profile.station_callsign ' . $sortorder[1]; break; |  | ||||||
| 				case 3: $order = 'ORDER BY qsos.COL_CALL ' . $sortorder[1]; break; |  | ||||||
| 				case 4: $order = 'ORDER BY qsos.COL_MODE' .  $sortorder[1] . ', qsos.COL_SUBMODE ' . $sortorder[1]; break; |  | ||||||
| 				case 7: $order = 'ORDER BY qsos.COL_BAND ' . $sortorder[1] . ', qsos.COL_SAT_NAME ' . $sortorder[1]; break; |  | ||||||
| 				case 15: $order = 'ORDER BY qsos.COL_COUNTRY ' . $sortorder[1]; break; |  | ||||||
| 				case 16: $order = 'ORDER BY qso.COL_STATE ' . $sortorder[1]; break; |  | ||||||
| 				case 17: $order = 'ORDER BY qsos.COL_CQZ ' . $sortorder[1]; break; |  | ||||||
| 				case 18: $order = 'ORDER BY qsos.COL_IOTA ' . $sortorder[1]; break; |  | ||||||
| 				default: $order = 'ORDER BY qsos.COL_TIME_ON desc'; break; |  | ||||||
| 			} |  | ||||||
| 		} else { |  | ||||||
| 			$order = 'ORDER BY qsos.COL_TIME_ON desc'; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|         $sql = " |         $sql = " | ||||||
|             SELECT *, dxcc_entities.name AS station_country |             SELECT *, dxcc_entities.name AS station_country | ||||||
|  | @ -155,6 +137,59 @@ class Logbookadvanced_model extends CI_Model { | ||||||
| 		return $this->db->query($sql, $binding); | 		return $this->db->query($sql, $binding); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | 	public function getSortOrder($sortorder) { | ||||||
|  | 		if ($sortorder == null) { | ||||||
|  | 			return 'ORDER BY qsos.COL_TIME_ON desc'; | ||||||
|  | 		} else { | ||||||
|  | 			$sortorder = explode(',', $sortorder); | ||||||
|  | 
 | ||||||
|  | 			if ($this->session->userdata('user_lotw_name') != "" && $this->session->userdata('user_eqsl_name') != ""){ | ||||||
|  | 				switch($sortorder[0]) { | ||||||
|  | 					case 1: return 'ORDER BY qsos.COL_TIME_ON ' . $sortorder[1]; | ||||||
|  | 					case 2: return 'ORDER BY station_profile.station_callsign ' . $sortorder[1]; | ||||||
|  | 					case 3: return 'ORDER BY qsos.COL_CALL ' . $sortorder[1]; | ||||||
|  | 					case 4: return 'ORDER BY qsos.COL_MODE' .  $sortorder[1] . ', qsos.COL_SUBMODE ' . $sortorder[1]; | ||||||
|  | 					case 7: return 'ORDER BY qsos.COL_BAND ' . $sortorder[1] . ', qsos.COL_SAT_NAME ' . $sortorder[1]; | ||||||
|  | 					case 16: return 'ORDER BY qsos.COL_COUNTRY ' . $sortorder[1]; | ||||||
|  | 					case 17: return 'ORDER BY qso.COL_STATE ' . $sortorder[1]; | ||||||
|  | 					case 18: return 'ORDER BY qsos.COL_CQZ ' . $sortorder[1]; | ||||||
|  | 					case 19: return 'ORDER BY qsos.COL_IOTA ' . $sortorder[1]; | ||||||
|  | 					default: return 'ORDER BY qsos.COL_TIME_ON desc'; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			else if (($this->session->userdata('user_eqsl_name') != "" && $this->session->userdata('user_lotw_name') == "") || ($this->session->userdata('user_eqsl_name') == "" && $this->session->userdata('user_lotw_name') != "")) { | ||||||
|  | 				switch($sortorder[0]) { | ||||||
|  | 					case 1: return 'ORDER BY qsos.COL_TIME_ON ' . $sortorder[1]; | ||||||
|  | 					case 2: return 'ORDER BY station_profile.station_callsign ' . $sortorder[1]; | ||||||
|  | 					case 3: return 'ORDER BY qsos.COL_CALL ' . $sortorder[1]; | ||||||
|  | 					case 4: return 'ORDER BY qsos.COL_MODE' .  $sortorder[1] . ', qsos.COL_SUBMODE ' . $sortorder[1]; | ||||||
|  | 					case 7: return 'ORDER BY qsos.COL_BAND ' . $sortorder[1] . ', qsos.COL_SAT_NAME ' . $sortorder[1]; | ||||||
|  | 					case 15: return 'ORDER BY qsos.COL_COUNTRY ' . $sortorder[1]; | ||||||
|  | 					case 16: return 'ORDER BY qso.COL_STATE ' . $sortorder[1]; | ||||||
|  | 					case 17: return 'ORDER BY qsos.COL_CQZ ' . $sortorder[1]; | ||||||
|  | 					case 18: return 'ORDER BY qsos.COL_IOTA ' . $sortorder[1]; | ||||||
|  | 					default: return 'ORDER BY qsos.COL_TIME_ON desc'; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			else if ($this->session->userdata('user_eqsl_name') == "" && $this->session->userdata('user_lotw_name') == ""){ | ||||||
|  | 				switch($sortorder[0]) { | ||||||
|  | 					case 1: return 'ORDER BY qsos.COL_TIME_ON ' . $sortorder[1]; | ||||||
|  | 					case 2: return 'ORDER BY station_profile.station_callsign ' . $sortorder[1]; | ||||||
|  | 					case 3: return 'ORDER BY qsos.COL_CALL ' . $sortorder[1]; | ||||||
|  | 					case 4: return 'ORDER BY qsos.COL_MODE' .  $sortorder[1] . ', qsos.COL_SUBMODE ' . $sortorder[1]; | ||||||
|  | 					case 7: return 'ORDER BY qsos.COL_BAND ' . $sortorder[1] . ', qsos.COL_SAT_NAME ' . $sortorder[1]; | ||||||
|  | 					case 14: return 'ORDER BY qsos.COL_COUNTRY ' . $sortorder[1]; | ||||||
|  | 					case 15: return 'ORDER BY qso.COL_STATE ' . $sortorder[1]; | ||||||
|  | 					case 16: return 'ORDER BY qsos.COL_CQZ ' . $sortorder[1]; | ||||||
|  | 					case 17: return 'ORDER BY qsos.COL_IOTA ' . $sortorder[1]; | ||||||
|  | 					default: return 'ORDER BY qsos.COL_TIME_ON desc'; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|     public function updateQsl($ids, $user_id, $method, $sent) { |     public function updateQsl($ids, $user_id, $method, $sent) { | ||||||
|         $this->load->model('user_model'); |         $this->load->model('user_model'); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -201,8 +201,13 @@ | ||||||
| 				<th>Refs</th> | 				<th>Refs</th> | ||||||
| 				<th>Name</th> | 				<th>Name</th> | ||||||
| 				<th>QSL Via</th> | 				<th>QSL Via</th> | ||||||
| 				<th>QSL Sent</th> | 				<th>QSL</th> | ||||||
| 				<th>QSL Received</th> | 				<?php if ($this->session->userdata('user_lotw_name') != ""){ | ||||||
|  | 					echo '<th class="lotwconfirmation">LoTW</th>'; | ||||||
|  | 				} ?>
 | ||||||
|  | 				<?php if ($this->session->userdata('user_eqsl_name') != ""){ | ||||||
|  | 					echo '<th class="eqslconfirmation">eQSL</th>'; | ||||||
|  | 				} ?>
 | ||||||
| 				<th>QSL Msg</th> | 				<th>QSL Msg</th> | ||||||
| 				<th>DXCC</th> | 				<th>DXCC</th> | ||||||
| 				<th>State</th> | 				<th>State</th> | ||||||
|  |  | ||||||
|  | @ -26,13 +26,20 @@ function updateRow(qso) { | ||||||
| 	cells.eq(c++).text(qso.dxRefs); | 	cells.eq(c++).text(qso.dxRefs); | ||||||
| 	cells.eq(c++).text(qso.name); | 	cells.eq(c++).text(qso.name); | ||||||
| 	cells.eq(c++).text(qso.qslVia); | 	cells.eq(c++).text(qso.qslVia); | ||||||
| 	cells.eq(c++).text(qso.qslSent); | 	cells.eq(c++).html(qso.qsl); | ||||||
| 	cells.eq(c++).text(qso.qslReceived); | 	if ($(".lotwconfirmation")[0]){ | ||||||
|  | 		cells.eq(c++).html(qso.lotw); | ||||||
|  | 	} | ||||||
|  | 	if ($(".eqslconfirmation")[0]){ | ||||||
|  | 		cells.eq(c++).html(qso.eqsl); | ||||||
|  | 	} | ||||||
| 	cells.eq(c++).text(qso.qslMessage); | 	cells.eq(c++).text(qso.qslMessage); | ||||||
| 	cells.eq(c++).text(qso.dxcc); | 	cells.eq(c++).text(qso.dxcc); | ||||||
| 	cells.eq(c++).text(qso.state); | 	cells.eq(c++).text(qso.state); | ||||||
| 	cells.eq(c++).text(qso.cqzone); | 	cells.eq(c++).text(qso.cqzone); | ||||||
| 	cells.eq(c++).text(qso.iota); | 	cells.eq(c++).text(qso.iota); | ||||||
|  | 
 | ||||||
|  | 	$('[data-toggle="tooltip"]').tooltip(); | ||||||
| 	return row; | 	return row; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -61,33 +68,38 @@ function loadQSOTable(rows) { | ||||||
| 	for (i = 0; i < rows.length; i++) { | 	for (i = 0; i < rows.length; i++) { | ||||||
| 		let qso = rows[i]; | 		let qso = rows[i]; | ||||||
| 
 | 
 | ||||||
| 		var data = [ | 		var data = []; | ||||||
| 			'<div class="form-check"><input class="form-check-input" type="checkbox" /></div>', | 		data.push('<div class="form-check"><input class="form-check-input" type="checkbox" /></div>'); | ||||||
| 			qso.qsoDateTime, | 		data.push(qso.qsoDateTime); | ||||||
| 			qso.de, | 		data.push(qso.de); | ||||||
| 			'<a id="edit_qso" href="javascript:displayQso('+qso.qsoID+')">'+qso.dx+'</a>', | 		data.push('<a id="edit_qso" href="javascript:displayQso('+qso.qsoID+')">'+qso.dx+'</a>'); | ||||||
| 			qso.mode, | 		data.push(qso.mode); | ||||||
| 			qso.rstS, | 		data.push(qso.rstS); | ||||||
| 			qso.rstR, | 		data.push(qso.rstR); | ||||||
| 			qso.band, | 		data.push(qso.band); | ||||||
| 			qso.deRefs, | 		data.push(qso.deRefs); | ||||||
| 			qso.dxRefs, | 		data.push(qso.dxRefs); | ||||||
| 			qso.name, | 		data.push(qso.name); | ||||||
| 			qso.qslVia, | 		data.push(qso.qslVia); | ||||||
| 			qso.qslSent, | 		data.push(qso.qsl); | ||||||
| 			qso.qslReceived, | 		if ($(".lotwconfirmation")[0]){ | ||||||
| 			qso.qslMessage, | 			data.push(qso.lotw); | ||||||
| 			qso.dxcc+(qso.end == null ? '' : ' <span class="badge badge-danger">Deleted DXCC</span>'), | 		} | ||||||
| 			qso.state, | 		if ($(".eqslconfirmation")[0]){ | ||||||
| 			qso.cqzone, | 			data.push(qso.eqsl); | ||||||
| 			qso.iota, | 		} | ||||||
| 		]; | 		data.push(qso.qslMessage); | ||||||
|  | 		data.push(qso.dxcc+(qso.end == null ? '' : ' <span class="badge badge-danger">Deleted DXCC</span>')); | ||||||
|  | 		data.push(qso.state); | ||||||
|  | 		data.push(qso.cqzone); | ||||||
|  | 		data.push(qso.iota); | ||||||
| 		 | 		 | ||||||
| 		let createdRow = table.row.add(data).index(); | 		let createdRow = table.row.add(data).index(); | ||||||
| 		table.rows(createdRow).nodes().to$().data('qsoID', qso.qsoID); | 		table.rows(createdRow).nodes().to$().data('qsoID', qso.qsoID); | ||||||
| 		table.row(createdRow).node().id = 'qsoID-' + qso.qsoID; | 		table.row(createdRow).node().id = 'qsoID-' + qso.qsoID; | ||||||
| 	} | 	} | ||||||
| 	table.draw(); | 	table.draw(); | ||||||
|  | 	$('[data-toggle="tooltip"]').tooltip(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function processNextCallbookItem() { | function processNextCallbookItem() { | ||||||
|  |  | ||||||
|  | @ -55,6 +55,10 @@ class QSO | ||||||
| 	private string $QSLSentVia; | 	private string $QSLSentVia; | ||||||
| 	private string $QSLVia; | 	private string $QSLVia; | ||||||
| 	private ?DateTime $end; | 	private ?DateTime $end; | ||||||
|  | 	/** QSL **/ | ||||||
|  | 	private string $qsl; | ||||||
|  | 	private string $lotw; | ||||||
|  | 	private string $eqsl; | ||||||
| 
 | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * @param array $data Does no validation, it's assumed to be a row from the database in array format | 	 * @param array $data Does no validation, it's assumed to be a row from the database in array format | ||||||
|  | @ -164,6 +168,20 @@ class QSO | ||||||
| 		$this->QSLSentVia = ($data['COL_QSL_SENT_VIA'] === null) ? '' : $data['COL_QSL_SENT_VIA']; | 		$this->QSLSentVia = ($data['COL_QSL_SENT_VIA'] === null) ? '' : $data['COL_QSL_SENT_VIA']; | ||||||
| 		$this->QSLVia = ($data['COL_QSL_VIA'] === null) ? '' : $data['COL_QSL_VIA']; | 		$this->QSLVia = ($data['COL_QSL_VIA'] === null) ? '' : $data['COL_QSL_VIA']; | ||||||
| 
 | 
 | ||||||
|  | 		$CI =& get_instance();  | ||||||
|  | 		// Get Date format
 | ||||||
|  | 		if($CI->session->userdata('user_date_format')) { | ||||||
|  | 			// If Logged in and session exists
 | ||||||
|  | 			$custom_date_format = $CI->session->userdata('user_date_format'); | ||||||
|  | 		} else { | ||||||
|  | 			// Get Default date format from /config/cloudlog.php
 | ||||||
|  | 			$custom_date_format = $CI->config->item('qso_date_format'); | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		$this->qsl = $this->getQslString($data, $custom_date_format); | ||||||
|  | 		$this->lotw = $this->getLotwString($data, $custom_date_format); | ||||||
|  | 		$this->eqsl = $this->getEqslString($data, $custom_date_format); | ||||||
|  | 		 | ||||||
| 		$this->cqzone = ($data['COL_CQZ'] === null) ? '' : $data['COL_CQZ']; | 		$this->cqzone = ($data['COL_CQZ'] === null) ? '' : $data['COL_CQZ']; | ||||||
| 		$this->state = ($data['COL_STATE'] === null) ? '' :$data['COL_STATE']; | 		$this->state = ($data['COL_STATE'] === null) ? '' :$data['COL_STATE']; | ||||||
| 		$this->dxcc = ($data['name'] === null) ? '- NONE -' :$data['name']; | 		$this->dxcc = ($data['name'] === null) ? '- NONE -' :$data['name']; | ||||||
|  | @ -175,6 +193,210 @@ class QSO | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|  | 	/** | ||||||
|  | 	 * @return string | ||||||
|  | 	 */ | ||||||
|  | 	function getQSLString($data, $custom_date_format): string | ||||||
|  | 	{ | ||||||
|  | 		$CI =& get_instance();  | ||||||
|  | 		// Load language files
 | ||||||
|  | 		$CI->lang->load(array( | ||||||
|  | 			'contesting', | ||||||
|  | 			'qslcard', | ||||||
|  | 			'lotw', | ||||||
|  | 			'eqsl', | ||||||
|  | 			'qso' | ||||||
|  | 		)); | ||||||
|  | 
 | ||||||
|  | 		$qslstring = '<span '; | ||||||
|  | 
 | ||||||
|  | 		if ($data['COL_QSL_SENT'] != "N") { | ||||||
|  | 			switch ($data['COL_QSL_SENT']) { | ||||||
|  | 			case "Y": | ||||||
|  | 				$qslstring .= "class=\"qsl-green\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_sent'); | ||||||
|  | 				break; | ||||||
|  | 			case "Q": | ||||||
|  | 				$qslstring .= "class=\"qsl-yellow\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_queued'); | ||||||
|  | 				break; | ||||||
|  | 			case "R": | ||||||
|  | 				$qslstring .= "class=\"qsl-yellow\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_requested'); | ||||||
|  | 				break; | ||||||
|  | 			case "I": | ||||||
|  | 				$qslstring .= "class=\"qsl-grey\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_invalid_ignore'); | ||||||
|  | 				break; | ||||||
|  | 			default: | ||||||
|  | 			$qslstring .= "class=\"qsl-red"; | ||||||
|  | 				break; | ||||||
|  | 			} | ||||||
|  | 			if ($data['COL_QSLSDATE'] != null) { | ||||||
|  | 				$timestamp = strtotime($data['COL_QSLSDATE']);  | ||||||
|  | 				$qslstring .= " "  .($timestamp != '' ? date($custom_date_format, $timestamp) : '');  | ||||||
|  | 			} | ||||||
|  | 		} else {  | ||||||
|  | 			$qslstring .= "class=\"qsl-red";  | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		if ($data['COL_QSL_SENT_VIA'] != "") { | ||||||
|  | 			switch ($data['COL_QSL_SENT_VIA']) { | ||||||
|  | 				case "B": | ||||||
|  | 					$qslstring .= " (" . $CI->lang->line('general_word_qslcard_bureau') . ")"; | ||||||
|  | 					break; | ||||||
|  | 				case "D": | ||||||
|  | 				$qslstring .= " (".$CI->lang->line('general_word_qslcard_direct').")"; | ||||||
|  | 					break; | ||||||
|  | 				case "M": | ||||||
|  | 				$qslstring .= " (".$CI->lang->line('general_word_qslcard_via').": ".($data['COL_QSL_VIA'] !="" ? $data['COL_QSL_VIA']:"n/a").")"; | ||||||
|  | 					break; | ||||||
|  | 				case "E": | ||||||
|  | 				$qslstring .= " (".$CI->lang->line('general_word_qslcard_electronic').")"; | ||||||
|  | 					break; | ||||||
|  | 			} | ||||||
|  | 		}  | ||||||
|  | 
 | ||||||
|  | 			$qslstring .= '">▲</span><span '; | ||||||
|  | 
 | ||||||
|  | 			if ($data['COL_QSL_RCVD'] != "N") { | ||||||
|  | 				switch ($data['COL_QSL_RCVD']) { | ||||||
|  | 					case "Y": | ||||||
|  | 						$qslstring .= "class=\"qsl-green\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_received'); | ||||||
|  | 					break; | ||||||
|  | 					case "Q": | ||||||
|  | 						$qslstring .= "class=\"qsl-yellow\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_queued'); | ||||||
|  | 					break; | ||||||
|  | 					case "R": | ||||||
|  | 						$qslstring .= "class=\"qsl-yellow\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_requested'); | ||||||
|  | 					break; | ||||||
|  | 					case "I": | ||||||
|  | 						$qslstring .= "class=\"qsl-grey\" data-toggle=\"tooltip\" data-original-title=\"".$CI->lang->line('general_word_invalid_ignore'); | ||||||
|  | 					break; | ||||||
|  | 					default: | ||||||
|  | 					$qslstring .= "class=\"qsl-red"; | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 				if ($data['COL_QSLRDATE'] != null) { | ||||||
|  | 					$timestamp = strtotime($data['COL_QSLRDATE']);  | ||||||
|  | 					$qslstring .= " "  .($timestamp != '' ? date($custom_date_format, $timestamp) : '');  | ||||||
|  | 				} | ||||||
|  | 			} else {  | ||||||
|  | 			$qslstring .= "class=\"qsl-red"; } | ||||||
|  | 			if ($data['COL_QSL_RCVD_VIA'] != "") { | ||||||
|  | 				switch ($data['COL_QSL_RCVD_VIA']) { | ||||||
|  | 					case "B": | ||||||
|  | 					$qslstring .= " (".$CI->lang->line('general_word_qslcard_bureau').")"; | ||||||
|  | 						break; | ||||||
|  | 					case "D": | ||||||
|  | 					$qslstring .= " (".$CI->lang->line('general_word_qslcard_direct').")"; | ||||||
|  | 						break; | ||||||
|  | 					case "M": | ||||||
|  | 					$qslstring .= " (Manager)"; | ||||||
|  | 						break; | ||||||
|  | 					case "E": | ||||||
|  | 					$qslstring .= " (".$CI->lang->line('general_word_qslcard_electronic').")"; | ||||||
|  | 						break; | ||||||
|  | 				} | ||||||
|  | 			}  | ||||||
|  | 			$qslstring .= '">▼</span>'; | ||||||
|  | 		return $qslstring; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	/** | ||||||
|  | 	 * @return string | ||||||
|  | 	 */ | ||||||
|  | 	function getLotwString($data, $custom_date_format): string | ||||||
|  | 	{ | ||||||
|  | 		$CI =& get_instance();  | ||||||
|  | 		// Load language files
 | ||||||
|  | 		$CI->lang->load(array( | ||||||
|  | 			'contesting', | ||||||
|  | 			'qslcard', | ||||||
|  | 			'lotw', | ||||||
|  | 			'eqsl', | ||||||
|  | 			'qso' | ||||||
|  | 		)); | ||||||
|  | 
 | ||||||
|  | 		$lotwstring = '<span '; | ||||||
|  | 
 | ||||||
|  | 		if ($data['COL_LOTW_QSL_SENT'] == "Y") {  | ||||||
|  | 			$lotwstring .= "data-original-title=\"" . $CI->lang->line('lotw_short')." ".$CI->lang->line('general_word_sent');  | ||||||
|  | 			if ($data['COL_LOTW_QSLSDATE'] != null) {  | ||||||
|  | 				$timestamp = strtotime($data['COL_LOTW_QSLSDATE']);  | ||||||
|  | 				$lotwstring .= " ". ($timestamp != '' ? date($custom_date_format, $timestamp) : '');  | ||||||
|  | 			}  | ||||||
|  | 			$lotwstring .= "\" data-toggle=\"tooltip\"";  | ||||||
|  | 		}  | ||||||
|  | 
 | ||||||
|  | 		$lotwstring .= ' class="lotw-' . (($data['COL_LOTW_QSL_SENT']=='Y') ? 'green' : 'red') . '">▲</span>'; | ||||||
|  | 		$lotwstring .= '<span '; | ||||||
|  | 
 | ||||||
|  | 		if ($data['COL_LOTW_QSL_RCVD'] == "Y") {  | ||||||
|  | 			$lotwstring .= "data-original-title=\"". $CI->lang->line('lotw_short') ." ". $CI->lang->line('general_word_received');  | ||||||
|  | 		 | ||||||
|  | 			if ($data['COL_LOTW_QSLRDATE'] != null) {  | ||||||
|  | 				$timestamp = strtotime($data['COL_LOTW_QSLRDATE']);  | ||||||
|  | 				$lotwstring .=  " ". ($timestamp != '' ? date($custom_date_format, $timestamp) : '');  | ||||||
|  | 			}  | ||||||
|  | 			 | ||||||
|  | 			$lotwstring .= "\" data-toggle=\"tooltip\"";  | ||||||
|  | 		}  | ||||||
|  | 
 | ||||||
|  | 		$lotwstring .= ' class="lotw-' . (($data['COL_LOTW_QSL_RCVD']=='Y') ? 'green':'red') . '">▼</span>'; | ||||||
|  | 
 | ||||||
|  | 		return $lotwstring; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @return string | ||||||
|  | 	 */ | ||||||
|  | 	function getEqslString($data, $custom_date_format): string | ||||||
|  | 	{ | ||||||
|  | 		$CI =& get_instance();  | ||||||
|  | 		// Load language files
 | ||||||
|  | 		$CI->lang->load(array( | ||||||
|  | 			'contesting', | ||||||
|  | 			'qslcard', | ||||||
|  | 			'lotw', | ||||||
|  | 			'eqsl', | ||||||
|  | 			'qso' | ||||||
|  | 		)); | ||||||
|  | 
 | ||||||
|  | 		$eqslstring = '<span '; | ||||||
|  | 
 | ||||||
|  | 		if ($data['COL_EQSL_QSL_SENT'] == "Y") {  | ||||||
|  | 			$eqslstring .= "data-original-title=\"".$CI->lang->line('eqsl_short')." ".$CI->lang->line('general_word_sent');  | ||||||
|  | 			 | ||||||
|  | 			if ($data['COL_EQSL_QSLSDATE'] != null) {  | ||||||
|  | 				$timestamp = strtotime($data['COL_EQSL_QSLSDATE']);  | ||||||
|  | 				$eqslstring .=  " ".($timestamp!=''?date($custom_date_format, $timestamp):'');  | ||||||
|  | 			}  | ||||||
|  | 			 | ||||||
|  | 			$eqslstring .= "\" data-toggle=\"tooltip\"";  | ||||||
|  | 		}  | ||||||
|  | 		 | ||||||
|  | 		$eqslstring .= ' class="eqsl-' . (($data['COL_EQSL_QSL_SENT'] =='Y') ? 'green':'red') . '">▲</span><span'; | ||||||
|  | 
 | ||||||
|  | 		if ($data['COL_EQSL_QSL_RCVD'] == "Y") {  | ||||||
|  | 			$eqslstring .= "data-original-title=\"".$CI->lang->line('eqsl_short')." ".$CI->lang->line('general_word_received');  | ||||||
|  | 			 | ||||||
|  | 			if ($data['COL_EQSL_QSLRDATE'] != null) {  | ||||||
|  | 				$timestamp = strtotime($data['COL_EQSL_QSLRDATE']);  | ||||||
|  | 				$eqslstring .= " ".($timestamp!=''?date($custom_date_format, $timestamp):'');  | ||||||
|  | 			}  | ||||||
|  | 			$eqslstring .= "\" data-toggle=\"tooltip\"";  | ||||||
|  | 		}  | ||||||
|  | 
 | ||||||
|  | 		$eqslstring .= ' class="eqsl-' . (($data['COL_EQSL_QSL_RCVD'] =='Y')?'green':'red') . '">'; | ||||||
|  | 
 | ||||||
|  | 		if($data['COL_EQSL_QSL_RCVD'] =='Y') { | ||||||
|  | 			$eqslstring .= '<a class="eqsl-green" href="' . site_url("eqsl/image/".$data['COL_PRIMARY_KEY']) . '" data-fancybox="images" data-width="528" data-height="336">▼</a>'; | ||||||
|  | 		} else { | ||||||
|  | 			$eqslstring .= '▼'; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		$eqslstring .= '</span>'; | ||||||
|  | 
 | ||||||
|  | 		return $eqslstring; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * @return string | 	 * @return string | ||||||
| 	 */ | 	 */ | ||||||
|  | @ -471,6 +693,30 @@ class QSO | ||||||
| 		return $this->QSLSentVia; | 		return $this->QSLSentVia; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @return string | ||||||
|  | 	 */ | ||||||
|  | 	public function getqsl(): string | ||||||
|  | 	{ | ||||||
|  | 		return $this->qsl; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @return string | ||||||
|  | 	 */ | ||||||
|  | 	public function getlotw(): string | ||||||
|  | 	{ | ||||||
|  | 		return $this->lotw; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @return string | ||||||
|  | 	 */ | ||||||
|  | 	public function geteqsl(): string | ||||||
|  | 	{ | ||||||
|  | 		return $this->eqsl; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * @return string | 	 * @return string | ||||||
| 	 */ | 	 */ | ||||||
|  | @ -513,8 +759,9 @@ class QSO | ||||||
| 			'deRefs' => $this->getFormattedDeRefs(), | 			'deRefs' => $this->getFormattedDeRefs(), | ||||||
| 			'dxRefs' => $this->getFormattedDxRefs(), | 			'dxRefs' => $this->getFormattedDxRefs(), | ||||||
| 			'qslVia' => $this->QSLVia, | 			'qslVia' => $this->QSLVia, | ||||||
| 			'qslSent' => $this->getFormattedQSLSent(), | 			'qsl' => $this->getqsl(), | ||||||
| 			'qslReceived' => $this->getFormattedQSLReceived(), | 			'lotw' => $this->getlotw(), | ||||||
|  | 			'eqsl' => $this->geteqsl(), | ||||||
| 			'qslMessage' => $this->getQSLMsg(), | 			'qslMessage' => $this->getQSLMsg(), | ||||||
| 			'name' => $this->getName(), | 			'name' => $this->getName(), | ||||||
| 			'dxcc' => $this->getDXCC(), | 			'dxcc' => $this->getDXCC(), | ||||||
|  |  | ||||||
		正在加载…
	
		在新工单中引用