Fix ADIF export
* Fix ADIF format to specification * Export (almost) all ADIF fields from DB
这个提交包含在:
		
							父节点
							
								
									ceab35a0c5
								
							
						
					
					
						当前提交
						98c133e680
					
				
					共有  5 个文件被更改,包括 175 次插入 和 82 次删除
				
			
		| 
						 | 
				
			
			@ -3,13 +3,144 @@
 | 
			
		|||
class AdifHelper {
 | 
			
		||||
 | 
			
		||||
    public function getAdifLine($qso) {
 | 
			
		||||
        $line = "";
 | 
			
		||||
        $line .= $this->getAdifFieldLine("CALL", $qso->COL_CALL);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("BAND", $qso->COL_BAND);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("MODE", $qso->COL_MODE);
 | 
			
		||||
        $normalFields = array(
 | 
			
		||||
            'ADDRESS',
 | 
			
		||||
            'AGE',
 | 
			
		||||
            'A_INDEX',
 | 
			
		||||
            'ANT_AZ',
 | 
			
		||||
            'ANT_EL',
 | 
			
		||||
            'ANT_PATH',
 | 
			
		||||
            'ARRL_SECT',
 | 
			
		||||
            'AWARD_GRANTED',
 | 
			
		||||
            'AWARD_SUMMITED', // Typo in DB!
 | 
			
		||||
            'BAND',
 | 
			
		||||
            'BAND_RX',
 | 
			
		||||
            'BIOGRAPHY',
 | 
			
		||||
            'CALL',
 | 
			
		||||
            'CHECK',
 | 
			
		||||
            'CLASS',
 | 
			
		||||
            'CLUBLOG_QSO_UPLOAD_STATUS',
 | 
			
		||||
            'CNTY',
 | 
			
		||||
            'COMMENT',
 | 
			
		||||
            'CONT',
 | 
			
		||||
            'CONTACTED_OP',
 | 
			
		||||
            'CONTEST_ID',
 | 
			
		||||
            'COUNTRY',
 | 
			
		||||
            'CQZ',
 | 
			
		||||
            'CREDIT_GRANTED',
 | 
			
		||||
            'CREDIT_SUBMITTED',
 | 
			
		||||
            'DARC_DOK',
 | 
			
		||||
            'DISTANCE',
 | 
			
		||||
            'DXCC',
 | 
			
		||||
            'EMAIL',
 | 
			
		||||
            'EQ_CALL',
 | 
			
		||||
            'EQSL_QSL_RCVD',
 | 
			
		||||
            'EQSL_QSL_SENT',
 | 
			
		||||
            'EQSL_STATUS',
 | 
			
		||||
            'FISTS',
 | 
			
		||||
            'FISTS_CC',
 | 
			
		||||
            'FORCE_INIT',
 | 
			
		||||
            'GRIDSQUARE',
 | 
			
		||||
            'HEADING',
 | 
			
		||||
            'HRDLOG_QSO_UPLOAD_STATUS',
 | 
			
		||||
            'IOTA',
 | 
			
		||||
            'ITUZ',
 | 
			
		||||
            'K_INDEX',
 | 
			
		||||
            'LAT',
 | 
			
		||||
            'LON',
 | 
			
		||||
            'LOTW_QSL_RCVD',
 | 
			
		||||
            'LOTW_QSL_SENT',
 | 
			
		||||
            'LOTW_STATUS',
 | 
			
		||||
            'MAX_BURSTS',
 | 
			
		||||
            'MODE',
 | 
			
		||||
            'MS_SHOWER',
 | 
			
		||||
            'NAME',
 | 
			
		||||
            'NOTES',
 | 
			
		||||
            'NR_BURSTS',
 | 
			
		||||
            'NR_PINGS',
 | 
			
		||||
            'OPERATOR',
 | 
			
		||||
            'OWNER_CALLSIGN',
 | 
			
		||||
            'PFX',
 | 
			
		||||
            'PRECEDENCE',
 | 
			
		||||
            'PROP_MODE',
 | 
			
		||||
            'PUBLIC_KEY',
 | 
			
		||||
            'QRZCOM_QSO_UPLOAD_STATUS',
 | 
			
		||||
            'QSLMSG',
 | 
			
		||||
            'QSL_RCVD',
 | 
			
		||||
            'QSL_RCVD_VIA',
 | 
			
		||||
            'QSL_SENT',
 | 
			
		||||
            'QSL_SENT_VIA',
 | 
			
		||||
            'QSL_VIA',
 | 
			
		||||
            'QSO_COMPLETE',
 | 
			
		||||
            'QSO_RANDOM',
 | 
			
		||||
            'QTH',
 | 
			
		||||
            'REGION',
 | 
			
		||||
            'RIG',
 | 
			
		||||
            'RST_RCVD',
 | 
			
		||||
            'RST_SENT',
 | 
			
		||||
            'RX_PWR',
 | 
			
		||||
            'SAT_MODE',
 | 
			
		||||
            'SAT_NAME',
 | 
			
		||||
            'SFI',
 | 
			
		||||
            'SIG',
 | 
			
		||||
            'SIG_INFO',
 | 
			
		||||
            'SILENT_KEY',
 | 
			
		||||
            'SKCC',
 | 
			
		||||
            'SOTA_REF',
 | 
			
		||||
            'SRX',
 | 
			
		||||
            'SRX_STRING',
 | 
			
		||||
            'STATE',
 | 
			
		||||
            'STX',
 | 
			
		||||
            'STX_STRING',
 | 
			
		||||
            'SUBMODE',
 | 
			
		||||
            'SWL',
 | 
			
		||||
            'TEN_TEN',
 | 
			
		||||
            'TX_PWR',
 | 
			
		||||
            'UKSMG',
 | 
			
		||||
            'USACA_COUNTIES',
 | 
			
		||||
            'VUCC_GRIDS',
 | 
			
		||||
            'WEB',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        if ($qso->COL_SUBMODE) {
 | 
			
		||||
            $line .= $this->getAdifFieldLine("SUBMODE", $qso->COL_SUBMODE);
 | 
			
		||||
        $dateFields = array(
 | 
			
		||||
            'EQSL_QSLRDATE',
 | 
			
		||||
            'EQSL_QSLSDATE',
 | 
			
		||||
            'LOTW_QSLRDATE',
 | 
			
		||||
            'LOTW_QSLSDATE',
 | 
			
		||||
            'QSLRDATE',
 | 
			
		||||
            'QSLSDATE',
 | 
			
		||||
            'CLUBLOG_QSO_UPLOAD_DATE',
 | 
			
		||||
            'HRDLOG_QSO_UPLOAD_DATE',
 | 
			
		||||
            'QRZCOM_QSO_UPLOAD_DATE',
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
            Missing:
 | 
			
		||||
            USER_DEFINED_0
 | 
			
		||||
            USER_DEFINED_1
 | 
			
		||||
            USER_DEFINED_2
 | 
			
		||||
            USER_DEFINED_3
 | 
			
		||||
            USER_DEFINED_4
 | 
			
		||||
            USER_DEFINED_5
 | 
			
		||||
            USER_DEFINED_6
 | 
			
		||||
            USER_DEFINED_7
 | 
			
		||||
            USER_DEFINED_8
 | 
			
		||||
            USER_DEFINED_9
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
        // Build ADIF fields
 | 
			
		||||
 | 
			
		||||
        $line = "";
 | 
			
		||||
        foreach ($normalFields as $field) {
 | 
			
		||||
            $line .= $this->getAdifFieldLine($field, $qso->{'COL_' . $field});
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        foreach ($dateFields as $field) {
 | 
			
		||||
            if ($qso->{'COL_' . $field}) {
 | 
			
		||||
                $date = strtotime($qso->{'COL_' . $field});
 | 
			
		||||
                $date = date('Ymd', $date);
 | 
			
		||||
                $line .= $this->getAdifFieldLine($field, $date);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($qso->COL_FREQ != 0) {
 | 
			
		||||
| 
						 | 
				
			
			@ -22,59 +153,23 @@ class AdifHelper {
 | 
			
		|||
            $line .= $this->getAdifFieldLine("FREQ_RX", $freq_rx_in_mhz);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ($qso->COL_BAND_RX) {
 | 
			
		||||
            $line .= $this->getAdifFieldLine("BAND_RX", $qso->COL_BAND_RX);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $date_on = strtotime($qso->COL_TIME_ON);
 | 
			
		||||
        $new_date = date('Ymd', $date_on);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("QSO_DATE", $new_date);
 | 
			
		||||
        $date_on = date('Ymd', $date_on);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("QSO_DATE", $date_on);
 | 
			
		||||
 | 
			
		||||
        $time_on = strtotime($qso->COL_TIME_ON);
 | 
			
		||||
        $new_on = date('His', $time_on);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("TIME_ON", $new_on);
 | 
			
		||||
        $time_on = date('His', $time_on);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("TIME_ON", $time_on);
 | 
			
		||||
 | 
			
		||||
        $date_off = strtotime($qso->COL_TIME_OFF);
 | 
			
		||||
        $date_off = date('Ymd', $date_off);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("QSO_DATE_OFF", $date_off);
 | 
			
		||||
 | 
			
		||||
        $time_off = strtotime($qso->COL_TIME_OFF);
 | 
			
		||||
        $new_off = date('His', $time_off);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("TIME_OFF", $new_off);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("RST_RCVD", $qso->COL_RST_RCVD);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("RST_SENT", $qso->COL_RST_SENT);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("QSL_RCVD", $qso->COL_QSL_RCVD);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("QSL_SENT", $qso->COL_QSL_SENT);
 | 
			
		||||
 | 
			
		||||
        if ($qso->COL_QSL_VIA) {
 | 
			
		||||
            $line .= $this->getAdifFieldLine("QSL_VIA", $qso->COL_QSL_VIA);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("COUNTRY", $qso->COL_COUNTRY);
 | 
			
		||||
 | 
			
		||||
        if ($qso->COL_VUCC_GRIDS != "") {
 | 
			
		||||
            $line .= $this->getAdifFieldLine("VUCC_GRIDS", $qso->COL_VUCC_GRIDS);
 | 
			
		||||
        }
 | 
			
		||||
        if ($qso->COL_VUCC_GRIDS == "" && $qso->COL_GRIDSQUARE != "") {
 | 
			
		||||
            $line .= $this->getAdifFieldLine("GRIDSQUARE", $qso->COL_GRIDSQUARE);
 | 
			
		||||
        }
 | 
			
		||||
        if ($qso->COL_SAT_NAME) {
 | 
			
		||||
            if ($qso->COL_SAT_MODE != 0 || $qso->COL_SAT_MODE !="") {
 | 
			
		||||
                $line .= $this->getAdifFieldLine("SAT_MODE", $qso->COL_SAT_MODE);
 | 
			
		||||
                $line .= $this->getAdifFieldLine("SAT_NAME", $qso->COL_SAT_NAME);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("PROP_MODE", $qso->COL_PROP_MODE);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("NAME", $qso->COL_NAME);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("STATE", $qso->COL_STATE);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("SOTA_REF", $qso->COL_SOTA_REF);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("OPERATOR", $qso->COL_OPERATOR);
 | 
			
		||||
        $time_off = date('His', $time_off);
 | 
			
		||||
        $line .= $this->getAdifFieldLine("TIME_OFF", $time_off);
 | 
			
		||||
 | 
			
		||||
        // "MY" information
 | 
			
		||||
        $line .= $this->getAdifFieldLine("STATION_CALLSIGN", $qso->station_callsign);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("MY_CITY", $qso->station_city);
 | 
			
		||||
| 
						 | 
				
			
			@ -85,8 +180,7 @@ class AdifHelper {
 | 
			
		|||
 | 
			
		||||
        if (strpos($qso->station_gridsquare, ',') !== false ) {
 | 
			
		||||
            $line .= $this->getAdifFieldLine("MY_VUCC_GRIDS", $qso->station_gridsquare);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
        } else {
 | 
			
		||||
            $line .= $this->getAdifFieldLine("MY_GRIDSQUARE", $qso->station_gridsquare);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -100,38 +194,33 @@ class AdifHelper {
 | 
			
		|||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("MY_CNTY", $qso->station_cnty);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("MY_STATE", $qso->COL_MY_STATE);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("STX", $qso->COL_STX);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("STX_STRING", $qso->COL_STX_STRING);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("SRX", $qso->COL_SRX);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("SRX_STRING", $qso->COL_SRX_STRING);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("CONTEST_ID", $qso->COL_CONTEST_ID);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("TX_PWR", $qso->COL_TX_PWR);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("COMMENT", $qso->COL_COMMENT);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("MY_SIG", $qso->station_sig);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("MY_SIG_INFO", $qso->station_sig_info);
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("SIG", $qso->COL_SIG);
 | 
			
		||||
        /*
 | 
			
		||||
            Missing:
 | 
			
		||||
            MY_ANTENNA
 | 
			
		||||
            MY_FISTS
 | 
			
		||||
            MY_IOTA_ISLAND_ID
 | 
			
		||||
            MY_LAT
 | 
			
		||||
            MY_LON
 | 
			
		||||
            MY_NAME
 | 
			
		||||
            MY_POSTAL_CODE
 | 
			
		||||
            MY_RIG
 | 
			
		||||
            MY_STATE
 | 
			
		||||
            MY_STREET
 | 
			
		||||
            MY_USACA_COUNTIES
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
        $line .= $this->getAdifFieldLine("SIG_INFO", $qso->COL_SIG_INFO);
 | 
			
		||||
 | 
			
		||||
        $line .= "<eor>\r\n";
 | 
			
		||||
        $line .= "<eor>\r\n\r\n";
 | 
			
		||||
 | 
			
		||||
        return $line;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function getAdifFieldLine($adifcolumn, $dbvalue) {
 | 
			
		||||
        if ($dbvalue != "") {
 | 
			
		||||
            return "<" . $adifcolumn . ":" . mb_strlen($dbvalue, "UTF-8") . ">" . $dbvalue;
 | 
			
		||||
        if ($dbvalue !== "" && $dbvalue !== null && $dbvalue !== 0) {
 | 
			
		||||
            return "<" . $adifcolumn . ":" . mb_strlen($dbvalue, "UTF-8") . ">" . $dbvalue . "\r\n";
 | 
			
		||||
        } else {
 | 
			
		||||
            return "";
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
<ADIF_VERS:5>3.1.0
 | 
			
		||||
Cloudlog ADIF export
 | 
			
		||||
<ADIF_VER:5>3.1.2
 | 
			
		||||
<PROGRAMID:<?php echo strlen($this->config->item('app_name')); ?>><?php echo $this->config->item('app_name')."\r\n"; ?>
 | 
			
		||||
<PROGRAMVERSION:<?php echo strlen('Version ' . $this->config->item('app_version')); ?>>Version <?php echo $this->config->item('app_version')."\r\n"; ?>
 | 
			
		||||
<EOH>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,8 @@
 | 
			
		|||
	header('Content-Type: text/plain; charset=utf-8');
 | 
			
		||||
	header('Content-Disposition: attachment; filename="'.$this->session->userdata('user_callsign').'-'.date('dmY-Hi').'.adi"')
 | 
			
		||||
?>
 | 
			
		||||
<ADIF_VERS:5>3.1.0
 | 
			
		||||
Cloudlog ADIF export
 | 
			
		||||
<ADIF_VER:5>3.1.2
 | 
			
		||||
<PROGRAMID:<?php echo strlen($this->config->item('app_name')); ?>><?php echo $this->config->item('app_name')."\r\n"; ?>
 | 
			
		||||
<PROGRAMVERSION:<?php echo strlen('Version ' . $this->config->item('app_version')); ?>>Version <?php echo $this->config->item('app_version')."\r\n"; ?>
 | 
			
		||||
<EOH>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,8 @@
 | 
			
		|||
	header('Content-Type: text/plain; charset=utf-8');
 | 
			
		||||
	header('Content-Disposition: attachment; filename="'.$this->session->userdata('user_callsign').'-'.date('dmY-Hi').'.adi"')
 | 
			
		||||
?>
 | 
			
		||||
<ADIF_VERS:5>3.1.0
 | 
			
		||||
Cloudlog ADIF export
 | 
			
		||||
<ADIF_VER:5>3.1.2
 | 
			
		||||
<PROGRAMID:<?php echo strlen($this->config->item('app_name')); ?>><?php echo $this->config->item('app_name')."\r\n"; ?>
 | 
			
		||||
<PROGRAMVERSION:<?php echo strlen('Version ' . $this->config->item('app_version')); ?>>Version <?php echo $this->config->item('app_version')."\r\n"; ?>
 | 
			
		||||
<EOH>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
<ADIF_VERS:5>3.1.0
 | 
			
		||||
Cloudlog ADIF export
 | 
			
		||||
<ADIF_VER:5>3.1.2
 | 
			
		||||
<PROGRAMID:<?php echo strlen($this->config->item('app_name')); ?>><?php echo $this->config->item('app_name')."\n"; ?>
 | 
			
		||||
<PROGRAMVERSION:<?php echo strlen($this->config->item('app_version')); ?>>Version <?php echo $this->config->item('app_version')."\n"; ?>
 | 
			
		||||
<EOH>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		正在加载…
	
		在新工单中引用