Hotel Raxa - Advanced Booking System Implementation
🏨 Hotel Booking Enhancements: - Implemented Eagle Booking Advanced Pricing add-on - Added Booking.com-style rate management system - Created professional calendar interface for pricing - Integrated deals and discounts functionality 💰 Advanced Pricing Features: - Dynamic pricing models (per room, per person, per adult) - Base rates, adult rates, and child rates management - Length of stay discounts and early bird deals - Mobile rates and secret deals implementation - Seasonal promotions and flash sales 📅 Availability Management: - Real-time availability tracking - Stop sell and restriction controls - Closed to arrival/departure functionality - Minimum/maximum stay requirements - Automatic sold-out management 💳 Payment Integration: - Maintained Redsys payment gateway integration - Seamless integration with existing Eagle Booking - No modifications to core Eagle Booking plugin 🛠️ Technical Implementation: - Custom database tables for advanced pricing - WordPress hooks and filters integration - AJAX-powered admin interface - Data migration from existing Eagle Booking - Professional calendar view for revenue management 📊 Admin Interface: - Booking.com-style management dashboard - Visual rate and availability calendar - Bulk operations for date ranges - Statistics and analytics dashboard - Modal dialogs for quick editing 🔧 Code Quality: - WordPress coding standards compliance - Secure database operations with prepared statements - Proper input validation and sanitization - Error handling and logging - Responsive admin interface 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
function wpcf7_current_action() {
|
||||
if ( isset( $_REQUEST['action'] ) and -1 != $_REQUEST['action'] ) {
|
||||
return $_REQUEST['action'];
|
||||
}
|
||||
|
||||
if ( isset( $_REQUEST['action2'] ) and -1 != $_REQUEST['action2'] ) {
|
||||
return $_REQUEST['action2'];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function wpcf7_admin_has_edit_cap() {
|
||||
return current_user_can( 'wpcf7_edit_contact_forms' );
|
||||
}
|
||||
|
||||
function wpcf7_add_tag_generator( $name, $title, $elm_id, $callback, $options = array() ) {
|
||||
$tag_generator = WPCF7_TagGenerator::get_instance();
|
||||
return $tag_generator->add( $name, $title, $callback, $options );
|
||||
}
|
||||
@@ -0,0 +1,243 @@
|
||||
<?php
|
||||
|
||||
if ( ! class_exists( 'WP_List_Table' ) ) {
|
||||
require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
|
||||
}
|
||||
|
||||
class WPCF7_Contact_Form_List_Table extends WP_List_Table {
|
||||
|
||||
public static function define_columns() {
|
||||
$columns = array(
|
||||
'cb' => '<input type="checkbox" />',
|
||||
'title' => __( 'Title', 'contact-form-7' ),
|
||||
'shortcode' => __( 'Shortcode', 'contact-form-7' ),
|
||||
'author' => __( 'Author', 'contact-form-7' ),
|
||||
'date' => __( 'Date', 'contact-form-7' ),
|
||||
);
|
||||
|
||||
return $columns;
|
||||
}
|
||||
|
||||
public function __construct() {
|
||||
parent::__construct( array(
|
||||
'singular' => 'post',
|
||||
'plural' => 'posts',
|
||||
'ajax' => false,
|
||||
) );
|
||||
}
|
||||
|
||||
public function prepare_items() {
|
||||
$current_screen = get_current_screen();
|
||||
$per_page = $this->get_items_per_page( 'wpcf7_contact_forms_per_page' );
|
||||
|
||||
$args = array(
|
||||
'posts_per_page' => $per_page,
|
||||
'orderby' => 'title',
|
||||
'order' => 'ASC',
|
||||
'offset' => ( $this->get_pagenum() - 1 ) * $per_page,
|
||||
);
|
||||
|
||||
if ( ! empty( $_REQUEST['s'] ) ) {
|
||||
$args['s'] = $_REQUEST['s'];
|
||||
}
|
||||
|
||||
if ( ! empty( $_REQUEST['orderby'] ) ) {
|
||||
if ( 'title' == $_REQUEST['orderby'] ) {
|
||||
$args['orderby'] = 'title';
|
||||
} elseif ( 'author' == $_REQUEST['orderby'] ) {
|
||||
$args['orderby'] = 'author';
|
||||
} elseif ( 'date' == $_REQUEST['orderby'] ) {
|
||||
$args['orderby'] = 'date';
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $_REQUEST['order'] ) ) {
|
||||
if ( 'asc' == strtolower( $_REQUEST['order'] ) ) {
|
||||
$args['order'] = 'ASC';
|
||||
} elseif ( 'desc' == strtolower( $_REQUEST['order'] ) ) {
|
||||
$args['order'] = 'DESC';
|
||||
}
|
||||
}
|
||||
|
||||
$this->items = WPCF7_ContactForm::find( $args );
|
||||
|
||||
$total_items = WPCF7_ContactForm::count();
|
||||
$total_pages = ceil( $total_items / $per_page );
|
||||
|
||||
$this->set_pagination_args( array(
|
||||
'total_items' => $total_items,
|
||||
'total_pages' => $total_pages,
|
||||
'per_page' => $per_page,
|
||||
) );
|
||||
}
|
||||
|
||||
public function get_columns() {
|
||||
return get_column_headers( get_current_screen() );
|
||||
}
|
||||
|
||||
protected function get_sortable_columns() {
|
||||
$columns = array(
|
||||
'title' => array( 'title', true ),
|
||||
'author' => array( 'author', false ),
|
||||
'date' => array( 'date', false ),
|
||||
);
|
||||
|
||||
return $columns;
|
||||
}
|
||||
|
||||
protected function get_bulk_actions() {
|
||||
$actions = array(
|
||||
'delete' => __( 'Delete', 'contact-form-7' ),
|
||||
);
|
||||
|
||||
return $actions;
|
||||
}
|
||||
|
||||
protected function column_default( $item, $column_name ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
public function column_cb( $item ) {
|
||||
return sprintf(
|
||||
'<input type="checkbox" name="%1$s[]" value="%2$s" />',
|
||||
$this->_args['singular'],
|
||||
$item->id()
|
||||
);
|
||||
}
|
||||
|
||||
public function column_title( $item ) {
|
||||
$edit_link = add_query_arg(
|
||||
array(
|
||||
'post' => absint( $item->id() ),
|
||||
'action' => 'edit',
|
||||
),
|
||||
menu_page_url( 'wpcf7', false )
|
||||
);
|
||||
|
||||
$output = sprintf(
|
||||
'<a class="row-title" href="%1$s" aria-label="%2$s">%3$s</a>',
|
||||
esc_url( $edit_link ),
|
||||
esc_attr( sprintf(
|
||||
/* translators: %s: title of contact form */
|
||||
__( 'Edit “%s”', 'contact-form-7' ),
|
||||
$item->title()
|
||||
) ),
|
||||
esc_html( $item->title() )
|
||||
);
|
||||
|
||||
$output = sprintf( '<strong>%s</strong>', $output );
|
||||
|
||||
if ( wpcf7_validate_configuration()
|
||||
and current_user_can( 'wpcf7_edit_contact_form', $item->id() ) ) {
|
||||
$config_validator = new WPCF7_ConfigValidator( $item );
|
||||
$config_validator->restore();
|
||||
|
||||
if ( $count_errors = $config_validator->count_errors() ) {
|
||||
$error_notice = sprintf(
|
||||
_n(
|
||||
/* translators: %s: number of errors detected */
|
||||
'%s configuration error detected',
|
||||
'%s configuration errors detected',
|
||||
$count_errors, 'contact-form-7' ),
|
||||
number_format_i18n( $count_errors )
|
||||
);
|
||||
|
||||
$output .= sprintf(
|
||||
'<div class="config-error"><span class="icon-in-circle" aria-hidden="true">!</span> %s</div>',
|
||||
$error_notice
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
protected function handle_row_actions( $item, $column_name, $primary ) {
|
||||
if ( $column_name !== $primary ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$edit_link = add_query_arg(
|
||||
array(
|
||||
'post' => absint( $item->id() ),
|
||||
'action' => 'edit',
|
||||
),
|
||||
menu_page_url( 'wpcf7', false )
|
||||
);
|
||||
|
||||
$actions = array(
|
||||
'edit' => wpcf7_link( $edit_link, __( 'Edit', 'contact-form-7' ) ),
|
||||
);
|
||||
|
||||
if ( current_user_can( 'wpcf7_edit_contact_form', $item->id() ) ) {
|
||||
$copy_link = add_query_arg(
|
||||
array(
|
||||
'post' => absint( $item->id() ),
|
||||
'action' => 'copy',
|
||||
),
|
||||
menu_page_url( 'wpcf7', false )
|
||||
);
|
||||
|
||||
$copy_link = wp_nonce_url(
|
||||
$copy_link,
|
||||
'wpcf7-copy-contact-form_' . absint( $item->id() )
|
||||
);
|
||||
|
||||
$actions = array_merge( $actions, array(
|
||||
'copy' => wpcf7_link( $copy_link, __( 'Duplicate', 'contact-form-7' ) ),
|
||||
) );
|
||||
}
|
||||
|
||||
return $this->row_actions( $actions );
|
||||
}
|
||||
|
||||
public function column_author( $item ) {
|
||||
$post = get_post( $item->id() );
|
||||
|
||||
if ( ! $post ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$author = get_userdata( $post->post_author );
|
||||
|
||||
if ( false === $author ) {
|
||||
return;
|
||||
}
|
||||
|
||||
return esc_html( $author->display_name );
|
||||
}
|
||||
|
||||
public function column_shortcode( $item ) {
|
||||
$shortcodes = array( $item->shortcode() );
|
||||
|
||||
$output = '';
|
||||
|
||||
foreach ( $shortcodes as $shortcode ) {
|
||||
$output .= "\n" . '<span class="shortcode"><input type="text"'
|
||||
. ' onfocus="this.select();" readonly="readonly"'
|
||||
. ' value="' . esc_attr( $shortcode ) . '"'
|
||||
. ' class="large-text code" /></span>';
|
||||
}
|
||||
|
||||
return trim( $output );
|
||||
}
|
||||
|
||||
public function column_date( $item ) {
|
||||
$datetime = get_post_datetime( $item->id() );
|
||||
|
||||
if ( false === $datetime ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$t_time = sprintf(
|
||||
/* translators: 1: date, 2: time */
|
||||
__( '%1$s at %2$s', 'contact-form-7' ),
|
||||
/* translators: date format, see https://www.php.net/date */
|
||||
$datetime->format( __( 'Y/m/d', 'contact-form-7' ) ),
|
||||
/* translators: time format, see https://www.php.net/date */
|
||||
$datetime->format( __( 'g:i a', 'contact-form-7' ) )
|
||||
);
|
||||
|
||||
return $t_time;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
<?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' );
|
||||
|
||||
wp_admin_notice(
|
||||
sprintf(
|
||||
'%1$s » %2$s',
|
||||
esc_html( $message ),
|
||||
$link
|
||||
),
|
||||
'type=warning'
|
||||
);
|
||||
}
|
||||
|
||||
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(
|
||||
/* translators: %s: number of contact forms */
|
||||
"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
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Tabs
|
||||
*/
|
||||
#contact-form-editor-tabs {
|
||||
padding: 9px 10px 0 15px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Form Tab
|
||||
*/
|
||||
.tag-generator-panel {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.tag-generator-dialog > .close-button {
|
||||
right: auto;
|
||||
left: 8px;
|
||||
}
|
||||
|
||||
form.tag-generator-panel[data-version="1"] {
|
||||
.control-box > fieldset > legend {
|
||||
border: 1px solid #dfdfdf;
|
||||
border-right: 4px solid #00a0d2;
|
||||
}
|
||||
|
||||
.insert-box input.tag {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.insert-box .submitbox input[type="button"] {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Mail Tab
|
||||
*/
|
||||
.contact-form-editor-box-mail span.mailtag {
|
||||
margin: 0 4px 0 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Welcome Panel
|
||||
*/
|
||||
.wpcf7-welcome-panel .welcome-panel-close {
|
||||
left: 10px;
|
||||
right: auto;
|
||||
padding: 10px 21px 10px 15px;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-close::before {
|
||||
right: 0;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-content {
|
||||
margin-right: 13px;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-column {
|
||||
float: right;
|
||||
padding: 0 0 0 2%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Integration
|
||||
*/
|
||||
.card {
|
||||
border-left: 1px solid #e5e5e5;
|
||||
border-right: 4px solid #e5e5e5;
|
||||
}
|
||||
|
||||
.card img.icon {
|
||||
float: right;
|
||||
margin: 8px -8px 8px 8px;
|
||||
}
|
||||
|
||||
.card h2.title {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.card .infobox {
|
||||
float: left;
|
||||
}
|
||||
619
wp-content/plugins/contact-form-7/admin/includes/css/styles.css
Normal file
619
wp-content/plugins/contact-form-7/admin/includes/css/styles.css
Normal file
@@ -0,0 +1,619 @@
|
||||
#titlediv .inside p.description {
|
||||
margin: 8px 2px 0;
|
||||
}
|
||||
|
||||
#titlediv .inside p.description label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
span.shortcode {
|
||||
display: block;
|
||||
margin: 2px 0;
|
||||
}
|
||||
|
||||
span.shortcode.old {
|
||||
background: #777;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
span.shortcode input {
|
||||
font-size: 12px;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
padding: 4px 8px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#wpcf7-contact-form-list-table span.shortcode input,
|
||||
#wpcf7-contact-form-editor span.shortcode input {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#wpcf7-contact-form-list-table span.shortcode input {
|
||||
color: #444;
|
||||
}
|
||||
|
||||
#wpcf7-contact-form-editor span.shortcode input {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#submitpost input.copy {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#submitpost input.delete {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
background: inherit;
|
||||
color: #a00;
|
||||
}
|
||||
|
||||
#submitpost input.delete:hover {
|
||||
color: #dc3232; /* Red */
|
||||
}
|
||||
|
||||
#submitpost input.delete:focus {
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
.postbox-container .postbox h3 {
|
||||
border-bottom: 1px solid transparent;
|
||||
}
|
||||
|
||||
div.config-error, span.config-error, ul.config-error {
|
||||
color: #444;
|
||||
font-style: normal;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
ul.config-error {
|
||||
margin: 2px 0;
|
||||
}
|
||||
|
||||
ul.config-error li {
|
||||
list-style: none;
|
||||
padding: 2px 2px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#misc-publishing-actions .config-error {
|
||||
line-height: 2;
|
||||
}
|
||||
|
||||
[data-config-field][aria-invalid="true"] {
|
||||
border-color: #dc3232;
|
||||
}
|
||||
|
||||
#contact-form-editor-tabs li a .icon-in-circle,
|
||||
#contact-form-editor .config-error .icon-in-circle,
|
||||
.wp-list-table .config-error .icon-in-circle,
|
||||
.icon-in-circle {
|
||||
display: inline-block;
|
||||
vertical-align: baseline;
|
||||
margin: 1px 6px 0;
|
||||
padding: 0 5px;
|
||||
min-width: 7px;
|
||||
height: 17px;
|
||||
border-radius: 11px;
|
||||
background-color: #ca4a1f;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
line-height: 17px;
|
||||
text-align: center;
|
||||
z-index: 26;
|
||||
}
|
||||
|
||||
/*
|
||||
* Tabs
|
||||
*/
|
||||
#contact-form-editor-tabs {
|
||||
border-bottom: 1px solid #aaa;
|
||||
padding: 9px 15px 0 10px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#contact-form-editor-tabs li {
|
||||
display: inline-block;
|
||||
list-style: none;
|
||||
border: 1px solid #ccc;
|
||||
border-bottom: 1px solid #aaa;
|
||||
padding: 0;
|
||||
margin: 0 4px -1px;
|
||||
background-color: #e4e4e4;
|
||||
}
|
||||
|
||||
#contact-form-editor-tabs li.active {
|
||||
border-top: 1px solid #aaa;
|
||||
border-right: 1px solid #aaa;
|
||||
border-left: 1px solid #aaa;
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
#contact-form-editor-tabs li a {
|
||||
padding: 6px 10px;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
line-height: 30px;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#contact-form-editor-tabs li.active a {
|
||||
color: #000;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#contact-form-editor-tabs li a:hover {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#contact-form-editor .contact-form-editor-panel > div.config-error {
|
||||
margin-bottom: 1.4em;
|
||||
}
|
||||
|
||||
#contact-form-editor-tabs li.active a .icon-in-circle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#contact-form-editor .contact-form-editor-panel h2 {
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
line-height: 24px;
|
||||
margin: 8px 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#contact-form-editor .contact-form-editor-panel {
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #aaa;
|
||||
border-top: none;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
#contact-form-editor .form-table th {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
#contact-form-editor .contact-form-editor-panel fieldset legend {
|
||||
line-height: 1.5;
|
||||
margin: .6em 0 .4em;
|
||||
}
|
||||
|
||||
/*
|
||||
* Form Tab
|
||||
*/
|
||||
#tag-generator-list button {
|
||||
font-size: 12px;
|
||||
height: 26px;
|
||||
line-height: 24px;
|
||||
margin: 2px;
|
||||
padding: 0 8px 1px;
|
||||
}
|
||||
|
||||
.tag-generator-dialog {
|
||||
padding: 12px;
|
||||
border: 1px solid #c3c4c7;
|
||||
box-shadow: 0 1px 1px rgba( 0, 0, 0, 0.04 );
|
||||
min-height: 720px; /* needed for Safari */
|
||||
}
|
||||
|
||||
.tag-generator-dialog::backdrop {
|
||||
background: rgb( 0 0 0 / 50% );
|
||||
}
|
||||
|
||||
.tag-generator-dialog > .close-button {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 8px;
|
||||
}
|
||||
|
||||
form.tag-generator-panel {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 720px;
|
||||
width: 720px;
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
margin-block-end: 0;
|
||||
}
|
||||
|
||||
form.tag-generator-panel[data-version="2"] {
|
||||
&:invalid .mail-tag-tip {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.description-box {
|
||||
box-sizing: border-box;
|
||||
flex: none;
|
||||
margin-inline: -12px;
|
||||
padding-inline: 12px;
|
||||
border-bottom: 1px solid #dfdfdf;
|
||||
}
|
||||
|
||||
.control-box {
|
||||
box-sizing: border-box;
|
||||
flex: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px 0;
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
.control-box > fieldset {
|
||||
margin-block: 8px;
|
||||
margin-inline-start: 10em;
|
||||
line-height: 2.25;
|
||||
}
|
||||
|
||||
.control-box > fieldset > legend {
|
||||
font-weight: bolder;
|
||||
margin-block: 8px;
|
||||
margin-inline-start: -10em;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.control-box input[type="text"] {
|
||||
width: 20rem;
|
||||
max-width: 88%;
|
||||
}
|
||||
|
||||
.control-box input[type="number"] {
|
||||
width: 8rem;
|
||||
max-width: 44%;
|
||||
}
|
||||
|
||||
.control-box textarea {
|
||||
height: 12ex;
|
||||
width: 20rem;
|
||||
max-width: 88%;
|
||||
}
|
||||
|
||||
.control-box select {
|
||||
width: 20rem;
|
||||
max-width: 88%;
|
||||
}
|
||||
|
||||
.control-box input:invalid,
|
||||
.control-box textarea:invalid {
|
||||
background-color: #ffe9de;
|
||||
}
|
||||
|
||||
.insert-box {
|
||||
box-sizing: border-box;
|
||||
flex: none;
|
||||
margin-block-end: -12px;
|
||||
margin-inline: -12px;
|
||||
padding-block: 24px 12px;
|
||||
padding-inline: 12px;
|
||||
background-color: #fcfcfc;
|
||||
border-top: 1px solid #dfdfdf;
|
||||
}
|
||||
|
||||
.insert-box .flex-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.insert-box .flex-container > [data-tag-part="tag"] {
|
||||
flex: auto;
|
||||
margin-inline-end: 8px;
|
||||
}
|
||||
|
||||
.insert-box .mail-tag-tip::before {
|
||||
font: 1.2rem dashicons;
|
||||
content: "\f348";
|
||||
color: #646970;
|
||||
padding-inline-end: 4px;
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
|
||||
form.tag-generator-panel[data-version="1"] {
|
||||
.control-box {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: auto;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.control-box > fieldset > legend {
|
||||
border: 1px solid #dfdfdf;
|
||||
border-left: 4px solid #00a0d2;
|
||||
background: #f7fcfe;
|
||||
padding: 4px 12px;
|
||||
margin: 4px 0;
|
||||
line-height: 1.4em;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.form-table th {
|
||||
width: 120px;
|
||||
padding: 4px 10px 4px 0;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
table.form-table td {
|
||||
padding: 4px 10px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.control-box input.oneline {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.control-box input.large-text {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
.control-box textarea.values {
|
||||
width: 200px;
|
||||
height: 6em;
|
||||
}
|
||||
|
||||
.control-box input[type="number"],
|
||||
.control-box input[type="date"] {
|
||||
width: 88px;
|
||||
}
|
||||
|
||||
.control-box table caption {
|
||||
text-align: left;
|
||||
font-size: 110%;
|
||||
font-weight: bold;
|
||||
color: #777;
|
||||
margin: 10px 0 5px;
|
||||
}
|
||||
|
||||
.control-box table.form-table td label {
|
||||
line-height: 1.1em;
|
||||
}
|
||||
|
||||
.control-box table.form-table td label .description {
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
.insert-box {
|
||||
margin: 0 -15px -15px;
|
||||
padding: 8px 16px;
|
||||
background-color: #fcfcfc;
|
||||
border-top: 1px solid #dfdfdf;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.insert-box input.tag {
|
||||
width: 510px;
|
||||
float: left;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.insert-box .submitbox {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.insert-box .submitbox input[type="button"] {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.insert-box .description label {
|
||||
cursor: text;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Mail Tab
|
||||
*/
|
||||
.contact-form-editor-box-mail span.mailtag {
|
||||
display: inline-block;
|
||||
margin: 0 0 0 4px;
|
||||
padding: 1px 2px;
|
||||
cursor: pointer;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.contact-form-editor-box-mail span.mailtag.used {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.contact-form-editor-box-mail span.mailtag.unused {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/*
|
||||
* Messages Tab
|
||||
*/
|
||||
#messages-panel p.description {
|
||||
margin: 5px 0 10px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Tabs for integration modules
|
||||
*/
|
||||
#ctct-panel table tr.inactive ~ tr,
|
||||
#sendinblue-panel table tr.inactive ~ tr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#ctct-panel .dashicons,
|
||||
#sendinblue-panel .dashicons {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#ctct-panel td p,
|
||||
#sendinblue-panel td p {
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
/*
|
||||
* List Table
|
||||
*/
|
||||
.fixed .column-title {
|
||||
width: 38%;
|
||||
}
|
||||
|
||||
.fixed .column-shortcode {
|
||||
width: 38%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Welcome Panel
|
||||
*/
|
||||
.wpcf7-welcome-panel {
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
margin: 16px 0;
|
||||
padding: 23px 10px 0;
|
||||
border: 1px solid #c3c4c7;
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
||||
background: #fff;
|
||||
font-size: 13px;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel h3 {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 2.1em;
|
||||
margin: 1em 0 1.2em;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel h3 .dashicons {
|
||||
position: relative;
|
||||
top: -2px;
|
||||
display: inline-block;
|
||||
width: 60px;
|
||||
color: #575757;
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel p {
|
||||
color: #646970;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel p a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-close {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
padding: 10px 15px 10px 21px;
|
||||
font-size: 13px;
|
||||
line-height: 1.23076923; /* Chrome rounding, needs to be 16px equivalent */
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-close::before {
|
||||
background: 0 0;
|
||||
color: #787c82;
|
||||
content: "\f153";
|
||||
display: block;
|
||||
font: normal 16px/20px dashicons;
|
||||
speak: never;
|
||||
height: 20px;
|
||||
text-align: center;
|
||||
width: 20px;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
left: 0;
|
||||
transition: all .1s ease-in-out;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-content {
|
||||
display: block;
|
||||
margin-left: 13px;
|
||||
max-width: 1500px;
|
||||
min-height: auto;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-column-container {
|
||||
clear: both;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-column {
|
||||
display: block;
|
||||
width: 48%;
|
||||
min-width: 200px;
|
||||
float: left;
|
||||
padding: 0 2% 0 0;
|
||||
margin: 0 0 1em 0;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 870px) {
|
||||
.wpcf7-welcome-panel .welcome-panel-column {
|
||||
display: block;
|
||||
float: none;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.wpcf7-welcome-panel .welcome-panel-column p {
|
||||
margin-top: 7px;
|
||||
color: #3c434a;
|
||||
}
|
||||
|
||||
/*
|
||||
* Integration
|
||||
*/
|
||||
.card {
|
||||
background: #fff none repeat scroll 0 0;
|
||||
border: 1px solid #e5e5e5;
|
||||
border-left: 4px solid #e5e5e5;
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
||||
margin-top: 20px;
|
||||
max-width: 520px;
|
||||
min-width: 255px;
|
||||
padding: 0.7em 2em 1em;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.card.active {
|
||||
border-color: #00a0d2;
|
||||
}
|
||||
|
||||
.card img.icon {
|
||||
float: left;
|
||||
margin: 8px 8px 8px -8px;
|
||||
}
|
||||
|
||||
.card h2.title {
|
||||
float: left;
|
||||
max-width: 240px;
|
||||
font-size: 1.3em;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.card .infobox {
|
||||
float: right;
|
||||
font-size: 13px;
|
||||
color: #666;
|
||||
margin: 1em;
|
||||
line-height: 1.5;
|
||||
max-width: 240px;
|
||||
}
|
||||
|
||||
.card .inside .form-table th {
|
||||
padding: 15px 10px 15px 0;
|
||||
width: 160px;
|
||||
}
|
||||
|
||||
.card .inside .form-table td {
|
||||
padding: 10px 10px;
|
||||
}
|
||||
|
||||
.card .checkboxes li {
|
||||
margin: 0;
|
||||
}
|
||||
298
wp-content/plugins/contact-form-7/admin/includes/editor.php
Normal file
298
wp-content/plugins/contact-form-7/admin/includes/editor.php
Normal file
@@ -0,0 +1,298 @@
|
||||
<?php
|
||||
|
||||
class WPCF7_Editor {
|
||||
|
||||
private $contact_form;
|
||||
private $panels = array();
|
||||
|
||||
public function __construct( WPCF7_ContactForm $contact_form ) {
|
||||
$this->contact_form = $contact_form;
|
||||
}
|
||||
|
||||
public function add_panel( $panel_id, $title, $callback ) {
|
||||
if ( wpcf7_is_name( $panel_id ) ) {
|
||||
$this->panels[$panel_id] = array(
|
||||
'title' => $title,
|
||||
'callback' => $callback,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function display() {
|
||||
if ( empty( $this->panels ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$active_panel_id = trim( $_GET['active-tab'] ?? '' );
|
||||
|
||||
if ( ! array_key_exists( $active_panel_id, $this->panels ) ) {
|
||||
$active_panel_id = array_key_first( $this->panels );
|
||||
}
|
||||
|
||||
echo '<nav>';
|
||||
echo '<ul id="contact-form-editor-tabs">';
|
||||
|
||||
foreach ( $this->panels as $panel_id => $panel ) {
|
||||
$active = $panel_id === $active_panel_id;
|
||||
|
||||
echo sprintf(
|
||||
'<li %1$s><a %2$s>%3$s</a></li>',
|
||||
wpcf7_format_atts( array(
|
||||
'id' => sprintf( '%s-tab', $panel_id ),
|
||||
'class' => $active ? 'active' : null,
|
||||
'tabindex' => $active ? '0' : '-1',
|
||||
'data-panel' => $panel_id,
|
||||
) ),
|
||||
wpcf7_format_atts( array(
|
||||
'href' => sprintf( '#%s', $panel_id ),
|
||||
) ),
|
||||
esc_html( $panel['title'] )
|
||||
);
|
||||
}
|
||||
|
||||
echo '</ul>';
|
||||
echo '</nav>';
|
||||
|
||||
foreach ( $this->panels as $panel_id => $panel ) {
|
||||
$active = $panel_id === $active_panel_id;
|
||||
|
||||
echo sprintf(
|
||||
'<section %s>',
|
||||
wpcf7_format_atts( array(
|
||||
'id' => $panel_id,
|
||||
'class' => 'contact-form-editor-panel' . ( $active ? ' active' : '' ),
|
||||
) )
|
||||
);
|
||||
|
||||
if ( is_callable( $panel['callback'] ) ) {
|
||||
call_user_func( $panel['callback'], $this->contact_form );
|
||||
}
|
||||
|
||||
echo '</section>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function wpcf7_editor_panel_form( $post ) {
|
||||
$desc_link = wpcf7_link(
|
||||
__( 'https://contactform7.com/editing-form-template/', 'contact-form-7' ),
|
||||
__( 'Editing form template', 'contact-form-7' ) );
|
||||
$description = __( "You can edit the form template here. For details, see %s.", 'contact-form-7' );
|
||||
$description = sprintf( esc_html( $description ), $desc_link );
|
||||
?>
|
||||
|
||||
<h2><?php echo esc_html( __( 'Form', 'contact-form-7' ) ); ?></h2>
|
||||
|
||||
<fieldset>
|
||||
<legend><?php echo $description; ?></legend>
|
||||
|
||||
<?php
|
||||
$tag_generator = WPCF7_TagGenerator::get_instance();
|
||||
$tag_generator->print_buttons();
|
||||
?>
|
||||
|
||||
<textarea id="wpcf7-form" name="wpcf7-form" cols="100" rows="24" class="large-text code" data-config-field="form.body"><?php echo esc_textarea( $post->prop( 'form' ) ); ?></textarea>
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
function wpcf7_editor_panel_mail( $post ) {
|
||||
wpcf7_editor_box_mail( $post );
|
||||
|
||||
echo '<br class="clear" />';
|
||||
|
||||
wpcf7_editor_box_mail( $post, array(
|
||||
'id' => 'wpcf7-mail-2',
|
||||
'name' => 'mail_2',
|
||||
'title' => __( 'Mail (2)', 'contact-form-7' ),
|
||||
'use' => __( 'Use Mail (2)', 'contact-form-7' ),
|
||||
) );
|
||||
}
|
||||
|
||||
function wpcf7_editor_box_mail( $post, $options = '' ) {
|
||||
$options = wp_parse_args( $options, array(
|
||||
'id' => 'wpcf7-mail',
|
||||
'name' => 'mail',
|
||||
'title' => __( 'Mail', 'contact-form-7' ),
|
||||
'use' => null,
|
||||
) );
|
||||
|
||||
$id = esc_attr( $options['id'] );
|
||||
|
||||
$mail = wp_parse_args( $post->prop( $options['name'] ), array(
|
||||
'active' => false,
|
||||
'recipient' => '',
|
||||
'sender' => '',
|
||||
'subject' => '',
|
||||
'body' => '',
|
||||
'additional_headers' => '',
|
||||
'attachments' => '',
|
||||
'use_html' => false,
|
||||
'exclude_blank' => false,
|
||||
) );
|
||||
|
||||
?>
|
||||
<div class="contact-form-editor-box-mail" id="<?php echo esc_attr( $id ); ?>">
|
||||
<h2><?php echo esc_html( $options['title'] ); ?></h2>
|
||||
|
||||
<?php
|
||||
if ( ! empty( $options['use'] ) ) {
|
||||
echo sprintf(
|
||||
'<label %1$s><input %2$s /> %3$s</label>',
|
||||
wpcf7_format_atts( array(
|
||||
'for' => sprintf( '%s-active', $id ),
|
||||
) ),
|
||||
wpcf7_format_atts( array(
|
||||
'type' => 'checkbox',
|
||||
'id' => sprintf( '%s-active', $id ),
|
||||
'name' => sprintf( '%s[active]', $id ),
|
||||
'data-config-field' => '',
|
||||
'data-toggle' => sprintf( '%s-fieldset', $id ),
|
||||
'value' => '1',
|
||||
'checked' => $mail['active'],
|
||||
) ),
|
||||
esc_html( $options['use'] )
|
||||
);
|
||||
|
||||
echo sprintf(
|
||||
'<p class="description">%s</p>',
|
||||
esc_html( __( "Mail (2) is an additional mail template often used as an autoresponder.", 'contact-form-7' ) )
|
||||
);
|
||||
}
|
||||
?>
|
||||
|
||||
<fieldset id="<?php echo esc_attr( sprintf( '%s-fieldset', $id ) ); ?>">
|
||||
<legend>
|
||||
<?php
|
||||
$desc_link = wpcf7_link(
|
||||
__( 'https://contactform7.com/setting-up-mail/', 'contact-form-7' ),
|
||||
__( 'Setting up mail', 'contact-form-7' ) );
|
||||
$description = __( "You can edit the mail template here. For details, see %s.", 'contact-form-7' );
|
||||
$description = sprintf( esc_html( $description ), $desc_link );
|
||||
echo $description;
|
||||
echo '<br />';
|
||||
|
||||
echo esc_html( __( "In the following fields, you can use these mail-tags:",
|
||||
'contact-form-7' ) );
|
||||
echo '<br />';
|
||||
$post->suggest_mail_tags( $options['name'] );
|
||||
?>
|
||||
</legend>
|
||||
<table class="form-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="<?php echo $id; ?>-recipient"><?php echo esc_html( __( 'To', 'contact-form-7' ) ); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<input type="text" id="<?php echo $id; ?>-recipient" name="<?php echo $id; ?>[recipient]" class="large-text code" size="70" value="<?php echo esc_attr( $mail['recipient'] ); ?>" data-config-field="<?php echo sprintf( '%s.recipient', esc_attr( $options['name'] ) ); ?>" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="<?php echo $id; ?>-sender"><?php echo esc_html( __( 'From', 'contact-form-7' ) ); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<input type="text" id="<?php echo $id; ?>-sender" name="<?php echo $id; ?>[sender]" class="large-text code" size="70" value="<?php echo esc_attr( $mail['sender'] ); ?>" data-config-field="<?php echo sprintf( '%s.sender', esc_attr( $options['name'] ) ); ?>" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="<?php echo $id; ?>-subject"><?php echo esc_html( __( 'Subject', 'contact-form-7' ) ); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<input type="text" id="<?php echo $id; ?>-subject" name="<?php echo $id; ?>[subject]" class="large-text code" size="70" value="<?php echo esc_attr( $mail['subject'] ); ?>" data-config-field="<?php echo sprintf( '%s.subject', esc_attr( $options['name'] ) ); ?>" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="<?php echo $id; ?>-additional-headers"><?php echo esc_html( __( 'Additional headers', 'contact-form-7' ) ); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<textarea id="<?php echo $id; ?>-additional-headers" name="<?php echo $id; ?>[additional_headers]" cols="100" rows="4" class="large-text code" data-config-field="<?php echo sprintf( '%s.additional_headers', esc_attr( $options['name'] ) ); ?>"><?php echo esc_textarea( $mail['additional_headers'] ); ?></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="<?php echo $id; ?>-body"><?php echo esc_html( __( 'Message body', 'contact-form-7' ) ); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<textarea id="<?php echo $id; ?>-body" name="<?php echo $id; ?>[body]" cols="100" rows="18" class="large-text code" data-config-field="<?php echo sprintf( '%s.body', esc_attr( $options['name'] ) ); ?>"><?php echo esc_textarea( $mail['body'] ); ?></textarea>
|
||||
|
||||
<p><label for="<?php echo $id; ?>-exclude-blank"><input type="checkbox" id="<?php echo $id; ?>-exclude-blank" name="<?php echo $id; ?>[exclude_blank]" value="1"<?php echo ( ! empty( $mail['exclude_blank'] ) ) ? ' checked="checked"' : ''; ?> /> <?php echo esc_html( __( 'Exclude lines with blank mail-tags from output', 'contact-form-7' ) ); ?></label></p>
|
||||
|
||||
<p><label for="<?php echo $id; ?>-use-html"><input type="checkbox" id="<?php echo $id; ?>-use-html" name="<?php echo $id; ?>[use_html]" value="1"<?php echo ( $mail['use_html'] ) ? ' checked="checked"' : ''; ?> /> <?php echo esc_html( __( 'Use HTML content type', 'contact-form-7' ) ); ?></label></p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th scope="row">
|
||||
<label for="<?php echo $id; ?>-attachments"><?php echo esc_html( __( 'File attachments', 'contact-form-7' ) ); ?></label>
|
||||
</th>
|
||||
<td>
|
||||
<textarea id="<?php echo $id; ?>-attachments" name="<?php echo $id; ?>[attachments]" cols="100" rows="4" class="large-text code" data-config-field="<?php echo sprintf( '%s.attachments', esc_attr( $options['name'] ) ); ?>"><?php echo esc_textarea( $mail['attachments'] ); ?></textarea>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
function wpcf7_editor_panel_messages( $post ) {
|
||||
$desc_link = wpcf7_link(
|
||||
__( 'https://contactform7.com/editing-messages/', 'contact-form-7' ),
|
||||
__( 'Editing messages', 'contact-form-7' ) );
|
||||
$description = __( "You can edit messages used in various situations here. For details, see %s.", 'contact-form-7' );
|
||||
$description = sprintf( esc_html( $description ), $desc_link );
|
||||
|
||||
$messages = wpcf7_messages();
|
||||
|
||||
if ( isset( $messages['captcha_not_match'] )
|
||||
and ! wpcf7_use_really_simple_captcha() ) {
|
||||
unset( $messages['captcha_not_match'] );
|
||||
}
|
||||
|
||||
?>
|
||||
<h2><?php echo esc_html( __( 'Messages', 'contact-form-7' ) ); ?></h2>
|
||||
<fieldset>
|
||||
<legend><?php echo $description; ?></legend>
|
||||
<?php
|
||||
|
||||
foreach ( $messages as $key => $arr ) {
|
||||
$field_id = sprintf( 'wpcf7-message-%s', strtr( $key, '_', '-' ) );
|
||||
$field_name = sprintf( 'wpcf7-messages[%s]', $key );
|
||||
|
||||
?>
|
||||
<p class="description">
|
||||
<label for="<?php echo $field_id; ?>"><?php echo esc_html( $arr['description'] ); ?><br />
|
||||
<input type="text" id="<?php echo $field_id; ?>" name="<?php echo $field_name; ?>" class="large-text" size="70" value="<?php echo esc_attr( $post->message( $key, false ) ); ?>" data-config-field="<?php echo sprintf( 'messages.%s', esc_attr( $key ) ); ?>" />
|
||||
</label>
|
||||
</p>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
function wpcf7_editor_panel_additional_settings( $post ) {
|
||||
$desc_link = wpcf7_link(
|
||||
__( 'https://contactform7.com/additional-settings/', 'contact-form-7' ),
|
||||
__( 'Additional settings', 'contact-form-7' ) );
|
||||
$description = __( "You can add customization code snippets here. For details, see %s.", 'contact-form-7' );
|
||||
$description = sprintf( esc_html( $description ), $desc_link );
|
||||
|
||||
?>
|
||||
<h2><?php echo esc_html( __( 'Additional Settings', 'contact-form-7' ) ); ?></h2>
|
||||
<fieldset>
|
||||
<legend><?php echo $description; ?></legend>
|
||||
<textarea id="wpcf7-additional-settings" name="wpcf7-additional-settings" cols="100" rows="8" class="large-text" data-config-field="additional_settings.body"><?php echo esc_textarea( $post->prop( 'additional_settings' ) ); ?></textarea>
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
104
wp-content/plugins/contact-form-7/admin/includes/help-tabs.php
Normal file
104
wp-content/plugins/contact-form-7/admin/includes/help-tabs.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
class WPCF7_Help_Tabs {
|
||||
|
||||
private $screen;
|
||||
|
||||
public function __construct( WP_Screen $screen ) {
|
||||
$this->screen = $screen;
|
||||
}
|
||||
|
||||
public function set_help_tabs( $screen_type ) {
|
||||
switch ( $screen_type ) {
|
||||
case 'list':
|
||||
$this->screen->add_help_tab( array(
|
||||
'id' => 'list_overview',
|
||||
'title' => __( 'Overview', 'contact-form-7' ),
|
||||
'content' => $this->content( 'list_overview' ),
|
||||
) );
|
||||
|
||||
$this->screen->add_help_tab( array(
|
||||
'id' => 'list_available_actions',
|
||||
'title' => __( 'Available Actions', 'contact-form-7' ),
|
||||
'content' => $this->content( 'list_available_actions' ),
|
||||
) );
|
||||
|
||||
$this->sidebar();
|
||||
|
||||
return;
|
||||
case 'edit':
|
||||
$this->screen->add_help_tab( array(
|
||||
'id' => 'edit_overview',
|
||||
'title' => __( 'Overview', 'contact-form-7' ),
|
||||
'content' => $this->content( 'edit_overview' ),
|
||||
) );
|
||||
|
||||
$this->screen->add_help_tab( array(
|
||||
'id' => 'edit_form_tags',
|
||||
'title' => __( 'Form-tags', 'contact-form-7' ),
|
||||
'content' => $this->content( 'edit_form_tags' ),
|
||||
) );
|
||||
|
||||
$this->screen->add_help_tab( array(
|
||||
'id' => 'edit_mail_tags',
|
||||
'title' => __( 'Mail-tags', 'contact-form-7' ),
|
||||
'content' => $this->content( 'edit_mail_tags' ),
|
||||
) );
|
||||
|
||||
$this->sidebar();
|
||||
|
||||
return;
|
||||
case 'integration':
|
||||
$this->screen->add_help_tab( array(
|
||||
'id' => 'integration_overview',
|
||||
'title' => __( 'Overview', 'contact-form-7' ),
|
||||
'content' => $this->content( 'integration_overview' ),
|
||||
) );
|
||||
|
||||
$this->sidebar();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private function content( $name ) {
|
||||
$content = array();
|
||||
|
||||
$content['list_overview'] = '<p>' . __( "On this screen, you can manage contact forms provided by Contact Form 7. You can manage an unlimited number of contact forms. Each contact form has a unique ID and Contact Form 7 shortcode ([contact-form-7 ...]). To insert a contact form into a post or a text widget, insert the shortcode into the target.", 'contact-form-7' ) . '</p>';
|
||||
|
||||
$content['list_available_actions'] = '<p>' . __( "Hovering over a row in the contact forms list will display action links that allow you to manage your contact form. You can perform the following actions:", 'contact-form-7' ) . '</p>';
|
||||
$content['list_available_actions'] .= '<p>' . __( "<strong>Edit</strong> - Navigates to the editing screen for that contact form. You can also reach that screen by clicking on the contact form title.", 'contact-form-7' ) . '</p>';
|
||||
$content['list_available_actions'] .= '<p>' . __( "<strong>Duplicate</strong> - Clones that contact form. A cloned contact form inherits all content from the original, but has a different ID.", 'contact-form-7' ) . '</p>';
|
||||
|
||||
$content['edit_overview'] = '<p>' . __( "On this screen, you can edit a contact form. A contact form is comprised of the following components:", 'contact-form-7' ) . '</p>';
|
||||
$content['edit_overview'] .= '<p>' . __( "<strong>Title</strong> is the title of a contact form. This title is only used for labeling a contact form, and can be edited.", 'contact-form-7' ) . '</p>';
|
||||
$content['edit_overview'] .= '<p>' . __( "<strong>Form</strong> is a content of HTML form. You can use arbitrary HTML, which is allowed inside a form element. You can also use Contact Form 7’s form-tags here.", 'contact-form-7' ) . '</p>';
|
||||
$content['edit_overview'] .= '<p>' . __( "<strong>Mail</strong> manages a mail template (headers and message body) that this contact form will send when users submit it. You can use Contact Form 7’s mail-tags here.", 'contact-form-7' ) . '</p>';
|
||||
$content['edit_overview'] .= '<p>' . __( "<strong>Mail (2)</strong> is an additional mail template that works similar to Mail. Mail (2) is different in that it is sent only when Mail has been sent successfully.", 'contact-form-7' ) . '</p>';
|
||||
$content['edit_overview'] .= '<p>' . __( "In <strong>Messages</strong>, you can edit various types of messages used for this contact form. These messages are relatively short messages, like a validation error message you see when you leave a required field blank.", 'contact-form-7' ) . '</p>';
|
||||
$content['edit_overview'] .= '<p>' . __( "<strong>Additional Settings</strong> provides a place where you can customize the behavior of this contact form by adding code snippets.", 'contact-form-7' ) . '</p>';
|
||||
|
||||
$content['edit_form_tags'] = '<p>' . __( "A form-tag is a short code enclosed in square brackets used in a form content. A form-tag generally represents an input field, and its components can be separated into four parts: type, name, options, and values. Contact Form 7 supports several types of form-tags including text fields, number fields, date fields, checkboxes, radio buttons, menus, file-uploading fields, CAPTCHAs, and quiz fields.", 'contact-form-7' ) . '</p>';
|
||||
$content['edit_form_tags'] .= '<p>' . __( "While form-tags have a comparatively complex syntax, you do not need to know the syntax to add form-tags because you can use the straightforward tag generator (<strong>Generate Tag</strong> button on this screen).", 'contact-form-7' ) . '</p>';
|
||||
|
||||
$content['edit_mail_tags'] = '<p>' . __( "A mail-tag is also a short code enclosed in square brackets that you can use in every Mail and Mail (2) field. A mail-tag represents a user input value through an input field of a corresponding form-tag.", 'contact-form-7' ) . '</p>';
|
||||
$content['edit_mail_tags'] .= '<p>' . __( "There are also special mail-tags that have specific names, but do not have corresponding form-tags. They are used to represent meta information of form submissions like the submitter’s IP address or the URL of the page.", 'contact-form-7' ) . '</p>';
|
||||
|
||||
$content['integration_overview'] = '<p>' . __( "On this screen, you can manage services that are available through Contact Form 7. Using API will allow you to collaborate with any services that are available.", 'contact-form-7' ) . '</p>';
|
||||
$content['integration_overview'] .= '<p>' . __( "You may need to first sign up for an account with the service that you plan to use. When you do so, you would need to authorize Contact Form 7 to access the service with your account.", 'contact-form-7' ) . '</p>';
|
||||
$content['integration_overview'] .= '<p>' . __( "Any information you provide will not be shared with service providers without your authorization.", 'contact-form-7' ) . '</p>';
|
||||
|
||||
if ( ! empty( $content[$name] ) ) {
|
||||
return $content[$name];
|
||||
}
|
||||
}
|
||||
|
||||
public function sidebar() {
|
||||
$content = '<p><strong>' . __( 'For more information:', 'contact-form-7' ) . '</strong></p>';
|
||||
$content .= '<p>' . wpcf7_link( __( 'https://contactform7.com/docs/', 'contact-form-7' ), __( 'Docs', 'contact-form-7' ) ) . '</p>';
|
||||
$content .= '<p>' . wpcf7_link( __( 'https://contactform7.com/faq/', 'contact-form-7' ), __( 'FAQ', 'contact-form-7' ) ) . '</p>';
|
||||
$content .= '<p>' . wpcf7_link( __( 'https://contactform7.com/support/', 'contact-form-7' ), __( 'Support', 'contact-form-7' ) ) . '</p>';
|
||||
|
||||
$this->screen->set_help_sidebar( $content );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'dependencies' => array(
|
||||
'wp-api-fetch',
|
||||
'wp-i18n',
|
||||
),
|
||||
'version' => WPCF7_VERSION,
|
||||
);
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,519 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* The base class for form-tag generators management.
|
||||
*/
|
||||
class WPCF7_TagGenerator {
|
||||
|
||||
private static $instance;
|
||||
|
||||
private $panels = array();
|
||||
|
||||
private function __construct() {}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the singleton instance of this class.
|
||||
*/
|
||||
public static function get_instance() {
|
||||
if ( empty( self::$instance ) ) {
|
||||
self::$instance = new self;
|
||||
}
|
||||
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adds a form-tag generator instance.
|
||||
*/
|
||||
public function add( $id, $title, $callback, $options = '' ) {
|
||||
$id = trim( $id );
|
||||
|
||||
if (
|
||||
'' === $id or
|
||||
! wpcf7_is_name( $id ) or
|
||||
! is_callable( $callback )
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$options = wp_parse_args( $options, array(
|
||||
'version' => '1',
|
||||
) );
|
||||
|
||||
$this->panels[$id] = array(
|
||||
'title' => $title,
|
||||
'content' => 'tag-generator-panel-' . $id,
|
||||
'options' => $options,
|
||||
'callback' => $callback,
|
||||
);
|
||||
|
||||
if ( version_compare( $options['version'], '2', '<' ) ) {
|
||||
$message = sprintf(
|
||||
/* translators: 1: version, 2: tag generator title */
|
||||
__( 'Use of tag generator instances older than version 2 is deprecated. Version %1$s instance (%2$s) detected.', 'contact-form-7' ),
|
||||
$options['version'],
|
||||
$title
|
||||
);
|
||||
|
||||
wp_trigger_error( __METHOD__, $message, E_USER_DEPRECATED );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Renders form-tag generator calling buttons.
|
||||
*/
|
||||
public function print_buttons() {
|
||||
echo '<span id="tag-generator-list" class="hide-if-no-js">';
|
||||
|
||||
foreach ( (array) $this->panels as $panel ) {
|
||||
echo sprintf(
|
||||
'<button %1$s>%2$s</button>',
|
||||
wpcf7_format_atts( array(
|
||||
'type' => 'button',
|
||||
'data-taggen' => 'open-dialog',
|
||||
'data-target' => $panel['content'],
|
||||
'title' => sprintf(
|
||||
/* translators: %s: title of form-tag */
|
||||
__( 'Form-tag Generator: %s', 'contact-form-7' ),
|
||||
$panel['title']
|
||||
),
|
||||
) ),
|
||||
esc_html( $panel['title'] )
|
||||
);
|
||||
}
|
||||
|
||||
echo '</span>';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Renders form-tag generator dialog panels (hidden until called).
|
||||
*/
|
||||
public function print_panels( WPCF7_ContactForm $contact_form ) {
|
||||
foreach ( (array) $this->panels as $id => $panel ) {
|
||||
$callback = $panel['callback'];
|
||||
|
||||
$options = array_merge( $panel['options'], array(
|
||||
'id' => $id,
|
||||
'title' => $panel['title'],
|
||||
'content' => $panel['content'],
|
||||
) );
|
||||
|
||||
if ( is_callable( $callback ) ) {
|
||||
echo "\n";
|
||||
echo sprintf(
|
||||
'<dialog id="%s" class="tag-generator-dialog">',
|
||||
esc_attr( $options['content'] )
|
||||
);
|
||||
echo "\n";
|
||||
echo sprintf(
|
||||
'<button %1$s>%2$s</button>',
|
||||
wpcf7_format_atts( array(
|
||||
'class' => 'close-button',
|
||||
'title' => __( 'Close this dialog box', 'contact-form-7' ),
|
||||
'data-taggen' => 'close-dialog',
|
||||
) ),
|
||||
esc_html( __( 'Close', 'contact-form-7' ) )
|
||||
);
|
||||
echo "\n";
|
||||
echo sprintf(
|
||||
'<form %s>',
|
||||
wpcf7_format_atts( array(
|
||||
'method' => 'dialog',
|
||||
'class' => 'tag-generator-panel',
|
||||
'data-id' => $options['id'],
|
||||
'data-version' => $options['version'],
|
||||
) )
|
||||
);
|
||||
echo "\n";
|
||||
call_user_func( $callback, $contact_form, $options );
|
||||
echo "\n";
|
||||
echo '</form>';
|
||||
echo "\n";
|
||||
echo '</dialog>';
|
||||
echo "\n\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Class helps to implement a form-tag generator content.
|
||||
*/
|
||||
class WPCF7_TagGeneratorGenerator {
|
||||
|
||||
private $key = '';
|
||||
|
||||
|
||||
/**
|
||||
* The constructor.
|
||||
*/
|
||||
public function __construct( $key ) {
|
||||
$this->key = $key;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a unique reference ID.
|
||||
*/
|
||||
public function ref( $suffix = '' ) {
|
||||
$ref = sprintf( '%s-%s', $this->key, $suffix );
|
||||
$ref = strtolower( $ref );
|
||||
$ref = preg_replace( '/[^0-9a-z-]/', '', $ref );
|
||||
$ref = preg_replace( '/[-]+/', '-', $ref );
|
||||
$ref = trim( $ref, '-' );
|
||||
return $ref;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Calls one of the template methods.
|
||||
*/
|
||||
public function print( $part, $options = '' ) {
|
||||
if ( is_callable( array( $this, $part ) ) ) {
|
||||
call_user_func( array( $this, $part ), $options );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for field type field.
|
||||
*/
|
||||
private function field_type( $options = '' ) {
|
||||
$options = wp_parse_args( $options, array(
|
||||
'with_required' => false,
|
||||
'select_options' => array(),
|
||||
) );
|
||||
|
||||
?>
|
||||
<fieldset>
|
||||
<legend id="<?php echo esc_attr( $this->ref( 'type-legend' ) ); ?>"><?php
|
||||
echo esc_html( __( 'Field type', 'contact-form-7' ) );
|
||||
?></legend>
|
||||
|
||||
<select data-tag-part="basetype" aria-labelledby="<?php echo esc_attr( $this->ref( 'type-legend' ) ); ?>"><?php
|
||||
foreach ( (array) $options['select_options'] as $basetype => $title ) {
|
||||
echo sprintf(
|
||||
'<option %1$s>%2$s</option>',
|
||||
wpcf7_format_atts( array(
|
||||
'value' => $basetype,
|
||||
) ),
|
||||
esc_html( $title )
|
||||
);
|
||||
}
|
||||
?></select>
|
||||
|
||||
<?php if ( $options['with_required'] ) { ?>
|
||||
<br />
|
||||
<label>
|
||||
<input type="checkbox" data-tag-part="type-suffix" value="*" />
|
||||
<?php echo esc_html( __( "This is a required field.", 'contact-form-7' ) ); ?>
|
||||
</label>
|
||||
<?php } ?>
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for field name field.
|
||||
*/
|
||||
private function field_name( $options = '' ) {
|
||||
$options = wp_parse_args( $options, array(
|
||||
'ask_if' => '',
|
||||
) );
|
||||
|
||||
?>
|
||||
<fieldset>
|
||||
<legend id="<?php echo esc_attr( $this->ref( 'name-legend' ) ); ?>"><?php
|
||||
echo esc_html( __( 'Field name', 'contact-form-7' ) );
|
||||
?></legend>
|
||||
<input type="text" data-tag-part="name" pattern="[A-Za-z][A-Za-z0-9_\-]*" aria-labelledby="<?php echo esc_attr( $this->ref( 'name-legend' ) ); ?>" />
|
||||
|
||||
<?php
|
||||
$tag_option = $label = '';
|
||||
|
||||
if ( 'author_name' === $options['ask_if'] ) {
|
||||
$tag_option = 'autocomplete:name';
|
||||
|
||||
if ( wpcf7_akismet_is_available() ) {
|
||||
$tag_option .= ' akismet:author';
|
||||
}
|
||||
|
||||
$label = __( "This field expects the submitter name.", 'contact-form-7' );
|
||||
} elseif ( 'author_email' === $options['ask_if'] ) {
|
||||
$tag_option = 'autocomplete:email';
|
||||
|
||||
if ( wpcf7_akismet_is_available() ) {
|
||||
$tag_option .= ' akismet:author_email';
|
||||
}
|
||||
|
||||
$label = __( "This field expects the submitter email.", 'contact-form-7' );
|
||||
} elseif ( 'author_url' === $options['ask_if'] ) {
|
||||
$tag_option = 'autocomplete:url';
|
||||
|
||||
if ( wpcf7_akismet_is_available() ) {
|
||||
$tag_option .= ' akismet:author_url';
|
||||
}
|
||||
|
||||
$label = __( "This field expects the submitter URL.", 'contact-form-7' );
|
||||
} elseif ( 'author_tel' === $options['ask_if'] ) {
|
||||
$tag_option = 'autocomplete:tel';
|
||||
$label = __( "This field expects the submitter telephone number.", 'contact-form-7' );
|
||||
}
|
||||
|
||||
if ( $tag_option ) {
|
||||
?>
|
||||
<br />
|
||||
<label>
|
||||
<input type="checkbox" data-tag-part="option" data-tag-option="<?php echo esc_attr( $tag_option ); ?>" />
|
||||
<?php echo esc_html( $label ); ?>
|
||||
</label>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for ID attribute option field.
|
||||
*/
|
||||
private function id_attr( $options = '' ) {
|
||||
?>
|
||||
<fieldset>
|
||||
<legend id="<?php echo esc_attr( $this->ref( 'id-legend' ) ); ?>"><?php
|
||||
echo esc_html( __( 'ID attribute', 'contact-form-7' ) );
|
||||
?></legend>
|
||||
<input type="text" data-tag-part="option" data-tag-option="id:" pattern="[A-Za-z][A-Za-z0-9_\-]*" aria-labelledby="<?php echo esc_attr( $this->ref( 'id-legend' ) ); ?>" />
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for class attribute option field.
|
||||
*/
|
||||
private function class_attr( $options = '' ) {
|
||||
?>
|
||||
<fieldset>
|
||||
<legend id="<?php echo esc_attr( $this->ref( 'class-legend' ) ); ?>"><?php
|
||||
echo esc_html( __( 'Class attribute', 'contact-form-7' ) );
|
||||
?></legend>
|
||||
<input type="text" data-tag-part="option" data-tag-option="class:" pattern="[A-Za-z0-9_\-\s]*" aria-labelledby="<?php echo esc_attr( $this->ref( 'class-legend' ) ); ?>" />
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for min/max options.
|
||||
*/
|
||||
private function min_max( $options = '' ) {
|
||||
$options = wp_parse_args( $options, array(
|
||||
'type' => 'number',
|
||||
'title' => __( 'Length', 'contact-form-7' ),
|
||||
'min_option' => 'minlength:',
|
||||
'max_option' => 'maxlength:',
|
||||
'accept_minus' => false,
|
||||
) );
|
||||
|
||||
?>
|
||||
<fieldset>
|
||||
<legend><?php
|
||||
echo esc_html( $options['title'] );
|
||||
?></legend>
|
||||
<label><?php
|
||||
echo esc_html( __( 'Min', 'contact-form-7' ) ) . "\n";
|
||||
|
||||
echo sprintf(
|
||||
'<input %s />',
|
||||
wpcf7_format_atts( array(
|
||||
'type' => $options['type'],
|
||||
'data-tag-part' => 'option',
|
||||
'data-tag-option' => $options['min_option'],
|
||||
'min' => $options['accept_minus'] ? null : 0,
|
||||
) )
|
||||
);
|
||||
?></label>
|
||||
⇔
|
||||
<label><?php
|
||||
echo esc_html( __( 'Max', 'contact-form-7' ) ) . "\n";
|
||||
|
||||
echo sprintf(
|
||||
'<input %s />',
|
||||
wpcf7_format_atts( array(
|
||||
'type' => $options['type'],
|
||||
'data-tag-part' => 'option',
|
||||
'data-tag-option' => $options['max_option'],
|
||||
'min' => $options['accept_minus'] ? null : 0,
|
||||
) )
|
||||
);
|
||||
?></label>
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for default value field.
|
||||
*/
|
||||
private function default_value( $options = '' ) {
|
||||
$options = wp_parse_args( $options, array(
|
||||
'type' => 'text',
|
||||
'title' => __( 'Default value', 'contact-form-7' ),
|
||||
'with_placeholder' => false,
|
||||
'use_content' => false,
|
||||
) );
|
||||
|
||||
?>
|
||||
<fieldset>
|
||||
<legend id="<?php echo esc_attr( $this->ref( 'value-legend' ) ); ?>"><?php
|
||||
echo esc_html( $options['title'] );
|
||||
?></legend>
|
||||
<?php
|
||||
echo sprintf(
|
||||
'<input %s />',
|
||||
wpcf7_format_atts( array(
|
||||
'type' => $options['type'],
|
||||
'data-tag-part' => $options['use_content'] ? 'content' : 'value',
|
||||
'aria-labelledby' => $this->ref( 'value-legend' ),
|
||||
) )
|
||||
);
|
||||
?>
|
||||
|
||||
<?php if ( $options['with_placeholder'] ) { ?>
|
||||
<br />
|
||||
<label>
|
||||
<input type="checkbox" data-tag-part="option" data-tag-option="placeholder" /> <?php echo esc_html( __( "Use this text as the placeholder.", 'contact-form-7' ) ); ?>
|
||||
</label>
|
||||
<?php } ?>
|
||||
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for selectable values useful for checkboxes or a menu.
|
||||
*/
|
||||
private function selectable_values( $options = '' ) {
|
||||
$options = wp_parse_args( $options, array(
|
||||
'first_as_label' => false,
|
||||
'use_label_element' => false,
|
||||
) );
|
||||
|
||||
?>
|
||||
<fieldset>
|
||||
<legend id="<?php echo esc_attr( $this->ref( 'selectable-values-legend' ) ); ?>"><?php
|
||||
echo esc_html( __( 'Selectable values', 'contact-form-7' ) );
|
||||
?></legend>
|
||||
<?php
|
||||
echo sprintf(
|
||||
'<span %1$s>%2$s</span>',
|
||||
wpcf7_format_atts( array(
|
||||
'id' => $this->ref( 'selectable-values-description' ),
|
||||
) ),
|
||||
esc_html( __( "One item per line.", 'contact-form-7' ) )
|
||||
);
|
||||
?>
|
||||
<br />
|
||||
<?php
|
||||
echo sprintf(
|
||||
'<textarea %1$s>%2$s</textarea>',
|
||||
wpcf7_format_atts( array(
|
||||
'required' => true,
|
||||
'data-tag-part' => 'value',
|
||||
'aria-labelledby' => $this->ref( 'selectable-values-legend' ),
|
||||
'aria-describedby' => $this->ref( 'selectable-values-description' ),
|
||||
) ),
|
||||
esc_html( __( "Option 1\nOption 2\nOption 3", 'contact-form-7' ) )
|
||||
);
|
||||
?>
|
||||
|
||||
<?php if ( $options['first_as_label'] ) { ?>
|
||||
<br />
|
||||
<?php
|
||||
echo sprintf(
|
||||
'<label><input %1$s /> %2$s</label>',
|
||||
wpcf7_format_atts( array(
|
||||
'type' => 'checkbox',
|
||||
'checked' => 'checked' === $options['first_as_label'],
|
||||
'data-tag-part' => 'option',
|
||||
'data-tag-option' => 'first_as_label',
|
||||
) ),
|
||||
esc_html( __( "Use the first item as a label.", 'contact-form-7' ) )
|
||||
);
|
||||
?>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ( $options['use_label_element'] ) { ?>
|
||||
<br />
|
||||
<?php
|
||||
echo sprintf(
|
||||
'<label><input %1$s /> %2$s</label>',
|
||||
wpcf7_format_atts( array(
|
||||
'type' => 'checkbox',
|
||||
'checked' => 'checked' === $options['use_label_element'],
|
||||
'data-tag-part' => 'option',
|
||||
'data-tag-option' => 'use_label_element',
|
||||
) ),
|
||||
esc_html( __( "Wrap each item with a label element.", 'contact-form-7' ) )
|
||||
);
|
||||
?>
|
||||
<?php } ?>
|
||||
|
||||
</fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for insert-box content including the result form-tag.
|
||||
*/
|
||||
private function insert_box_content( $options = '' ) {
|
||||
?>
|
||||
<div class="flex-container">
|
||||
<?php
|
||||
echo sprintf(
|
||||
'<input %s />',
|
||||
wpcf7_format_atts( array(
|
||||
'type' => 'text',
|
||||
'class' => 'code',
|
||||
'readonly' => true,
|
||||
'onfocus' => 'this.select();',
|
||||
'data-tag-part' => 'tag',
|
||||
'aria-label' => __( "The form-tag to be inserted into the form template", 'contact-form-7' ),
|
||||
) )
|
||||
);
|
||||
?>
|
||||
<button type="button" class="button button-primary" data-taggen="insert-tag"><?php echo esc_html( __( 'Insert Tag', 'contact-form-7' ) ); ?></button>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Template method for a tip message about mail-tag.
|
||||
*/
|
||||
private function mail_tag_tip( $options = '' ) {
|
||||
$tip = sprintf(
|
||||
/* translators: %s: mail-tag corresponding to the form-tag */
|
||||
esc_html( __( 'To use the user input in the email, insert the corresponding mail-tag %s into the email template.', 'contact-form-7' ) ),
|
||||
'<strong data-tag-part="mail-tag"></strong>'
|
||||
);
|
||||
|
||||
?>
|
||||
<p class="mail-tag-tip"><?php echo $tip; ?></p>
|
||||
<?php
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,303 @@
|
||||
<?php
|
||||
|
||||
abstract class WPCF7_WelcomePanelColumn {
|
||||
|
||||
abstract protected function icon();
|
||||
abstract protected function title();
|
||||
abstract protected function content();
|
||||
|
||||
public function print_content() {
|
||||
$icon = sprintf(
|
||||
'<span class="dashicons dashicons-%s" aria-hidden="true"></span>',
|
||||
esc_attr( $this->icon() )
|
||||
);
|
||||
|
||||
$title = sprintf(
|
||||
'<h3>%1$s %2$s</h3>',
|
||||
$icon,
|
||||
$this->title()
|
||||
);
|
||||
|
||||
$content = $this->content();
|
||||
|
||||
if ( is_array( $content ) ) {
|
||||
$content = implode( "\n\n", $content );
|
||||
}
|
||||
|
||||
$content = wp_kses_post( $content );
|
||||
$content = wptexturize( $content );
|
||||
$content = convert_chars( $content );
|
||||
$content = wpautop( $content );
|
||||
|
||||
echo "\n";
|
||||
echo '<div class="welcome-panel-column">';
|
||||
echo $title;
|
||||
echo $content;
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class WPCF7_WelcomePanelColumn_AntiSpam extends WPCF7_WelcomePanelColumn {
|
||||
|
||||
protected function icon() {
|
||||
return 'shield';
|
||||
}
|
||||
|
||||
protected function title() {
|
||||
return esc_html(
|
||||
__( "Getting spammed? You have protection.", 'contact-form-7' )
|
||||
);
|
||||
}
|
||||
|
||||
protected function content() {
|
||||
return array(
|
||||
esc_html( __( "Spammers target everything; your contact forms are not an exception. Before you get spammed, protect your contact forms with the powerful anti-spam features Contact Form 7 provides.", 'contact-form-7' ) ),
|
||||
sprintf(
|
||||
/* translators: links labeled 1: 'Akismet', 2: 'reCAPTCHA', 3: 'disallowed list' */
|
||||
esc_html( __( 'Contact Form 7 supports spam-filtering with %1$s. Intelligent %2$s blocks annoying spambots. Plus, using %3$s, you can block messages containing specified keywords or those sent from specified IP addresses.', 'contact-form-7' ) ),
|
||||
wpcf7_link(
|
||||
__( 'https://contactform7.com/spam-filtering-with-akismet/', 'contact-form-7' ),
|
||||
__( 'Akismet', 'contact-form-7' )
|
||||
),
|
||||
wpcf7_link(
|
||||
__( 'https://contactform7.com/recaptcha/', 'contact-form-7' ),
|
||||
__( 'reCAPTCHA', 'contact-form-7' )
|
||||
),
|
||||
wpcf7_link(
|
||||
__( 'https://contactform7.com/comment-blacklist/', 'contact-form-7' ),
|
||||
__( 'disallowed list', 'contact-form-7' )
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class WPCF7_WelcomePanelColumn_Donation extends WPCF7_WelcomePanelColumn {
|
||||
|
||||
protected function icon() {
|
||||
return 'megaphone';
|
||||
}
|
||||
|
||||
protected function title() {
|
||||
return esc_html(
|
||||
__( "Contact Form 7 needs your support.", 'contact-form-7' )
|
||||
);
|
||||
}
|
||||
|
||||
protected function content() {
|
||||
return array(
|
||||
esc_html( __( "It is hard to continue development and support for this plugin without contributions from users like you.", 'contact-form-7' ) ),
|
||||
sprintf(
|
||||
/* translators: %s: link labeled 'making a donation' */
|
||||
esc_html( __( 'If you enjoy using Contact Form 7 and find it useful, please consider %s.', 'contact-form-7' ) ),
|
||||
wpcf7_link(
|
||||
__( 'https://contactform7.com/donate/', 'contact-form-7' ),
|
||||
__( 'making a donation', 'contact-form-7' )
|
||||
)
|
||||
),
|
||||
esc_html( __( "Your donation will help encourage and support the plugin’s continued development and better user support.", 'contact-form-7' ) ),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class WPCF7_WelcomePanelColumn_Flamingo extends WPCF7_WelcomePanelColumn {
|
||||
|
||||
protected function icon() {
|
||||
return 'editor-help';
|
||||
}
|
||||
|
||||
protected function title() {
|
||||
return esc_html(
|
||||
__( "Before you cry over spilt mail…", 'contact-form-7' )
|
||||
);
|
||||
}
|
||||
|
||||
protected function content() {
|
||||
return array(
|
||||
esc_html( __( "Contact Form 7 does not store submitted messages anywhere. Therefore, you may lose important messages forever if your mail server has issues or you make a mistake in mail configuration.", 'contact-form-7' ) ),
|
||||
sprintf(
|
||||
/* translators: %s: link labeled 'Flamingo' */
|
||||
esc_html( __( 'Install a message storage plugin before this happens to you. %s saves all messages through contact forms into the database. Flamingo is a free WordPress plugin created by the same author as Contact Form 7.', 'contact-form-7' ) ),
|
||||
wpcf7_link(
|
||||
__( 'https://contactform7.com/save-submitted-messages-with-flamingo/', 'contact-form-7' ),
|
||||
__( 'Flamingo', 'contact-form-7' )
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class WPCF7_WelcomePanelColumn_Integration extends WPCF7_WelcomePanelColumn {
|
||||
|
||||
protected function icon() {
|
||||
return 'superhero-alt';
|
||||
}
|
||||
|
||||
protected function title() {
|
||||
return esc_html(
|
||||
__( "You have strong allies to back you up.", 'contact-form-7' )
|
||||
);
|
||||
}
|
||||
|
||||
protected function content() {
|
||||
return array(
|
||||
sprintf(
|
||||
/* translators: 1: link labeled 'Brevo' */
|
||||
esc_html( __( 'Your contact forms will become more powerful and versatile by integrating them with external APIs. With CRM and email marketing services, you can build your own contact lists (%1$s).', 'contact-form-7' ) ),
|
||||
wpcf7_link(
|
||||
__( 'https://contactform7.com/sendinblue-integration/', 'contact-form-7' ),
|
||||
__( 'Brevo', 'contact-form-7' )
|
||||
)
|
||||
),
|
||||
sprintf(
|
||||
/* translators: 1: link labeled 'reCAPTCHA', 2: link labeled 'Stripe' */
|
||||
esc_html( __( 'With help from cloud-based machine learning, anti-spam services will protect your forms (%1$s). Even payment services are natively supported (%2$s).', 'contact-form-7' ) ),
|
||||
wpcf7_link(
|
||||
__( 'https://contactform7.com/recaptcha/', 'contact-form-7' ),
|
||||
__( 'reCAPTCHA', 'contact-form-7' )
|
||||
),
|
||||
wpcf7_link(
|
||||
__( 'https://contactform7.com/stripe-integration/', 'contact-form-7' ),
|
||||
__( 'Stripe', 'contact-form-7' )
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function wpcf7_welcome_panel() {
|
||||
$columns = array();
|
||||
|
||||
$flamingo_is_active = defined( 'FLAMINGO_VERSION' );
|
||||
|
||||
$sendinblue_is_active = false;
|
||||
|
||||
if ( class_exists( 'WPCF7_Sendinblue' )
|
||||
and $sendinblue = WPCF7_Sendinblue::get_instance() ) {
|
||||
$sendinblue_is_active = $sendinblue->is_active();
|
||||
}
|
||||
|
||||
if ( $flamingo_is_active and $sendinblue_is_active ) {
|
||||
$columns[] = new WPCF7_WelcomePanelColumn_AntiSpam();
|
||||
$columns[] = new WPCF7_WelcomePanelColumn_Donation();
|
||||
} elseif ( $flamingo_is_active ) {
|
||||
$columns[] = new WPCF7_WelcomePanelColumn_Integration();
|
||||
$columns[] = new WPCF7_WelcomePanelColumn_AntiSpam();
|
||||
} elseif ( $sendinblue_is_active ) {
|
||||
$columns[] = new WPCF7_WelcomePanelColumn_Flamingo();
|
||||
$columns[] = new WPCF7_WelcomePanelColumn_AntiSpam();
|
||||
} else {
|
||||
$columns[] = new WPCF7_WelcomePanelColumn_Flamingo();
|
||||
$columns[] = new WPCF7_WelcomePanelColumn_Integration();
|
||||
}
|
||||
|
||||
$classes = 'wpcf7-welcome-panel';
|
||||
|
||||
$vers = (array) get_user_meta( get_current_user_id(),
|
||||
'wpcf7_hide_welcome_panel_on', true
|
||||
);
|
||||
|
||||
if ( wpcf7_version_grep( wpcf7_version( 'only_major=1' ), $vers ) ) {
|
||||
$classes .= ' hidden';
|
||||
}
|
||||
|
||||
?>
|
||||
<div id="wpcf7-welcome-panel" class="<?php echo esc_attr( $classes ); ?>">
|
||||
<?php wp_nonce_field( 'wpcf7-welcome-panel-nonce', 'welcomepanelnonce', false ); ?>
|
||||
<a class="welcome-panel-close" href="<?php echo esc_url( menu_page_url( 'wpcf7', false ) ); ?>"><?php echo esc_html( __( 'Dismiss', 'contact-form-7' ) ); ?></a>
|
||||
|
||||
<div class="welcome-panel-content">
|
||||
<div class="welcome-panel-column-container">
|
||||
<?php
|
||||
|
||||
foreach ( $columns as $column ) {
|
||||
$column->print_content();
|
||||
}
|
||||
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
add_action(
|
||||
'wp_ajax_wpcf7-update-welcome-panel',
|
||||
'wpcf7_admin_ajax_welcome_panel',
|
||||
10, 0
|
||||
);
|
||||
|
||||
function wpcf7_admin_ajax_welcome_panel() {
|
||||
check_ajax_referer( 'wpcf7-welcome-panel-nonce', 'welcomepanelnonce' );
|
||||
|
||||
$vers = get_user_meta( get_current_user_id(),
|
||||
'wpcf7_hide_welcome_panel_on', true
|
||||
);
|
||||
|
||||
if ( empty( $vers ) or ! is_array( $vers ) ) {
|
||||
$vers = array();
|
||||
}
|
||||
|
||||
if ( empty( $_POST['visible'] ) ) {
|
||||
$vers[] = wpcf7_version( 'only_major=1' );
|
||||
} else {
|
||||
$vers = array_diff( $vers, array( wpcf7_version( 'only_major=1' ) ) );
|
||||
}
|
||||
|
||||
$vers = array_unique( $vers );
|
||||
|
||||
update_user_meta( get_current_user_id(),
|
||||
'wpcf7_hide_welcome_panel_on', $vers
|
||||
);
|
||||
|
||||
wp_die( 1 );
|
||||
}
|
||||
|
||||
|
||||
add_filter(
|
||||
'screen_settings',
|
||||
'wpcf7_welcome_panel_screen_settings',
|
||||
10, 2
|
||||
);
|
||||
|
||||
function wpcf7_welcome_panel_screen_settings( $screen_settings, $screen ) {
|
||||
|
||||
if ( 'toplevel_page_wpcf7' !== $screen->id ) {
|
||||
return $screen_settings;
|
||||
}
|
||||
|
||||
$vers = (array) get_user_meta( get_current_user_id(),
|
||||
'wpcf7_hide_welcome_panel_on', true
|
||||
);
|
||||
|
||||
$checkbox_id = 'wpcf7-welcome-panel-show';
|
||||
$checked = ! in_array( wpcf7_version( 'only_major=1' ), $vers );
|
||||
|
||||
$checkbox = sprintf(
|
||||
'<input %s />',
|
||||
wpcf7_format_atts( array(
|
||||
'id' => $checkbox_id,
|
||||
'type' => 'checkbox',
|
||||
'checked' => $checked,
|
||||
) )
|
||||
);
|
||||
|
||||
$screen_settings .= sprintf( '
|
||||
<fieldset class="wpcf7-welcome-panel-options">
|
||||
<legend>%1$s</legend>
|
||||
<label for="%2$s">%3$s %4$s</label>
|
||||
</fieldset>',
|
||||
esc_html( __( 'Welcome panel', 'contact-form-7' ) ),
|
||||
esc_attr( $checkbox_id ),
|
||||
$checkbox,
|
||||
esc_html( __( 'Show welcome panel', 'contact-form-7' ) )
|
||||
);
|
||||
|
||||
return $screen_settings;
|
||||
}
|
||||
Reference in New Issue
Block a user