コード例 #1
0
ファイル: migrator.php プロジェクト: IlhamFS/wordpress
 /**
  *  Import
  */
 public function import($import_data = NULL, $is_preset = FALSE, $clear_page = FALSE)
 {
     if (NULL == $import_data) {
         return;
     }
     global $wp_registered_sidebars, $sidebars_widgets;
     // Get all available widgets site supports
     $available_widgets = $this->available_widgets();
     // Get all existing widget instances
     $widget_instances = array();
     foreach ($available_widgets as $widget_data) {
         $widget_instances[$widget_data['id_base']] = get_option('widget_' . $widget_data['id_base']);
     }
     // Begin results
     $results = array();
     if (empty($import_data['widget_data'])) {
         return;
     }
     foreach ($import_data['widget_data'] as $sidebar_id => $sidebar_data) {
         $layers_sidebar_key = 'obox-layers-builder-';
         if (FALSE !== $clear_page && isset($import_data['post_id'])) {
             $this->clear_page_sidebars_widget($layers_sidebar_key . $import_data['post_id']);
         }
         // If this is a builder page, set the ID to the current page we are importing INTO
         if (FALSE !== strpos($sidebar_id, $layers_sidebar_key)) {
             $sidebar_id = $layers_sidebar_key . $import_data['post_id'];
         }
         // Check if sidebar is available on this site
         // Otherwise add widgets to inactive, and say so
         if (isset($wp_registered_sidebars[$sidebar_id])) {
             $sidebar_available = true;
             $use_sidebar_id = $sidebar_id;
             $sidebar_message_type = 'success';
             $sidebar_message = '';
         } elseif (isset($import_data['post_hash'])) {
             $args = array('meta_key' => '_layers_hash', 'meta_value' => $import_data['post_hash'], 'post_type' => 'page', 'post_status' => 'publish,draft', 'posts_per_page' => 1);
             $check_for_post = get_posts($args);
             if (!empty($check_for_post)) {
                 $new_post_id = $check_for_post[0]->ID;
             } else {
                 $new_post_id = layers_create_builder_page($import_data['post_title']);
                 update_post_meta($new_post_id, '_layers_hash', $import_data['post_hash'], false);
             }
             if ($new_post_id) {
                 $sidebar_available = true;
                 $use_sidebar_id = $layers_sidebar_key . $new_post_id;
                 $sidebar_message_type = 'success';
                 $sidebar_message = '';
             } else {
                 $sidebar_available = false;
                 $use_sidebar_id = 'wp_inactive_widgets';
                 // add to inactive if sidebar does not exist in theme
                 $sidebar_message_type = 'error';
                 $sidebar_message = __('Sidebar does not exist in theme (using Inactive)', 'layerswp');
             }
         } else {
             $sidebar_available = false;
             $use_sidebar_id = 'wp_inactive_widgets';
             // add to inactive if sidebar does not exist in theme
             $sidebar_message_type = 'error';
             $sidebar_message = __('Sidebar does not exist in theme (using Inactive)', 'layerswp');
         }
         // Result for sidebar
         $results[$sidebar_id]['name'] = !empty($wp_registered_sidebars[$sidebar_id]['name']) ? $wp_registered_sidebars[$sidebar_id]['name'] : $sidebar_id;
         // sidebar name if theme supports it; otherwise ID
         $results[$sidebar_id]['message_type'] = $sidebar_message_type;
         $results[$sidebar_id]['message'] = $sidebar_message;
         $results[$sidebar_id]['widgets'] = array();
         // Loop widgets
         foreach ($sidebar_data as $widget_instance_id => $widget) {
             /*
              * Debug
              */
             // Check for and import images
             foreach ($widget as $option => $widget_data) {
                 $widget[$option] = $this->check_for_images($widget_data);
             }
             $fail = false;
             // Get id_base (remove -# from end) and instance ID number
             $id_base = preg_replace('/-[0-9]+$/', '', $widget_instance_id);
             $instance_id_number = str_replace($id_base . '-', '', $widget_instance_id);
             // Does widget with identical settings already exist in same sidebar?
             if (!$fail && isset($widget_instances[$id_base])) {
                 // Get existing widgets in this sidebar
                 $sidebars_widgets = get_option('sidebars_widgets');
                 $sidebar_widgets = isset($sidebars_widgets[$use_sidebar_id]) ? $sidebars_widgets[$use_sidebar_id] : array();
                 // check Inactive if that's where will go
                 // Loop widgets with ID base
                 $single_widget_instances = !empty($widget_instances[$id_base]) ? $widget_instances[$id_base] : array();
                 foreach ($single_widget_instances as $check_id => $check_widget) {
                     // Is widget in same sidebar and has identical settings?
                     if (in_array("{$id_base}-{$check_id}", $sidebar_widgets) && (array) $widget == $check_widget) {
                         $fail = true;
                         $widget_message_type = 'warning';
                         $widget_message = __('Widget already exists', 'layerswp');
                         // explain why widget not imported
                         break;
                     }
                 }
             }
             // No failure
             if (!$fail) {
                 // Add widget instance
                 $single_widget_instances = get_option('widget_' . $id_base);
                 // all instances for that widget ID base, get fresh every time
                 $single_widget_instances = !empty($single_widget_instances) ? $single_widget_instances : array('_multiwidget' => 1);
                 // start fresh if have to
                 $single_widget_instances[] = (array) $widget;
                 // add it
                 // Get the key it was given
                 end($single_widget_instances);
                 $new_instance_id_number = key($single_widget_instances);
                 // If key is 0, make it 1
                 // When 0, an issue can occur where adding a widget causes data from other widget to load, and the widget doesn't stick (reload wipes it)
                 if ('0' === strval($new_instance_id_number)) {
                     $new_instance_id_number = 1;
                     $single_widget_instances[$new_instance_id_number] = $single_widget_instances[0];
                     unset($single_widget_instances[0]);
                 }
                 // Move _multiwidget to end of array for uniformity
                 if (isset($single_widget_instances['_multiwidget'])) {
                     $multiwidget = $single_widget_instances['_multiwidget'];
                     unset($single_widget_instances['_multiwidget']);
                     $single_widget_instances['_multiwidget'] = $multiwidget;
                 }
                 // Update option with new widget
                 update_option('widget_' . $id_base, $single_widget_instances);
                 // Assign widget instance to sidebar
                 $sidebars_widgets = get_option('sidebars_widgets');
                 // which sidebars have which widgets, get fresh every time
                 $new_instance_id = $id_base . '-' . $new_instance_id_number;
                 // use ID number from new widget instance
                 $sidebars_widgets[$use_sidebar_id][] = $new_instance_id;
                 // add new instance to sidebar
                 update_option('sidebars_widgets', $sidebars_widgets);
                 // save the amended data
                 // Success message
                 if ($sidebar_available) {
                     $widget_message_type = 'success';
                     $widget_message = __('Imported', 'layerswp');
                 } else {
                     $widget_message_type = 'warning';
                     $widget_message = __('Imported to Inactive', 'layerswp');
                 }
             }
             // Result for widget instance
             $results[$sidebar_id]['widgets'][$widget_instance_id]['name'] = isset($available_widgets[$id_base]['name']) ? $available_widgets[$id_base]['name'] : $id_base;
             // widget name or ID if name not available (not supported by site)
             $results[$sidebar_id]['widgets'][$widget_instance_id]['title'] = isset($widget->title) ? $widget->title : __('No Title', 'layerswp');
             // show "No Title" if widget instance is untitled
             $results[$sidebar_id]['widgets'][$widget_instance_id]['message_type'] = $widget_message_type;
             $results[$sidebar_id]['widgets'][$widget_instance_id]['message'] = $widget_message;
         }
     }
     ob_start();
     dynamic_sidebar('obox-layers-builder-' . $import_data['post_id']);
     $results['sidebar_html'] = trim(ob_get_clean());
     if (FALSE == $is_preset) {
         do_action('layers_backup_sidebars_widgets');
     }
     return $results;
 }
