items) && !empty($list_table->items)) { $items = $list_table->items; $columns = $list_table->get_columns(); } if( isset($_POST['page']) && $_POST['page'] == 'activity-track-ai' && isset($_POST['atk-export-submit']) && $_POST['atk-export-submit'] == 'cvs-export' && isset($items) ) { $created_time = ATKAI_Helpers::getTimeLocal( gmdate( 'Y-m-d H:i:s', current_time( 'timestamp', true ) ) ); $created = mysql2date('m-d-Y_h-ia', $created_time ); ob_end_clean(); $fileHandler = @fopen('php://output', 'w'); header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate"); header('Content-Description: File Transfer'); header("Content-Transfer-Encoding: UTF-8"); header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=atk_logs_list_".$created.".csv"); header("Content-Transfer-Encoding: binary"); header("Expires: 0"); header("Pragma: no-cache"); $dt = array(); unset($columns['cb'], $columns['logs_ai']); foreach ( $items as $item ) { $dt[] = $this->fix_data( $item, $columns ); } $separator = apply_filters( 'atkai_export_csv_separator', ',' ); fputcsv( $fileHandler, $columns, $separator ); foreach ( $dt as $row ) { $encoded_row = $this->get_encoded_row( $row ); fputcsv( $fileHandler, $encoded_row, $separator ); } // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fclose fclose($fileHandler); exit (); } } private function fix_data( $item, $columns ) { $row = array(); foreach ( array_keys( $columns ) as $column ) { switch ( $column ) { case 'created_date': $created_time = ATKAI_Helpers::getTimeLocal( $item->created_date ); $created = ATKAI_Helpers::getLocalFormat( $created_time ); $row[ $column ] = $created; break; case 'user_id': $user = get_userdata( $item->user_id ); $row[ $column ] = isset( $user->display_name ) ? $user->display_name : 'Unknown'; break; case 'user_ip_address': $row[ $column ] = $item->user_ip_address; break; case 'action_name': $row[ $column ] = $item->action_name; break; case 'action': $row[ $column ] = $item->action; break; case 'action_type': $row[ $column ] = $item->action_type; break; case 'action_url': $row[ $column ] = $item->action_url; break; } } return $row; } private function get_encoded_row( $row ) { $result = []; foreach ( $row as $key => $value ) { $encoded_value = $value; if ( in_array( substr( (string) $value, 0, 1 ), self::FORMULAS_START_CHARACTERS, true ) ) { $encoded_value = "'" . $value; } $result[ $key ] = $encoded_value; } return $result; } }