ION ) !== 0 ) { add_action( 'vc_after_init', array( vc_settings(), 'rebuild', ) ); update_option( 'vc_version', WPB_VC_VERSION ); } } /** * Get current mode for VC. * * @since 4.2 * @access public * * @return string */ public function mode() { return $this->mode; } /** * Setter for paths * * @since 4.2 * @access protected * * @param $paths */ protected function setPaths( $paths ) { $this->paths = $paths; } /** * Gets absolute path for file/directory in filesystem. * * @since 4.2 * @access public * * @param $name - name of path dir * @param string $file - file name or directory inside path * * @return string */ public function path( $name, $file = '' ) { $path = $this->paths[ $name ] . ( strlen( $file ) > 0 ? '/' . preg_replace( '/^\//', '', $file ) : '' ); return apply_filters( 'vc_path_filter', $path ); } /** * Set default post types. Vc editors are enabled for such kind of posts. * * @param array $type - list of default post types. */ public function setEditorDefaultPostTypes( array $type ) { $this->editor_default_post_types = $type; } /** * Returns list of default post types where user can use WPBakery Page Builder editors. * * @since 4.2 * @access public * * @return array */ public function editorDefaultPostTypes() { return $this->editor_default_post_types; } /** * Get post types where VC editors are enabled. * * @since 4.2 * @access public * * @return array */ public function editorPostTypes() { if ( is_null( $this->editor_post_types ) ) { $post_types = array_keys( vc_user_access()->part( 'post_types' )->getAllCaps() ); $this->editor_post_types = $post_types ? $post_types : $this->editorDefaultPostTypes(); } return $this->editor_post_types; } /** * Set post types where VC editors are enabled. * * @since 4.4 * @access public * * @param array $post_types */ public function setEditorPostTypes( array $post_types ) { $this->editor_post_types = ! empty( $post_types ) ? $post_types : $this->editorDefaultPostTypes(); require_once ABSPATH . 'wp-admin/includes/user.php'; $editable_roles = get_editable_roles(); foreach ( $editable_roles as $role => $settings ) { $part = vc_role_access()->who( $role )->part( 'post_types' ); $all_post_types = $part->getAllCaps(); foreach ( $all_post_types as $post_type => $value ) { $part->getRole()->remove_cap( $part->getStateKey() . '/' . $post_type ); } $part->setState( 'custom' ); foreach ( $this->editor_post_types as $post_type ) { $part->setCapRule( $post_type ); } } } /** * Setter for as-theme-plugin status for VC. * * @since 4.2 * @access public * * @param bool $value */ public function setIsAsTheme( $value = true ) { $this->is_as_theme = (boolean) $value; } /** * Get as-theme-plugin status * * As theme plugin status used by theme developers. It disables settings * * @since 4.2 * @access public * * @return bool */ public function isAsTheme() { return (boolean) $this->is_as_theme; } /** * Setter for as network plugin for MultiWP. * * @since 4.2 * @access public * * @param bool $value */ public function setAsNetworkPlugin( $value = true ) { $this->is_network_plugin = $value; } /** * Gets VC is activated as network plugin. * * @since 4.2 * @access public * * @return bool */ public function isNetworkPlugin() { if ( is_null( $this->is_network_plugin ) ) { // Check is VC as network plugin if ( is_multisite() && ( is_plugin_active_for_network( $this->pluginName() ) || is_network_only_plugin( $this->pluginName() ) ) ) { $this->setAsNetworkPlugin( true ); } } return $this->is_network_plugin ? true : false; } /** * Setter for disable updater variable. * @since 4.2 * @see * * @param bool $value */ public function disableUpdater( $value = true ) { $this->disable_updater = $value; } /** * Get is vc updater is disabled; * * @since 4.2 * @see to where updater will be * * @return bool */ public function isUpdaterDisabled() { return is_admin() && $this->disable_updater; } /** * Set user directory name. * * Directory name is the directory name vc should scan for custom shortcodes template. * * @since 4.2 * @access public * * @param $dir - path to shortcodes templates inside developers theme */ public function setCustomUserShortcodesTemplateDir( $dir ) { preg_replace( '/\/$/', '', $dir ); $this->custom_user_templates_dir = $dir; } /** * Get default directory where shortcodes templates area placed. * * @since 4.2 * @access public * * @return string - path to default shortcodes */ public function getDefaultShortcodesTemplatesDir() { return vc_path_dir( 'TEMPLATES_DIR', 'shortcodes' ); } /** * * Get shortcodes template dir. * * @since 4.2 * @access public * * @param $template * * @return string */ public function getShortcodesTemplateDir( $template ) { return false !== $this->custom_user_templates_dir ? $this->custom_user_templates_dir . '/' . $template : locate_template( 'vc_templates' . '/' . $template ); } /** * Directory name where template files will be stored. * * @since 4.2 * @access public * * @return string */ public function uploadDir() { return 'js_composer'; } /** * Getter for VC_Mapper instance * * @since 4.2 * @access public * * @return Vc_Mapper */ public function mapper() { if ( ! isset( $this->factory['mapper'] ) ) { require_once $this->path( 'CORE_DIR', 'class-vc-mapper.php' ); $this->factory['mapper'] = new Vc_Mapper(); } return $this->factory['mapper']; } /** * WPBakery Page Builder. * * @since 4.2 * @access public * * @return Vc_Base */ public function vc() { if ( ! isset( $this->factory['vc'] ) ) { do_action( 'vc_before_init_vc' ); require_once $this->path( 'CORE_DIR', 'class-vc-base.php' ); $vc = new Vc_Base(); // DI Set template new modal editor. require_once $this->path( 'EDITORS_DIR', 'popups/class-vc-templates-panel-editor.php' ); require_once $this->path( 'CORE_DIR', 'shared-templates/class-vc-shared-templates.php' ); $vc->setTemplatesPanelEditor( new Vc_Templates_Panel_Editor() ); // Create shared templates $vc->shared_templates = new Vc_Shared_Templates(); // DI Set edit form require_once $this->path( 'EDITORS_DIR', 'popups/class-vc-shortcode-edit-form.php' ); $vc->setEditForm( new Vc_Shortcode_Edit_Form() ); // DI Set preset new modal editor. require_once $this->path( 'EDITORS_DIR', 'popups/class-vc-preset-panel-editor.php' ); $vc->setPresetPanelEditor( new Vc_Preset_Panel_Editor() ); $this->factory['vc'] = $vc; do_action( 'vc_after_init_vc' ); } return $this->factory['vc']; } /** * Vc options. * * @since 4.2 * @access public * * @return Vc_Settings */ public function settings() { if ( ! isset( $this->factory['settings'] ) ) { do_action( 'vc_before_init_settings' ); require_once $this->path( 'SETTINGS_DIR', 'class-vc-settings.php' ); $this->factory['settings'] = new Vc_Settings(); do_action( 'vc_after_init_settings' ); } return $this->factory['settings']; } /** * Vc license settings. * * @since 4.2 * @access public * * @return Vc_License */ public function license() { if ( ! isset( $this->factory['license'] ) ) { do_action( 'vc_before_init_license' ); require_once $this->path( 'SETTINGS_DIR', 'class-vc-license.php' ); $this->factory['license'] = new Vc_License(); do_action( 'vc_after_init_license' ); } return $this->factory['license']; } /** * Get frontend VC editor. * * @since 4.2 * @access public * * @return Vc_Frontend_Editor */ public function frontendEditor() { if ( ! isset( $this->factory['frontend_editor'] ) ) { do_action( 'vc_before_init_frontend_editor' ); require_once $this->path( 'EDITORS_DIR', 'class-vc-frontend-editor.php' ); $this->factory['frontend_editor'] = new Vc_Frontend_Editor(); } return $this->factory['frontend_editor']; } /** * Get backend VC editor. Edit page version. * * @since 4.2 * * @return Vc_Backend_Editor */ public function backendEditor() { if ( ! isset( $this->factory['backend_editor'] ) ) { do_action( 'vc_before_init_backend_editor' ); require_once $this->path( 'EDITORS_DIR', 'class-vc-backend-editor.php' ); $this->factory['backend_editor'] = new Vc_Backend_Editor(); } return $this->factory['backend_editor']; } /** * Gets automapper instance. * * @since 4.2 * @access public * * @return Vc_Automapper */ public function automapper() { if ( ! isset( $this->factory['automapper'] ) ) { do_action( 'vc_before_init_automapper' ); require_once $this->path( 'SETTINGS_DIR', 'class-vc-automapper.php' ); $this->factory['automapper'] = new Vc_Automapper(); do_action( 'vc_after_init_automapper' ); } return $this->factory['automapper']; } /** * Gets updater instance. * @since 4.2 * * @return Vc_Updater */ public function updater() { if ( ! isset( $this->factory['updater'] ) ) { do_action( 'vc_before_init_updater' ); require_once $this->path( 'UPDATERS_DIR', 'class-vc-updater.php' ); $updater = new Vc_Updater(); require_once vc_path_dir( 'UPDATERS_DIR', 'class-vc-updating-manager.php' ); $updater->setUpdateManager( new Vc_Updating_Manager( WPB_VC_VERSION, $updater->versionUrl(), $this->pluginName() ) ); $this->factory['updater'] = $updater; do_action( 'vc_after_init_updater' ); } return $this->factory['updater']; } /** * Getter for plugin name variable. * @since 4.2 * * @return string */ public function pluginName() { return $this->plugin_name; } /** * @since 4.8.1 * */ public function setPluginName( $name ) { $this->plugin_name = $name; } /** * Get absolute url for VC asset file. * * Assets are css, javascript, less files and images. * * @since 4.2 * * @param $file * * @return string */ public function assetUrl( $file ) { return preg_replace( '/\s/', '%20', plugins_url( $this->path( 'ASSETS_DIR_NAME', $file ), __FILE__ ) ); } } /** * Main WPBakery Page Builder manager. * @var Vc_Manager $vc_manager - instance of composer management. * @since 4.2 */ global $vc_manager; if ( ! $vc_manager ) { $vc_manager = Vc_Manager::getInstance(); // Load components $vc_manager->loadComponents(); }