ty', 'call_method' ); foreach ($trace as $key => &$value) { if (isset($value['class']) && isset($value['function'])) { if ($value['class'] == 'ReflectionMethod' && $value['function'] == 'invokeArgs') unset($trace[$key]); else if ($value['class'] == 'ExtensibleObject' && in_array($value['function'], $skip_methods)) unset($trace[$key]); } } } return $trace; } function __construct() { // Boostrap set_exception_handler(__CLASS__.'::shutdown'); $this->_define_constants(); $this->_load_non_pope(); $this->_register_hooks(); $this->_load_pope(); } function _load_non_pope() { // Load caching component include_once('non_pope/class.photocrati_cache.php'); C_Photocrati_Cache::get_instance(); C_Photocrati_Cache::get_instance('displayed_galleries'); C_Photocrati_Cache::get_instance('displayed_gallery_rendering'); C_Photocrati_Cache::$enabled = PHOTOCRATI_CACHE; if (isset($_REQUEST['ngg_flush'])) { C_Photocrati_Cache::flush('all'); die("Flushed all caches"); } elseif (isset($_REQUEST['ngg_force_update'])) { C_Photocrati_Cache::$do_not_lookup = TRUE; C_Photocrati_Cache::$force_update = TRUE; $_SERVER['QUERY_STRING'] = str_replace('ngg_force_update=1', '', $_SERVER['QUERY_STRING']); } elseif (isset($_REQUEST['ngg_flush_expired'])) { C_Photocrati_Cache::flush('all', TRUE); die("Flushed all expired items from the cache"); } // Load Settings Manager include_once('non_pope/class.photocrati_settings_manager.php'); include_once('non_pope/class.nextgen_settings.php'); C_Photocrati_Global_Settings_Manager::$option_name = $this->_settings_option_name; C_Photocrati_Settings_Manager::$option_name = $this->_settings_option_name; // Load the installer include_once('non_pope/class.photocrati_installer.php'); // Load the resource manager include_once('non_pope/class.photocrati_resource_manager.php'); C_Photocrati_Resource_Manager::init(); // Load the style manager include_once('non_pope/class.nextgen_style_manager.php'); // Load the shortcode manager include_once('non_pope/class.nextgen_shortcode_manager.php'); } /** * Loads the Pope Framework */ function _load_pope() { // No need to initialize pope again if ($this->_pope_loaded) return; // Pope requires a a higher limit $tmp = ini_get('xdebug.max_nesting_level'); if ($tmp && (int)$tmp <= 300) @ini_set('xdebug.max_nesting_level', 300); // Include pope framework require_once(implode( DIRECTORY_SEPARATOR, array(NGG_PLUGIN_DIR, 'pope','lib','autoload.php') )); // Get the component registry $this->_registry = C_Component_Registry::get_instance(); // Add the default Pope factory utility, C_Component_Factory $this->_registry->add_utility('I_Component_Factory', 'C_Component_Factory'); // Load embedded products. Each product is expected to load any // modules required $this->_registry->add_module_path(NGG_PRODUCT_DIR, true, false); $this->_registry->load_all_products(); // Give third-party plugins that opportunity to include their own products // and modules do_action('load_nextgen_gallery_modules', $this->_registry); // Initializes all loaded modules $this->_registry->initialize_all_modules(); $this->_pope_loaded = TRUE; } /** * Registers hooks for the WordPress framework necessary for instantiating * the plugin */ function _register_hooks() { // Register the activation routines add_action('activate_'.NGG_PLUGIN_BASENAME, array(get_class(), 'activate')); // Register the deactivation routines add_action('deactivate_'.NGG_PLUGIN_BASENAME, array(get_class(), 'deactivate')); // Register our test suite add_filter('simpletest_suites', array(&$this, 'add_testsuite')); // Ensure that settings manager is saved as an array add_filter('pre_update_option_'.$this->_settings_option_name, array(&$this, 'persist_settings')); add_filter('pre_update_site_option_'.$this->_settings_option_name, array(&$this, 'persist_settings')); // This plugin uses jQuery extensively if (NGG_FIX_JQUERY) { add_action('wp_enqueue_scripts', array(&$this, 'fix_jquery')); add_action('wp_print_scripts', array(&$this, 'fix_jquery')); } // If the selected stylesheet is using an unsafe path, then notify the user if (C_NextGen_Style_Manager::get_instance()->is_directory_unsafe()) { add_action('all_admin_notices', array(&$this, 'display_stylesheet_notice')); } // Delete displayed gallery transients periodically add_filter('cron_schedules', array(&$this, 'add_ngg_schedule')); add_action('ngg_delete_expired_transients', array(&$this, 'delete_expired_transients')); add_action('wp', array(&$this, 'schedule_cron_jobs')); // Update modules add_action('init', array(&$this, 'update'), PHP_INT_MAX-1); // Start the plugin! add_action('init', array(&$this, 'route'), 11); } function schedule_cron_jobs() { if (!wp_next_scheduled('ngg_delete_expired_transients')) { wp_schedule_event(time(), 'ngg_custom', 'ngg_delete_expired_transients'); } } /** * Defines a new cron schedule * @param $schedules * @return mixed */ function add_ngg_schedule($schedules) { $schedules['ngg_custom'] = array( 'interval' => NGG_CRON_SCHEDULE, 'display' => sprintf(__('Every %d seconds', 'nggallery'), NGG_CRON_SCHEDULE) ); return $schedules; } /** * Flush all expires transients created by the plugin */ function delete_expired_transients() { C_Photocrati_Cache::flush('displayed_galleries', TRUE); } /** * Ensure that C_Photocrati_Settings_Manager gets persisted as an array * @param $settings * @return array */ function persist_settings($settings) { if (is_object($settings) && $settings instanceof C_Photocrati_Settings_Manager_Base) { $settings = $settings->to_array(); } return $settings; } /** * Ensures that the version of JQuery used is expected for NextGEN Gallery */ function fix_jquery() { global $wp_scripts; // Determine which version of jQuery to include $src = '/wp-includes/js/jquery/jquery.js'; // Ensure that jQuery is always set to the default if (isset($wp_scripts->registered['jquery'])) { $jquery = $wp_scripts->registered['jquery']; // There's an exception to the rule. We'll allow the same // version of jQuery as included with WP to be fetched from // Google AJAX libraries, as we have a systematic means of verifying // that won't cause any troubles $version = preg_quote($jquery->ver, '#'); if (!preg_match("#ajax\\.googleapis\\.com/ajax/libs/jquery/{$version}/jquery\\.min\\.js#", $jquery->src)) { $jquery->src = FALSE; if (array_search('jquery-core', $jquery->deps) === FALSE) { $jquery->deps[] = 'jquery-core'; } if (array_search('jquery-migrate', $jquery->deps) === FALSE) { $jquery->deps[] = 'jquery-migrate'; } } } // Ensure that jquery-core is used, as WP intended if (isset($wp_scripts->registered['jquery-core'])) { $wp_scripts->registered['jquery-core']->src = $src; } wp_enqueue_script('jquery'); } /** * Displays a notice to the user that the current stylesheet location is unsafe */ function display_stylesheet_notice() { $styles = C_NextGen_Style_Manager::get_instance(); $filename = $styles->get_selected_stylesheet(); $abspath = $styles->find_selected_stylesheet_abspath(); $newpath = $styles->new_dir; echo "

