'widget_twitter', 'description' => __( 'Follow a Twitter Feed', 'twitter-widget-pro' ) ); $control_ops = array( 'width' => 400, 'height' => 350, 'id_base' => 'twitter' ); $name = __( 'Twitter Widget Pro', 'twitter-widget-pro' ); $this->WP_Widget('twitter', $name, $widget_ops, $control_ops); } private function _getInstanceSettings ( $instance ) { $defaultArgs = array( 'title' => '', 'errmsg' => '', 'fetchTimeOut' => '2', 'username' => '', 'hiderss' => false, 'hidereplies' => false, 'avatar' => false, 'showXavisysLink' => false, 'targetBlank' => false, 'items' => 10, 'showts' => 60 * 60 * 24, ); return wp_parse_args( $instance, $defaultArgs ); } public function form( $instance ) { $instance = $this->_getInstanceSettings( $instance ); ?>

/>

/>

/>

/>

/>

_getInstanceSettings( $new_instance ); // Clean up the free-form areas $instance['title'] = stripslashes($new_instance['title']); $instance['errmsg'] = stripslashes($new_instance['errmsg']); // If the current user isn't allowed to use unfiltered HTML, filter it if ( !current_user_can('unfiltered_html') ) { $instance['title'] = strip_tags($new_instance['title']); $instance['errmsg'] = strip_tags($new_instance['errmsg']); } return $instance; } public function flush_widget_cache() { wp_cache_delete('widget_twitter_widget_pro', 'widget'); } public function widget( $args, $instance ) { $instance = $this->_getInstanceSettings( $instance ); $wpTwitterWidget = wpTwitterWidget::getInstance(); echo $wpTwitterWidget->display( wp_parse_args( $instance, $args ) ); } } /** * wpTwitterWidget is the class that handles everything outside the widget. This * includes filters that modify tweet content for things like linked usernames. * It also helps us avoid name collisions. */ class wpTwitterWidget { /** * Static property to hold our singleton instance */ static $instance = false; /** * @var array Plugin settings */ private $_settings; /** * This is our constructor, which is private to force the use of getInstance() * @return void */ private function __construct() { /** * Add filters and actions */ add_filter( 'init', array( $this, 'init_locale') ); add_action( 'widgets_init', array($this, 'register') ); add_filter( 'widget_twitter_content', array($this, 'linkTwitterUsers') ); add_filter( 'widget_twitter_content', array($this, 'linkUrls') ); add_filter( 'widget_twitter_content', array($this, 'linkHashtags') ); add_filter( 'widget_twitter_content', 'convert_chars' ); add_filter( 'plugin_action_links', array($this, 'addWidgetLink'), 10, 2 ); add_action ( 'in_plugin_update_message-'.plugin_basename ( __FILE__ ) , array ( $this , '_changelog' ), null, 2 ); add_shortcode( 'twitter-widget', array( $this, 'handleShortcodes' ) ); } /** * Function to instantiate our class and make it a singleton */ public static function getInstance() { if ( !self::$instance ) { self::$instance = new self; } return self::$instance; } public function init_locale() { $lang_dir = basename(dirname(__FILE__)) . '/languages'; load_plugin_textdomain('twitter-widget-pro', 'wp-content/plugins/' . $lang_dir, $lang_dir); } public function _changelog ($pluginData, $newPluginData) { require_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); $plugin = plugins_api( 'plugin_information', array( 'slug' => $newPluginData->slug ) ); if ( !$plugin || is_wp_error( $plugin ) || empty( $plugin->sections['changelog'] ) ) { return; } $changes = $plugin->sections['changelog']; $pos = strpos( $changes, '

' . $pluginData['Version'] ); $changes = trim( substr( $changes, 0, $pos ) ); $replace = array( '