?> " href="<?php echo esc_url(add_query_arg(array('action' => 'entry', 'entry_id' => $entry->id, 'id' => $id))); ?> "> <?php } ?> <?php if ($column['type'] == 'element') { $key = 'element_' . $column['id']; echo $entry->{$key}; } else { switch ($column['id']) { case 'date_added': echo iphorm_format_date($entry->date_added, true); break; case 'user_email': if (strlen($entry->user_email)) { echo '<a href="mailto:' . esc_attr($entry->user_email) . '">' . esc_html($entry->user_email) . '</a>'; } break; default: echo $entry->{$column['id']}; break; } } ?> <?php if ($j == 1) { ?>
/** * Export form entries */ function iphorm_export_entries() { if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['iphorm_do_entries_export']) && $_POST['iphorm_do_entries_export'] == 1) { if (isset($_POST['form_id']) && iphorm_form_exists($_POST['form_id'])) { $config = iphorm_get_form_config($_POST['form_id']); $id = $config['id']; $filenameFilter = new iPhorm_Filter_Filename(); $filename = $filenameFilter->filter($config['name']); // Send headers header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename=' . $filename . '-' . date('Y-m-d') . '.csv'); global $wpdb; $elementsCache = array(); // Build the query $sql = "SELECT `entries`.*"; if (isset($config['elements']) && is_array($config['elements'])) { foreach ($config['elements'] as $element) { if (isset($element['save_to_database']) && $element['save_to_database']) { $elementId = absint($element['id']); $sql .= ", GROUP_CONCAT(if (`data`.`element_id` = {$elementId}, value, NULL)) AS `element_{$elementId}`"; $elementsCache[$elementId] = iphorm_get_element_config($elementId, $config); } } } if (isset($_POST['from'], $_POST['to'])) { $pattern = '/^\\d{4}-\\d{2}-\\d{2}$/'; if (preg_match($pattern, $_POST['from']) && preg_match($pattern, $_POST['to'])) { $from = iphorm_local_to_utc($_POST['from'] . ' 00:00:00'); $to = iphorm_local_to_utc($_POST['to'] . ' 23:59:59'); $dateSql = $wpdb->prepare(' AND (`entries`.`date_added` >= %s AND `entries`.`date_added` <= %s)', array($from, $to)); } } $sql .= "\r\n FROM `" . iphorm_get_form_entries_table_name() . "` `entries`\r\n LEFT JOIN `" . iphorm_get_form_entry_data_table_name() . "` `data` ON `data`.`entry_id` = `entries`.`id`\r\n WHERE `entries`.`form_id` = {$id}"; if (isset($dateSql)) { $sql .= $dateSql; } $sql .= "\r\n GROUP BY `entries`.`id`;"; $wpdb->query('SET @@GROUP_CONCAT_MAX_LEN = 65535'); $entries = $wpdb->get_results($sql, ARRAY_A); $validFields = array('id' => 'Entry ID', 'date_added' => 'Date', 'ip' => 'IP address', 'form_url' => 'Form URL', 'referring_url' => 'Referring URL', 'post_id' => 'Post / page ID', 'post_title' => 'Post / page title', 'user_display_name' => 'User WordPress display name', 'user_email' => 'User WordPress email', 'user_login' => 'User WordPress login'); // Sanitize chosen fields $validFields = iphorm_get_valid_entry_fields(); $fields = array(); if (isset($_POST['export_fields']) && is_array($_POST['export_fields'])) { // Check which fields have been chosen for export and get their labels foreach ($_POST['export_fields'] as $field) { if (array_key_exists($field, $validFields)) { // It's a default column, get the label $fields[$field] = $validFields[$field]; } elseif (preg_match('/element_(\\d+)/', $field, $matches)) { // It's an element column, so get the element label $elementId = absint($matches[1]); if (isset($elementsCache[$elementId])) { $label = iphorm_get_element_admin_label($elementsCache[$elementId]); } else { $label = ''; } $fields[$field] = $label; } } } $fh = fopen('php://output', 'w'); // Write column headings row fputcsv($fh, $fields); // Write each entry if (is_array($entries)) { foreach ($entries as $entry) { $row = array(); foreach ($fields as $field => $label) { $row[$field] = isset($entry[$field]) ? $entry[$field] : ''; if (strlen($row[$field]) && strpos($field, 'element_') !== false) { $elementId = absint(str_replace('element_', '', $field)); if (isset($elementsCache[$elementId])) { // Per element modifications to the output if (isset($elementsCache[$elementId]['type'])) { switch ($elementsCache[$elementId]['type']) { // Remove <br /> from textarea newlines case 'text': case 'textarea': case 'password': case 'hidden': $row[$field] = htmlspecialchars_decode(preg_replace('/<br\\s*?\\/>/', '', $row[$field]), ENT_QUOTES); break; case 'email': // Email elements: remove <a> tag $row[$field] = trim(strip_tags($row[$field])); break; case 'checkbox': case 'radio': // Multiple elements: replace <br /> with new line $row[$field] = trim(preg_replace('/<br\\s*?\\/>/', "\n", $row[$field])); break; case 'file': // File uploads: replace <br /> with newline, remove anchor tag, use href attr as value $result = preg_match_all('/href=([\'"])?((?(1).+?|[^\\s>]+))(?(1)\\1)/is', $row[$field], $uploads); if ($result > 0) { $row[$field] = join("\n", $uploads[2]); } else { $row[$field] = trim(preg_replace('/<br\\s*?\\/>/', "\n", $row[$field])); } break; } } } } // Format the date to include the WordPress Timezone offset if ($field === 'date_added') { $row[$field] = iphorm_format_date($row[$field]); } } fputcsv($fh, $row); } } fclose($fh); exit; } } }