class-fl-builder-user-templates-admin-add.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. /**
  3. * Logic for the user templates admin add new form.
  4. *
  5. * @since 1.10
  6. */
  7. final class FLBuilderUserTemplatesAdminAdd {
  8. /**
  9. * Initialize hooks.
  10. *
  11. * @since 1.10
  12. * @return void
  13. */
  14. static public function init() {
  15. /* Actions */
  16. add_action( 'init', __CLASS__ . '::process_form', 11 );
  17. add_action( 'admin_enqueue_scripts', __CLASS__ . '::admin_enqueue_scripts' );
  18. }
  19. /**
  20. * Enqueue scripts and styles for user templates.
  21. *
  22. * @since 1.10
  23. * @return void
  24. */
  25. static public function admin_enqueue_scripts() {
  26. $slug = 'fl-builder-user-templates-admin-';
  27. $url = VAMTAMEL_B_USER_TEMPLATES_URL;
  28. $version = FL_BUILDER_VERSION;
  29. $page = isset( $_GET['page'] ) ? $_GET['page'] : null;
  30. $action = __( 'Add', 'vamtam-elements-b' );
  31. if ( 'fl-builder-add-new' == $page ) {
  32. wp_enqueue_style( 'jquery-tiptip', FL_BUILDER_URL . 'css/jquery.tiptip.css', array(), $version );
  33. wp_enqueue_script( 'jquery-tiptip', FL_BUILDER_URL . 'js/jquery.tiptip.min.js', array( 'jquery' ), $version, true );
  34. wp_enqueue_script( 'jquery-validate', FL_BUILDER_URL . 'js/jquery.validate.min.js', array(), $version, true );
  35. wp_enqueue_style( $slug . 'add', $url . 'css/' . $slug . 'add.css', array(), $version );
  36. wp_enqueue_script( $slug . 'add', $url . 'js/' . $slug . 'add.js', array(), $version, true );
  37. wp_localize_script( $slug . 'add', 'FLBuilderConfig', apply_filters( 'fl_builder_user_templates_add_new_config', array(
  38. 'strings' => array(
  39. 'addButton' => array(
  40. 'add' => _x( 'Add', 'Generic add button label for adding new content.', 'vamtam-elements-b' ),
  41. 'layout' => sprintf( _x( '%s Saved Template', '%s is an action like Add, Edit or View.', 'vamtam-elements-b' ), $action ),
  42. 'row' => sprintf( _x( '%s Saved Row', '%s is an action like Add, Edit or View.', 'vamtam-elements-b' ), $action ),
  43. 'module' => sprintf( _x( '%s Saved Module', '%s is an action like Add, Edit or View.', 'vamtam-elements-b' ), $action ),
  44. ),
  45. ),
  46. ) ) );
  47. }
  48. }
  49. /**
  50. * Renders the Add New page.
  51. *
  52. * @since 1.10
  53. * @return void
  54. */
  55. static public function render() {
  56. $modules = FLBuilderModel::get_categorized_modules();
  57. $selected_type = isset( $_GET['fl-builder-template-type'] ) ? $_GET['fl-builder-template-type'] : '';
  58. $types = apply_filters( 'fl_builder_user_templates_add_new_types', array(
  59. 100 => array(
  60. 'key' => 'layout',
  61. 'label' => __( 'Template', 'vamtam-elements-b' ),
  62. ),
  63. 200 => array(
  64. 'key' => 'row',
  65. 'label' => __( 'Saved Row', 'vamtam-elements-b' ),
  66. ),
  67. 300 => array(
  68. 'key' => 'module',
  69. 'label' => __( 'Saved Module', 'vamtam-elements-b' ),
  70. ),
  71. ) );
  72. include VAMTAMEL_B_USER_TEMPLATES_DIR . 'includes/admin-add-new-form.php';
  73. }
  74. /**
  75. * Adds a new template if the add new form was submitted.
  76. *
  77. * @since 1.10
  78. * @return void
  79. */
  80. static public function process_form() {
  81. $page = isset( $_GET['page'] ) ? $_GET['page'] : null;
  82. if ( 'fl-builder-add-new' != $page ) {
  83. return;
  84. }
  85. if ( ! isset( $_POST['fl-add-template'] ) ) {
  86. return;
  87. }
  88. if ( ! wp_verify_nonce( $_POST['fl-add-template'], 'fl-add-template-nonce' ) ) {
  89. return;
  90. }
  91. $title = sanitize_text_field( $_POST['fl-template']['title'] );
  92. $type = sanitize_text_field( $_POST['fl-template']['type'] );
  93. $post_type = apply_filters( 'fl_builder_user_templates_add_new_post_type', 'fl-builder-template', $type );
  94. // Insert the post.
  95. $post_id = wp_insert_post( array(
  96. 'post_title' => $title,
  97. 'post_type' => $post_type,
  98. 'post_status' => 'draft',
  99. 'ping_status' => 'closed',
  100. 'comment_status' => 'closed',
  101. ) );
  102. // Enable the builder.
  103. update_post_meta( $post_id, '_fl_builder_enabled', true );
  104. // Let extensions hook additional logic for custom types.
  105. do_action( 'fl_builder_user_templates_add_new_submit', $type, $title, $post_id );
  106. // Setup a new layout, row or module template if we have one.
  107. self::setup_new_template( $type, $post_id );
  108. // Redirect to the new post.
  109. wp_redirect( admin_url( "/post.php?post={$post_id}&action=edit" ) );
  110. exit;
  111. }
  112. /**
  113. * Sets the needed info for new templates.
  114. *
  115. * @since 1.10
  116. * @private
  117. * @return void
  118. */
  119. static private function setup_new_template( $type, $post_id ) {
  120. // Make sure we have a template.
  121. if ( ! in_array( $type, array( 'layout', 'row', 'module' ) ) ) {
  122. return;
  123. }
  124. $template_id = FLBuilderModel::generate_node_id();
  125. $global = isset( $_POST['fl-template']['global'] ) ? 1 : 0;
  126. $module = sanitize_text_field( $_POST['fl-template']['module'] );
  127. // Set the template type.
  128. wp_set_post_terms( $post_id, $type, 'fl-builder-template-type' );
  129. // Set row and module template meta.
  130. if ( in_array( $type, array( 'row', 'module' ) ) ) {
  131. update_post_meta( $post_id, '_fl_builder_template_id', $template_id );
  132. update_post_meta( $post_id, '_fl_builder_template_global', $global );
  133. }
  134. // Force the builder to use this post ID.
  135. FLBuilderModel::set_post_id( $post_id );
  136. // Add a new row or module?
  137. if ( 'row' == $type ) {
  138. $saved_node = FLBuilderModel::add_row();
  139. } elseif ( 'module' == $type ) {
  140. $settings = FLBuilderModel::get_module_defaults( $module );
  141. $saved_node = FLBuilderModel::add_module( $module, $settings );
  142. }
  143. // Make the new template global?
  144. if ( $global && isset( $saved_node ) ) {
  145. $data = FLBuilderModel::get_layout_data();
  146. foreach ( $data as $node_id => $node ) {
  147. if ( $node_id == $saved_node->node ) {
  148. $data[ $node_id ]->template_root_node = true;
  149. }
  150. $data[ $node_id ]->template_id = $template_id;
  151. $data[ $node_id ]->template_node_id = $node_id;
  152. }
  153. FLBuilderModel::update_layout_data( $data );
  154. }
  155. // Reset the builder's post ID.
  156. FLBuilderModel::reset_post_id();
  157. }
  158. }
  159. FLBuilderUserTemplatesAdminAdd::init();