qsoID = $data['COL_PRIMARY_KEY']; $this->qsoDateTime = DateTime::createFromFormat("Y-m-d H:i:s", $data['COL_TIME_ON'], new DateTimeZone("UTC")); $this->de = $data['COL_STATION_CALLSIGN']; $this->dx = $data['COL_CALL']; $this->mode = $data['COL_MODE'] ?? ''; $this->submode = $data['COL_SUBMODE'] ?? ''; $this->band = $data['COL_BAND']; $this->bandRX = $data['COL_BAND_RX'] ?? ''; $this->rstR = $data['COL_RST_RCVD']; $this->rstS = $data['COL_RST_SENT']; $this->propagationMode = $data['COL_PROP_MODE'] ?? ''; $this->satelliteMode = $data['COL_SAT_MODE'] ?? ''; $this->satelliteName = $data['COL_SAT_NAME'] ?? ''; $this->name = $data['COL_NAME'] ?? ''; $this->email = $data['COL_EMAIL'] ?? ''; $this->address = $data['COL_ADDRESS'] ?? ''; $this->deGridsquare = $data['COL_MY_GRIDSQUARE'] ?? ''; $this->deIOTA = $data['COL_MY_IOTA'] ?? ''; $this->deSig = $data['COL_MY_SIG'] ?? ''; $this->deSigInfo = $data['COL_MY_SIG_INFO'] ?? ''; $this->deIOTAIslandID = $data['COL_MY_IOTA_ISLAND_ID'] ?? ''; $this->deSOTAReference = $data['COL_MY_SOTA_REF'] ?? ''; $this->deVUCCGridsquares = ($data['COL_MY_VUCC_GRIDS'] === null) ? [] : explode(",", $data['COL_MY_VUCC_GRIDS'] ?? ''); $this->dxGridsquare = $data['COL_GRIDSQUARE'] ?? ''; $this->dxIOTA = $data['COL_IOTA'] ?? ''; $this->dxSig = $data['COL_SIG'] ?? ''; $this->dxSigInfo = $data['COL_SIG_INFO'] ?? ''; $this->dxDARCDOK = $data['COL_DARC_DOK'] ?? ''; $this->dxSOTAReference = $data['COL_SOTA_REF'] ?? ''; $this->dxVUCCGridsquares = ($data['COL_VUCC_GRIDS'] === null) ? [] : explode(",", $data['COL_VUCC_GRIDS'] ?? ''); $this->QSLMsg = $data['COL_QSLMSG'] ?? ''; $this->QSLReceivedDate = ($data['COL_QSLRDATE'] === null) ? null : DateTime::createFromFormat("Y-m-d H:i:s", $data['COL_QSLRDATE'], new DateTimeZone('UTC')); $this->QSLReceived = ($data['COL_QSL_RCVD'] === null) ? '' : $data['COL_QSL_RCVD']; $this->QSLReceivedVia = ($data['COL_QSL_RCVD_VIA'] === null) ? '' : $data['COL_QSL_RCVD_VIA']; $this->QSLSentDate = ($data['COL_QSLSDATE'] === null) ? null : DateTime::createFromFormat("Y-m-d H:i:s", $data['COL_QSLSDATE'], new DateTimeZone('UTC')); $this->QSLSent = ($data['COL_QSL_SENT'] === null) ? '' : $data['COL_QSL_SENT']; $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->cqzone = ($data['COL_CQZ'] === null) ? '' : $data['COL_CQZ']; $this->state = ($data['COL_STATE'] === null) ? '' :$data['COL_STATE']; $this->dxcc = ($data['COL_COUNTRY'] === null) ? '' :$data['COL_COUNTRY']; $this->iota = ($data['COL_IOTA'] === null) ? '' :$data['COL_IOTA']; if (array_key_exists('end', $data)) { $this->end = ($data['end'] === null) ? null : DateTime::createFromFormat("Y-m-d", $data['end'], new DateTimeZone('UTC')); } else { $this->end = null; } } /** * @return string */ public function getQsoID(): string { return $this->qsoID; } /** * @return DateTime */ public function getQsoDateTime(): DateTime { return $this->qsoDateTime; } /** * @return string */ public function getDe(): string { return $this->de; } /** * @return string */ public function getDx(): string { return $this->dx; } /** * @return string */ public function getMode(): string { return $this->mode; } /** * @return string */ public function getSubmode(): string { return $this->submode; } /** * @return string */ public function getBand(): string { return $this->band; } /** * @return string */ public function getBandRX(): string { return $this->bandRX; } /** * @return string */ public function getRstR(): string { return $this->rstR; } /** * @return string */ public function getRstS(): string { return $this->rstS; } /** * @return string */ public function getPropagationMode(): string { return $this->propagationMode; } /** * @return string */ public function getSatelliteMode(): string { return $this->satelliteMode; } /** * @return string */ public function getSatelliteName(): string { return $this->satelliteName; } /** * @return string */ public function getName(): string { return $this->name; } /** * @return string */ public function getEmail(): string { return $this->email; } /** * @return string */ public function getAddress(): string { return $this->address; } /** * @return string */ public function getDeGridsquare(): string { return $this->deGridsquare; } /** * @return string */ public function getDeIOTA(): string { return $this->deIOTA; } /** * @return string */ public function getDeSig(): string { return $this->deSig; } /** * @return string */ public function getDeSigInfo(): string { return $this->deSigInfo; } /** * @return string */ public function getDeIOTAIslandID(): string { return $this->deIOTAIslandID; } /** * @return string */ public function getDeSOTAReference(): string { return $this->deSOTAReference; } /** * @return string[] */ public function getDeVUCCGridsquares(): array { return $this->deVUCCGridsquares; } /** * @return string */ public function getDxGridsquare(): string { return $this->dxGridsquare; } /** * @return string */ public function getDxIOTA(): string { return $this->dxIOTA; } /** * @return string */ public function getDxSig(): string { return $this->dxSig; } /** * @return string */ public function getDxSigInfo(): string { return $this->dxSigInfo; } /** * @return string */ public function getDxDARCDOK(): string { return $this->dxDARCDOK; } /** * @return string */ public function getDxSOTAReference(): string { return $this->dxSOTAReference; } /** * @return string[] */ public function getDxVUCCGridsquares(): array { return $this->dxVUCCGridsquares; } /** * @return string */ public function getQSLMsg(): string { return $this->QSLMsg; } /** * @return ?DateTime */ public function getQSLReceivedDate(): ?DateTime { return $this->QSLReceivedDate; } /** * @return string */ public function getQSLReceived(): string { return $this->QSLReceived; } /** * @return string */ public function getQSLReceivedVia(): string { return $this->QSLReceivedVia; } /** * @return ?DateTime */ public function getQSLSentDate(): ?DateTime { return $this->QSLSentDate; } /** * @return string */ public function getQSLSent(): string { return $this->QSLSent; } /** * @return string */ public function getQSLSentVia(): string { return $this->QSLSentVia; } /** * @return string */ public function getQSLVia(): string { return $this->QSLVia; } public function getDXCC(): string { return $this->dxcc; } public function getCqzone(): string { return $this->cqzone; } public function getState(): string { return $this->state; } public function getIOTA(): string { return $this->iota; } public function toArray(): array { return [ 'qsoID' => $this->qsoID, 'qsoDateTime' => $this->qsoDateTime->format("Y-m-d H:i"), 'de' => $this->de, 'dx' => $this->dx, 'mode' => $this->getFormattedMode(), 'rstS' => $this->rstS, 'rstR' => $this->rstR, 'band' => $this->getFormattedBand(), 'deRefs' => $this->getFormattedDeRefs(), 'dxRefs' => $this->getFormattedDxRefs(), 'qslVia' => $this->QSLVia, 'qslSent' => $this->getFormattedQSLSent(), 'qslReceived' => $this->getFormattedQSLReceived(), 'qslMessage' => $this->getQSLMsg(), 'name' => $this->getName(), 'dxcc' => $this->getDXCC(), 'state' => $this->getState(), 'cqzone' => $this->getCqzone(), 'iota' => $this->getIOTA(), 'end' => $this->end === null ? null : $this->end->format("Y-m-d"), ]; } private function getFormattedMode(): string { if ($this->submode !== '') { return $this->submode; } else { return $this->mode; } } private function getFormattedBand(): string { $label = ""; if ($this->propagationMode !== '') { $label .= $this->propagationMode; if ($this->satelliteName !== '') { $label .= " " . $this->satelliteName; if ($this->satelliteMode !== '') { $label .= " " . $this->satelliteMode; } } } $label .= " " . $this->band; if ($this->bandRX !== '' && $this->band !== '') { $label .= "/" . $this->bandRX; } return trim($label); } private function getFormattedDeRefs(): string { $refs = []; if ($this->deVUCCGridsquares !== []) { $refs[] = implode(",", $this->deVUCCGridsquares); } else { if ($this->deGridsquare !== '') { $refs[] = $this->deGridsquare; } } if ($this->deIOTA !== '') { if ($this->deIOTAIslandID !== '') { $refs[] = "IOTA:" . $this->deIOTA . "(" . $this->deIOTAIslandID . ")"; } else { $refs[] = "IOTA:" . $this->deIOTA; } } if ($this->deSOTAReference !== '') { $refs[] = "SOTA:" . $this->deSOTAReference; } if ($this->deSig !== '') { $refs[] = $this->deSig . ":" . $this->deSigInfo; } return trim(implode(" ", $refs)); } private function getFormattedDxRefs(): string { $refs = []; if ($this->dxVUCCGridsquares !== []) { $refs[] = implode(",", $this->dxVUCCGridsquares); } else if ($this->dxGridsquare !== '') { $refs[] = $this->dxGridsquare; } if ($this->dxSOTAReference !== '') { $refs[] = "SOTA:" . $this->dxSOTAReference; } if ($this->dxSig !== '') { $refs[] = $this->dxSig . ":" . $this->dxSigInfo; } if ($this->dxDARCDOK !== '') { $refs[] = "DOK:" . $this->dxDARCDOK; } return implode(" ", $refs); } private function getFormattedQSLSent(): string { $showVia = false; $label = []; if ($this->QSLSent === "Y") { if ($this->QSLSentDate !== null) { $label[] = $this->QSLSentDate->format("Y-m-d"); } else { $label[] = "Yes"; } $showVia = true; } else if ($this->QSLSent === "N") { $label[] = "No"; } else if ($this->QSLSent === "Q") { $label[] = "Queued"; if ($this->QSLSentDate !== null) { $label[] = $this->QSLSentDate->format("Y-m-d"); } $showVia = true; } else if ($this->QSLSent === "R") { $label[] = "Requested"; if ($this->QSLSentDate !== null) { $label[] = $this->QSLSentDate->format("Y-m-d"); } $showVia = true; } if ($showVia && $this->QSLSentVia !== '') { switch ($this->QSLSentVia) { case 'B': $label[] = "Bureau"; break; case 'D': $label[] = "Direct"; break; case 'E': $label[] = "Electronic"; break; case 'M': $label[] = "Manager"; break; } } return trim(implode(" ", $label)); } private function getFormattedQSLReceived(): string { $showVia = false; $label = []; if ($this->QSLReceived === "Y") { if ($this->QSLReceivedDate !== null) { $label[] = $this->QSLReceivedDate->format("Y-m-d"); } else { $label[] = "Yes"; } $showVia = true; } else if ($this->QSLReceived === "N") { $label[] = "No"; } else if ($this->QSLReceived === "Q") { $label[] = "Queued"; if ($this->QSLReceivedDate !== null) { $label[] = $this->QSLReceivedDate->format("Y-m-d"); } $showVia = true; } else if ($this->QSLReceived === "R") { $label[] = "Requested"; if ($this->QSLReceivedDate !== null) { $label[] = $this->QSLReceivedDate->format("Y-m-d"); } $showVia = true; } if ($showVia && $this->QSLReceivedVia !== '') { switch ($this->QSLReceivedVia) { case 'B': $label[] = "Bureau"; break; case 'D': $label[] = "Direct"; break; case 'E': $label[] = "Electronic"; break; case 'M': $label[] = "Manager"; break; } } return trim(implode(" ", $label)); } }