/** * @see parent::delete() */ public function delete() { $this->deletePosts(); if (!empty($this->options['import_id']) and wp_all_export_is_compatible()) { $import = new PMXI_Import_Record(); $import->getById($this->options['import_id']); if (!$import->isEmpty() and $import->parent_import_id == 99999) { $import->delete(); } } $export_file_path = wp_all_export_get_absolute_path($this->options['filepath']); if (@file_exists($export_file_path)) { wp_all_export_remove_source($export_file_path); } if (!empty($this->attch_id)) { wp_delete_attachment($this->attch_id, true); } $wp_uploads = wp_upload_dir(); $file_for_remote_access = $wp_uploads['basedir'] . DIRECTORY_SEPARATOR . PMXE_Plugin::UPLOADS_DIRECTORY . DIRECTORY_SEPARATOR . md5(PMXE_Plugin::getInstance()->getOption('cron_job_key') . $this->id) . '.' . $this->options['export_to']; if (@file_exists($file_for_remote_access)) { @unlink($file_for_remote_access); } return parent::delete(); }
function pmxe_pmxe_after_export($export_id) { $export = new PMXE_Export_Record(); $export->getById($export_id); $splitSize = $export->options['split_large_exports_count']; if (!$export->isEmpty()) { $export->set(array('iteration' => $export->options['creata_a_new_export_file'] ? $export->iteration + 1 : 0))->update(); $exportOptions = $export->options; // remove previously genereted chunks if (!empty($exportOptions['split_files_list']) and !$export->options['creata_a_new_export_file']) { foreach ($exportOptions['split_files_list'] as $file) { @unlink($file); } } $is_secure_import = PMXE_Plugin::getInstance()->getOption('secure'); if (!$is_secure_import) { $filepath = get_attached_file($export->attch_id); } else { $filepath = wp_all_export_get_absolute_path($export->options['filepath']); } // Split large exports into chunks if ($export->options['split_large_exports'] and $splitSize < $export->exported) { $exportOptions['split_files_list'] = array(); if (@file_exists($filepath)) { switch ($export->options['export_to']) { case 'xml': $records_count = 0; $chunk_records_count = 0; $fileCount = 1; $feed = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" . "\n" . "<" . $export->options['main_xml_tag'] . ">"; $file = new PMXE_Chunk($filepath, array('element' => $export->options['record_xml_tag'], 'encoding' => 'UTF-8')); // loop through the file until all lines are read while ($xml = $file->read()) { if (!empty($xml)) { $chunk = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" . "\n" . $xml; $dom = new DOMDocument('1.0', "UTF-8"); $old = libxml_use_internal_errors(true); $dom->loadXML($chunk); // FIX: libxml xpath doesn't handle default namespace properly, so remove it upon XML load libxml_use_internal_errors($old); $xpath = new DOMXPath($dom); $records_count++; $chunk_records_count++; $feed .= $xml; } if ($chunk_records_count == $splitSize or $records_count == $export->exported) { $feed .= "</" . $export->options['main_xml_tag'] . ">"; $outputFile = str_replace(basename($filepath), str_replace('.xml', '', basename($filepath)) . '-' . $fileCount++ . '.xml', $filepath); file_put_contents($outputFile, $feed); if (!in_array($outputFile, $exportOptions['split_files_list'])) { $exportOptions['split_files_list'][] = $outputFile; } $chunk_records_count = 0; $feed = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" . "\n" . "<" . $export->options['main_xml_tag'] . ">"; } } break; case 'csv': $in = fopen($filepath, 'r'); $rowCount = 0; $fileCount = 1; $headers = fgetcsv($in); while (!feof($in)) { $data = fgetcsv($in); if (empty($data)) { continue; } if ($rowCount % $splitSize == 0) { if ($rowCount > 0) { fclose($out); } $outputFile = str_replace(basename($filepath), str_replace('.csv', '', basename($filepath)) . '-' . $fileCount++ . '.csv', $filepath); if (!in_array($outputFile, $exportOptions['split_files_list'])) { $exportOptions['split_files_list'][] = $outputFile; } $out = fopen($outputFile, 'w'); } if ($data) { if ($rowCount % $splitSize == 0) { fputcsv($out, $headers); } fputcsv($out, $data); } $rowCount++; } fclose($out); break; default: break; } $export->set(array('options' => $exportOptions))->save(); } } } }
public function get_file() { $nonce = !empty($_REQUEST['_wpnonce']) ? $_REQUEST['_wpnonce'] : ''; if (!wp_verify_nonce($nonce, '_wpnonce-download_feed')) { die(__('Security check', 'wp_all_export_plugin')); } else { $is_secure_import = PMXE_Plugin::getInstance()->getOption('secure'); $id = $this->input->get('id'); $export = new PMXE_Export_Record(); $filepath = ''; if (!$export->getById($id)->isEmpty()) { if (!$is_secure_import) { $filepath = get_attached_file($export->attch_id); } else { $filepath = wp_all_export_get_absolute_path($export->options['filepath']); } if (@file_exists($filepath)) { switch ($export->options['export_to']) { case 'xml': PMXE_download::xml($filepath); break; case 'csv': PMXE_download::csv($filepath); break; default: wp_redirect(add_query_arg('pmxe_nt', urlencode(__('File format not supported', 'pmxe_plugin')), $this->baseUrl)); die; break; } } else { wp_redirect(add_query_arg('pmxe_nt', urlencode(__('The exported file is missing and can\'t be downloaded. Please re-run your export to re-generate it.', 'pmxe_plugin')), $this->baseUrl)); die; } } else { wp_redirect(add_query_arg('pmxe_nt', urlencode(__('The exported file is missing and can\'t be downloaded. Please re-run your export to re-generate it.', 'pmxe_plugin')), $this->baseUrl)); die; } } }
function pmxe_pmxe_after_export($export_id, $export) { if (!empty(PMXE_Plugin::$session) and PMXE_Plugin::$session->has_session()) { PMXE_Plugin::$session->set('file', ''); PMXE_Plugin::$session->save_data(); } if (!$export->isEmpty()) { $splitSize = $export->options['split_large_exports_count']; $exportOptions = $export->options; // remove previously genereted chunks if (!empty($exportOptions['split_files_list']) and !$export->options['creata_a_new_export_file']) { foreach ($exportOptions['split_files_list'] as $file) { @unlink($file); } } $is_secure_import = PMXE_Plugin::getInstance()->getOption('secure'); if (!$is_secure_import) { $filepath = get_attached_file($export->attch_id); } else { $filepath = wp_all_export_get_absolute_path($export->options['filepath']); } $is_export_csv_headers = apply_filters('wp_all_export_is_csv_headers_enabled', true, $export->id); // Remove headers row from CSV file if (!$is_export_csv_headers && @file_exists($filepath) && $export->options['export_to'] == 'csv') { $tmp_file = str_replace(basename($filepath), 'iteration_' . basename($filepath), $filepath); copy($filepath, $tmp_file); $in = fopen($tmp_file, 'r'); $out = fopen($filepath, 'w'); $headers = fgetcsv($in); if (is_resource($in)) { $lineNumber = 0; while (!feof($in)) { $data = fgetcsv($in, 0, XmlExportEngine::$exportOptions['delimiter']); if (empty($data)) { continue; } $data_assoc = array_combine($headers, array_values($data)); $line = array(); foreach ($headers as $header) { $line[$header] = isset($data_assoc[$header]) ? $data_assoc[$header] : ''; } if (!$lineNumber && XmlExportEngine::$exportOptions['include_bom']) { fwrite($out, chr(0xef) . chr(0xbb) . chr(0xbf)); fputcsv($out, $line, XmlExportEngine::$exportOptions['delimiter']); } else { fputcsv($out, $line, XmlExportEngine::$exportOptions['delimiter']); } apply_filters('wp_all_export_after_csv_line', $out, XmlExportEngine::$exportID); $lineNumber++; } fclose($in); } fclose($out); @unlink($tmp_file); } // Split large exports into chunks if ($export->options['split_large_exports'] and $splitSize < $export->exported) { $exportOptions['split_files_list'] = array(); if (@file_exists($filepath)) { switch ($export->options['export_to']) { case 'xml': $main_xml_tag = apply_filters('wp_all_export_main_xml_tag', $export->options['main_xml_tag'], $export->id); $record_xml_tag = apply_filters('wp_all_export_record_xml_tag', $export->options['record_xml_tag'], $export->id); $records_count = 0; $chunk_records_count = 0; $fileCount = 1; $feed = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" . "\n" . "<" . $main_xml_tag . ">"; $file = new PMXE_Chunk($filepath, array('element' => $record_xml_tag, 'encoding' => 'UTF-8')); // loop through the file until all lines are read while ($xml = $file->read()) { if (!empty($xml)) { $chunk = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" . "\n" . $xml; $dom = new DOMDocument('1.0', "UTF-8"); $old = libxml_use_internal_errors(true); $dom->loadXML($chunk); // FIX: libxml xpath doesn't handle default namespace properly, so remove it upon XML load libxml_use_internal_errors($old); $xpath = new DOMXPath($dom); $records_count++; $chunk_records_count++; $feed .= $xml; } if ($chunk_records_count == $splitSize or $records_count == $export->exported) { $feed .= "</" . $main_xml_tag . ">"; $outputFile = str_replace(basename($filepath), str_replace('.xml', '', basename($filepath)) . '-' . $fileCount++ . '.xml', $filepath); file_put_contents($outputFile, $feed); if (!in_array($outputFile, $exportOptions['split_files_list'])) { $exportOptions['split_files_list'][] = $outputFile; } $chunk_records_count = 0; $feed = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" . "\n" . "<" . $main_xml_tag . ">"; } } break; case 'csv': $in = fopen($filepath, 'r'); $rowCount = 0; $fileCount = 1; $headers = fgetcsv($in); while (!feof($in)) { $data = fgetcsv($in); if (empty($data)) { continue; } if ($rowCount % $splitSize == 0) { if ($rowCount > 0) { fclose($out); } $outputFile = str_replace(basename($filepath), str_replace('.csv', '', basename($filepath)) . '-' . $fileCount++ . '.csv', $filepath); if (!in_array($outputFile, $exportOptions['split_files_list'])) { $exportOptions['split_files_list'][] = $outputFile; } $out = fopen($outputFile, 'w'); } if ($data) { if ($rowCount % $splitSize == 0) { fputcsv($out, $headers); } fputcsv($out, $data); } $rowCount++; } fclose($in); fclose($out); break; default: break; } $export->set(array('options' => $exportOptions))->save(); } } // make a temporary copy of current file if (empty($export->parent_id) and @file_exists($filepath) and @copy($filepath, str_replace(basename($filepath), '', $filepath) . 'current-' . basename($filepath))) { $exportOptions = $export->options; $exportOptions['current_filepath'] = str_replace(basename($filepath), '', $filepath) . 'current-' . basename($filepath); $export->set(array('options' => $exportOptions))->save(); } // genereta export bundle $export->generate_bundle(); if (!empty($export->parent_id)) { $parent_export = new PMXE_Export_Record(); $parent_export->getById($export->parent_id); if (!$parent_export->isEmpty()) { $parent_export->generate_bundle(true); } } // clean session if (!empty(PMXE_Plugin::$session) and PMXE_Plugin::$session->has_session()) { PMXE_Plugin::$session->clean_session($export->id); } } }
public function download() { $nonce = !empty($_REQUEST['_wpnonce']) ? $_REQUEST['_wpnonce'] : ''; if (!wp_verify_nonce($nonce, '_wpnonce-download_feed')) { die(__('Security check', 'wp_all_export_plugin')); } else { $is_secure_import = PMXE_Plugin::getInstance()->getOption('secure'); $id = $this->input->get('id'); $export = new PMXE_Export_Record(); $filepath = ''; if (!$export->getById($id)->isEmpty()) { if (!$is_secure_import) { $filepath = get_attached_file($export->attch_id); } else { $filepath = wp_all_export_get_absolute_path($export->options['filepath']); } if (@file_exists($filepath)) { switch ($export['options']['export_to']) { case 'xml': PMXE_download::xml($filepath); break; case 'csv': PMXE_download::csv($filepath); break; default: break; } } } } }
/** * AJAX action export processing */ function pmxe_wp_ajax_export() { if (!check_ajax_referer('wp_all_export_secure', 'security', false)) { exit(__('Security check', 'wp_all_export_plugin')); } if (!current_user_can('manage_options')) { exit(__('Security check', 'wp_all_export_plugin')); } $wp_uploads = wp_upload_dir(); $export = new PMXE_Export_Record(); $export->getById(PMXE_Plugin::$session->update_previous); $exportOptions = (PMXE_Plugin::$session->has_session() ? PMXE_Plugin::$session->get_clear_session_data() : array()) + PMXE_Plugin::get_default_import_options(); wp_reset_postdata(); XmlExportEngine::$exportOptions = $exportOptions; XmlExportEngine::$is_user_export = $exportOptions['is_user_export']; $posts_per_page = $exportOptions['records_per_iteration']; if ('advanced' == $exportOptions['export_type']) { if (XmlExportEngine::$is_user_export) { $exportQuery = eval('return new WP_User_Query(array(' . $exportOptions['wp_query'] . ', \'orderby\' => \'ID\', \'order\' => \'ASC\', \'offset\' => ' . $export->exported . ', \'number\' => ' . $posts_per_page . ' ));'); } else { $exportQuery = eval('return new WP_Query(array(' . $exportOptions['wp_query'] . ', \'orderby\' => \'ID\', \'order\' => \'ASC\', \'offset\' => ' . $export->exported . ', \'posts_per_page\' => ' . $posts_per_page . ' ));'); } } else { XmlExportEngine::$post_types = $exportOptions['cpt']; if (!in_array('users', $exportOptions['cpt'])) { add_filter('posts_join', 'wp_all_export_posts_join', 10, 1); add_filter('posts_where', 'wp_all_export_posts_where', 10, 1); $exportQuery = new WP_Query(array('post_type' => $exportOptions['cpt'], 'post_status' => 'any', 'orderby' => 'ID', 'order' => 'ASC', 'offset' => $export->exported, 'posts_per_page' => $posts_per_page)); remove_filter('posts_where', 'wp_all_export_posts_where'); remove_filter('posts_join', 'wp_all_export_posts_join'); } else { add_action('pre_user_query', 'wp_all_export_pre_user_query', 10, 1); $exportQuery = new WP_User_Query(array('orderby' => 'ID', 'order' => 'ASC', 'number' => $posts_per_page, 'offset' => $export->exported)); remove_action('pre_user_query', 'wp_all_export_pre_user_query'); } } XmlExportEngine::$exportQuery = $exportQuery; $foundPosts = !XmlExportEngine::$is_user_export ? $exportQuery->found_posts : $exportQuery->get_total(); $postCount = !XmlExportEngine::$is_user_export ? $exportQuery->post_count : count($exportQuery->get_results()); if (!$export->exported) { if (!empty($export->attch_id)) { wp_delete_attachment($export->attch_id, true); } $is_secure_import = PMXE_Plugin::getInstance()->getOption('secure'); if ($is_secure_import and !empty($exportOptions['filepath'])) { wp_all_export_remove_source(wp_all_export_get_absolute_path($exportOptions['filepath'])); $exportOptions['filepath'] = ''; } PMXE_Plugin::$session->set('count', $foundPosts); PMXE_Plugin::$session->save_data(); } // if posts still exists then export them if ($postCount) { switch ($exportOptions['export_to']) { case 'xml': if (!XmlExportEngine::$is_user_export) { pmxe_export_xml($exportQuery, $exportOptions); } else { pmxe_export_users_xml($exportQuery, $exportOptions); } break; case 'csv': if (!XmlExportEngine::$is_user_export) { pmxe_export_csv($exportQuery, $exportOptions); } else { pmxe_export_users_csv($exportQuery, $exportOptions); } break; default: # code... break; } wp_reset_postdata(); } if ($postCount) { $export->set(array('exported' => $export->exported + $postCount))->save(); } if ($posts_per_page != -1 and $postCount) { wp_send_json(array('exported' => $export->exported, 'percentage' => ceil($export->exported / $foundPosts * 100), 'done' => false, 'records_per_request' => $exportOptions['records_per_iteration'])); } else { wp_reset_postdata(); if (file_exists(PMXE_Plugin::$session->file)) { if ($exportOptions['export_to'] == 'xml') { file_put_contents(PMXE_Plugin::$session->file, '</data>', FILE_APPEND); } $is_secure_import = PMXE_Plugin::getInstance()->getOption('secure'); if (!$is_secure_import) { $wp_filetype = wp_check_filetype(basename(PMXE_Plugin::$session->file), null); $attachment_data = array('guid' => $wp_uploads['baseurl'] . '/' . _wp_relative_upload_path(PMXE_Plugin::$session->file), 'post_mime_type' => $wp_filetype['type'], 'post_title' => preg_replace('/\\.[^.]+$/', '', basename(PMXE_Plugin::$session->file)), 'post_content' => '', 'post_status' => 'inherit'); $attach_id = wp_insert_attachment($attachment_data, PMXE_Plugin::$session->file); if (!$export->isEmpty()) { $export->set(array('attch_id' => $attach_id))->save(); } } else { $exportOptions['filepath'] = wp_all_export_get_relative_path(PMXE_Plugin::$session->file); if (!$export->isEmpty()) { $export->set(array('options' => $exportOptions))->save(); } } if (wp_all_export_is_compatible() and ($exportOptions['is_generate_templates'] or $exportOptions['is_generate_import'])) { $custom_type = empty($exportOptions['cpt']) ? 'post' : $exportOptions['cpt'][0]; $templateOptions = array('type' => (!empty($exportOptions['cpt']) and $exportOptions['cpt'][0] == 'page') ? 'page' : 'post', 'wizard_type' => 'new', 'deligate' => 'wpallexport', 'custom_type' => XmlExportEngine::$is_user_export ? 'import_users' : $custom_type, 'status' => 'xpath', 'is_multiple_page_parent' => 'no', 'unique_key' => '', 'acf' => array(), 'fields' => array(), 'is_multiple_field_value' => array(), 'multiple_value' => array(), 'fields_delimiter' => array(), 'update_all_data' => 'no', 'is_update_status' => 0, 'is_update_title' => 0, 'is_update_author' => 0, 'is_update_slug' => 0, 'is_update_content' => 0, 'is_update_excerpt' => 0, 'is_update_dates' => 0, 'is_update_menu_order' => 0, 'is_update_parent' => 0, 'is_update_attachments' => 0, 'is_update_acf' => 0, 'update_acf_logic' => 'only', 'acf_list' => '', 'is_update_product_type' => 0, 'is_update_attributes' => 0, 'update_attributes_logic' => 'only', 'attributes_list' => '', 'is_update_images' => 0, 'is_update_custom_fields' => 0, 'update_custom_fields_logic' => 'only', 'custom_fields_list' => '', 'is_update_categories' => 0, 'update_categories_logic' => 'only', 'taxonomies_list' => '', 'export_id' => $export->id); if (in_array('product', $exportOptions['cpt'])) { $templateOptions['_virtual'] = 1; $templateOptions['_downloadable'] = 1; } if (XmlExportEngine::$is_user_export) { $templateOptions['is_update_first_name'] = 0; $templateOptions['is_update_last_name'] = 0; $templateOptions['is_update_role'] = 0; $templateOptions['is_update_nickname'] = 0; $templateOptions['is_update_description'] = 0; $templateOptions['is_update_login'] = 0; $templateOptions['is_update_password'] = 0; $templateOptions['is_update_nicename'] = 0; $templateOptions['is_update_email'] = 0; $templateOptions['is_update_registered'] = 0; $templateOptions['is_update_display_name'] = 0; $templateOptions['is_update_url'] = 0; } if ('xml' == $exportOptions['export_to']) { wp_all_export_prepare_template_xml($exportOptions, $templateOptions); } else { wp_all_export_prepare_template_csv($exportOptions, $templateOptions); } $options = $templateOptions + PMXI_Plugin::get_default_import_options(); if ($exportOptions['is_generate_templates']) { $template = new PMXI_Template_Record(); $tpl_options = $options; if ('csv' == $exportOptions['export_to']) { $tpl_options['delimiter'] = $exportOptions['delimiter']; } $tpl_options['update_all_data'] = 'yes'; $tpl_options['is_update_status'] = 1; $tpl_options['is_update_title'] = 1; $tpl_options['is_update_author'] = 1; $tpl_options['is_update_slug'] = 1; $tpl_options['is_update_content'] = 1; $tpl_options['is_update_excerpt'] = 1; $tpl_options['is_update_dates'] = 1; $tpl_options['is_update_menu_order'] = 1; $tpl_options['is_update_parent'] = 1; $tpl_options['is_update_attachments'] = 1; $tpl_options['is_update_acf'] = 1; $tpl_options['update_acf_logic'] = 'full_update'; $tpl_options['acf_list'] = ''; $tpl_options['is_update_product_type'] = 1; $tpl_options['is_update_attributes'] = 1; $tpl_options['update_attributes_logic'] = 'full_update'; $tpl_options['attributes_list'] = ''; $tpl_options['is_update_images'] = 1; $tpl_options['is_update_custom_fields'] = 1; $tpl_options['update_custom_fields_logic'] = 'full_update'; $tpl_options['custom_fields_list'] = ''; $tpl_options['is_update_categories'] = 1; $tpl_options['update_categories_logic'] = 'full_update'; $tpl_options['taxonomies_list'] = ''; $tpl_data = array('name' => $exportOptions['template_name'], 'is_keep_linebreaks' => 0, 'is_leave_html' => 0, 'fix_characters' => 0, 'options' => $tpl_options); if (!empty($exportOptions['template_name'])) { // save template in database $template->getByName($exportOptions['template_name'])->set($tpl_data)->save(); } } // associate exported posts with new import if ($exportOptions['is_generate_import']) { $import = new PMXI_Import_Record(); $import->getById($exportOptions['import_id']); if (!$import->isEmpty() and $import->parent_import_id == 99999) { $xmlPath = PMXE_Plugin::$session->file; $root_element = ''; $historyPath = PMXE_Plugin::$session->file; if ('csv' == $exportOptions['export_to']) { $options['delimiter'] = $exportOptions['delimiter']; include_once PMXI_Plugin::ROOT_DIR . '/libraries/XmlImportCsvParse.php'; $path_info = pathinfo($xmlPath); $path_parts = explode(DIRECTORY_SEPARATOR, $path_info['dirname']); $security_folder = array_pop($path_parts); $target = $is_secure_import ? $wp_uploads['basedir'] . DIRECTORY_SEPARATOR . PMXE_Plugin::UPLOADS_DIRECTORY . DIRECTORY_SEPARATOR . $security_folder : $wp_uploads['path']; $csv = new PMXI_CsvParser(array('filename' => $xmlPath, 'targetDir' => $target)); $historyPath = $csv->xml_path; $root_element = 'node'; } else { $root_element = 'post'; } $import->set(array('xpath' => '/' . $root_element, 'type' => 'upload', 'options' => $options, 'root_element' => $root_element, 'path' => $xmlPath, 'name' => basename($xmlPath), 'imported' => 0, 'created' => 0, 'updated' => 0, 'skipped' => 0, 'deleted' => 0, 'iteration' => 1, 'count' => PMXE_Plugin::$session->count))->save(); $history_file = new PMXI_File_Record(); $history_file->set(array('name' => $import->name, 'import_id' => $import->id, 'path' => $historyPath, 'registered_on' => date('Y-m-d H:i:s')))->save(); $exportOptions['import_id'] = $import->id; $export->set(array('options' => $exportOptions))->save(); } } } } $export->set(array('executing' => 0, 'canceled' => 0))->save(); wp_send_json(array('exported' => $export->exported, 'percentage' => 100, 'done' => true, 'records_per_request' => $exportOptions['records_per_iteration'], 'file' => PMXE_Plugin::$session->file)); } }