WARNING: NextGEN Gallery Stylesheet NOT Upgrade-safe

{$filename} is currently stored in {$abspath}, which isn't upgrade-safe. Please move the stylesheet to {$newpath} to ensure that your customizations persist after updates.

"; } /** * Updates all modules */ function update() { if ((!(defined('DOING_AJAX') && DOING_AJAX)) && !isset($_REQUEST['doing_wp_cron'])) { $this->_load_pope(); // Try updating all modules C_Photocrati_Installer::update(); } } /** * Routes access points using the Pope Router * @return boolean */ function route() { $this->_load_pope(); $router = $this->_registry->get_utility('I_Router'); if (!$router->serve_request() && $router->has_parameter_segments()) { return $router->passthru(); } } /** * Run the installer */ static function activate($network=FALSE) { C_Photocrati_Installer::update(); } /** * Run the uninstaller */ static function deactivate() { C_Photocrati_Installer::uninstall(NGG_PLUGIN_BASENAME); } /** * Defines necessary plugins for the plugin to load correctly */ function _define_constants() { // NextGEN by Photocrati Constants define('NGG_PLUGIN', basename($this->directory_path())); define('NGG_PLUGIN_BASENAME', plugin_basename(__FILE__)); define('NGG_PLUGIN_DIR', $this->directory_path()); define('NGG_PLUGIN_URL', $this->path_uri()); define('NGG_TESTS_DIR', implode(DIRECTORY_SEPARATOR, array(rtrim(NGG_PLUGIN_DIR, "/\\"), 'tests'))); define('NGG_PRODUCT_DIR', implode(DIRECTORY_SEPARATOR, array(rtrim(NGG_PLUGIN_DIR, "/\\"), 'products'))); define('NGG_MODULE_DIR', implode(DIRECTORY_SEPARATOR, array(rtrim(NGG_PRODUCT_DIR, "/\\"), 'photocrati_nextgen', 'modules'))); define('NGG_PRODUCT_URL', path_join(str_replace("\\", '/', NGG_PLUGIN_URL), 'products')); define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules')); define('NGG_PLUGIN_STARTED_AT', microtime()); define('NGG_PLUGIN_VERSION', '2.0.66'); if (!defined('NGG_HIDE_STRICT_ERRORS')) { define('NGG_HIDE_STRICT_ERRORS', TRUE); } // Should we display E_STRICT errors? if (NGG_HIDE_STRICT_ERRORS) { $level = error_reporting(); if ($level != 0) error_reporting($level & ~E_STRICT); } // Should we display NGG debugging information? if (!defined('NGG_DEBUG')) { define('NGG_DEBUG', FALSE); } self::$debug = NGG_DEBUG; // User definable constants if (!defined('NGG_IMPORT_ROOT')) { $path = WP_CONTENT_DIR; define('NGG_IMPORT_ROOT', $path); } // Should the Photocrati cache be enabled if (!defined('PHOTOCRATI_CACHE')) { define('PHOTOCRATI_CACHE', TRUE); } if (!defined('PHOTOCRATI_CACHE_TTL')) { define('PHOTOCRATI_CACHE_TTL', 3600); } // Cron job if (!defined('NGG_CRON_SCHEDULE')) { define('NGG_CRON_SCHEDULE', 1800); } // Don't enforce interfaces if (!defined('EXTENSIBLE_OBJECT_ENFORCE_INTERFACES')) { define('EXTENSIBLE_OBJECT_ENFORCE_INTERFACES', FALSE); } // Fix jquery if (!defined('NGG_FIX_JQUERY')) { define('NGG_FIX_JQUERY', TRUE); } } /** * Defines the NextGEN Test Suite * @param array $suites * @return array */ function add_testsuite($suites=array()) { $tests_dir = NGG_TESTS_DIR; if (file_exists($tests_dir)) { // Include mock objects // TODO: These mock objects should be moved to the appropriate // test folder require_once(path_join($tests_dir, 'mocks.php')); // Define the NextGEN Test Suite $suites['nextgen'] = array( // path_join($tests_dir, 'mvc'), path_join($tests_dir, 'datamapper'), path_join($tests_dir, 'nextgen_data'), path_join($tests_dir, 'gallery_display') ); } return $suites; } /** * Returns the path to a file within the plugin root folder * @param type $file_name * @return type */ function file_path($file_name=NULL) { $path = dirname(__FILE__); if ($file_name != null) { $path .= '/' . $file_name; } return str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); } /** * Gets the directory path used by the plugin * @return string */ function directory_path($dir=NULL) { return $this->file_path($dir); } /** * Determines the location of the plugin - within a theme or plugin * @return string */ function get_plugin_location() { $path = dirname(__FILE__); $gallery_dir = strtolower($path); $gallery_dir = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $gallery_dir); $theme_dir = strtolower(get_stylesheet_directory()); $theme_dir = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $theme_dir); $plugin_dir = strtolower(WP_PLUGIN_DIR); $plugin_dir = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $plugin_dir); $common_dir_theme = substr($gallery_dir, 0, strlen($theme_dir)); $common_dir_plugin = substr($gallery_dir, 0, strlen($plugin_dir)); if ($common_dir_theme == $theme_dir) { return 'theme'; } if ($common_dir_plugin == $plugin_dir) { return 'plugin'; } $parent_dir = dirname($path); if (file_exists($parent_dir . DIRECTORY_SEPARATOR . 'style.css')) { return 'theme'; } return 'plugin'; } /** * Gets the URI for a particular path * @param string $path * @param boolean $url_encode * @return string */ function path_uri($path = null, $url_encode = false) { $location = $this->get_plugin_location(); $uri = null; $path = str_replace(array('/', '\\'), '/', $path); if ($url_encode) { $path_list = explode('/', $path); foreach ($path_list as $index => $path_item) { $path_list[$index] = urlencode($path_item); } $path = implode('/', $path_list); } if ($location == 'theme') { $theme_uri = get_stylesheet_directory_uri(); $uri = $theme_uri . 'nextgen-gallery'; if ($path != null) { $uri .= '/' . $path; } } else { // XXX Note, paths could not match but STILL being contained in the theme (i.e. WordPress returns the wrong path for the theme directory, either with wrong formatting or wrong encoding) $base = basename(dirname(__FILE__)); if ($base != 'nextgen-gallery') { // XXX this is needed when using symlinks, if the user renames the plugin folder everything will break though $base = 'nextgen-gallery'; } if ($path != null) { $base .= '/' . $path; } $uri = plugins_url($base); } return $uri; } /** * Returns the URI for a particular file * @param string $file_name * @return string */ function file_uri($file_name = NULL) { return $this->path($file_name); } } new C_NextGEN_Bootstrap();
Warning: Cannot modify header information - headers already sent by (output started at /home/recovadm/public_html/wp-content/plugins/nextgen-gallery/nggallery.php:529) in /home/recovadm/public_html/wp-includes/pluggable.php on line 1228