instantiate_extension( $plugin_file ); } } /** * Gets tribe extension plugin foldername prefixes * * @return array Prefixes */ public static function get_extension_file_prefixes() { $prefixes = [ 'tribe-ext-' ]; /** * Filter which plugin folder prefixes are considered tribe extensions. * * @param array $prefixes Extension plugin folder name prefixes. */ return apply_filters( 'tribe_extension_prefixes', $prefixes ); } /** * Instantiates an extension based on info in its plugin file header. * * @param string $plugin_file Full path to extension's plugin file header. * * @return bool Indicates if extension was instantiated successfully. */ public function instantiate_extension( $plugin_file ) { $p_data = $this->get_cached_plugin_data( $plugin_file ); $p_folder = trailingslashit( dirname( $plugin_file ) ); $success = false; // Nothing to instantiate if class is not set. if ( empty( $p_data['ExtensionClass'] ) ) { return $success; } // Default to plugin file when empty. $class_file = ! empty( $p_data['ExtensionFile'] ) ? $p_folder . $p_data['ExtensionFile'] : $plugin_file; // Include file. if ( file_exists( $class_file ) ) { // Prevent loading class twice in edge cases where require_once wouldn't work. if ( ! class_exists( $p_data['ExtensionClass'] ) ) { require( $class_file ); } } else { _doing_it_wrong( esc_html( $class_file ), 'Extension file does not exist, please specify valid extension file.', '4.3' ); } // Class instantiation. if ( class_exists( $p_data['ExtensionClass'] ) ) { $extension_args = [ 'file' => $plugin_file, 'plugin_data' => $p_data, ]; // Instantiates extension instance. $extension = call_user_func( [ $p_data['ExtensionClass'], 'instance' ], $p_data['ExtensionClass'], $extension_args ); if ( null !== $extension ) { $success = true; } } else { _doing_it_wrong( esc_html( $p_data['ExtensionClass'] ), 'Specified extension class does not exist. Please double check that this class is declared in the extension file.', '4.3' ); } return $success; } /** * Retrieves plugin data from cache if it exists. * * @param string $plugin_path Path to plugin header file. * * @return array|null Plugin data or null. */ public function get_cached_plugin_data( $plugin_path ) { $plugin_basename = plugin_basename( $plugin_path ); if ( ! array_key_exists( $plugin_basename, $this->plugin_data ) ) { $this->plugin_data[ $plugin_basename ] = Tribe__Utils__Plugins::get_plugin_data( $plugin_path ); } return $this->plugin_data[ $plugin_basename ]; } /** * Prevent cloning the singleton with 'clone' operator * * @return void */ public function __clone() { _doing_it_wrong( __FUNCTION__, 'Can not use this method on singletons.', '4.3' ); } /** * Prevent unserializing the singleton instance * * @return void */ public function __wakeup() { _doing_it_wrong( __FUNCTION__, 'Can not use this method on singletons.', '4.3' ); } }