<?php
/*
  MODULOOM Package Tracking Service version 4.1
  This module has been adapted to fit in OpenCart 1.5.x.

  @package shippingMethod
  @copyright Copyright © 2012,2013 Philippe BLAIN <pblain@NOSPAMfree.fr>.
  ------------------------------------------------------------------------------
*/

class ModelModulePackageTracking extends Model {
  public function addTracker($data) {
    $this->db->query("INSERT INTO " . DB_PREFIX . "trackers SET tracker_carrier_name = '" . $this->db->escape($data['tracker_carrier_name']) . "', tracker_carrier_link = '" . $this->db->escape($data['tracker_carrier_link']) . "', tracker_status = '" . (int)$data['tracker_status'] . "', tracker_image = '" . $this->db->escape($data['tracker_image']) . "', last_modified = NOW(), date_added = NOW()");

    $this->cache->delete('tracker');
  }

  public function editTracker($tracker_id, $data) {
    $this->db->query("UPDATE " . DB_PREFIX . "trackers SET tracker_carrier_name = '" . $this->db->escape($data['tracker_carrier_name']) . "', tracker_carrier_link = '" . $this->db->escape($data['tracker_carrier_link']) . "', tracker_status = '" . (int)$data['tracker_status'] . "', tracker_image = '" . $this->db->escape($data['tracker_image']) . "', last_modified = NOW() WHERE tracker_id = '" . (int)$tracker_id . "'");

    $this->cache->delete('tracker');
  }

  public function deleteTracker($tracker_id) {
    $this->db->query("DELETE FROM " . DB_PREFIX . "trackers WHERE tracker_id = '" . (int)$tracker_id . "'");

    $this->cache->delete('tracker');
  }

  public function getTracker($tracker_id) {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "trackers WHERE tracker_id = '" . (int)$tracker_id . "'");

    return $query->row;
  }

  public function getTrackers($data = array()) {
    if ($data) {
      $sql = "SELECT * FROM " . DB_PREFIX . "trackers";

      if (isset($data['filter_tracker_id']) && !is_null($data['filter_tracker_id'])) {
        $sql .= " AND tracker_id = '" . (int)$data['filter_tracker_id'] . "'";
      }

      if (isset($data['filter_tracker_carrier_name']) && !is_null($data['filter_tracker_carrier_name'])) {
        $sql .= " AND tracker_carrier_name LIKE '%" . $this->db->escape($data['filter_tracker_carrier_name']) . "%'";
      }

      if (isset($data['filter_tracker_status']) && !is_null($data['filter_tracker_status'])) {
        $sql .= " WHERE tracker_status = '" . (int)$data['filter_tracker_status'] . "'";
      } else {
        $sql .= " WHERE tracker_status >= 0";
      }

      if (isset($data['filter_last_modified']) && !is_null($data['filter_last_modified'])) {
        $sql .= " AND DATE(last_modified) = DATE('" . $this->db->escape($data['filter_last_modified']) . "')";
      }

      if (isset($data['filter_date_added']) && !is_null($data['filter_date_added'])) {
        $sql .= " AND DATE(date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
      }

      $sort_data = array(
        'tracker_carrier_name',
        'tracker_carrier_link'
      );

      if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
        $sql .= " ORDER BY " . $data['sort'];
      } else {
        $sql .= " ORDER BY tracker_carrier_name";
      }

      if (isset($data['order']) && ($data['order'] == 'DESC')) {
        $sql .= " DESC";
      } else {
        $sql .= " ASC";
      }

      if (isset($data['start']) || isset($data['limit'])) {
        if ($data['start'] < 0) {
          $data['start'] = 0;
        }

        if ($data['limit'] < 1) {
          $data['limit'] = 20;
        }

        $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
      }

      $query = $this->db->query($sql);

      return $query->rows;
    } else {
      $tracker_data = $this->cache->get('tracker');

      if (!$tracker_data) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "trackers ORDER BY tracker_carrier_name ASC");

        $tracker_data = $query->rows;

        $this->cache->set('tracker', $tracker_data);
      }

      return $tracker_data;
    }
  }

  public function getTotalTrackers() {
    $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "trackers");

    return $query->row['total'];
  }
  
  // Declare "$this->load->model('tool/image');" before calling this function
	public function renderTrackingNumbers($tracker_id, $numbers_str, $with_anchor = true, $separator = '<br />') {
    $tracking_string = '';
    if (isset($tracker_id) and $tracker_id > 0) {
      $tracker_info = $this->getTracker($tracker_id);
      if (is_array($tracker_info) and !empty($tracker_info)) {
        if ($this->config->get('pts_show_images') and !empty($tracker_info['tracker_image'])) {
          $thumb = $this->model_tool_image->resize($tracker_info['tracker_image'], 105, 35);
          $tracking_string .= '<img src="'.$thumb.'" alt="'.$tracker_info['tracker_carrier_name'].'" style="padding: 1px; border: 1px solid #DDDDDD;" />'.$separator;
        }
        $tracking_string .= $tracker_info['tracker_carrier_name'];
        if (isset($numbers_str) and $numbers_str != '') {
          $tracking_numbers_array = preg_split("/[,;]+/", $numbers_str, -1, PREG_SPLIT_NO_EMPTY);
          if ($tracking_numbers_array_count = count($tracking_numbers_array)) {
            for ($k = 0; $k < $tracking_numbers_array_count; $k++) {
              if ($with_anchor) $t_num = ($tracker_info['tracker_status'] ? '<a href="' . sprintf($tracker_info['tracker_carrier_link'], trim($tracking_numbers_array[$k])) . '" target="_blank">' . htmlspecialchars(trim($tracking_numbers_array[$k])) . '</a>' : htmlspecialchars(trim($tracking_numbers_array[$k])) );
              else $t_num = htmlspecialchars(trim($tracking_numbers_array[$k]));
              $tracking_string .= $separator.$t_num;
            }
          }
        }
      } else {
        $tracking_string .= 'Tracker ID = '.$tracker_id.' not found.';
      }
    }
    return $tracking_string;
	}
}
?>