<?php

add_action('wpcf7_admin_menu', 'wpcf7_admin_init_bulk_cv', 10, 0);
function wpcf7_admin_init_bulk_cv()
{
    if (!wpcf7_validate_configuration() or !current_user_can('wpcf7_edit_contact_forms')) {
        return;
    }
    $result = WPCF7::get_option('bulk_validate');
    $last_important_update = WPCF7_ConfigValidator::last_important_update;
    if (!empty($result['version']) and version_compare($last_important_update, $result['version'], '<=')) {
        return;
    }
    add_filter('wpcf7_admin_menu_change_notice', 'wpcf7_admin_menu_change_notice_bulk_cv', 10, 1);
    add_action('wpcf7_admin_warnings', 'wpcf7_admin_warnings_bulk_cv', 5, 3);
}
function wpcf7_admin_menu_change_notice_bulk_cv($counts)
{
    $counts['wpcf7'] += 1;
    return $counts;
}
function wpcf7_admin_warnings_bulk_cv($page, $action, $object)
{
    if ('wpcf7' === $page and 'validate' === $action) {
        return;
    }
    $link = wpcf7_link(add_query_arg(array('action' => 'validate'), menu_page_url('wpcf7', false)), __('Validate Contact Form 7 Configuration', 'contact-form-7'));
    $message = __("Misconfiguration leads to mail delivery failure or other troubles. Validate your contact forms now.", 'contact-form-7');
    echo sprintf('<div class="notice notice-warning"><p>%1$s &raquo; %2$s</p></div>', esc_html($message), $link);
}
add_action('wpcf7_admin_load', 'wpcf7_load_bulk_validate_page', 10, 2);
function wpcf7_load_bulk_validate_page($page, $action)
{
    if ('wpcf7' != $page or 'validate' != $action or !wpcf7_validate_configuration() or 'POST' != $_SERVER['REQUEST_METHOD']) {
        return;
    }
    check_admin_referer('wpcf7-bulk-validate');
    if (!current_user_can('wpcf7_edit_contact_forms')) {
        wp_die(__("You are not allowed to validate configuration.", 'contact-form-7'));
    }
    $contact_forms = WPCF7_ContactForm::find();
    $result = array('timestamp' => time(), 'version' => WPCF7_VERSION, 'count_valid' => 0, 'count_invalid' => 0);
    foreach ($contact_forms as $contact_form) {
        $config_validator = new WPCF7_ConfigValidator($contact_form);
        $config_validator->validate();
        $config_validator->save();
        if ($config_validator->is_valid()) {
            $result['count_valid'] += 1;
        } else {
            $result['count_invalid'] += 1;
        }
    }
    WPCF7::update_option('bulk_validate', $result);
    $redirect_to = add_query_arg(array('message' => 'validated'), menu_page_url('wpcf7', false));
    wp_safe_redirect($redirect_to);
    exit;
}
function wpcf7_admin_bulk_validate_page()
{
    $contact_forms = WPCF7_ContactForm::find();
    $count = WPCF7_ContactForm::count();
    $submit_text = sprintf(_n("Validate %s contact form now", "Validate %s contact forms now", $count, 'contact-form-7'), number_format_i18n($count));
    ?>
<div class="wrap">

<h1><?php 
    echo esc_html(__('Validate Configuration', 'contact-form-7'));
    ?></h1>

<form method="post" action="">
	<input type="hidden" name="action" value="validate" />
	<?php 
    wp_nonce_field('wpcf7-bulk-validate');
    ?>
	<p><input type="submit" class="button" value="<?php 
    echo esc_attr($submit_text);
    ?>" /></p>
</form>

<?php 
    echo wpcf7_link(__('https://contactform7.com/configuration-validator-faq/', 'contact-form-7'), __('FAQ about Configuration Validator', 'contact-form-7'));
    ?>

</div>
<?php 
}