�PNG  IHDR22?�� pHYs  �� OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*! J�!��Q�EEȠ�����Q, � ��!���������{�kּ������>���� �H3Q5� �B�������.@� $p�d!s�#�~<<+"��x� �M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH���� � 0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4���������x����6��_-��"bb���ϫp@�t~��,/��;�m��%�h^ �u��f�@����W�p�~<�5�j>{�-�]c�K'Xt����o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A��,���� �`6�B$��BB d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(�� A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=� �C��7�F� �dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8, �c˱"� ���V����cϱw�E� 6wB aAHXLXN�H� $4� 7 �Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[ �b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w ��Ljg(�gw��L�Ӌ�T071���oUX*�*|�� �J�&�*/T����ު U�U�T��^S}�FU3S� Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k ��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN �(���~���)�)�4L�1e\k����X�H�Q�G�6������E�Y��A�J'\'Gg����S�Sݧ �M=:��.�k���Dw�n��^��Lo��y���}/�T�m���G X� $� �<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��= ���Z~s�r:V:ޚΜ�?}����/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z���������ۯ�6�i�ܟ�4�)�Y3s���C�Q��? ��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�������!h�쐭!��Α�i�P~���a�a��~ '���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl������� �{�/�]py�����.,:�@L�N8��A*��%�w%� y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y- �B��TZ(�*�geWf�͉�9���+��̳�ې7�����ᒶ��KW-X潬j9�������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n �ڴ �V����E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa��n��{��4���[���>ɾ�UUM�f�e�I���?�������m]�Nmq����#�׹���=TR��+�G�����w- 6 U����#pDy��� �� :�v�{���vg/jB��F�S��[b[�O�>����z�G��499�?r����C�d�&����ˮ/~�����јѡ�򗓿m|������������x31^�V���w�w��O�| (�h���SЧ��������c3-� cHRMz%������u0�`:�o�_�F5IDATx��ytUս�?�;���fN$$��@B�!�k��� -*�gE���j�O�kQ�ʠ`U�B_ �AÐ0%�Ȕ�@r3ޛ;߳��$�@��v����^�s����������$��ߢ !�W��5�̱'-٘������4�>�Rƫ$�G��0U�H}�_ _� #��k�MJ/=�9Du *ڲ�k�PQ;0��j|�*�$�^컂脛y���>�z×� B��� ��(�:$�ʔ_�6��C!B����MVx��a��ζyY����j��ƋY2�9�F�{r��r�딟F��Q��hY6��� x��[l��RC��������nt@��;P��3��� F�w��7��:�P���ɋ'���mj���Bƪ�$�Q�L��y��߷g��\���z����v5�p�v$�v櫻�`6~K �Y�X����,�:��"�o�e0II"(��,������l_�C���/4�+f�E�!q��:����u����c��樼.UE�@� �]K�W���$-�h]�JG���Dz)�`��.�A/ ���mᏣc�3jK� �!�>���$�Q�!�_�? \�C2(E �M$Z I{�U���s�ǣ���=��@Բe ޻��W�����@ �w����}�9v,)��.}*|"�s��di���,���G�]W�AC�������|<����[��ߕ������K�*�G nߴ!��‹��J�!��6(L�a)��Am��������;adf��:�xm��nh�;֦I��(���o�C~ډa?�=��s����h��E������xp����)���_���t��W�����´;8���`dz=(��@@�+,�;�`�fhl��XȌ�3,uI�~z(J����� �ZX�A����H'�À�㜦�82|��a�n�z2��I���� ���EY�h�ε<�0�q�{��C��v�˅��?"@��χ�x�WS+��N�~�KQ�J�8ل�� _.W��� !TU{�����,��"�� �;�������HI S� ��))�o�1�H�D� ���� (� ;����"Ҕ��,���� �F=���O��&�Ph>�`���y��߲ &S��P�<��'��1s�1cĂ�N����2)����@�u��tv��<�+�-&�����h��[!FSG���' � z z0��<����8d&�����E0�,��<��"!P�b4��� �{S�����X����.�囤���T��hEF��X�q0"-<����h���]�Py*����F⩍��@v�˂�Y08�� .q��a��s����(!<̫1�3�L�H��7sYW�`��qtu�\7��?�@�Y�� %Ka�x�GZ�*W�P��y�����N0r9��Z�c�%���q,��k�����!!,��>���IB��� �x1�Xu�Y���v-���ֺ��N������JP��a�2`�e5��w��u;�6�i���̃��(K���ťa��(l51��JL��O'%���]���ٖ뿉!��{*�p+f ���i8��D�ȑ���ܩ�M��V��ӟz��x�7Z�1i}�^͜���6e����x��)u�d�ˏ�V�eG�\�X1�����=n�U'�~Y����L�\,�(d!x ,�:�TW8� M`r���@��r+v�Q0��>^;˴�VbF��('����� �*O��i��j�Ӆ����^�S3&� ���{������.ی�� N;��NU%d0�Ce\r"�C�b��&t7N�7��� �ȪD�[%l�۪�$��'m?�A9tI�9>��NVL ��� 6v~M�����ъ�B���0����9$&=ώm��W�0���L���&��E���f�f��'+�9��hv��7,���M��6�D�&�^� �����8 D֮�����o��k^z��O��hP�8q�5d*��YVq3�{��������#LX4�?��jP=3�~�؅c�ݰ�̱�ұ��8̲��2�G�����j��έ�9��w7���U�X�w�85C��?!I&���o&����L���I#�^�eV�,�^t5�k� �xs˛\��U�8��."���{���ǵ�l4��ݼ�;��r"���G�/~���gJV�N糦��ZZ^k+NN�D��I$�=OE�z����|*�*{��%k���G��>�`9��b;�s���8,�qs��c��.b��q�%�>r��n�R�Ƨ�%�,�A��le#�8���}; 21�0�b�&�QX�f���q�00����$>�h�N�'�a3��A���/�r ��L5�8�GԲ'�����w;��c#�q1���h$*��V^�k��QĽ�b:i������� ����H F#�_���,��]g����Ը����`RUU���� ��"�qD���>-��ϤI�~��3�̴�����NZ[[555�eeek7�m����YF#[��Đ��R��i��L�H�r ��@��J-�Pŝ��_|�-��6y��ks�V�U~��6���w.����(��0A� 4��f��� /���C�xŊ�ٳ����z=6�����rg���mKo��o�/����a�g���?'9%9��P��斓��~���L{�� �H��{AW��B��$����v�1b�&Mb�ر��ر#�0`�`xMBp! )Z�Nmo�mZ�g�}�eذaWTVV ���'99��C5��&�&+5�bT>|8��PUUETT����&���t��~TE%��'������b�tEGG;RSS�S�N�v��ѯ��t����u1@�ޚ"f��͈���r'L�Ph��m��ƌ�74o��`�x�q�P���NRSS�X,�����l&&&��MFFA!-��`��ҷ�n��Yuu�����x<I�LB%����KԒ50�!�3�bz�����ʸKL���;---�l6[��`��������Ȏ;�����egg4��!D�T��jWujyZ��������K����%����p�^���X,6��sV=�ܖ����6�3�X ���4ҿ��A2�&����_k�;d�� �VfOIEND�B`�
Warning: session_start(): Session cannot be started after headers have already been sent in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 124

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 131

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 132

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 133

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 134

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 135

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 547

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 550

Warning: Cannot modify header information - headers already sent by (output started at /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php:1) in /home/mciraet/www/wp-includes/php-ai-client/src/Providers/Enums/Documentsoliders.php on line 551
file_controller = $file_controller; $this->settings = $settings; $this->init_hooks(); } /** * Add callbacks to hooks. * * @return void */ private function init_hooks(): void { add_action( 'load-woocommerce_page_wc-status', array( $this, 'maybe_do_logs_tab_action' ), 2 ); add_action( 'wc_logs_load_tab', array( $this, 'setup_screen_options' ) ); add_action( 'wc_logs_load_tab', array( $this, 'handle_list_table_bulk_actions' ) ); add_action( 'wc_logs_load_tab', array( $this, 'notices' ) ); } /** * Determine if the current tab on the Status page is Logs, and if so, fire an action. * * @return void * * @internal For exclusive usage of WooCommerce core, backwards compatibility not guaranteed. */ public function maybe_do_logs_tab_action(): void { $is_logs_tab = 'logs' === filter_input( INPUT_GET, 'tab' ); if ( $is_logs_tab ) { $params = $this->get_query_params( array( 'view' ) ); /** * Action fires when the Logs tab starts loading. * * @param string $view The current view within the Logs tab. * * @since 8.6.0 */ do_action( 'wc_logs_load_tab', $params['view'] ); } } /** * Notices to display on Logs screens. * * @return void * * @internal For exclusive usage of WooCommerce core, backwards compatibility not guaranteed. */ public function notices() { if ( ! $this->settings->logging_is_enabled() ) { add_action( 'admin_notices', function () { ?>

Logs Settings.', 'woocommerce' ) ), esc_url( add_query_arg( 'view', 'settings', $this->get_logs_tab_url() ) ) ); ?>

'wc-status', 'tab' => 'logs', ), admin_url( 'admin.php' ) ); } /** * Render the "Logs" tab, depending on the current default log handler. * * @return void */ public function render(): void { $handler = $this->settings->get_default_handler(); $params = $this->get_query_params( array( 'view' ) ); $this->render_section_nav(); if ( 'settings' === $params['view'] ) { $this->settings->render_form(); return; } switch ( $handler ) { case LogHandlerFileV2::class: $this->render_filev2(); return; case WC_Log_Handler_DB::class: WC_Admin_Status::status_logs_db(); return; case WC_Log_Handler_File::class: WC_Admin_Status::status_logs_file(); return; } /** * Action fires only if there is not a built-in rendering method for the current default log handler. * * This is intended as a way for extensions to render log views for custom handlers. * * @param string $handler * * @since 8.6.0 */ do_action( 'wc_logs_render_page', $handler ); } /** * Render navigation to switch between logs browsing and settings. * * @return void */ private function render_section_nav(): void { $params = $this->get_query_params( array( 'view' ) ); $browse_url = $this->get_logs_tab_url(); $settings_url = add_query_arg( 'view', 'settings', $this->get_logs_tab_url() ); ?>
  • %3$s', esc_url( $browse_url ), 'settings' !== $params['view'] ? ' class="current"' : '', esc_html__( 'Browse', 'woocommerce' ) ); ?> |
  • %3$s', esc_url( $settings_url ), 'settings' === $params['view'] ? ' class="current"' : '', esc_html__( 'Settings', 'woocommerce' ) ); ?>

get_query_params( array( 'view' ) ); switch ( $params['view'] ) { case 'list_files': default: $this->render_list_files_view(); break; case 'search_results': $this->render_search_results_view(); break; case 'single_file': $this->render_single_file_view(); break; } } /** * Render the file list view. * * @return void */ private function render_list_files_view(): void { $params = $this->get_query_params( array( 'order', 'orderby', 'source', 'view' ) ); $defaults = $this->get_query_param_defaults(); $list_table = $this->get_list_table( $params['view'] ); $list_table->prepare_items(); ?>

render_search_field(); ?>
$value ) : ?> display(); ?>
get_query_params( array( 'file_id', 'view' ) ); $file = $this->file_controller->get_file_by_id( $params['file_id'] ); if ( is_wp_error( $file ) ) { ?>
get_error_message() ) ); ?> %2$s

