/** * Import names from a csv file into directory */ function name_directory_import() { if (!current_user_can('manage_options')) { wp_die(__('You do not have sufficient permissions to access this page.', 'name-directory')); } global $wpdb; global $table_directory; global $table_directory_name; $directory_id = intval($_GET['dir']); $import_success = false; if ($_SERVER['REQUEST_METHOD'] == 'POST') { $file = wp_import_handle_upload(); if (isset($file['error'])) { echo $file['error']; return; } $csv = array_map('str_getcsv', file($file['file'])); wp_import_cleanup($file['id']); array_shift($csv); $names_imported = 0; $names_duplicate = 0; foreach ($csv as $entry) { if (!($prepared_row = name_directory_prepared_import_row($entry))) { continue; } if (name_directory_name_exists_in_directory($prepared_row['name'], $directory_id)) { $names_duplicate++; continue; } $wpdb->insert($table_directory_name, array('directory' => $directory_id, 'name' => stripslashes_deep($prepared_row['name']), 'letter' => name_directory_get_first_char($prepared_row['name']), 'description' => stripslashes_deep($prepared_row['description']), 'published' => $prepared_row['published'], 'submitted_by' => $prepared_row['submitted_by']), array('%d', '%s', '%s', '%s', '%d', '%s')); $names_imported++; } $notice_class = 'updated'; $import_success = true; $import_message = sprintf(__('Imported %d entries in this directory', 'name-directory'), $names_imported); if ($names_imported === 0) { $notice_class = 'error'; $import_success = false; $import_message = __('Could not import any names into Name Directory', 'name-directory'); } if ($names_duplicate > 0) { $ignored = count($csv) == $names_duplicate ? __('all', 'name-directory') : $names_duplicate; echo '<div class="error" style="border-left: 4px solid #ffba00;"><p>' . sprintf(__('Ignored %s names, because they were duplicate (already in the directory)', 'name-directory'), $ignored) . '</p></div>'; } elseif ($names_imported === 0) { $import_message .= ', ' . __('please check your .csv-file', 'name-directory'); } echo '<div class="' . $notice_class . '"><p>' . $import_message . '</p></div>'; } $wp_file = admin_url('options-general.php'); $wp_page = $_GET['page']; $wp_sub = $_GET['sub']; $overview_url = sprintf("%s?page=%s", $wp_file, $wp_page); $wp_url_path = sprintf("%s?page=%s&sub=%s&dir=%d", $wp_file, $wp_page, $wp_sub, $directory_id); $wp_ndir_path = sprintf("%s?page=%s&sub=%s&dir=%d", $wp_file, $wp_page, 'manage-directory', $directory_id); $directory = $wpdb->get_row("SELECT * FROM " . $table_directory . " WHERE `id` = " . $directory_id, ARRAY_A); echo '<div class="wrap">'; echo '<h2>' . sprintf(__('Import names for %s', 'name-directory'), $directory['name']) . '</h2>'; echo '<div class="narrow"><p>'; if (!$import_success && empty($names_duplicate)) { echo __('Use the upload form below to upload a .csv-file containing all of your names (in the first column), description and submitter are optional.', 'name-directory') . ' '; echo '<h4>' . __('If you saved it from Excel or OpenOffice, please ensure that:', 'name-directory') . '</h4> '; echo '<ol><li>' . __('There is a header row (this contains the column names, the first row will NOT be imported)', 'name-directory'); echo '</li><li>' . __('Fields are encapsulated by double quotes', 'name-directory'); echo '</li><li>' . __('Fields are comma-separated', 'name-directory'); echo '</li></ol>'; echo '<h4>' . __('If uploading or importing fails, these are your options', 'name-directory') . ':</h4><ol><li>'; echo sprintf(__('Please check out %s first and ensure your file is formatted the same.', 'name-directory'), '<a href="http://plugins.svn.wordpress.org/name-directory/assets/name-directory-import-example.csv" target="_blank">' . __('the example import file', 'name-directory') . '</a>') . '</li>'; echo '<li> <a href="https://wiki.openoffice.org/wiki/Documentation/OOo3_User_Guides/Calc_Guide/Saving_spreadsheets#Saving_as_a_CSV_file">OpenOffice csv-export help</a> </li> <li> <a href="https://support.office.com/en-us/article/Import-or-export-text-txt-or-csv-files-e8ab9ff3-be8d-43f1-9d52-b5e8a008ba5c?CorrelationId=fa46399d-2d7a-40bd-b0a5-27b99e96cf68&ui=en-US&rs=en-US&ad=US#bmexport">Excel csv-export help</a> </li> <li> <a href="http://www.freefileconvert.com" target="_blank">' . __('Use an online File Convertor', 'name-directory') . '</a> </li><li>'; echo sprintf(__('If everything else fails, you can always ask a question at the %s.', 'name-directory'), '<a href="https://wordpress.org/support/plugin/name-directory" target="_blank">' . __('plugin support forums', 'name-directory') . '</a>') . ' '; echo '</li></ol></p>'; if (!function_exists('str_getcsv')) { echo '<div class="error"><p>'; echo __('Name Directory Import requires PHP 5.3, you seem to have in older version. Importing names will not work for your website.', 'name-directory'); echo '</p></div>'; } echo '<h3>' . __('Upload your .csv-file', 'name-directory') . '</h3>'; wp_import_upload_form($wp_url_path); } echo '</div></div>'; echo '<a href="' . $wp_ndir_path . '">' . sprintf(__('Back to %s', 'name-directory'), '<i>' . $directory['name'] . '</i>') . '</a>'; echo ' | '; echo '<a href="' . $overview_url . '">' . __('Go to Name Directory Overview', 'name-directory') . '</a>'; }
/** * Show and handle the submission form * @param $directory * @param $overview_url * @return string */ function name_directory_show_submit_form($directory, $overview_url) { global $wpdb; global $table_directory_name; $name = __('Name', 'name-directory'); $required = __('Required', 'name-directory'); $description = __('Description', 'name-directory'); $your_name = __('Your name', 'name-directory'); $submit = __('Submit', 'name-directory'); $back_txt = __('Back to name directory', 'name-directory'); $result_class = ''; $form_result = null; if (!empty($_POST['name_directory_submitted'])) { $wpdb->get_results(sprintf("SELECT `id` FROM `%s` WHERE `name` = '%s'", $table_directory_name, esc_sql($_POST['name_directory_name']))); if ($wpdb->num_rows == 1) { $result_class = 'form-result-error'; $form_result = sprintf(__('Sorry, %s was already on the list so your submission was not sent.', 'name-directory'), '<i>' . esc_sql($_POST['name_directory_name']) . '</i>'); } else { $db_success = $wpdb->insert($table_directory_name, array('directory' => intval($directory), 'name' => esc_sql($_POST['name_directory_name']), 'letter' => name_directory_get_first_char($_POST['name_directory_name']), 'description' => esc_sql($_POST['name_directory_description']), 'published' => 0, 'submitted_by' => esc_sql($_POST['name_directory_submitter'])), array('%d', '%s', '%s', '%s', '%d', '%s')); if (!empty($db_success)) { $result_class = 'form-result-success'; $form_result = __('Thank you for your submission! It will be reviewed shortly.', 'name-directory'); name_directory_notify_admin_of_new_submission($directory, $_POST); } else { $result_class = 'form-result-error'; $form_result = __('Something must have gone terribly wrong. Would you please try it again?', 'name-directory'); } } } else { if ($_SERVER['REQUEST_METHOD'] == 'POST') { $result_class = 'form-result-error'; $form_result = __('Please fill in at least a name', 'name-directory'); } } $form = <<<HTML <form method='post' name='name_directory_submit'> <div class='name-directory-form-result {$result_class}'>{$form_result}</div> <p><a href="{$overview_url}">{$back_txt}</a></p> <div class='name_directory_forminput'> <label for='name_directory_name'>{$name} <small>{$required}</small></label> <br /> <input id='name_directory_name' type='text' name='name_directory_name' /> </div> <div class='name_directory_forminput'> <label for='name_directory_description'>{$description}</label> <br /> <textarea id='name_directory_description' name='name_directory_description'></textarea> </div> <div class='name_directory_forminput'> <label for='name_directory_submitter'>{$your_name}</label> <br /> <input id='name_directory_submitter' type='text' name='name_directory_submitter' /> </div> <div class='name_directory_forminput'> <input type='hidden' name='name_directory_submitted' value='1' /> <br /> <button type='submit'>{$submit}</button> </div> </form> HTML; return $form; }