コード例 #2
0
ファイル: migrator.php プロジェクト: antares-ff/ANTARES-Test
 /**
  * Ajax Create a Builder Page from a preset page
  *
  * This function takes on the Preset Page Data and runs the import() function
  */
 public function create_builder_page_from_preset()
 {
     global $layers_widgets;
     $check_builder_pages = layers_get_builder_pages();
     if (isset($_POST['post_title'])) {
         $post_title = $_POST['post_title'];
     } else {
         $post_title = __('Home Page', 'layerswp');
     }
     // Generate builder page and return page ID
     $import_data['post_id'] = layers_create_builder_page($post_title);
     $new_page = get_page($import_data['post_id']);
     // Register Builder Sidebar
     $layers_widgets->register_builder_sidebar($import_data['post_id']);
     // Add Widget Data to the import array
     if (isset($_POST['widget_data'])) {
         $import_data['widget_data'] = $_POST['widget_data'];
     } else {
         $import_data['widget_data'] = NULL;
     }
     // Run data import
     $import_progress = $this->import($import_data);
     if (count($check_builder_pages) == 0) {
         update_option('page_on_front', $import_data['post_id']);
         update_option('show_on_front', 'page');
     }
     $results = array('post_id' => $import_data['post_id'], 'post_title' => $new_page->post_title, 'data_report' => $import_progress, 'customizer_location' => admin_url() . 'customize.php?url=' . esc_url(get_the_permalink($import_data['post_id'])));
     die(json_encode($results));
 }