__construct(); } /** * PHP 5 Constructor */ function __construct() { global $wpdb; add_action('admin_menu', array(&$this,"add_admin_pages")); register_activation_hook(__FILE__,array(&$this,"install_on_activation")); add_action('plugins_loaded', array(&$this,"register_widgets" ) ); add_action('init', array(&$this,"add_scripts")); add_action('init', array(&$this,"add_css")); add_filter('media_buttons_context', array(&$this, 'media_buttons_context')); add_action('media_upload_qype-search', array(&$this, 'media_upload_content')); add_action('media_upload_qype-favorites', array(&$this, 'media_upload_content_favorites')); add_action('save_post', array(&$this, 'save_geo_data'), 99); $this->adminOptions = $this->getAdminOptions(); $this->db_table_name = $wpdb->prefix . "qype_suite"; add_shortcode('qype', array( &$this , 'qype_shortcode_handler' ) ); $qypeStyleFile = WP_PLUGIN_URL.'/all-in-one-qype-suite/css/style.css'; wp_register_style('qypeStyle', $qypeStyleFile); $qypeStyleFile = WP_PLUGIN_URL.'/all-in-one-qype-suite/css/style-new.css'; wp_register_style('qypeNewStyle', $qypeStyleFile); //***************************************************************************************** // These lines allow the plugin to be translated into different languages // You will need to create the appropriate language files // this assumes your language files will be in the format: all-in-one-qype-suite-locationcode.mo // This also assumes your text domain will be: all-in-one-qype-suite // For more info: http://codex.wordpress.org/Translating_WordPress //***************************************************************************************** $locale = get_locale(); $mofile = dirname(__FILE__)."/languages/".$locale.".mo"; load_textdomain("qype-suite", $mofile); } /** * Creates or updates the database table, and adds a database table version number to the WordPress options. */ function install_on_activation() { global $wpdb; $plugin_db_version = "0.4"; $installed_ver = get_option( "qype-suite_db_version" ); //only run installation if not installed or if previous version installed if ($installed_ver === false || $installed_ver != $plugin_db_version) { //***************************************************************************************** // Create the sql - You will need to edit this to include the columns you need // Using the dbdelta function to allow the table to be updated if this is an update. // Read the limitations of the dbdelta function here: http://codex.wordpress.org/Creating_Tables_with_Plugins // remember to update the version number every time you want to make a change. //***************************************************************************************** $sql = "CREATE TABLE " . $this->db_table_name . " ( id int NOT NULL, typ VARCHAR(20), object TEXT, created_at timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`id`) );"; require_once(ABSPATH . "wp-admin/upgrade-functions.php"); dbDelta($sql); //add a database version number for future upgrade purposes update_option("qype-suite_db_version", $plugin_db_version); } } function register_widgets() { require_once( dirname(__FILE__)."/php/widgets/user-widget/widget.php"); $GLOBALS['QypeUserWidget'] = & new QypeUserWidget(); require_once( dirname(__FILE__)."/php/widgets/city-widget/widget.php"); $GLOBALS['QypeCityWidget'] = & new QypeCityWidget(); require_once( dirname(__FILE__)."/php/widgets/button-widget/widget.php"); $GLOBALS['QypeButtonWidget'] = & new QypeButtonWidget(); } /** * Retrieves the options from the database. * @return array */ function getAdminOptions() { $adminOptions = array("username" => "", "style" => "classic"); $savedOptions = get_option($this->adminOptionsName); if(!empty($savedOptions)) { foreach ($savedOptions as $key => $option) { $adminOptions[$key] = $option; } } if( !empty( $_POST['qype-suite'] ) ) $adminOptions = shortcode_atts( $adminOptions, $_POST['qype-suite'] ); update_option($this->adminOptionsName, $adminOptions); return $adminOptions; } /** * Saves the admin options to the database. */ function saveAdminOptions() { update_option($this->adminOptionsName, $this->adminOptions); } function add_admin_pages() { add_submenu_page('options-general.php', "Qype", "Qype", 10, "Qype", array(&$this,"output_sub_admin_page")); } /** * Outputs the HTML for the admin sub page. */ function output_sub_admin_page() { $options = $this->adminOptions; include(dirname(__FILE__).'/php/admin/options.php'); } /** * qype_shortcode_handler - produces and returns the content to replace the shortcode tag * * @param array $atts An array of attributes passed from the shortcode * @param string $content If the shortcode wraps round some html, this will be passed. */ function qype_shortcode_handler($atts , $content = null) { $attributes = shortcode_atts(array( 'id' => 1, 'language' => 'de' ), $atts); //get place data $place = $this->find_place($attributes['id']); if( !$place->valid() ) return 'place not found'; // render baloon with image, link, raiting address, map?? return WpQypeSuite::tooltip($place, $content); } function find_place( $id, $use_caching = true ) { global $wpdb; if( !empty( $this->places[$id] ) ) return $this->places[$id]; if( $use_caching ) { $place_row = $wpdb->get_row("SELECT object FROM ".$this->db_table_name." WHERE id = ".$id." AND typ = 'place' AND created_at > SUBTIME(NOW(),'48:0:0')"); if( $place_row->object ) { $this->places[$id] = unserialize( $place_row->object ); return $this->places[$id]; } } $this->places[$id] = QypePlace::find_by_id( $id); if( $use_caching ) $wpdb->query( $wpdb->prepare( "INSERT INTO ".$this->db_table_name." SET id = ".$id.", typ = 'place', object ='".addslashes( serialize($this->places[$id])."' ON DUPLICATE KEY UPDATE" ) ) ); return $this->places[$id]; } /** * Tells WordPress to load the scripts */ function add_scripts() { wp_enqueue_script('jquery'); wp_enqueue_script('dimensions', WP_PLUGIN_URL.'/all-in-one-qype-suite/js/jquery.dimensions.js', array("jquery")); wp_enqueue_script('cluetip', WP_PLUGIN_URL.'/all-in-one-qype-suite/js/jquery.cluetip.js', array('dimensions')); wp_enqueue_script('qtip', WP_PLUGIN_URL.'/all-in-one-qype-suite/js/qtip.js', array('cluetip')); } /** * Adds a link to the stylesheet to the header */ function add_css() { $style = ($this->adminOptions['style'] != 'classic' ) ? 'qypeNewStyle' : 'qypeStyle'; wp_enqueue_style( $style ); } //***************************************************************************************** function media_buttons_context($context) { global $post_ID, $temp_ID; $dir = dirname(__FILE__); $image_btn = WP_PLUGIN_URL.'/all-in-one-qype-suite/imgs/icon.gif'; $image_title = __('All in one Qype Suite - Place Chooser', 'qype-suite'); $uploading_iframe_ID = (int) (0 == $post_ID ? $temp_ID : $post_ID); $media_upload_iframe_src = "media-upload.php?post_id=$uploading_iframe_ID"; $out = ' '.$image_title.''; return $context.$out; } function media_upload_content_favorites () { $this->media_upload_content('qype-favorites'); } function media_upload_content($tab = 'qype-search') { add_filter('media_upload_tabs', array(&$this, 'media_upload_tabs')); wp_enqueue_style( 'media'); add_action('qype_media_upload_header', 'media_upload_header'); if( $tab == 'qype-favorites' ) { wp_iframe(array(&$this, 'media_favorites_tab')); } else { wp_iframe(array(&$this, 'media_search_tab')); } } function media_upload_tabs($tabs) { return array( 'qype-search' => 'Search', 'qype-favorites' => 'Favorites' ); } function media_search_tab() { if( !empty($_GET['search_qype_query']) || !empty($_GET['search_qype_locator']) ) { $term = $_GET['search_qype_query']; $city = $_GET['search_qype_locator']; $places = QypePlace::find_all_by_term_and_city( $term, $city, 30 ); } include(dirname(__FILE__).'/php/tabs/search-tab.php'); } function media_favorites_tab() { include(dirname(__FILE__).'/php/tabs/favorites-tab.php'); } function save_geo_data($post_id) { $post_id = (int) $post_id; if ( !$post =& get_post( $post_id ) ) return false; preg_match( '/\[qype id="([0-9]+)"\]/s', $post->post_content, $erg); if( !empty( $erg[1]) ) { $place = $this->find_place($erg[1]); update_post_meta($post_id, '_geo_location', $place->point); update_post_meta($post_id, '_wp_geo_longitude', $place->lng()); update_post_meta($post_id, '_wp_geo_latitude', $place->lat()); } } static function tooltip( $place, $title = '', $link = '' ) { // set content to place title if content empty if( empty( $title ) ) $title = $place->title; if( empty( $link ) ) $link = $place->link; $content = ''.$title.' '; return $content; } } class QypeWidget { function getDisplayTemplate($file) { $path = file_exists(TEMPLATEPATH . '/'.$file) ? TEMPLATEPATH : dirname(__FILE__); return $path.'/php/widgets/'.$file; } function get_language() { list( $language, $country ) = explode( '_', get_locale() ); return $language; } function get_tld() { $lng = $this->get_language(); switch( $lng ) { case 'en': return 'co.uk'; default: return $lng; } } } } //instantiate the class if (class_exists('WpQypeSuite')) { $WpQypeSuite = new WpQypeSuite(); } ?>