383 lines
8.4 KiB
PHP
383 lines
8.4 KiB
PHP
<?php
|
|
/**
|
|
* CLASS: Share Your Cart Wordpress Plugin
|
|
* AUTHOR: Barandi Solutions
|
|
* COUNTRY: Romania
|
|
* EMAIL: catalin.paun@barandisolutions.ro
|
|
* VERSION : 1.0
|
|
* DESCRIPTION: This class is used as a base class for every wordpress shopping cart plugin we create.
|
|
* * Copyright (C) 2011 Barandi Solutions
|
|
*/
|
|
|
|
require_once("sdk/class.shareyourcart-base.php");
|
|
|
|
if(!class_exists('ShareYourCartWordpressPlugin',false)){
|
|
|
|
abstract class ShareYourCartWordpressPlugin extends ShareYourCartBase {
|
|
|
|
protected static $_INSTANCES = array();
|
|
protected static $_VERSION = 7;
|
|
protected $_PLUGIN_PATH;
|
|
|
|
/**
|
|
* Constructor
|
|
* @param null
|
|
*/
|
|
function __construct() {
|
|
|
|
parent::__construct();
|
|
|
|
//if there is installed another plugin with a never version
|
|
//do not load this one further
|
|
if(!$this->canLoad()) return;
|
|
|
|
//make sure we add this instance
|
|
self::$_INSTANCES []= $this;
|
|
$this->_PLUGIN_PATH = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
|
|
|
|
//setup the hooks
|
|
register_activation_hook(self::getPluginFile(), array(&$this,'activateHook'));
|
|
register_deactivation_hook(self::getPluginFile(), array(&$this,'deactivateHook'));
|
|
|
|
//perform the rest of the loading AFTER all plugins have been loaded
|
|
add_action('plugins_loaded', array(&$this,'pluginsLoadedHook'));
|
|
}
|
|
|
|
/**
|
|
* Abstract isCartActive
|
|
* @param null
|
|
* @return boolean
|
|
*/
|
|
protected abstract function isCartActive();
|
|
|
|
/**
|
|
*
|
|
* Get the plugin version.
|
|
* @return an integer
|
|
*
|
|
*/
|
|
protected function getPluginVersion(){
|
|
|
|
return self::$_VERSION;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Return the project's URL
|
|
*
|
|
*/
|
|
protected function getDomain(){
|
|
|
|
return get_bloginfo('url');
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Return the admin's email
|
|
*
|
|
*/
|
|
protected function getAdminEmail(){
|
|
|
|
return get_option('admin_email');
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Set the field value
|
|
*
|
|
*/
|
|
protected function setConfigValue($field,$value){
|
|
update_option('_shareyourcart_'.$field,$value);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Get the field value
|
|
*
|
|
*/
|
|
protected function getConfigValue($field){
|
|
return get_option('_shareyourcart_'.$field);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Get the path to the main file of the plugin
|
|
*
|
|
*/
|
|
public static function getPluginFile(){
|
|
global $plugin;
|
|
|
|
return $plugin;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Get the upload directory
|
|
*
|
|
*/
|
|
public function getUploadDir(){
|
|
$dir = wp_upload_dir();
|
|
|
|
return (!empty($dir['path']) ? $dir['path'] : parent::getUploadDir());
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Execute the SQL statement
|
|
*
|
|
*/
|
|
protected function executeNonQuery($sql){
|
|
|
|
if(substr($sql,0,12) == "CREATE TABLE"){
|
|
|
|
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
|
|
|
//if this is a create table command, use the special function which compares tables
|
|
dbDelta($sql);
|
|
|
|
} else {
|
|
|
|
global $wpdb;
|
|
|
|
//use the normal query
|
|
$wpdb->query($sql);
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Get the row returned from the SQL
|
|
*
|
|
* @return an associative array containing the data of the row OR NULL
|
|
* if there is none
|
|
*/
|
|
protected function getRow($sql){
|
|
|
|
global $wpdb;
|
|
|
|
//get the row as an associative array
|
|
return $wpdb->get_row($sql,ARRAY_A);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Get the table name based on the key
|
|
*
|
|
*/
|
|
protected function getTableName($key){
|
|
global $wpdb;
|
|
|
|
return $wpdb->base_prefix.$key;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Insert the row into the specified table
|
|
*
|
|
*/
|
|
protected function insertRow($tableName,$data){
|
|
global $wpdb;
|
|
|
|
$wpdb->insert($tableName,$data);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Create url for the specified file. The file must be specified in relative path
|
|
* to the base of the plugin
|
|
*/
|
|
protected function createUrl($file){
|
|
//get the real file path
|
|
$file = realpath($file);
|
|
|
|
//calculate the relative path from this file
|
|
$file = SyC::relativepath(dirname(__FILE__),$file);
|
|
|
|
//append the relative path to the current file's URL
|
|
return WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__)).$file;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Part of the initialization process, this is used to check if the cart is
|
|
* really active
|
|
*
|
|
*/
|
|
public function pluginsLoadedHook() {
|
|
|
|
//if the cart is not loaded, do not load this plugin further
|
|
if(!$this->isCartActive()) return;
|
|
|
|
add_action('wp_head', array(&$this,'showPageHeader'));
|
|
add_action('admin_menu', array(&$this,'showAdminMenu'));
|
|
|
|
//add the shortcodes ONLY if they where not added before, by another plugin
|
|
global $shortcode_tags;
|
|
if(!array_key_exists('shareyourcart',$shortcode_tags)){
|
|
add_shortcode('shareyourcart', array(&$this,'getButton'));
|
|
add_shortcode('shareyourcart_button', array(&$this,'getButton'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* This is the activate hook called by WordPress. It is used for both install and activate
|
|
*
|
|
*/
|
|
public function activateHook() {
|
|
|
|
if(!$this->isCartActive()) return;
|
|
|
|
$message = '';
|
|
|
|
//the db version is old, so install it again
|
|
if(version_compare($this->getConfigValue('db_version'),self::$_DB_VERSION)!=0){
|
|
|
|
$this->install($message);
|
|
} else { //if the version are equal, simply activate the plugin
|
|
|
|
$this->activate($message);
|
|
}
|
|
|
|
//TODO: perhaps we can show the message somehow to the user. For now, just log it
|
|
error_log($message);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* This is the deactivate hook called by WordPress.
|
|
*
|
|
*/
|
|
public function deactivateHook() {
|
|
|
|
if(!$this->isCartActive()) return;
|
|
|
|
$message = '';
|
|
|
|
$this->deactivate($message);
|
|
|
|
//TODO: perhaps we can show the message somehow to the user. For now, just log it
|
|
error_log($message);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* When installing the new wordpress plugin, make sure to move the old data
|
|
*
|
|
*/
|
|
public function install(&$message = null) {
|
|
|
|
global $wpdb;
|
|
|
|
$old_table_name = $this->getTableName('shareyourcart_settings');
|
|
if($wpdb->get_var("show tables like '$old_table_name'") == $old_table_name) {
|
|
|
|
//get the old app_key and client_id
|
|
$settings = $wpdb->get_row("SELECT app_key, client_id FROM ".$wpdb->base_prefix."shareyourcart_settings LIMIT 1");
|
|
if($settings) {
|
|
|
|
$this->setConfigValue('appKey', $settings->app_key);
|
|
$this->setConfigValue('clientId', $settings->client_id);
|
|
}
|
|
|
|
//remove the old table
|
|
$wpdb->query("DROP TABLE $old_table_name");
|
|
}
|
|
|
|
parent::install($message);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* This is the deactivate hook called by WordPress.
|
|
*
|
|
*/
|
|
public static function uninstallHook() {
|
|
|
|
//this hook is required by WordPress to be static
|
|
//so call uninstall on the first instance
|
|
if(!empty(self::$_INSTANCES)){
|
|
|
|
self::$_INSTANCES[0]->uninstall();
|
|
} else {
|
|
|
|
//log the error
|
|
error_log("There is no instance created when calling uninstall hook");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* show the admin menu
|
|
* @param null
|
|
* @return boolean
|
|
*/
|
|
public function showAdminMenu() {
|
|
|
|
//this is a single call function
|
|
if(!$this->isFirstCall(__FUNCTION__)) return;
|
|
|
|
//first, check the SDK status
|
|
$this->checkSDKStatus();
|
|
|
|
//see if we need to show the update notification
|
|
$notification = null;
|
|
if($this->hasNewerVersion())
|
|
$notification = "<span class='update-plugins count-$warning_count'><span class='update-count'>" . number_format_i18n(1) . "</span></span>";
|
|
|
|
$page = add_menu_page(
|
|
__('Share your cart settings'),
|
|
__('ShareYourCart').$notification,
|
|
1,
|
|
basename(__FILE__),
|
|
array(&$this, 'showAdminPage'),
|
|
$this->_PLUGIN_PATH .'sdk/img/shareyourcart.png'
|
|
);
|
|
add_action( 'admin_head-'.$page, array(&$this, 'showAdminHeader'));
|
|
|
|
if($this->isActive())
|
|
{
|
|
//show the rest of the menu ONLY if the plugin is active
|
|
$page = add_submenu_page(
|
|
basename(__FILE__),
|
|
__('Button'),
|
|
__('Customize Button'),
|
|
1,
|
|
basename(__FILE__).'-button',
|
|
array(&$this, 'showButtonCustomizationPage'));
|
|
add_action( 'admin_head-'. $page, array(&$this, 'showAdminHeader'));
|
|
|
|
$page = add_submenu_page(
|
|
basename(__FILE__),
|
|
__('Documentation'),
|
|
__('Documentation'),
|
|
1,
|
|
basename(__FILE__).'-documentation',
|
|
array(&$this, 'showDocumentationPage'));
|
|
add_action( 'admin_head-'. $page, array(&$this, 'showAdminHeader'));
|
|
}
|
|
}
|
|
|
|
/*
|
|
*
|
|
* Called when a new coupon is generated
|
|
*
|
|
*/
|
|
public function couponCallback(){
|
|
|
|
//since there are a lot of plugins for wordpress, first make sure this plugin
|
|
//is active
|
|
if(!$this->isCartActive()) {
|
|
|
|
throw new Exception(SyC::t('sdk','Shopping Cart is not active'));
|
|
}
|
|
|
|
parent::couponCallback();
|
|
|
|
//since this is actually an API, exit
|
|
exit;
|
|
}
|
|
}
|
|
|
|
} //END IF
|
|
?>
|