vc-settings-presets.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <?php
  2. if ( ! defined( 'ABSPATH' ) ) {
  3. die( '-1' );
  4. }
  5. add_action( 'wp_ajax_vc_action_save_settings_preset', 'vc_action_save_settings_preset' );
  6. add_action( 'wp_ajax_vc_action_set_as_default_settings_preset', 'vc_action_set_as_default_settings_preset' );
  7. add_action( 'wp_ajax_vc_action_delete_settings_preset', 'vc_action_delete_settings_preset' );
  8. add_action( 'wp_ajax_vc_action_restore_default_settings_preset', 'vc_action_restore_default_settings_preset' );
  9. add_action( 'wp_ajax_vc_action_get_settings_preset', 'vc_action_get_settings_preset' );
  10. add_action( 'wp_ajax_vc_action_render_settings_preset_popup', 'vc_action_render_settings_preset_popup' );
  11. add_action( 'wp_ajax_vc_action_render_settings_preset_title_prompt', 'vc_action_render_settings_preset_title_prompt' );
  12. add_action( 'wp_ajax_vc_action_render_settings_templates_prompt', 'vc_action_render_settings_templates_prompt' );
  13. add_action( 'vc_restore_default_settings_preset', 'vc_action_set_as_default_settings_preset', 10, 2 );
  14. add_action( 'vc_register_settings_preset', 'vc_register_settings_preset', 10, 4 );
  15. add_filter( 'vc_add_new_elements_to_box', 'vc_add_new_elements_to_box' );
  16. add_filter( 'vc_add_new_category_filter', 'vc_add_new_category_filter' );
  17. function vc_include_settings_preset_class() {
  18. require_once vc_path_dir( 'AUTOLOAD_DIR', 'class-vc-settings-presets.php' );
  19. }
  20. /**
  21. * @return Vc_Vendor_Preset
  22. */
  23. function vc_vendor_preset() {
  24. require_once vc_path_dir( 'AUTOLOAD_DIR', 'class-vc-vendor-presets.php' );
  25. return Vc_Vendor_Preset::getInstance();
  26. }
  27. /**
  28. * Save settings preset for specific shortcode
  29. *
  30. * Include freshly rendered html in response
  31. *
  32. * Required _POST params:
  33. * - shortcode_name string
  34. * - title string
  35. * - data string params in json
  36. * - is_default
  37. *
  38. * @since 4.7
  39. */
  40. function vc_action_save_settings_preset() {
  41. vc_include_settings_preset_class();
  42. vc_user_access()->part( 'presets' )->checkStateAny( true, null )->validateDie(); // user must have permission to save presets
  43. $id = Vc_Settings_Preset::saveSettingsPreset( vc_post_param( 'shortcode_name' ), vc_post_param( 'title' ), vc_post_param( 'data' ), vc_post_param( 'is_default' ) );
  44. $response = array(
  45. 'success' => (bool) $id,
  46. 'html' => Vc_Settings_Preset::getRenderedSettingsPresetPopup( vc_post_param( 'shortcode_name' ) ),
  47. 'id' => $id,
  48. );
  49. wp_send_json( $response );
  50. }
  51. /**
  52. * Set existing preset as default
  53. *
  54. * Include freshly rendered html in response
  55. *
  56. * Required _POST params:
  57. * - id int
  58. * - shortcode_name string
  59. *
  60. * @since 4.7
  61. */
  62. function vc_action_set_as_default_settings_preset() {
  63. vc_include_settings_preset_class();
  64. vc_user_access()->part( 'presets' )->checkStateAny( true, null )->validateDie(); // user must have permission to set as default presets
  65. $id = vc_post_param( 'id' );
  66. $shortcode_name = vc_post_param( 'shortcode_name' );
  67. $status = Vc_Settings_Preset::setAsDefaultSettingsPreset( $id, $shortcode_name );
  68. $response = array(
  69. 'success' => $status,
  70. 'html' => Vc_Settings_Preset::getRenderedSettingsPresetPopup( $shortcode_name ),
  71. );
  72. wp_send_json( $response );
  73. }
  74. /**
  75. * Unmark current default preset as default
  76. *
  77. * Include freshly rendered html in response
  78. *
  79. * Required _POST params:
  80. * - shortcode_name string
  81. *
  82. * @since 4.7
  83. */
  84. function vc_action_restore_default_settings_preset() {
  85. vc_include_settings_preset_class();
  86. vc_user_access()->part( 'presets' )->checkStateAny( true, null )->validateDie(); // user must have permission to restore presets
  87. $shortcode_name = vc_post_param( 'shortcode_name' );
  88. $status = Vc_Settings_Preset::setAsDefaultSettingsPreset( null, $shortcode_name );
  89. $response = array(
  90. 'success' => $status,
  91. 'html' => Vc_Settings_Preset::getRenderedSettingsPresetPopup( $shortcode_name ),
  92. );
  93. wp_send_json( $response );
  94. }
  95. /**
  96. * Delete specific settings preset
  97. *
  98. * Include freshly rendered html in response
  99. *
  100. * Required _POST params:
  101. * - shortcode_name string
  102. * - id int
  103. *
  104. * @since 4.7
  105. */
  106. function vc_action_delete_settings_preset() {
  107. vc_include_settings_preset_class();
  108. vc_user_access()->part( 'presets' )->checkStateAny( true, null )->validateDie(); // user must have permission to delete presets
  109. $default = get_post_meta( vc_post_param( 'id' ), '_vc_default', true );
  110. $status = Vc_Settings_Preset::deleteSettingsPreset( vc_post_param( 'id' ) );
  111. $response = array(
  112. 'success' => $status,
  113. 'default' => $default,
  114. 'html' => Vc_Settings_Preset::getRenderedSettingsPresetPopup( vc_post_param( 'shortcode_name' ) ),
  115. );
  116. wp_send_json( $response );
  117. }
  118. /**
  119. * Get data for specific settings preset
  120. *
  121. * Required _POST params:
  122. * - id int
  123. *
  124. * @since 4.7
  125. */
  126. function vc_action_get_settings_preset() {
  127. vc_include_settings_preset_class();
  128. $data = Vc_Settings_Preset::getSettingsPreset( vc_post_param( 'id' ), true );
  129. if ( false !== $data ) {
  130. $response = array(
  131. 'success' => true,
  132. 'data' => $data,
  133. );
  134. } else {
  135. $response = array(
  136. 'success' => false,
  137. );
  138. }
  139. wp_send_json( $response );
  140. }
  141. /**
  142. * Respond with rendered popup menu
  143. *
  144. * Required _POST params:
  145. * - shortcode_name string
  146. *
  147. * @since 4.7
  148. */
  149. function vc_action_render_settings_preset_popup() {
  150. vc_include_settings_preset_class();
  151. $html = Vc_Settings_Preset::getRenderedSettingsPresetPopup( vc_post_param( 'shortcode_name' ) );
  152. $response = array(
  153. 'success' => true,
  154. 'html' => $html,
  155. );
  156. wp_send_json( $response );
  157. }
  158. /**
  159. * Return rendered title prompt
  160. *
  161. * @since 4.7
  162. *
  163. */
  164. function vc_action_render_settings_preset_title_prompt() {
  165. vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'edit_posts', 'edit_pages' )->validateDie()->part( 'presets' )->can()->validateDie();
  166. ob_start();
  167. vc_include_template( apply_filters( 'vc_render_settings_preset_title_prompt', 'editors/partials/prompt-presets.tpl.php' ) );
  168. $html = ob_get_clean();
  169. $response = array(
  170. 'success' => true,
  171. 'html' => $html,
  172. );
  173. wp_send_json( $response );
  174. }
  175. /**
  176. * Return rendered template prompt
  177. */
  178. function vc_action_render_settings_templates_prompt() {
  179. vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'edit_posts', 'edit_pages' )->validateDie()->part( 'templates' )->can()->validateDie();
  180. ob_start();
  181. vc_include_template( apply_filters( 'vc_render_settings_preset_title_prompt', 'editors/partials/prompt-templates.tpl.php' ) );
  182. $html = ob_get_clean();
  183. $response = array(
  184. 'success' => true,
  185. 'html' => $html,
  186. );
  187. wp_send_json( $response );
  188. }
  189. /**
  190. * Register (add) new vendor preset
  191. *
  192. * @since 4.8
  193. *
  194. * @param string $title
  195. * @param string $shortcode
  196. * @param array $params
  197. * @param bool $default
  198. */
  199. function vc_register_settings_preset( $title, $shortcode, $params, $default = false ) {
  200. vc_vendor_preset()->add( $title, $shortcode, $params, $default );
  201. }
  202. /**
  203. * @param $shortcodes
  204. * @return array
  205. * @throws \Exception
  206. */
  207. function vc_add_new_elements_to_box( $shortcodes ) {
  208. require_once vc_path_dir( 'AUTOLOAD_DIR', 'class-vc-settings-presets.php' );
  209. return Vc_Settings_Preset::addVcPresetsToShortcodes( $shortcodes );
  210. }
  211. /**
  212. * @param $cat
  213. * @return array
  214. */
  215. function vc_add_new_category_filter( $cat ) {
  216. require_once vc_path_dir( 'AUTOLOAD_DIR', 'class-vc-settings-presets.php' );
  217. return Vc_Settings_Preset::addPresetCategory( $cat );
  218. }