/**
  * Saves a node template.
  *
  * @since 1.6.3
  * @param string $template_node_id The ID of the node to save as a template.
  * @param string $settings The settings for this template.
  * @return void
  */
 public static function save_node_template($template_node_id, $settings)
 {
     $root_node = self::get_node($template_node_id);
     $nodes = self::get_nested_nodes($template_node_id);
     $template_id = self::generate_node_id();
     $original_parent = $root_node->parent;
     $original_position = $root_node->position;
     // Save the node template post.
     $post_id = wp_insert_post(array('post_title' => $settings['name'], 'post_type' => 'fl-builder-template', 'post_status' => 'publish', 'ping_status' => 'closed', 'comment_status' => 'closed'));
     // Set the template type.
     wp_set_post_terms($post_id, $root_node->type, 'fl-builder-template-type');
     // Reset the root node's position.
     $root_node->position = 0;
     // Add the root node to the nodes array.
     $nodes[$root_node->node] = $root_node;
     // Generate new node ids.
     $nodes = self::generate_new_node_ids($nodes);
     // Get the root node from the template data since its ID changed.
     $root_node = self::get_node_template_root($root_node->type, $nodes);
     // Add the template ID and template node ID for global templates.
     if ($settings['global']) {
         foreach ($nodes as $node_id => $node) {
             $nodes[$node_id]->template_id = $template_id;
             $nodes[$node_id]->template_node_id = $node_id;
             if ($node_id == $root_node->node) {
                 $nodes[$node_id]->template_root_node = true;
             } else {
                 if (isset($nodes[$node_id]->template_root_node)) {
                     unset($nodes[$node_id]->template_root_node);
                 }
             }
         }
     } else {
         foreach ($nodes as $node_id => $node) {
             if (isset($nodes[$node_id]->template_id)) {
                 unset($nodes[$node_id]->template_id);
             }
             if (isset($nodes[$node_id]->template_node_id)) {
                 unset($nodes[$node_id]->template_node_id);
             }
             if (isset($nodes[$node_id]->template_root_node)) {
                 unset($nodes[$node_id]->template_root_node);
             }
         }
     }
     // Save the template layout data.
     self::update_layout_data($nodes, 'published', $post_id);
     self::update_layout_data($nodes, 'draft', $post_id);
     // Enable the builder for this template.
     update_post_meta($post_id, '_fl_builder_enabled', true);
     // Add the template ID post meta. We use a custom ID for node
     // templates in case templates are imported since their WordPress
     // IDs will change, breaking global templates.
     update_post_meta($post_id, '_fl_builder_template_id', $template_id);
     // Add the template global flag post meta.
     update_post_meta($post_id, '_fl_builder_template_global', $settings['global']);
     // Delete the existing node and apply the template for global templates.
     if ($settings['global']) {
         // Delete the existing node.
         self::delete_node($template_node_id);
         // Apply the global template.
         $root_node = self::apply_node_template($template_id, $original_parent, $original_position);
     }
     // Return an array of template settings.
     return array('id' => $template_id, 'global' => $settings['global'] ? true : false, 'link' => add_query_arg('fl_builder', '', get_permalink($post_id)), 'name' => $settings['name'], 'type' => $root_node->type, 'layout' => $settings['global'] ? FLBuilderAJAXLayout::render($root_node->node, $template_node_id) : null);
 }
 /**
  * Returns an array of partial refresh data.
  *
  * @since 1.7
  * @access private
  * @return array
  */
 private static function get_partial_refresh_data()
 {
     // Get the data if it's not cached.
     if (!self::$partial_refresh_data) {
         $post_data = FLBuilderModel::get_post_data();
         $partial_refresh = false;
         // Check for partial refresh if we have a node ID.
         if (isset($post_data['node_id'])) {
             // Get the node.
             $node_id = $post_data['node_id'];
             $node = FLBuilderModel::get_node($post_data['node_id']);
             // Check a module for partial refresh.
             if ($node && 'module' == $node->type) {
                 $node = FLBuilderModel::get_module($node_id);
                 $node_type = 'module';
                 $partial_refresh = $node->partial_refresh;
             } else {
                 if ($node) {
                     $node_type = $node->type;
                     $partial_refresh = self::node_modules_support_partial_refresh($node);
                 }
             }
         }
         // Clear the node data if we're not doing a partial refresh.
         if (!$partial_refresh) {
             $node_id = null;
             $node = null;
             $node_type = null;
         }
         // Cache the partial refresh data.
         self::$partial_refresh_data = array('is_partial_refresh' => $partial_refresh, 'node_id' => $node_id, 'node' => $node, 'node_type' => $node_type);
     }
     // Return the data.
     return self::$partial_refresh_data;
 }
Пример #3
0
 /**
  * Renders the settings lightbox for a module.
  *
  * @since 1.0
  * @param string $node_id The module node ID.
  * @param string $type The type of module.
  * @param string $parent_id The parent column node ID.
  * @param bool $render_state Whether to render the preview state or not.
  * @return array
  */
 public static function render_module_settings($node_id = null, $type = null, $parent_id = null, $render_state = true)
 {
     $buttons = array();
     $assets = '';
     // Get the module and settings.
     if ($node_id) {
         $module = FLBuilderModel::get_module($node_id);
         $settings = $module->settings;
     } else {
         $module = FLBuilderModel::$modules[$type];
         $settings = FLBuilderModel::get_module_defaults($type);
     }
     // Is this module global?
     $global = FLBuilderModel::is_node_global($module);
     // Add the Save As button?
     if (!$global && !FLBuilderModel::is_post_node_template() && FLBuilderModel::node_templates_enabled()) {
         $buttons[] = 'save-as';
     }
     // Render the settings CSS/JS assets.
     if (file_exists($module->dir . 'css/settings.css')) {
         $assets .= '<link class="fl-builder-settings-css" rel="stylesheet" href="' . $module->url . 'css/settings.css" />';
     }
     if (file_exists($module->dir . 'js/settings.js')) {
         $assets .= '<script class="fl-builder-settings-js" src="' . $module->url . 'js/settings.js"></script>';
     }
     // Render the form.
     $rendered_settings = self::render_settings(array('class' => 'fl-builder-module-settings fl-builder-' . $type . '-settings', 'attrs' => 'data-node="' . $node_id . '" data-parent="' . $parent_id . '" data-type="' . $type . '"', 'title' => sprintf(_x('%s Settings', '%s stands for module name.', 'fl-builder'), $module->name), 'badges' => $global ? array('global' => _x('Global', 'Indicator for global node templates.', 'fl-builder')) : array(), 'tabs' => $module->form, 'buttons' => $buttons), $settings);
     // Return the HTML.
     return array('settings' => $assets . $rendered_settings['html'], 'state' => $render_state ? FLBuilderAJAXLayout::render($node_id) : null);
 }