private function hack_around_legacy_import_routine($import_data, $import_args = null) { add_filter('wpcf_admin_message_store', '__return_false'); $_POST['overwrite-settings'] = isset($import_args['overwrite-settings']) ? (bool) $import_args['overwrite-settings'] : false; $_POST['overwrite-groups'] = isset($import_args['overwrite-groups']) && 1 == $import_args['overwrite-groups'] ? 1 : 0; $_POST['overwrite-fields'] = isset($import_args['overwrite-fields']) && 1 == $import_args['overwrite-fields'] ? 1 : 0; $_POST['overwrite-types'] = isset($import_args['overwrite-types']) && 1 == $import_args['overwrite-types'] ? 1 : 0; $_POST['overwrite-tax'] = isset($import_args['overwrite-tax']) && 1 == $import_args['overwrite-tax'] ? 1 : 0; $_POST['post_relationship'] = isset($import_args['post_relationship']) ? (bool) $import_args['post_relationship'] : false; $_POST['delete-groups'] = isset($import_args['delete-groups']) ? (bool) $import_args['delete-groups'] : false; $_POST['delete-fields'] = isset($import_args['delete-fields']) ? (bool) $import_args['delete-fields'] : false; $_POST['delete-types'] = isset($import_args['delete-types']) ? (bool) $import_args['delete-types'] : false; $_POST['delete-tax'] = isset($import_args['delete-tax']) ? (bool) $import_args['delete-tax'] : false; /** * This can be emtpy string '' or 'wpvdemo', but this second option has a serious bug with xml parsing/looping */ $context = isset($import_args['context']) ? $import_args['context'] : ''; // Not sure if this is needed require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/import-export.php'; // Prepare legacy arguments for Types_Data_Installer $legacy_args = array(); if (isset($import_args['overwrite'])) { $legacy_args['force_import_post_name'] = wpcf_getarr($import_args, 'overwrite', array()); } if (isset($import_args['skip'])) { $legacy_args['force_skip_post_name'] = wpcf_getarr($import_args, 'skip', array()); } if (isset($import_args['duplicate'])) { $legacy_args['force_duplicate_post_name'] = wpcf_getarr($import_args, 'duplicate', array()); } $result = wpcf_admin_import_data($import_data, false, $context, $legacy_args); return true; }
/** * Compare checksums of types and import accordingly */ public function sync() { $index = array(); $configs = $this->getConfigs(); $current = get_option('types-manager-index', array()); $_POST['overwrite-groups'] = $_POST['overwrite-types'] = $_POST['overwrite-fields'] = $_POST['overwrite-tax'] = 1; $import = array(); foreach ($configs as $export_type => $types) { if (empty($types['__key'])) { continue; } $__key = $types['__key']; foreach ($types as $id => $data) { if ($id == '__key') { continue; } $index[$export_type][$id] = md5(serialize($data)); if (!isset($current[$export_type][$id]) || $current[$export_type][$id] != $index[$export_type][$id]) { // Import function checks for this $_POST[$export_type][$id] = array('add' => true, 'update' => true); $import[$export_type]['__key'] = $__key; $import[$export_type][$id] = $data; } } } if (count($import)) { require_once WPCF_INC_ABSPATH . '/fields.php'; require_once WPCF_INC_ABSPATH . '/import-export.php'; $xml = self::toXml($import, 'types'); foreach ($import as $export_type => $_) { wpcf_admin_import_data($xml, false, $export_type); } wpcf_init_custom_types_taxonomies(); flush_rewrite_rules(); update_option('types-manager-index', $index); } unset($_POST['overwrite-groups'], $_POST['overwrite-types'], $_POST['overwrite-fields'], $_POST['overwrite-tax']); }
/** * Imports settings. */ function wpcf_embedded_check_import() { if (file_exists(WPCF_EMBEDDED_ABSPATH . '/settings.php')) { require_once WPCF_EMBEDDED_ABSPATH . '/admin.php'; require_once WPCF_EMBEDDED_ABSPATH . '/settings.php'; $dismissed = get_option('wpcf_dismissed_messages', array()); if (in_array($timestamp, $dismissed)) { return false; } if ($timestamp > get_option('wpcf-types-embedded-import', 0)) { if (!$auto_import) { $link = "<a href=\"" . admin_url('?types-embedded-import=1&_wpnonce=' . wp_create_nonce('embedded-import')) . "\">"; $text = sprintf(__('You have Types import pending. %sClick here to import.%s %sDismiss message.%s', 'wpcf'), $link, '</a>', "<a onclick=\"jQuery(this).parent().parent().fadeOut();\" class=\"wpcf-ajax-link\" href=\"" . admin_url('admin-ajax.php?action=wpcf_ajax&wpcf_action=dismiss_message&id=' . $timestamp . '&_wpnonce=' . wp_create_nonce('dismiss_message')) . "\">", '</a>'); wpcf_admin_message($text); } if ($auto_import || isset($_GET['types-embedded-import']) && isset($_GET['_wpnonce']) && wp_verify_nonce($_GET['_wpnonce'], 'embedded-import')) { if (file_exists(WPCF_EMBEDDED_ABSPATH . '/settings.xml')) { $_POST['overwrite-groups'] = 1; $_POST['overwrite-fields'] = 1; $_POST['overwrite-types'] = 1; $_POST['overwrite-tax'] = 1; // $_POST['delete-groups'] = 0; // $_POST['delete-fields'] = 0; // $_POST['delete-types'] = 0; // $_POST['delete-tax'] = 0; $_POST['post_relationship'] = 1; require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php'; require_once WPCF_EMBEDDED_INC_ABSPATH . '/import-export.php'; $data = @file_get_contents(WPCF_EMBEDDED_ABSPATH . '/settings.xml'); wpcf_admin_import_data($data, false, 'types-auto-import'); update_option('wpcf-types-embedded-import', $timestamp); wp_redirect(admin_url()); } else { $code = __('settings.xml file missing', 'wpcf'); wpcf_admin_message($code, 'error'); } } } } }
/** * Import/Export form data. * * @return type */ function wpcf_admin_import_export_form() { $form = array(); $form['wpnonce'] = array('#type' => 'hidden', '#name' => '_wpnonce', '#value' => wp_create_nonce('wpcf_import')); if (isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'wpcf_import')) { if (isset($_POST['import-final'])) { if ($_POST['mode'] == 'file' && !empty($_POST['file']) && file_exists(urldecode($_POST['file']))) { $info = pathinfo(urldecode($_POST['file'])); $is_zip = $info['extension'] == 'zip' ? true : false; if ($is_zip) { $zip = zip_open(urldecode($_POST['file'])); if (is_resource($zip)) { while (($zip_entry = zip_read($zip)) !== false) { if (zip_entry_name($zip_entry) == 'settings.xml') { $data = @zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); } } } else { echo '<div class="message error"><p>' . __('Unable to open zip file', 'wpcf') . '</p></div>'; return array(); } } else { $data = @file_get_contents(urldecode($_POST['file'])); } if ($data) { wpcf_admin_import_data($data); } else { echo '<div class="message error"><p>' . __('Unable to process file', 'wpcf') . '</p></div>'; return array(); } } if ($_POST['mode'] == 'text' && !empty($_POST['text'])) { $charset = !empty($_POST['text-encoding']) ? $_POST['text-encoding'] : get_option('blog_charset'); wpcf_admin_import_data(stripslashes(html_entity_decode($_POST['text'], ENT_QUOTES, $charset))); } } else { if (isset($_POST['step'])) { $mode = 'none'; $data = ''; if (!empty($_POST['import-file']) && !empty($_FILES['file']['tmp_name'])) { if ($_FILES['file']['type'] == 'text/xml') { $_FILES['file']['name'] .= '.txt'; } $_POST['action'] = 'wp_handle_upload'; $uploaded_file = wp_handle_upload($_FILES['file'], array('test_form' => false, 'upload_error_handler' => 'wpcf_admin_import_export_file_upload_error')); if (isset($uploaded_file['error'])) { return array(); } if (empty($uploaded_file['file'])) { echo '<div class="message error"><p>' . __('Error uploading file', 'wpcf') . '</p></div>'; return array(); } $info = pathinfo($uploaded_file['file']); $is_zip = $info['extension'] == 'zip' ? true : false; if ($is_zip) { $zip = zip_open($uploaded_file['file']); if (is_resource($zip)) { while (($zip_entry = zip_read($zip)) !== false) { if (zip_entry_name($zip_entry) == 'settings.xml') { $data = @zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); } } } else { echo '<div class="message error"><p>' . __('Unable to open zip file', 'wpcf') . '</p></div>'; return array(); } } else { $data = @file_get_contents($uploaded_file['file']); } $form['file'] = array('#type' => 'hidden', '#name' => 'file', '#value' => urlencode($uploaded_file['file'])); $mode = 'file'; } else { if (!empty($_POST['import-text']) && !empty($_POST['text'])) { $data = stripslashes($_POST['text']); if (preg_match('/encoding=("[^"]*"|\'[^\']*\')/s', $data, $match)) { $charset = trim($match[1], '"'); } else { $charset = !empty($_POST['text-encoding']) ? $_POST['text-encoding'] : get_option('blog_charset'); } $form['text'] = array('#type' => 'hidden', '#name' => 'text', '#value' => htmlentities(stripslashes($_POST['text']), ENT_QUOTES, $charset)); $form['text-encoding'] = array('#type' => 'hidden', '#name' => 'text-encoding', '#value' => $charset); $mode = 'text'; } } if (empty($data)) { echo '<div class="message error"><p>' . __('Data not valid', 'wpcf') . '</p></div>'; return array(); } $data = wpcf_admin_import_export_settings($data); if (empty($data)) { echo '<div class="message error"><p>' . __('Data not valid', 'wpcf') . '</p></div>'; return array(); } $form = array_merge($form, $data); $form['mode'] = array('#type' => 'hidden', '#name' => 'mode', '#value' => $mode); $form['import-final'] = array('#type' => 'hidden', '#name' => 'import-final', '#value' => 1); $form['submit'] = array('#type' => 'submit', '#name' => 'import', '#value' => __('Import', 'wpcf'), '#attributes' => array('class' => 'button-primary')); } } } else { $form['embedded-settings'] = array('#type' => 'radios', '#name' => 'embedded-settings', '#title' => __('When importing to theme:', 'wpcf'), '#options' => array(__('ask user for approval', 'wpcf') => 'ask', __('import automatically', 'wpcf') => 'auto'), '#inline' => true, '#before' => '<h2>' . __('Export Types data', 'wpcf') . '</h2>' . __('Download all custom fields, custom post types and taxonomies created by Types plugin.', 'wpcf') . '<br /><br />'); $form['submit'] = array('#type' => 'submit', '#name' => 'export', '#value' => __('Export', 'wpcf'), '#attributes' => array('class' => 'button-primary'), '#after' => '<br /><br />'); if (extension_loaded('simplexml')) { $attributes = !wpcf_admin_import_dir() ? array('disabled' => 'disabled') : array(); $form['file'] = array('#type' => 'file', '#name' => 'file', '#prefix' => __('Upload XML file', 'wpcf') . '<br />', '#before' => '<h2>' . __('Import Types data file', 'wpcf') . '</h2>', '#inline' => true, '#attributes' => $attributes); $form['submit-file'] = array('#type' => 'submit', '#name' => 'import-file', '#value' => __('Import file', 'wpcf'), '#attributes' => array_merge($attributes, array('class' => 'button-primary')), '#prefix' => '<br />', '#suffix' => '<br /><br />'); $form['text'] = array('#type' => 'textarea', '#title' => __('Paste code here', 'wpcf'), '#name' => 'text', '#attributes' => array('rows' => 20), '#before' => '<h2>' . __('Import Types data text input', 'wpcf') . '</h2>'); $form['text-encoding'] = array('#type' => 'textfield', '#title' => __('Encoding', 'wpcf'), '#name' => 'text-encoding', '#value' => get_option('blog_charset'), '#description' => __('If encoding is set in text input, it will override this setting.', 'wpcf')); $form['submit-text'] = array('#type' => 'submit', '#name' => 'import-text', '#value' => __('Import text', 'wpcf'), '#attributes' => array('class' => 'button-primary')); $form['step'] = array('#type' => 'hidden', '#name' => 'step', '#value' => 1); } else { echo '<div class="message error"><p>' . __('PHP SimpleXML extension not loaded: Importing not available', 'wpcf') . '</p></div>'; } } return $form; }
/** * Import/Export form data. * * @return type * * @deprecated in 2.0, to remove */ function wpcf_admin_import_export_form() { $form = array(); $form['wpnonce'] = array('#type' => 'hidden', '#name' => '_wpnonce', '#value' => wp_create_nonce('wpcf_import')); $form_base = $form; $show_first_screen = true; if (isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'wpcf_import')) { $show_first_screen = false; if (isset($_POST['import-final'])) { if ($_POST['mode'] == 'file' && !empty($_POST['file'])) { $file = get_transient(sanitize_text_field($_POST['file'])); if (file_exists($file)) { $info = pathinfo($file); $is_zip = $info['extension'] == 'zip' ? true : false; if ($is_zip) { $zip = zip_open($file); if (is_resource($zip)) { while (($zip_entry = zip_read($zip)) !== false) { if (zip_entry_name($zip_entry) == 'settings.xml') { $data = @zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); } } } else { echo '<div class="message error"><p>' . __('Unable to open zip file', 'wpcf') . '</p></div>'; return array(); } } else { $data = @file_get_contents($file); } @unlink($file); if ($data) { wpcf_admin_import_data($data); } else { echo '<div class="message error"><p>' . __('Unable to process file', 'wpcf') . '</p></div>'; return array(); } } else { echo '<div class="message error"><p>' . __('Unable to process file', 'wpcf') . '</p></div>'; return array(); } } if ($_POST['mode'] == 'text' && !empty($_POST['text'])) { $charset = !empty($_POST['text-encoding']) ? sanitize_text_field($_POST['text-encoding']) : get_option('blog_charset'); wpcf_admin_import_data(stripslashes(html_entity_decode($_POST['text'], ENT_QUOTES, $charset))); } } elseif (isset($_POST['step'])) { $mode = 'none'; $data = ''; if (!empty($_POST['import-file']) && !empty($_FILES['file']['tmp_name'])) { if ($_FILES['file']['type'] == 'text/xml') { $_FILES['file']['name'] .= '.txt'; } /* * * We need to move uploaded file manually */ if (!empty($_FILES['file']['error'])) { echo '<div class="message error"><p>' . __('Error uploading file', 'wpcf') . '</p></div>'; return array(); } $wp_upload_dir = wp_upload_dir(); $new_file = $wp_upload_dir['basedir'] . '/' . sanitize_file_name($_FILES['file']['name']); $move = move_uploaded_file($_FILES['file']['tmp_name'], $new_file); if (!$move) { echo '<div class="message error"><p>' . __('Error moving uploaded file', 'wpcf') . '</p></div>'; return array(); } $uploaded_file = array('file' => $new_file); $info = pathinfo($uploaded_file['file']); $is_zip = $info['extension'] == 'zip' ? true : false; if ($is_zip) { $zip = zip_open($uploaded_file['file']); if (is_resource($zip)) { while (($zip_entry = zip_read($zip)) !== false) { if (zip_entry_name($zip_entry) == 'settings.xml') { $data = @zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); } } } else { echo '<div class="message error"><p>' . __('Unable to open zip file', 'wpcf') . '</p></div>'; return array(); } } else { $data = @file_get_contents($uploaded_file['file']); } /** * use Transients API to store file fullpath */ $current_user = wp_get_current_user(); $cache_key = md5($current_user->user_email . $uploaded_file['file']); set_transient($cache_key, $uploaded_file['file'], 60 * 60); $form['file'] = array('#type' => 'hidden', '#name' => 'file', '#value' => $cache_key); $mode = 'file'; } elseif (!empty($_POST['import-text']) && !empty($_POST['text'])) { $data = stripslashes($_POST['text']); if (preg_match('/encoding=("[^"]*"|\'[^\']*\')/s', $data, $match)) { $charset = trim($match[1], '"'); } else { $charset = !empty($_POST['text-encoding']) ? sanitize_text_field($_POST['text-encoding']) : get_option('blog_charset'); } $form['text'] = array('#type' => 'hidden', '#name' => 'text', '#value' => htmlentities(stripslashes($_POST['text']), ENT_QUOTES, $charset)); $form['text-encoding'] = array('#type' => 'hidden', '#name' => 'text-encoding', '#value' => $charset); $mode = 'text'; } if (empty($data)) { echo '<div class="message error"><p>' . __('Data not valid', 'wpcf') . '</p></div>'; $show_first_screen = true; } else { $data = wpcf_admin_import_export_settings($data); if (empty($data)) { echo '<div class="message error"><p>' . __('Data not valid', 'wpcf') . '</p></div>'; $show_first_screen = true; } else { $form = array_merge($form, $data); $form['mode'] = array('#type' => 'hidden', '#name' => 'mode', '#value' => $mode); $form['import-final'] = array('#type' => 'hidden', '#name' => 'import-final', '#value' => 1); $form['submit'] = array('#type' => 'submit', '#name' => 'import', '#value' => __('Import', 'wpcf'), '#attributes' => array('class' => 'button-primary')); } } } } if ($show_first_screen) { $form = $form_base; $form['submit'] = array('#type' => 'submit', '#name' => 'export', '#value' => __('Export', 'wpcf'), '#attributes' => array('class' => 'button-primary'), '#after' => '<br /><br />', '#before' => '<h3>' . __('Export Types data', 'wpcf') . '</h3>' . __('Download all custom fields, post types and taxonomies created by Types plugin.', 'wpcf') . '<br /><br />'); /** * check is temp folder available? */ $temp = wpcf_get_temporary_directory(); if (empty($temp)) { unset($form['submit']); } if (extension_loaded('simplexml')) { $attributes = !wpcf_admin_import_dir() ? array('disabled' => 'disabled') : array(); $form['file'] = array('#type' => 'file', '#name' => 'file', '#prefix' => __('Upload XML file', 'wpcf') . '<br />', '#before' => '<h3>' . __('Import Types data file', 'wpcf') . '</h3>', '#inline' => true, '#attributes' => $attributes); $form['submit-file'] = array('#type' => 'submit', '#name' => 'import-file', '#value' => __('Import file', 'wpcf'), '#attributes' => array_merge($attributes, array('class' => 'button-primary', 'disabled' => 'disabled')), '#prefix' => '<br />', '#suffix' => '<br /><br />'); $form['text'] = array('#type' => 'textarea', '#title' => __('Paste code here', 'wpcf'), '#name' => 'text', '#attributes' => array('rows' => 20), '#before' => '<h3>' . __('Import Types data text input', 'wpcf') . '</h3>'); $form['text-encoding'] = array('#type' => 'textfield', '#title' => __('Encoding', 'wpcf'), '#name' => 'text-encoding', '#value' => get_option('blog_charset'), '#description' => __('If encoding is set in text input, it will override this setting.', 'wpcf')); $form['submit-text'] = array('#type' => 'submit', '#name' => 'import-text', '#value' => __('Import text', 'wpcf'), '#attributes' => array('class' => 'button-primary')); $form['step'] = array('#type' => 'hidden', '#name' => 'step', '#value' => 1); } else { echo '<div class="message error"><p>' . __('PHP SimpleXML extension not loaded: Importing not available', 'wpcf') . '</p></div>'; } } return $form; }