', esc_url( $this->get_logs_tab_url() ), esc_html__( 'Return to the file list.', 'woocommerce' ) ); ?>
file_controller->get_file_rotations( $file->get_file_id() ); $rotation_url_base = add_query_arg( 'view', 'single_file', $this->get_logs_tab_url() ); $download_url = add_query_arg( array( 'action' => 'export', 'file_id' => array( $file->get_file_id() ), ), wp_nonce_url( $this->get_logs_tab_url(), 'bulk-log-files' ) ); $delete_url = add_query_arg( array( 'action' => 'delete', 'file_id' => array( $file->get_file_id() ), ), wp_nonce_url( $this->get_logs_tab_url(), 'bulk-log-files' ) ); $delete_confirmation_js = sprintf( "return window.confirm( '%s' )", esc_js( __( 'Delete this log file permanently?', 'woocommerce' ) ) ); $stream = $file->get_stream(); $line_number = 1; ?>

%s', esc_html( $file->get_file_id() ) ) ); ?>

1 ) : ?>
%2$s', esc_url( $download_url ), esc_html__( 'Download', 'woocommerce' ) ); ?> %3$s', esc_url( $delete_url ), esc_attr( $delete_confirmation_js ), esc_html__( 'Delete permanently', 'woocommerce' ) ); ?>
format_line( $line, $line_number ); ++$line_number; } ?>
get_query_params( array( 'view' ) ); $list_table = $this->get_list_table( $params['view'] ); $list_table->prepare_items(); ?>

