<?php
/**
* Gps_Tracker
*
* @package Gps_Tracker
* @category Core
* @author Nick Fox <nickfox@websmithing.com>
* @license MIT/GPLv2 or later
* @link https://www.websmithing.com/gps-tracker
* @copyright 2014 Nick Fox
*/
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) exit;
if ( ! class_exists( 'Gps_Tracker' ) ) :
/**
* Main Gps_Tracker Class
*
* @since 1.0.0
*/
class Gps_Tracker {
/**
* Plugin version, used for cache-busting of style and script file references.
*
* @since 1.0.0
* @var string
*/
const VERSION = '1.0.3';
/**
* Unique identifier for your plugin.
*
* The variable name is used as the text domain when internationalizing strings
* of text. Its value should match the Text Domain file header in the main
* plugin file.
*
* @since 1.0.0
* @var string
*/
protected $plugin_slug = 'gpstracker';
/**
* Instance of this class.
*
* @since 1.0.0
* @var object
*/
protected static $instance = null;
/**
* Gps Tracker Endpoint Object
*
* @var object
* @since 1.0.0
*/
public $gpstracker_endpoint;
/**
* Gps Tracker Ajax Object
*
* @var object
* @since 1.0.0
*/
public $gpstracker_ajax;
/**
* Initialize the plugin by setting localization and loading public scripts
* and styles.
*
* @since 1.0.0
*/
private function __construct() {
$this->includes();
$this->gpstracker_endpoint = new Gps_Tracker_Endpoint();
$this->gpstracker_ajax = new Gps_Tracker_Ajax();
// load plugin text domain
add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
// load public-facing style sheet and javascript
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
// to use this plugin, add this shortcode to any page or post: [gps_tracker]
add_shortcode( 'gps_tracker', array( $this,'gpstracker_map_shortcode' ) );
}
/**
* Return the plugin slug.
*
* @since 1.0.0
* @return string
*/
public function get_plugin_slug() {
return $this->plugin_slug;
}
/**
* Return an instance of this class.
*
* @since 1.0.0
* @return object A single instance of this class.
*/
public static function get_instance() {
// If the single instance hasn't been set, set it now.
if ( null == self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
/**
* Throw error on object clone
*
* The whole idea of the singleton design pattern is that there is a single
* object therefore, we don't want the object to be cloned.
*
* @since 1.0.0
* @access protected
* @return void
*/
public function __clone() {
// Cloning instances of the class is forbidden
_doing_it_wrong( __FUNCTION__, __( 'not good.', 'gpstracker' ), '1.0.0' );
}
/**
* Disable unserializing of the class
*
* @since 1.0.0
* @access protected
* @return void
*/
public function __wakeup() {
// Unserializing instances of the class is forbidden
_doing_it_wrong( __FUNCTION__, __( 'not good.', 'gpstracker' ), '1.0.0' );
}
/**
* Include required files.
*
* @access private
* @since 1.0.0
* @return void
*/
private function includes() {
require_once GPSTRACKER_PLUGIN_DIR . 'includes/class-gpstracker-gamajo-template-loader.php';
require_once GPSTRACKER_PLUGIN_DIR . 'includes/class-gpstracker-template-loader.php';
require_once GPSTRACKER_PLUGIN_DIR . 'public/includes/class-gpstracker-ajax.php';
require_once GPSTRACKER_PLUGIN_DIR . 'public/includes/class-gpstracker-endpoint.php';
}
/**
* Gps Tracker Map Shortcode
*
* Displays the map, dropdown boxes and buttons for Gps Tracker
*
* @since 1.0.0
* @return string
*/
public function gpstracker_map_shortcode() {
$templates = new GpsTracker_Template_Loader();
ob_start();
$templates->get_template_part( 'shortcode', 'gpstracker-map' );
return ob_get_clean();
}
/**
* Load the plugin text domain for translation.
*
* @since 1.0.0
*/
public function load_plugin_textdomain() {
$domain = $this->plugin_slug;
$locale = apply_filters( 'plugin_locale', get_locale(), $domain );
load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' );
load_plugin_textdomain( $domain, FALSE, basename( plugin_dir_path( dirname( __FILE__ ) ) ) . '/languages/' );
}
/**
* Register and enqueue public-facing style sheet.
*
* @since 1.0.0
*/
public function enqueue_styles() {
wp_enqueue_style( $this->plugin_slug . '-leaflet-styles', plugins_url( 'assets/js/leaflet-0.7.5/leaflet.css', __FILE__ ), array(), self::VERSION );
wp_enqueue_style('gpstracker-bootstrap', '//maxcdn.bootstrapcdn.com/bootswatch/3.3.5/superhero/bootstrap.min.css', false, '3.3.0', 'all');
wp_enqueue_style( $this->plugin_slug . '-light-styles', plugins_url( 'assets/css/light.css', __FILE__ ), array(), self::VERSION );
}
/**
* Register and enqueues public-facing JavaScript files.
*
* @since 1.0.0
*/
public function enqueue_scripts() {
wp_enqueue_script( $this->plugin_slug . '-gpstracker-google-maps', '//maps.google.com/maps/api/js?v=3&sensor=false&libraries=adsense', array(), self::VERSION );
wp_enqueue_script( $this->plugin_slug . '-gpstracker-map-js', plugins_url( 'assets/js/gpstracker-map.js', __FILE__ ), array('jquery'), self::VERSION );
wp_enqueue_script( $this->plugin_slug . '-gpstracker-leaflet-js', plugins_url( 'assets/js/leaflet-0.7.5/leaflet.js', __FILE__ ), array('jquery'), self::VERSION );
wp_enqueue_script( $this->plugin_slug . '-gpstracker-google-js', plugins_url( 'assets/js/leaflet-plugins/google.js', __FILE__ ), array('jquery'), self::VERSION );
wp_enqueue_script( $this->plugin_slug . '-gpstracker-bing-js', plugins_url( 'assets/js/leaflet-plugins/bing.js', __FILE__ ), array('jquery'), self::VERSION );
wp_localize_script( $this->plugin_slug . '-gpstracker-map-js', 'map_js_vars', array(
'plugin_url' => GPSTRACKER_PLUGIN_URL,
'ajax_url' => admin_url('admin-ajax.php'),
'get_routes_nonce' => wp_create_nonce('get-routes-nonce'),
'get_geojson_route_nonce' => wp_create_nonce('get-geojson-route-nonce'),
'get_all_geojson_routes_nonce' => wp_create_nonce('get-all-geojson-routes-nonce'),
'delete_route_nonce' => wp_create_nonce('delete-route-nonce')
)
);
}
}
endif; // End if class_exists