Пример #1
0
/**
 * 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;
}