render_search_field(); ?>
display(); ?> '', 'order' => $this->file_controller::DEFAULTS_GET_FILES['order'], 'orderby' => $this->file_controller::DEFAULTS_GET_FILES['orderby'], 'search' => '', 'source' => $this->file_controller::DEFAULTS_GET_FILES['source'], 'view' => 'list_files', ); } /** * Get and validate URL query params for FileV2 views. * * @param array $param_keys Optional. The names of the params you want to get. * * @return array */ public function get_query_params( array $param_keys = array() ): array { $defaults = $this->get_query_param_defaults(); $params = filter_input_array( INPUT_GET, array( 'file_id' => array( 'filter' => FILTER_CALLBACK, 'options' => function ( $file_id ) { return sanitize_file_name( wp_unslash( $file_id ) ); }, ), 'order' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array( 'regexp' => '/^(asc|desc)$/i', 'default' => $defaults['order'], ), ), 'orderby' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array( 'regexp' => '/^(created|modified|source|size)$/', 'default' => $defaults['orderby'], ), ), 'search' => array( 'filter' => FILTER_CALLBACK, 'options' => function ( $search ) { return esc_html( wp_unslash( $search ) ); }, ), 'source' => array( 'filter' => FILTER_CALLBACK, 'options' => function ( $source ) { return File::sanitize_source( wp_unslash( $source ) ); }, ), 'view' => array( 'filter' => FILTER_VALIDATE_REGEXP, 'options' => array( 'regexp' => '/^(list_files|single_file|search_results|settings)$/', 'default' => $defaults['view'], ), ), ), false ); $params = wp_parse_args( $params, $defaults ); if ( count( $param_keys ) > 0 ) { $params = array_intersect_key( $params, array_flip( $param_keys ) ); } return $params; } /** * Get and cache an instance of the list table. * * @param string $view The current view, which determines which list table class to get. * * @return FileListTable|SearchListTable */ private function get_list_table( string $view ) { if ( $this->list_table instanceof WP_List_Table ) { return $this->list_table; } switch ( $view ) { case 'list_files': $this->list_table = new FileListTable( $this->file_controller, $this ); break; case 'search_results': $this->list_table = new SearchListTable( $this->file_controller, $this ); break; } return $this->list_table; } /** * Register screen options for the logging views. * * @param string $view The current view within the Logs tab. * * @return void * * @internal For exclusive usage of WooCommerce core, backwards compatibility not guaranteed. */ public function setup_screen_options( string $view ): void { $handler = $this->settings->get_default_handler(); $list_table = null; switch ( $handler ) { case LogHandlerFileV2::class: if ( in_array( $view, array( 'list_files', 'search_results' ), true ) ) { $list_table = $this->get_list_table( $view ); } break; case 'WC_Log_Handler_DB': $list_table = WC_Admin_Status::get_db_log_list_table(); break; } if ( $list_table instanceof WP_List_Table ) { // Ensure list table columns are initialized early enough to enable column hiding, if available. $list_table->prepare_column_headers(); add_screen_option( 'per_page', array( 'default' => $list_table->get_per_page_default(), 'option' => $list_table::PER_PAGE_USER_OPTION_KEY, ) ); } } /** * Process bulk actions initiated from the log file list table. * * @param string $view The current view within the Logs tab. * * @return void * * @internal For exclusive usage of WooCommerce core, backwards compatibility not guaranteed. */ public function handle_list_table_bulk_actions( string $view ): void { // Bail if we're not using the file handler. if ( LogHandlerFileV2::class !== $this->settings->get_default_handler() ) { return; } $params = $this->get_query_params( array( 'file_id' ) ); // Bail if this is not the list table view. if ( 'list_files' !== $view ) { return; } $action = $this->get_list_table( $view )->current_action(); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? wp_unslash( $_SERVER['REQUEST_URI'] ) : $this->get_logs_tab_url(); if ( $action ) { check_admin_referer( 'bulk-log-files' ); if ( ! current_user_can( 'manage_woocommerce' ) ) { wp_die( esc_html__( 'You do not have permission to manage log files.', 'woocommerce' ) ); } $sendback = remove_query_arg( array( 'deleted' ), wp_get_referer() ); // Multiple file_id[] params will be filtered separately, but assigned to $files as an array. $file_ids = $params['file_id']; if ( ! is_array( $file_ids ) || count( $file_ids ) < 1 ) { wp_safe_redirect( $sendback ); exit; } switch ( $action ) { case 'export': if ( 1 === count( $file_ids ) ) { $export_error = $this->file_controller->export_single_file( reset( $file_ids ) ); } else { $export_error = $this->file_controller->export_multiple_files( $file_ids ); } if ( is_wp_error( $export_error ) ) { wp_die( wp_kses_post( $export_error->get_error_message() ) ); } break; case 'delete': $deleted = $this->file_controller->delete_files( $file_ids ); $sendback = add_query_arg( 'deleted', $deleted, $sendback ); /** * If the delete action was triggered on the single file view, don't redirect back there * since the file doesn't exist anymore. */ $sendback = remove_query_arg( array( 'view', 'file_id' ), $sendback ); break; } $sendback = remove_query_arg( array( 'action', 'action2' ), $sendback ); wp_safe_redirect( $sendback ); exit; } elseif ( ! empty( $_REQUEST['_wp_http_referer'] ) ) { $removable_args = array( '_wp_http_referer', '_wpnonce', 'action', 'action2', 'filter_action' ); wp_safe_redirect( remove_query_arg( $removable_args, $request_uri ) ); exit; } $deleted = filter_input( INPUT_GET, 'deleted', FILTER_VALIDATE_INT ); if ( is_numeric( $deleted ) ) { add_action( 'admin_notices', function () use ( $deleted ) { ?>

%s', $segments[0] ); $has_timestamp = true; } if ( isset( $segments[1] ) && WC_Log_Levels::is_valid_level( strtolower( $segments[1] ) ) ) { $segments[1] = sprintf( '%2$s', esc_attr( 'log-level log-level--' . strtolower( $segments[1] ) ), esc_html( WC_Log_Levels::get_level_label( strtolower( $segments[1] ) ) ) ); $has_level = true; } if ( isset( $segments[2] ) && $has_timestamp && $has_level ) { $message_chunks = explode( 'CONTEXT:', $segments[2], 2 ); if ( isset( $message_chunks[1] ) ) { try { $maybe_json = html_entity_decode( trim( $message_chunks[1] ), ENT_QUOTES | ENT_HTML401 ); // Decode for validation. $context = json_decode( $maybe_json, false, 512, JSON_THROW_ON_ERROR ); // Re-encode to make it pretty. Keep the JSON flags in sync with LogHandlerFileV2::format_entry(). $context = wp_json_encode( $context, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ); $message_chunks[1] = sprintf( '
%1$s%2$s
', esc_html__( 'Additional context', 'woocommerce' ), esc_html( (string) $context ) ); $segments[2] = implode( ' ', $message_chunks ); $classes[] = 'has-context'; } catch ( \JsonException $exception ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch // It's not valid JSON so don't do anything with it. } } } if ( count( $segments ) > 1 ) { $line = implode( ' ', $segments ); } $classes = implode( ' ', $classes ); return sprintf( '%3$s%4$s', absint( $line_number ), esc_attr( $classes ), sprintf( '', absint( $line_number ) ), sprintf( '%s', wp_kses_post( $line ) ) ); } /** * Render a form for searching within log files. * * @return void */ private function render_search_field(): void { $params = $this->get_query_params( array( 'date_end', 'date_filter', 'date_start', 'search', 'source' ) ); $defaults = $this->get_query_param_defaults(); $file_count = $this->file_controller->get_files( $params, true ); if ( $file_count > 0 ) { ?>