_init(); } $this->_getSettings(); if ( is_callable( array($this, '_postSettingsInit') ) ) { $this->_postSettingsInit(); } add_filter( 'init', array( $this, 'init_locale' ) ); add_action( 'admin_init', array( $this, 'registerOptions' ) ); add_filter( 'plugin_action_links', array( $this, 'addPluginPageLinks' ), 10, 2 ); add_filter( 'plugin_row_meta', array( $this, 'addPluginMetaLinks' ), 10, 2 ); add_action( 'admin_menu', array( $this, 'registerOptionsPage' ) ); if ( is_callable(array( $this, 'addOptionsMetaBoxes' )) ) { add_action( 'admin_init', array( $this, 'addOptionsMetaBoxes' ) ); } add_action( 'admin_init', array( $this, 'addDefaultOptionsMetaBoxes' ) ); add_action( 'wp_dashboard_setup', array( $this, 'addDashboardWidgets' ), null, 9 ); add_action( 'admin_print_scripts', array( $this,'optionsPageScripts' ) ); add_action( 'admin_print_styles', array( $this,'optionsPageStyles' ) ); /** * Add update messages that can be attached to the CURRENT release (not * this one), but only for 2.8+ */ global $wp_version; if ( version_compare('2.8', $wp_version, '<=') ) { add_action ( 'in_plugin_update_message-'.$this->_file , array ( $this , 'changelog' ), null, 2 ); } } /** * Function to instantiate our class and make it a singleton */ abstract public static function getInstance(); public function init_locale() { $lang_dir = basename(dirname(__FILE__)) . '/languages'; load_plugin_textdomain( $this->_slug, 'wp-content/plugins/' . $lang_dir, $lang_dir); } protected function _getSettings() { foreach ( $this->_optionNames as $opt ) { $this->_settings[$opt] = apply_filters($this->_slug.'-opt-'.$opt, get_option($opt)); } } public function registerOptions() { foreach ( $this->_optionNames as $opt ) { if ( !empty($this->_optionCallbacks[$opt]) && is_callable( $this->_optionCallbacks[$opt] ) ) { $callback = $this->_optionCallbacks[$opt]; } else { $callback = ''; } register_setting( $this->_optionGroup, $opt, $callback ); } } 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, '

' . preg_replace('/[^\d\.]/', '', $pluginData['Version'] ) ); if ( $pos !== false ) { $changes = trim( substr( $changes, 0, $pos ) ); } $replace = array( '