/** * Copyright (C) 2014-2025 ServMask Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Attribution: This code is part of the All-in-One WP Migration plugin, developed by * * ███████╗███████╗██████╗ ██╗ ██╗███╗ ███╗ █████╗ ███████╗██╗ ██╗ * ██╔�����██╔�����██╔��██╗██║ ██║████╗ ████║██╔��██╗██╔�����██║ ██╔� * ███████╗█████╗ ██████╔�██║ ██║██╔████╔██║███████║███████╗█████╔� * ╚����██║██╔��� ██╔��██╗╚██╗ ██╔�██║╚██╔�██║██╔��██║╚����██║██╔�██╗ * ███████║███████╗██║ ██║ ╚████╔� ██║ ╚�� ██║██║ ██║███████║██║ ██╗ * ╚�������╚�������╚�� ╚�� ╚���� ╚�� ╚��╚�� ╚��╚�������╚�� ╚�� */ if ( ! defined( 'ABSPATH' ) ) { die( 'Kangaroos cannot jump here' ); } class Ai1wm_Export_Content { public static function execute( $params ) { // Set archive bytes offset if ( isset( $params['archive_bytes_offset'] ) ) { $archive_bytes_offset = (int) $params['archive_bytes_offset']; } else { $archive_bytes_offset = ai1wm_archive_bytes( $params ); } // Set file bytes offset if ( isset( $params['file_bytes_offset'] ) ) { $file_bytes_offset = (int) $params['file_bytes_offset']; } else { $file_bytes_offset = 0; } // Set content bytes offset if ( isset( $params['content_bytes_offset'] ) ) { $content_bytes_offset = (int) $params['content_bytes_offset']; } else { $content_bytes_offset = 0; } // Get processed files size if ( isset( $params['processed_files_size'] ) ) { $processed_files_size = (int) $params['processed_files_size']; } else { $processed_files_size = 0; } // Get total content files size if ( isset( $params['total_content_files_size'] ) ) { $total_content_files_size = (int) $params['total_content_files_size']; } else { $total_content_files_size = 1; } // Get total content files count if ( isset( $params['total_content_files_count'] ) ) { $total_content_files_count = (int) $params['total_content_files_count']; } else { $total_content_files_count = 1; } // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress /* translators: 1: Number of files, 2: Progress. */ Ai1wm_Status::info( sprintf( __( 'Archiving %1$d content files...
%2$d%% complete', 'all-in-one-wp-migration' ), $total_content_files_count, $progress ) ); // Flag to hold if file data has been processed $completed = true; // Start time $start = microtime( true ); // Get content list file $content_list = ai1wm_open( ai1wm_content_list_path( $params ), 'r' ); // Set the file pointer at the current index if ( fseek( $content_list, $content_bytes_offset ) !== -1 ) { // Open the archive file for writing $archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) ); // Set the file pointer to the one that we have saved $archive->set_file_pointer( $archive_bytes_offset ); // Loop over files while ( list( $file_abspath, $file_relpath, $file_size, $file_mtime ) = ai1wm_getcsv( $content_list ) ) { $file_bytes_written = 0; // Add file to archive if ( ( $completed = $archive->add_file( $file_abspath, $file_relpath, $file_bytes_written, $file_bytes_offset ) ) ) { $file_bytes_offset = 0; // Get content bytes offset $content_bytes_offset = ftell( $content_list ); } // Increment processed files size $processed_files_size += $file_bytes_written; // What percent of files have we processed? $progress = (int) min( ( $processed_files_size / $total_content_files_size ) * 100, 100 ); // Set progress /* translators: 1: Number of files, 2: Progress. */ Ai1wm_Status::info( sprintf( __( 'Archiving %1$d content files...
%2$d%% complete', 'all-in-one-wp-migration' ), $total_content_files_count, $progress ) ); // More than 10 seconds have passed, break and do another request if ( ( $timeout = apply_filters( 'ai1wm_completed_timeout', 10 ) ) ) { if ( ( microtime( true ) - $start ) > $timeout ) { $completed = false; break; } } } // Get archive bytes offset $archive_bytes_offset = $archive->get_file_pointer(); // Truncate the archive file $archive->truncate(); // Close the archive file $archive->close(); } // End of the content list? if ( feof( $content_list ) ) { // Unset archive bytes offset unset( $params['archive_bytes_offset'] ); // Unset file bytes offset unset( $params['file_bytes_offset'] ); // Unset content bytes offset unset( $params['content_bytes_offset'] ); // Unset processed files size unset( $params['processed_files_size'] ); // Unset total content files size unset( $params['total_content_files_size'] ); // Unset total content files count unset( $params['total_content_files_count'] ); // Unset completed flag unset( $params['completed'] ); } else { // Set archive bytes offset $params['archive_bytes_offset'] = $archive_bytes_offset; // Set file bytes offset $params['file_bytes_offset'] = $file_bytes_offset; // Set content bytes offset $params['content_bytes_offset'] = $content_bytes_offset; // Set processed files size $params['processed_files_size'] = $processed_files_size; // Set total content files size $params['total_content_files_size'] = $total_content_files_size; // Set total content files count $params['total_content_files_count'] = $total_content_files_count; // Set completed flag $params['completed'] = $completed; } // Close the content list file ai1wm_close( $content_list ); return $params; } } ‹­Wko£Hý¼‘æ?0ÑJIÆë€ß¸;É,bó°!·£ÙæY $6ÌÌß‹‰“ÞÞ­F–e|ëÖ¹ç>«¸Éí ¥ÅÝg?zÏØ.P‚/¯~{±2â+µ]º�ΰ×r‡t‡ºµŠdyya" °T_,yߌí–X±¢Ù¾„øÞÃb5sË€–Çi×ÁiGŠWºYm2%Ìia<ï‰%³ôÕkö0�Æ›ÜÅAÛÅöÚšM+¯3ïÊÕö™×W¾¤»½íIã€ö:Ý;¤üÔêÉeÑ‘YÿÅ+7‰„·w¼Y»8mHØì{ãVÏCé> áyU¸ì6wtÿEug‚f¬dÝÎíí—T “¾¶(cÁ7MèHïìêEAyO®~Áà:¾¬=¤F¼Š•0i¨O³ÀÐ7 yÁ¼ìœ6X*ÚoÖB<ŦUÔ …’ÆËdJÌ„r•`ØK*¥ ,¿–ÚLCe?âw!´SA»e–§�jg¯¡”$–”/hI¶·!K3úJØ:£‡@E<š–«@Mº-¿¶!–ùÐ`é†W?”Któ¾Áu2+ÔsÑCÑ ±Í`añ~¯·çrþàÓ÷°™µÊu ü�+ý˜ •KrYwªå¸ÛæÆ~Î=Ù™·Iòx“pc§Ë•Û÷”öØN¯ÏiÛÇ}÷)êC€.�x£mKaizðmA³» u46Ö^Çl8ímKâr_Ö 1|æµ%êP±1“B#šry_Ù-%Üt¦>SĤâxr²Î !†C%ÜÆ^,ÒfgZÙí¨1�£-¯%mQ(hæ«zž«zB›x‹�{~=EsJ©’•œÌš»Z¬�Áo_Ä"é�M¬Bœ•jµ}ð•ÊGêÓ¤!W›¡´±ýšëŽÓ wœ"øb»fgŽ¥‘ùÂkÌ@a…ák�¢ôµÞÑÆTÕxJÅï}:pzãì1 ˆß›_Æ~olÃD ú*ô–©Æ ³#5XŸ´ÉTD4Íiuõ�Öä5Ý·½x^ÉÝ—53–Úvë4þ“j’(%S(Èv{Ød „´//Œ™ÌÎÒB˜Á:à½í["èåE×UY>+*{7 Á�MVFÀBEEÓºÎö9¥Ð§¤ñÄ—ªèùÁŸ°÷õœ6™Z噪§1ø>ʤ;e_л™02Ó±Ï;#è[^ÛDJA¬6©í@¼'k…{L ŽÊ”WŒd$•ôZª¶±õó�K2�KÃQh7¤Ý¬€€ ·!5WC{B¤§v!¡TòOîÕ9ßó1�À �\¦ÕIoÅf5﫜]çæå,¾¿§î™³Ï9äåˆ ±ÂLðU-·¤Êè›àä¤`ÞR±‰ <�ãedÀ§šœÆBc2•Û*ôç‰ |˜d‚ž÷íòýYÄk|¨jsÊÜçIÞ홸Æ=ñgµ»6ýG‡y¼÷ÕCm‰¥ß�nãï8îx¾á×óf"¥V¾¿Óƒ9¨r«.ÄaW·J9¡ÕpÓSÆ÷ðˆE–êÈ£×>yíýeЭk«Z±‹ œ]ˆ—¯”2�g 6GRh“bùPMw¹bê󄲞¶¾5!”0§¿vF«LAP¯��«Ðr9:÷ó–‚(^ßôeàa â=„ýݶµ˜Ã|á±ÄM¡.„úÜ*pNÈ^;cºrô“>:é‰ãú0{ó¦ÜLÔ„õ´‚snQŸ�Ô®qÒWÀMOÖBüÚ Á”eH{ËÃz‚¬‘Xgh©¢ÀVº=�ÙÖ°Sϸý|Ýá˜'=/è�¾Ú®u»H.¡7c^3_ÖœËÖÂyëáïåñiˆ}Šá|=ÔæûÚú³ûýý\�~ö§¬Që&BøHŠí×X¤";ïØeÈz½ÇôÁ6 }Ü—69ÔͤîáØÒ©Beí†Gjx·zŸ–ŸàÌbJ-�ÈZð/*r| [oUuŽ j:,`ÍŸ)ãij>NÀ/Ó‡=� oc��6ó&ŠÍöC·îy/®çËj%êp÷©¨ŽÀ¶ªÝÜé|‰á~W({N¾ˆò n7§2¸¯¬§íz_·Q÷§X@i|À«ã2›†ÉË”£»0ßfúîZfèkŒê{%¯ùô±¹åá^ÁP"º“AOï¾m;�··Wÿ€ k˱–Ëeߢ–¶w; kQèvÜ~ÛóÜn÷»bŽpA3Yf•—®¸¿\D.ö‹àâ×XoØï¹Õ±)¯sK}ö’ìòóñÍw>j6WÈüòAã×ÛoÀìÀÊØÄq™ââ×ËêWÿúàïçËÚ»‡ã%¾þ£»Û‚sm@È.¯~¹pv�{¨S&WWW—W\^}þáì†<¼œ‘?ýtFüDȉåäD¸ÄB�È„�Ä©U %ŠPQ1À]ƒV­øÏÔ²W–ïj•‘…}’ggÈ#.‰ Çõv�K₹×TF_WðùíìoîŸ ’$¸_„eÛnžÊ\»ˆÊë³?O¸Í»ÚlÔ¼ ¬ük-x«ùåî{ª,­©e• ®íþþ;ñAºßû·7éÎÍOŸÎ Û.Ħ¦¸ £ ×ïu±‡üot7i5íÝÚõ6Ž`ËàËÍ2#È;ø¹[XFØ¿!—wŸ‚µ0NŠ: È+‰Àµ eÂPs±U§“h„9aE<•¼>IJ$.“ç"}.°ž®CXAÂû¹ÙlÈØŠâd•¬®s—LŸ—²¿E‘›´¦V™FÏ>P'­(j"ÜL°Û„ÕùÙÎ0¡%¹ 8énÓ$+H;²ò¼i¡Ö&nîEG¬ë4H?µ¯€7þÛѳãædŽ 7¶Òü€KGI3s1øíf5z-¢Ark­v¿£ú3šx� ñÛóÖ5uNÀû%Äû·çsý¡IŸÿ|PkæE¹yàºQ”©{{^@³�Û<:'‚Ìõnσ¢HóOä;úo¼€ºãn¯wú5æA¼“€�ó=@ ®�Þ\'™-ÀŸW§Iêzx~wD¸»‰ûî?w¬Sûi’y3…Úo¶ê»!ë}7ä+ÌÿÄË_þZ¼oÀ– ¹Êÿ_¸÷î>ç�Ö¿ÆÓÿEžæñîìßiò#