| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- <?php
- if ( ! defined( 'ABSPATH' ) ) {
- die( '-1' );
- }
- /**
- * Collection of static methods for work with settings presets
- *
- * @since 4.8
- */
- class Vc_Settings_Preset {
- /**
- * Get default preset id for specific shortcode
- *
- * @since 4.7
- *
- * @param string $shortcode_name
- *
- * @return mixed int|null
- */
- public static function getDefaultSettingsPresetId( $shortcode_name = null ) {
- if ( ! $shortcode_name ) {
- return null;
- }
- $args = array(
- 'post_type' => 'vc_settings_preset',
- 'post_mime_type' => self::constructShortcodeMimeType( $shortcode_name ),
- 'posts_per_page' => - 1,
- 'meta_key' => '_vc_default',
- 'meta_value' => true,
- );
- $posts = get_posts( $args );
- if ( $posts ) {
- $default_id = $posts[0]->ID;
- } else {
- // check for vendor presets
- $default_id = vc_vendor_preset()->getDefaultId( $shortcode_name );
- }
- return $default_id;
- }
- /**
- * Set existing preset as default
- *
- * If this is vendor preset, clone it and set new one as default
- *
- * @param int $id If falsy, no default will be set
- * @param string $shortcode_name
- *
- * @return boolean
- *
- * @since 4.7
- */
- public static function setAsDefaultSettingsPreset( $id, $shortcode_name ) {
- $post_id = self::getDefaultSettingsPresetId( $shortcode_name );
- if ( $post_id ) {
- delete_post_meta( $post_id, '_vc_default' );
- }
- if ( $id ) {
- if ( is_numeric( $id ) ) {
- // user preset
- update_post_meta( $id, '_vc_default', true );
- } else {
- // vendor preset
- $preset = vc_vendor_preset()->get( $id );
- if ( ! $preset || $shortcode_name !== $preset['shortcode'] ) {
- return false;
- }
- self::saveSettingsPreset( $preset['shortcode'], $preset['title'], wp_json_encode( $preset['params'] ), true );
- }
- }
- return true;
- }
- /**
- * Get mime type for specific shortcode
- *
- * @since 4.7
- *
- * @param $shortcode_name
- *
- * @return string
- */
- public static function constructShortcodeMimeType( $shortcode_name ) {
- return 'vc-settings-preset/' . str_replace( '_', '-', $shortcode_name );
- }
- /**
- * Get shortcode name from post's mime type
- *
- * @since 4.7
- *
- * @param string $post_mime_type
- *
- * @return string
- */
- public static function extractShortcodeMimeType( $post_mime_type ) {
- $chunks = explode( '/', $post_mime_type );
- if ( 2 !== count( $chunks ) ) {
- return '';
- }
- return str_replace( '-', '_', $chunks[1] );
- }
- /**
- * Get all presets
- *
- * @since 5.2
- *
- * @return array E.g. array(preset_id => value, preset_id => value, ...)
- */
- public static function listAllPresets() {
- $list = array();
- $args = array(
- 'post_type' => 'vc_settings_preset',
- 'posts_per_page' => - 1,
- );
- // user presets
- $posts = get_posts( $args );
- foreach ( $posts as $post ) {
- $shortcode_name = self::extractShortcodeMimeType( $post->post_mime_type );
- $list[ $post->ID ] = (array) json_decode( $post->post_content );
- }
- // vendor presets
- $presets = self::listDefaultVendorSettingsPresets();
- foreach ( $presets as $shortcode => $params ) {
- if ( ! isset( $list[ $shortcode ] ) ) {
- $list[ $shortcode ] = $params;
- }
- }
- return $list;
- }
- /**
- * Get all default presets
- *
- * @since 4.7
- *
- * @return array E.g. array(shortcode_name => value, shortcode_name => value, ...)
- */
- public static function listDefaultSettingsPresets() {
- $list = array();
- $args = array(
- 'post_type' => 'vc_settings_preset',
- 'posts_per_page' => - 1,
- 'meta_key' => '_vc_default',
- 'meta_value' => true,
- );
- // user presets
- $posts = get_posts( $args );
- foreach ( $posts as $post ) {
- $shortcode_name = self::extractShortcodeMimeType( $post->post_mime_type );
- $list[ $shortcode_name ] = (array) json_decode( $post->post_content );
- }
- // vendor presets
- $presets = self::listDefaultVendorSettingsPresets();
- foreach ( $presets as $shortcode => $params ) {
- if ( ! isset( $list[ $shortcode ] ) ) {
- $list[ $shortcode ] = $params;
- }
- }
- return $list;
- }
- /**
- * Get all default vendor presets
- *
- * @since 4.8
- *
- * @return array E.g. array(shortcode_name => value, shortcode_name => value, ...)
- */
- public static function listDefaultVendorSettingsPresets() {
- $list = array();
- $presets = vc_vendor_preset()->getDefaults();
- foreach ( $presets as $id => $preset ) {
- $list[ $preset['shortcode'] ] = $preset['params'];
- }
- return $list;
- }
- /**
- * Save shortcode preset
- *
- * @since 4.7
- *
- * @param string $shortcode_name
- * @param string $title
- * @param string $content
- * @param boolean $is_default
- *
- * @return mixed int|false Post ID
- */
- public static function saveSettingsPreset( $shortcode_name, $title, $content, $is_default = false ) {
- $post_id = wp_insert_post( array(
- 'post_title' => $title,
- 'post_content' => $content,
- 'post_status' => 'publish',
- 'post_type' => 'vc_settings_preset',
- 'post_mime_type' => self::constructShortcodeMimeType( $shortcode_name ),
- ), false );
- if ( $post_id && $is_default ) {
- self::setAsDefaultSettingsPreset( $post_id, $shortcode_name );
- }
- return $post_id;
- }
- /**
- * Get list of all presets for specific shortcode
- *
- * @since 4.7
- *
- * @param string $shortcode_name
- *
- * @return array E.g. array(id1 => title1, id2 => title2, ...)
- */
- public static function listSettingsPresets( $shortcode_name = null ) {
- $list = array();
- if ( ! $shortcode_name ) {
- return $list;
- }
- $args = array(
- 'post_type' => 'vc_settings_preset',
- 'orderby' => array( 'post_date' => 'DESC' ),
- 'posts_per_page' => - 1,
- 'post_mime_type' => self::constructShortcodeMimeType( $shortcode_name ),
- );
- $posts = get_posts( $args );
- foreach ( $posts as $post ) {
- $list[ $post->ID ] = $post->post_title;
- }
- return $list;
- }
- /**
- * Get list of all vendor presets for specific shortcode
- *
- * @since 4.8
- *
- * @param string $shortcode_name
- *
- * @return array E.g. array(id1 => title1, id2 => title2, ...)
- */
- public static function listVendorSettingsPresets( $shortcode_name = null ) {
- $list = array();
- if ( ! $shortcode_name ) {
- return $list;
- }
- $presets = vc_vendor_preset()->getAll( $shortcode_name );
- foreach ( $presets as $id => $preset ) {
- $list[ $id ] = $preset['title'];
- }
- return $list;
- }
- /**
- * Get specific shortcode preset
- *
- * @since 4.7
- *
- * @param mixed $id Can be int (user preset) or string (vendor preset)
- * @param bool $array If true, return array instead of string
- *
- * @return mixed string?array Post content
- */
- public static function getSettingsPreset( $id, $array = false ) {
- if ( is_numeric( $id ) ) {
- // user preset
- $post = get_post( $id );
- if ( ! $post ) {
- return false;
- }
- $params = $array ? (array) json_decode( $post->post_content ) : $post->post_content;
- } else {
- // vendor preset
- $preset = vc_vendor_preset()->get( $id );
- if ( ! $preset ) {
- return false;
- }
- $params = $preset['params'];
- }
- return $params;
- }
- /**
- * Delete shortcode preset
- *
- * @since 4.7
- *
- * @param int $post_id Post must be of type 'vc_settings_preset'
- *
- * @return bool
- */
- public static function deleteSettingsPreset( $post_id ) {
- $post = get_post( $post_id );
- if ( ! $post || 'vc_settings_preset' !== $post->post_type ) {
- return false;
- }
- return (bool) wp_delete_post( $post_id, true );
- }
- /**
- * Return rendered popup menu
- *
- * @since 4.7
- *
- * @param string $shortcode_name
- *
- * @return string
- */
- public static function getRenderedSettingsPresetPopup( $shortcode_name ) {
- $list_vendor_presets = self::listVendorSettingsPresets( $shortcode_name );
- $list_presets = self::listSettingsPresets( $shortcode_name );
- $default_id = self::getDefaultSettingsPresetId( $shortcode_name );
- if ( ! $default_id ) {
- $default_id = vc_vendor_preset()->getDefaultId( $shortcode_name );
- }
- ob_start();
- vc_include_template( apply_filters( 'vc_render_settings_preset_popup', 'editors/partials/settings_presets_popup.tpl.php' ), array(
- 'list_presets' => array(
- $list_presets,
- $list_vendor_presets,
- ),
- 'default_id' => $default_id,
- 'shortcode_name' => $shortcode_name,
- ) );
- $html = ob_get_clean();
- return $html;
- }
- /**
- * @param $shortcodes
- *
- * @return array
- * @throws \Exception
- */
- public static function addVcPresetsToShortcodes( $shortcodes ) {
- if ( vc_user_access()->part( 'presets' )->can()->get() ) {
- $shortcodesAndPresets = array();
- foreach ( $shortcodes as $shortcode ) {
- $presets = self::listSettingsPresets( $shortcode['base'] );
- $shortcodesAndPresets[ $shortcode['base'] ] = $shortcode;
- if ( ! empty( $presets ) ) {
- foreach ( $presets as $presetId => $preset ) {
- $shortcodesAndPresets[ $presetId ] = array(
- 'name' => $preset,
- 'base' => $shortcode['base'],
- 'description' => $shortcode['description'],
- 'presetId' => $presetId,
- '_category_ids' => array( '_my_elements_' ),
- );
- if ( isset( $shortcode['icon'] ) ) {
- $shortcodesAndPresets[ $presetId ]['icon'] = $shortcode['icon'];
- }
- }
- }
- }
- return $shortcodesAndPresets;
- }
- return $shortcodes;
- }
- /**
- * @param $category
- *
- * @return array
- */
- public static function addPresetCategory( $category ) {
- $presetCategory = (array) '_my_elements_';
- $category = array_merge( $presetCategory, $category );
- return $category;
- }
- }
|