Exemplo n.º 1
0
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();
            }
        }
    }
}
Exemplo n.º 2
0
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);
        }
    }
}