163 行
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			163 行
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| class Workabledxcc_model extends CI_Model
 | |
| {
 | |
| 
 | |
|     public function GetThisWeek()
 | |
|     {
 | |
| 		$json = file_get_contents($this->optionslib->get_option('dxped_url'));
 | |
| 
 | |
|         // Step 2: Convert the JSON data to an array.
 | |
|         $data = json_decode($json, true);
 | |
| 
 | |
|         // Step 3: Create a new array to hold the records for this week.
 | |
|         $thisWeekRecords = [];
 | |
| 
 | |
|         // Get the start and end of this week.
 | |
|         $startOfWeek = (new DateTime())->setISODate((new DateTime())->format('o'), (new DateTime())->format('W'), 1);
 | |
|         $endOfWeek = (clone $startOfWeek)->modify('+6 days');
 | |
| 
 | |
|         // Step 4: Iterate over the array.
 | |
|         foreach ($data as $record) {
 | |
| 
 | |
|             // Convert "0" and "1" to DateTime objects.
 | |
|             $startDate = new DateTime($record['0']);
 | |
|             $endDate = new DateTime($record['1']);
 | |
| 
 | |
|             // Step 5: Check if the start date or end date is within this week.
 | |
|             if (($startDate >= $startOfWeek && $startDate <= $endOfWeek) || ($endDate >= $startOfWeek && $endDate <= $endOfWeek)) {
 | |
|                 $endDate = new DateTime($record['1']);
 | |
|                 $now = new DateTime();
 | |
|                 $interval = $now->diff($endDate);
 | |
|                 $daysLeft = $interval->days;
 | |
| 
 | |
|                 // If daysLeft is 0, set it to "Last day"
 | |
|                 if ($daysLeft == 0) {
 | |
|                     $daysLeft = "Last day";
 | |
|                 } else {
 | |
|                     $daysLeft = $daysLeft . " days left";
 | |
|                 }
 | |
| 
 | |
|                 // Add daysLeft to record
 | |
|                 $record['daysLeft'] = $daysLeft;
 | |
|                 // Get Date format
 | |
|                 if ($this->session->userdata('user_date_format')) {
 | |
|                     // If Logged in and session exists
 | |
|                     $custom_date_format = $this->session->userdata('user_date_format');
 | |
|                 } else {
 | |
|                     // Get Default date format from /config/cloudlog.php
 | |
|                     $custom_date_format = $this->config->item('qso_date_format');
 | |
|                 }
 | |
| 
 | |
|                 // Create a new array with the required fields and add it to the main array
 | |
|                 $oldStartDate = DateTime::createFromFormat('Y-m-d', $record['0']);
 | |
| 
 | |
|                 $StartDate = $oldStartDate->format($custom_date_format);
 | |
|                 $record['startDate'] = $StartDate;
 | |
| 
 | |
|                 $oldEndDate = DateTime::createFromFormat('Y-m-d', $record['1']);
 | |
|                 $EndDate = $oldEndDate->format($custom_date_format);
 | |
|                 $record['endDate'] = $EndDate;
 | |
| 
 | |
|                 $record['confirmed'] = true; // or false, depending on your logic
 | |
| 
 | |
|                 $CI = &get_instance();
 | |
|                 $CI->load->model('logbook_model');
 | |
|                 $dxccInfo = $CI->logbook_model->dxcc_lookup($record['callsign'], $startDate->format('Y-m-d'));
 | |
| 
 | |
|                 // Call DXCC Worked function to check if the DXCC has been worked before
 | |
|                 if (isset($dxccInfo['entity'])) {
 | |
|                     $dxccWorkedData = $this->dxccWorked($dxccInfo['entity']);
 | |
|                     $record = array_merge($record, $dxccWorkedData);
 | |
|                 } else {
 | |
|                     // Handle the case where 'entity' is not set in $dxccInfo
 | |
|                     $itemsToAdd = array(
 | |
|                         'workedBefore' => false,
 | |
|                         'confirmed' => false,
 | |
|                     );
 | |
|                     $record = array_merge($record, $itemsToAdd);
 | |
|                 }
 | |
| 
 | |
|                 $thisWeekRecords[] = $record;
 | |
|             }
 | |
|         }
 | |
|         return $thisWeekRecords;
 | |
| 
 | |
|     }
 | |
| 
 | |
|     function dxccWorked($country)
 | |
|     {
 | |
| 
 | |
|         $return = [
 | |
|             "workedBefore" => false,
 | |
|             "confirmed" => false,
 | |
|         ];
 | |
| 
 | |
|         $user_default_confirmation = $this->session->userdata('user_default_confirmation');
 | |
|         $this->load->model('logbooks_model');
 | |
|         $logbooks_locations_array = $this->logbooks_model->list_logbook_relationships($this->session->userdata('active_station_logbook'));
 | |
|         $this->load->model('logbook_model');
 | |
| 
 | |
|         if (!empty($logbooks_locations_array)) {
 | |
|             $this->db->where('COL_PROP_MODE !=', 'SAT');
 | |
| 
 | |
|             $this->db->where_in('station_id', $logbooks_locations_array);
 | |
|             $this->db->where('COL_COUNTRY', urldecode($country));
 | |
| 
 | |
|             $query = $this->db->get($this->config->item('table_name'), 1, 0);
 | |
|             foreach ($query->result() as $workedBeforeRow) {
 | |
|                 $return['workedBefore'] = true;
 | |
|             }
 | |
| 
 | |
|             $extrawhere = '';
 | |
|             if (isset($user_default_confirmation) && strpos($user_default_confirmation, 'Q') !== false) {
 | |
|                 $extrawhere = "COL_QSL_RCVD='Y'";
 | |
|             }
 | |
|             if (isset($user_default_confirmation) && strpos($user_default_confirmation, 'L') !== false) {
 | |
|                 if ($extrawhere != '') {
 | |
|                     $extrawhere .= " OR";
 | |
|                 }
 | |
|                 $extrawhere .= " COL_LOTW_QSL_RCVD='Y'";
 | |
|             }
 | |
|             if (isset($user_default_confirmation) && strpos($user_default_confirmation, 'E') !== false) {
 | |
|                 if ($extrawhere != '') {
 | |
|                     $extrawhere .= " OR";
 | |
|                 }
 | |
|                 $extrawhere .= " COL_EQSL_QSL_RCVD='Y'";
 | |
|             }
 | |
| 
 | |
|             if (isset($user_default_confirmation) && strpos($user_default_confirmation, 'Z') !== false) {
 | |
|                 if ($extrawhere != '') {
 | |
|                     $extrawhere .= " OR";
 | |
|                 }
 | |
|                 $extrawhere .= " COL_QRZCOM_QSO_DOWNLOAD_STATUS='Y'";
 | |
|             }
 | |
| 
 | |
| 
 | |
|             $this->load->model('logbook_model');
 | |
|             $this->db->where('COL_PROP_MODE !=', 'SAT');
 | |
|             if ($extrawhere != '') {
 | |
|                 $this->db->where('(' . $extrawhere . ')');
 | |
|             } else {
 | |
|                 $this->db->where("1=0");
 | |
|             }
 | |
| 
 | |
| 
 | |
|             $this->db->where_in('station_id', $logbooks_locations_array);
 | |
|             $this->db->where('COL_COUNTRY', urldecode($country));
 | |
| 
 | |
|             $query = $this->db->get($this->config->item('table_name'), 1, 0);
 | |
|             foreach ($query->result() as $workedBeforeRow) {
 | |
|                 $return['confirmed'] = true;
 | |
|             }
 | |
| 
 | |
|             return $return;
 | |
|         } else {
 | |
|             $return['workedBefore'] = false;
 | |
|             $return['confirmed'] = false;
 | |
| 
 | |
| 
 | |
|             return $return;;
 | |
|         }
 | |
|     }
 | |
| }
 |