url = plugins_url('', __FILE__); $this->dir = dirname(__FILE__); $this->css_url = get_option('amazon_global_css'); $this->css_dir = get_option('amazon_global_css_dir'); $this->ajax_update = false; global $amazon_locale; $locale = get_option('amazon_locale'); $amazon_locale = $locale == '' ? 'us' : $locale; } public function uninstall() { global $wpdb; $prefix = $wpdb->prefix; $cache = "DROP TABLE IF EXISTS {$prefix}amazon_cache;"; $templates = "DROP TABLE IF EXISTS {$prefix}amazon_templates;"; $suggest = "DROP TABLE IF EXISTS {$prefix}amazon_suggest;"; $fields = "DROP TABLE IF EXISTS {$prefix}amazon_template_fields;"; $wpdb->query($cache); $wpdb->query($templates); $wpdb->query($suggest); $wpdb->query($fields); delete_option('amazon_state'); delete_option('amazon_expire'); delete_option('amazon_error'); delete_option('amazon_update_method'); } public function install() { global $wpdb; $prefix = $wpdb->prefix; add_option('amazon_state'); ob_start(); $wpdb->show_errors(); $suggest = "CREATE TABLE {$prefix}amazon_suggest ( asin CHAR(10), suggestion CHAR(10), expire INT NOT NULL, PRIMARY KEY(asin, suggestion) );"; $cache = "CREATE TABLE {$prefix}amazon_cache ( asin CHAR(10) NOT NULL, field VARCHAR(32) NOT NULL, value TEXT, expire INT NOT NULL, PRIMARY KEY(asin, field) );"; $templates = "CREATE TABLE {$prefix}amazon_templates ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(128), type VARCHAR(15), content TEXT, excerpt TEXT, css TEXT );"; $template_fields = "CREATE TABLE {$prefix}amazon_template_fields ( template INT, field_name VARCHAR(64), default_value TEXT, type VARCHAR(15), PRIMARY KEY(template, field_name) );"; if($wpdb->query($cache) !== false && $wpdb->query($templates) !== false && $wpdb->query($suggest) !== false && $wpdb->query($template_fields) !== false) { $wpdb->hide_errors(); update_option('amazon_state', 'ok'); update_option('amazon_db_version', 1.0); } else { $wpdb->hide_errors(); update_option('amazon_state', 'install_failed'); update_option('amazon_error', ob_get_clean()); } if(get_option('amazon_state') == 'ok') { amazon_sample_templates(); } add_option('amazon_expire', 3); //cache expire time, default 3 days add_option('amazon_update_method', 'ajax'); add_option('amazon_install_time', time()); add_option('amazon_widget_shortcodes', 1); add_option('amazon_locale', 'us'); add_option('amazon_css_version', time()); add_option('amazon_global_css'); } public function triggerAjaxUpdate() { $this->ajax_update = true; } public function enqueueScripts() { wp_enqueue_script('jquery'); if($this->css_url != '') wp_enqueue_style('amazon_global_css', $this->css_url, array(), get_option('amazon_css_version')); } public function ajaxUpdate() { if(!$this->ajax_update) return; $nonce = wp_create_nonce('amazon_update_nonce'); ?> ID, 'amazon_post_template', true); if(!$temp_id) return $content; $template = amazon_get_template($temp_id); $temp_fields = amazon_get_template_fields($template['id']); $fields = array(); foreach($temp_fields as $field) { $key = AmazonTools::$prefix . $field['field_name']; $meta_value = get_post_meta($post->ID, $key, true); //$fields[$field['field_name']] = ($meta_value != '') ? $meta_value : $field['default_value']; $fields[$field['field_name']] = $meta_value; } if($excerpt && trim($template['excerpt']) == '') return $content; $temp_content = ($excerpt) ? $template['excerpt'] : $template['content']; $temp_content = stripslashes($temp_content); foreach($fields as $key => $value) { $temp_content = str_replace('%' . $key . '%', $value, $temp_content); } $css = ($template['css'] == '') ? '' : "\n"; return $css . do_shortcode(str_replace('%content%', $content, $temp_content)); } public function applyTemplateExcerpt($content) { if($content == '') { global $post; $content = $post->post_content; } return $this->applyTemplate($content, true); } public function shortcode($atts, $content = null) { if(isset($atts['foreach'])) return $this->shortcodeForeach($atts, $content); if(isset($atts['random'])) { $asins = ($atts['random'] == '' || $atts['random'] == 1) ? explode(',', strip_tags($content)) : explode(',', $atts['random']); $key = array_rand($asins); $this->last_asin = trim($asins[$key]); if($content) { if($atts['random'] != '' && $atts['random'] != 1) return do_shortcode($content); } elseif(!isset($atts['template'])) return do_shortcode($content); } if(isset($atts['setting'])) { $setting = $this->shortcodeSetting($atts['setting']); if($content == null || $setting == '') return $setting; return do_shortcode($content); } if(isset($atts['asin']) && $atts['asin'] != '%asin%') $this->last_asin = $atts['asin']; if(isset($atts['template'])) { if($template = amazon_get_template($atts['template'])) { $temp_content = str_replace('%asin%', $this->last_asin, stripslashes($template['content'])); $css = ($template['css'] == '') ? '' : "\n"; return $css . do_shortcode($temp_content); } return do_shortcode($content); } if(isset($atts['get'])) { global $amazon_buffer; $asin = (string) $this->last_asin; $get = isset($atts['get']) ? $atts['get'] : $content; $amazon_buffer[$asin][] = $get; return '%' . $asin . '_' . $get . '%'; } return do_shortcode($content); } private function shortcodeForeach($atts, $content) { //validate if($content == '') return ''; elseif(!isset($atts['asin']) && !isset($atts['similar'])) return ''; $asin = array(); if(isset($atts['asin']) && $atts['asin'] != '') { $asin = explode(',', $atts['asin']); } //if similar is set, process if(isset($atts['similar']) && $atts['similar'] != '') { $similar = $this->getSimilar($atts['similar']); $asin = array_merge($asin, $similar); $asin = array_unique($asin); } //check if there is a limit set if(isset($atts['limit']) && is_numeric($atts['limit'])) { if(count($asin) > $limit) $asin = array_slice($asin, 0, $limit); } $processedContent = ''; foreach($asin as $a) { $this->last_asin = $a; $curr = str_replace('%asin%', $a, $content); $processedContent .= do_shortcode($curr) . "\n"; } return $processedContent; } private function shortcodeSetting($key) { if(!in_array($key, $this->allowed_settings)) return ''; else return get_option('amazon_' . $key); } public function bufferData($content) { global $amazon_buffer; global $amazon_locale; foreach($amazon_buffer as &$keys) { $keys = array_unique($keys); } //echo '
'; print_r($amazon_buffer); echo ''; if(count($amazon_buffer) < 1) return $content; $data = amazon_fetch($amazon_buffer, $amazon_locale); foreach($data as $asin => $keys) { foreach($keys as $key => $value) { $search = "%{$asin}_{$key}%"; $content = str_replace($search, $value, $content); } } $amazon_buffer = array(); return $content; } private function getSimilar($asin) { //TODO } } $amazon_locale = 'us'; $amazon_tools = new AmazonTools(); $amazon_buffer = array(); ?>