includes/welcome-panel.php 0000644 00000020715 14720700167 0011624 0 ustar 00 ',
esc_attr( $this->icon() )
);
$title = sprintf(
'
%1$s %2$s ',
$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 '';
echo $title;
echo $content;
echo '
';
}
}
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';
}
?>
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(
' ',
wpcf7_format_atts( array(
'id' => $checkbox_id,
'type' => 'checkbox',
'checked' => $checked,
) )
);
$screen_settings .= sprintf( '
%1$s
%3$s %4$s
',
esc_html( __( 'Welcome panel', 'contact-form-7' ) ),
esc_attr( $checkbox_id ),
$checkbox,
esc_html( __( 'Show welcome panel', 'contact-form-7' ) )
);
return $screen_settings;
}
includes/css/styles-rtl.css 0000644 00000002174 14720700167 0012006 0 ustar 00 /*
* 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;
}
includes/css/styles.css 0000644 00000023763 14720700167 0011216 0 ustar 00 #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;
}
includes/editor.php 0000644 00000023713 14720700167 0010363 0 ustar 00 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 '';
echo '';
echo ' ';
foreach ( $this->panels as $panel_id => $panel ) {
$active = $panel_id === $active_panel_id;
echo sprintf(
'',
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 ' ';
}
}
}
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 );
?>
print_buttons();
?>
';
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,
) );
?>
$arr ) {
$field_id = sprintf( 'wpcf7-message-%s', strtr( $key, '_', '-' ) );
$field_name = sprintf( 'wpcf7-messages[%s]', $key );
?>
'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 '';
foreach ( (array) $this->panels as $panel ) {
echo sprintf(
'%2$s ',
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 ' ';
}
/**
* 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(
'',
esc_attr( $options['content'] )
);
echo "\n";
echo sprintf(
'%2$s ',
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(
'';
echo "\n";
echo ' ';
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(),
) );
?>
$title ) {
echo sprintf(
'%2$s ',
wpcf7_format_atts( array(
'value' => $basetype,
) ),
esc_html( $title )
);
}
?>
'',
) );
?>
'number',
'title' => __( 'Length', 'contact-form-7' ),
'min_option' => 'minlength:',
'max_option' => 'maxlength:',
'accept_minus' => false,
) );
?>
',
wpcf7_format_atts( array(
'type' => $options['type'],
'data-tag-part' => 'option',
'data-tag-option' => $options['min_option'],
'min' => $options['accept_minus'] ? null : 0,
) )
);
?>
⇔
',
wpcf7_format_atts( array(
'type' => $options['type'],
'data-tag-part' => 'option',
'data-tag-option' => $options['max_option'],
'min' => $options['accept_minus'] ? null : 0,
) )
);
?>
'text',
'title' => __( 'Default value', 'contact-form-7' ),
'with_placeholder' => false,
'use_content' => false,
) );
?>
',
wpcf7_format_atts( array(
'type' => $options['type'],
'data-tag-part' => $options['use_content'] ? 'content' : 'value',
'aria-labelledby' => $this->ref( 'value-legend' ),
) )
);
?>
false,
'use_label_element' => false,
) );
?>
%2$s',
wpcf7_format_atts( array(
'id' => $this->ref( 'selectable-values-description' ),
) ),
esc_html( __( "One item per line.", 'contact-form-7' ) )
);
?>
%2$s',
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' ) )
);
?>
%2$s',
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' ) )
);
?>
%2$s',
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' ) )
);
?>
',
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' ),
) )
);
?>
'
);
?>
add( $name, $title, $callback, $options );
}
includes/help-tabs.php 0000644 00000015534 14720700167 0010756 0 ustar 00 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'] = '' . __( "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' ) . '
';
$content['list_available_actions'] = '' . __( "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' ) . '
';
$content['list_available_actions'] .= '' . __( "Edit - 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' ) . '
';
$content['list_available_actions'] .= '' . __( "Duplicate - Clones that contact form. A cloned contact form inherits all content from the original, but has a different ID.", 'contact-form-7' ) . '
';
$content['edit_overview'] = '' . __( "On this screen, you can edit a contact form. A contact form is comprised of the following components:", 'contact-form-7' ) . '
';
$content['edit_overview'] .= '' . __( "Title is the title of a contact form. This title is only used for labeling a contact form, and can be edited.", 'contact-form-7' ) . '
';
$content['edit_overview'] .= '' . __( "Form 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' ) . '
';
$content['edit_overview'] .= '' . __( "Mail 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' ) . '
';
$content['edit_overview'] .= '' . __( "Mail (2) 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' ) . '
';
$content['edit_overview'] .= '' . __( "In Messages , 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' ) . '
';
$content['edit_overview'] .= '' . __( "Additional Settings provides a place where you can customize the behavior of this contact form by adding code snippets.", 'contact-form-7' ) . '
';
$content['edit_form_tags'] = '' . __( "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' ) . '
';
$content['edit_form_tags'] .= '' . __( "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 (Generate Tag button on this screen).", 'contact-form-7' ) . '
';
$content['edit_mail_tags'] = '' . __( "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' ) . '
';
$content['edit_mail_tags'] .= '' . __( "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' ) . '
';
$content['integration_overview'] = '' . __( "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' ) . '
';
$content['integration_overview'] .= '' . __( "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' ) . '
';
$content['integration_overview'] .= '' . __( "Any information you provide will not be shared with service providers without your authorization.", 'contact-form-7' ) . '
';
if ( ! empty( $content[$name] ) ) {
return $content[$name];
}
}
public function sidebar() {
$content = '' . __( 'For more information:', 'contact-form-7' ) . '
';
$content .= '' . wpcf7_link( __( 'https://contactform7.com/docs/', 'contact-form-7' ), __( 'Docs', 'contact-form-7' ) ) . '
';
$content .= '' . wpcf7_link( __( 'https://contactform7.com/faq/', 'contact-form-7' ), __( 'FAQ', 'contact-form-7' ) ) . '
';
$content .= '' . wpcf7_link( __( 'https://contactform7.com/support/', 'contact-form-7' ), __( 'Support', 'contact-form-7' ) ) . '
';
$this->screen->set_help_sidebar( $content );
}
}
includes/class-contact-forms-list-table.php 0000644 00000013323 14720700167 0015011 0 ustar 00 ' ',
'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(
' ',
$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(
'%3$s ',
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( '%s ', $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(
'! %s
',
$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" . ' ';
}
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;
}
}
includes/js/index.js 0000644 00000031114 14720700167 0010437 0 ustar 00 (()=>{"use strict";var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var r in a)e.o(a,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:a[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.i18n,a=e=>{e&&document.querySelector(`.contact-form-editor-panel#${e}`)&&(document.querySelector("#contact-form-editor")?.setAttribute("data-active-tab",e),document.querySelectorAll('input[name="active-tab"]').forEach((t=>{t.value=e})),document.querySelectorAll("#contact-form-editor-tabs li").forEach((t=>{t.dataset?.panel===e?(t.classList.add("active"),t.setAttribute("tabindex","0"),t.focus()):(t.classList.remove("active"),t.setAttribute("tabindex","-1"))})),document.querySelectorAll(".contact-form-editor-panel").forEach((t=>{t.id===e?(t.classList.add("active"),t.style.setProperty("display","block")):(t.classList.remove("active"),t.style.setProperty("display","none"))})))},r=window.wp.apiFetch;var c=e.n(r);const o=e=>{const t=document.createElement("span");return t.classList.add("icon-in-circle"),t.setAttribute("aria-hidden","true"),t.append(e),t},n=e=>e.replace(/[^0-9a-z]+/gi,"-"),l=e=>{const t=document.querySelector(`#${e.dataset?.toggle}`);t&&(e.checked?t.classList.remove("hidden"):t.classList.add("hidden"))},i=()=>{document.querySelectorAll("#contact-form-editor .config-error, #misc-publishing-actions .config-error").forEach((e=>{e.remove()})),document.querySelectorAll("#contact-form-editor [data-config-field]").forEach((e=>{const t=e.dataset.configField;d(t).length?(e.setAttribute("aria-invalid","true"),e.setAttribute("aria-describedby",n(`wpcf7-config-error-for-${t}`)),e.after(u(t))):e.removeAttribute("aria-invalid")})),document.querySelectorAll("#contact-form-editor-tabs [data-panel]").forEach((e=>{e.querySelectorAll(".icon-in-circle").forEach((e=>{e.remove()})),s(e.dataset.panel)&&e.querySelector("a")?.append(o("!"))}));let e=0;if(document.querySelectorAll("#contact-form-editor .contact-form-editor-panel").forEach((a=>{const r=s(a.id);if(r){e+=r;const c=document.createElement("div");c.classList.add("config-error"),c.append(o("!"),(0,t.sprintf)((0,t._n)("%d configuration error detected in this tab panel.","%d configuration errors detected in this tab panel.",r,"contact-form-7"),r)),a.prepend(c)}})),e){const a=document.createElement("div");a.classList.add("misc-pub-section","config-error");const r=document.createElement("a");r.setAttribute("href",wpcf7.configValidator.docUrl),r.append((0,t.__)("How to resolve?","contact-form-7")),a.append(o("!"),(0,t.sprintf)((0,t._n)("%d configuration error detected.","%d configuration errors detected.",e,"contact-form-7"),e),document.createElement("br"),r),document.querySelector("#misc-publishing-actions")?.append(a)}},s=e=>document.querySelectorAll(`#${e} ul.config-error li`)?.length,d=e=>{const t=[];for(const a in wpcf7.configValidator.errors)a===e&&t.push(...wpcf7.configValidator.errors[a]);return t},u=e=>{if(!e)return"";const t=document.createElement("ul");return t.setAttribute("id",n(`wpcf7-config-error-for-${e}`)),t.classList.add("config-error"),d(e).forEach((e=>{if(!e.message)return;const a=document.createElement("li");if(a.append(o("!")),e.link){const t=document.createElement("a");t.setAttribute("href",e.link),t.append(e.message),a.append(" ",t)}else a.append(" ",e.message);t.append(a)})),t},m=document.querySelector("#wpcf7-welcome-panel"),p=e=>{const t=m.querySelector("#welcomepanelnonce")?.value;if(!t)return;const a=new FormData;a.append("action","wpcf7-update-welcome-panel"),a.append("visible",e),a.append("welcomepanelnonce",t),fetch(new Request(ajaxurl,{method:"POST",body:a})),e?m.classList.remove("hidden"):m.classList.add("hidden")},f=e=>{var t;const a=e.dataset.id,r=e.querySelector('[name="name"]');let c=null!==(t=r?.value.trim())&&void 0!==t?t:"";r&&(c||(c=`${a}-${Math.floor(1e3*Math.random())}`),r.value=c),e.querySelectorAll(".tag").forEach((t=>{const a=e.querySelector('[name="tagtype"]')?.value||t.name;a&&(t.value=v(a,e))})),e.querySelectorAll("span.mail-tag").forEach((e=>{e.innerText=`[${c}]`})),e.querySelectorAll("input.mail-tag").forEach((e=>{e.value=`[${c}]`}))},v=(e,t)=>{var a,r,c;const o=null!==(a=t.querySelector(`.scope.${e}`))&&void 0!==a?a:t,n=e+(t.querySelector('[name="required"]:checked')?"*":""),l=null!==(r=t.querySelector('[name="name"]')?.value)&&void 0!==r?r:"",i=[];o.querySelectorAll(".option").forEach((e=>{"checkbox"===e.type?e.checked&&i.push(e.name):"radio"===e.type?e.checked&&!e.classList.contains("default")&&i.push(`${e.name}:${e.value}`):""!==e.value&&(e.classList.contains("filetype")?i.push(`${e.name}:${e.value.split(/[,|\s]+/).join("|")}`):e.classList.contains("color")?i.push(`${e.name}:#${e.value}`):"class"===e.name?e.value.split(" ").forEach((e=>{i.push(`class:${e}`)})):i.push(`${e.name}:${e.value}`))})),"radio"===e&&i.push("default:1");const s=null!==(c=o.querySelector('[name="values"]')?.value.split("\n").map((e=>e.trim())).filter((e=>""!==e)).map((e=>`"${e.replace(/["]/g,""")}"`)))&&void 0!==c?c:[],d=[n,l,i.join(" "),s.join(" ")].map((e=>e.trim())).filter((e=>""!==e)),u=o.querySelector('[name="content"]')?.value.trim();return u?`[${d.join(" ")}] ${u} [/${n}]`:`[${d.join(" ")}]`},g=e=>{const t=h(e);t?(e.querySelectorAll('[data-tag-part="tag"]').forEach((e=>{e.value=t})),e.querySelectorAll('[data-taggen="insert-tag"]').forEach((e=>{e.disabled=!1})),e.querySelectorAll('[data-tag-part="mail-tag"]').forEach((t=>{const a=e.querySelector('[data-tag-part="name"]');a&&(t.innerText=`[${a.value.trim()}]`)}))):(e.querySelectorAll('[data-tag-part="tag"]').forEach((e=>{e.value=""})),e.querySelectorAll('[data-taggen="insert-tag"]').forEach((e=>{e.disabled=!0})))},h=e=>{var t,a;const r=e.querySelector('[data-tag-part="basetype"]')?.value.trim();if(!r)return;if(e.querySelector(":invalid"))return;let c=r;const o=e.querySelector('[data-tag-part="type-suffix"]');o&&(["checkbox","radio"].includes(o?.type)?c+=o.checked?o.value.trim():"":c+=o.value.trim());const n=e.querySelector('[data-tag-part="name"]');let l=null!==(t=n?.value.trim())&&void 0!==t?t:"";n&&(l||(l=`${r}-${Math.floor(1e3*Math.random())}`),n.value=l);const i=[];e.querySelectorAll('[data-tag-part="option"]').forEach((e=>{const t=e.dataset.tagOption?.trim();t&&(["checkbox","radio"].includes(e?.type)&&!e.checked||t.split(" ").forEach((t=>{t.endsWith(":")?e.value?.split(" ").forEach((e=>{(e=e.trim())&&i.push(t+e)})):i.push(t)})))}));const s=null!==(a=e.querySelector('[data-tag-part="value"]')?.value.split("\n").map((e=>e.trim())).filter((e=>""!==e)).map((e=>`"${e.replace(/["]/g,""")}"`)))&&void 0!==a?a:[],d=[c,l,i.join(" "),s.join(" ")].map((e=>e.trim())).filter((e=>""!==e)),u=e.querySelector('[data-tag-part="content"]')?.value.trim();return u?`[${d.join(" ")}] ${u} [/${c}]`:`[${d.join(" ")}]`},y=e=>{const t=document.querySelector("#wpcf7-admin-form-element");if(!t)return;let a=!1;t.querySelectorAll("input, textarea, select").forEach((e=>{if(!a)switch(e.type){case"button":case"hidden":case"image":case"reset":case"search":case"submit":break;case"checkbox":case"radio":a=e.defaultChecked!==e.checked;break;case"select-multiple":case"select-one":e.querySelectorAll("option").forEach((e=>{a||e.defaultSelected===e.selected||(a=!0)}));break;default:a=e.defaultValue!==e.value}})),a&&e.preventDefault()};document.addEventListener("DOMContentLoaded",(e=>{document.querySelectorAll("#contact-form-editor-tabs li").forEach((e=>{e.addEventListener("click",(t=>{a(e.dataset?.panel),t.preventDefault()})),e.addEventListener("keyup",(t=>{if(["ArrowDown","ArrowRight"].includes(t.key)){const t=e.nextElementSibling;t&&a(t.dataset?.panel)}if(["ArrowUp","ArrowLeft"].includes(t.key)){const t=e.previousElementSibling;t&&a(t.dataset?.panel)}}))})),document.querySelectorAll(".contact-form-editor-panel").forEach((e=>{e.classList.contains("active")?document.querySelector("#contact-form-editor")?.setAttribute("data-active-tab",e.id):e.style.setProperty("display","none")})),document.querySelectorAll("#contact-form-editor [data-config-field]").forEach((e=>{e.addEventListener("change",(e=>{const t=document.querySelector('[name="post_ID"]')?.value;t&&0{const{namespace:t}=wpcf7.apiSettings,a=`/${t}/contact-forms/${e}`,r=new FormData;document.querySelectorAll("#contact-form-editor [data-config-field]").forEach((e=>{const t=e.name?.replace(/^wpcf7-/,"").replace(/-/g,"_");if(!t)return;let a;["checkbox","radio"].includes(e.type)?e.checked&&(a=e.value):a=e.value,void 0!==a&&(t.endsWith("[]")?r.append(t,a):r.set(t,a))})),r.set("context","dry-run"),c()({path:a,method:"POST",body:r}).then((e=>{wpcf7.configValidator.errors=e.config_errors,i()}))})(t)}))})),i(),(()=>{if(!m)return;const e=document.querySelector("#wpcf7-welcome-panel-show");m.querySelectorAll(".welcome-panel-close").forEach((t=>{t.addEventListener("click",(t=>{p(0),e?.removeAttribute("checked"),t.preventDefault()}))})),e?.addEventListener("click",(t=>{p(e?.checked?1:0)}))})(),document.querySelectorAll('[data-taggen="open-dialog"]').forEach((e=>{e.addEventListener("click",(t=>{const a=document.querySelector(`#${e.dataset.target}`);if(a){const e=a.querySelector("form.tag-generator-panel");e&&("1"===e.dataset.version?(e=>{f(e),e.querySelectorAll(".control-box").forEach((t=>{t.addEventListener("change",(t=>{var a;"name"===(a=t.target).name&&(a.value=a.value.replace(/[^0-9a-zA-Z:._-]/g,"").replace(/^[^a-zA-Z]+/,"")),a.classList.contains("numeric")&&(a.value=a.value.replace(/[^0-9.-]/g,"")),a.classList.contains("idvalue")&&(a.value=a.value.replace(/[^-0-9a-zA-Z_]/g,"")),a.classList.contains("classvalue")&&(a.value=a.value.split(" ").map((e=>e.replace(/[^-0-9a-zA-Z_]/g,""))).join(" ").replace(/\s+/g," ").trim()),a.classList.contains("color")&&(a.value=a.value.replace(/[^0-9a-fA-F]/g,"")),a.classList.contains("filesize")&&(a.value=a.value.replace(/[^0-9kKmMbB]/g,"")),a.classList.contains("filetype")&&(a.value=a.value.replace(/[^0-9a-zA-Z.,|\s]/g,"")),a.classList.contains("date")&&(a.value.match(/^\d{4}-\d{2}-\d{2}$/)||(a.value="")),"values"===a.name&&(a.value=a.value.trim()),f(e)}))}))})(e):"2"===e.dataset.version&&(e=>{var t;null!==(t=e.reset())&&void 0!==t||g(e),e.querySelectorAll(".control-box").forEach((t=>{t.addEventListener("change",(t=>{g(e)})),t.addEventListener("keyup",(t=>{var a;"text"!==(null!==(a=t.target.type)&&void 0!==a?a:"")&&"textarea"!==t.target.tagName?.toLowerCase()||g(e)}))}))})(e)),a.showModal()}}))})),document.querySelectorAll("dialog.tag-generator-dialog").forEach((e=>{e.querySelectorAll('[data-taggen="close-dialog"]').forEach((t=>{t.addEventListener("click",(t=>e.close("")))})),e.querySelectorAll('[data-taggen="insert-tag"], .insert-tag').forEach((t=>{t.addEventListener("click",(t=>{const a=e.querySelector('[data-tag-part="tag"], .tag');e.close(a?.value)}))})),e.addEventListener("close",(t=>{var a;const r=document.querySelector("textarea#wpcf7-form");if(null===r)return;if(""===e.returnValue)return;const c=null!==(a=r.selectionEnd)&&void 0!==a?a:0;0===c&&(e.returnValue+="\n\n"),r.value=r.value.substring(0,c)+e.returnValue+r.value.substring(c),r.selectionStart=c,r.selectionEnd=c+e.returnValue.length,r.focus()}))})),(()=>{const e=document.querySelector("#wpcf7-admin-form-element");e&&(window.addEventListener("beforeunload",y),e.addEventListener("submit",(e=>{e.submitter?.name&&"wpcf7-copy"===e.submitter.name||window.removeEventListener("beforeunload",y)})))})();const r=document.querySelector("input#title");r&&""===r.value&&r.focus(),document.querySelector("#wpcf7-admin-form-element")?.addEventListener("submit",(e=>{const a=document.querySelector('#wpcf7-admin-form-element [name="action"]'),r=document.querySelector('#wpcf7-admin-form-element [name="_wpnonce"]');"wpcf7-save"===e.submitter?.name&&(a&&(a.value="save"),r&&(r.value=wpcf7.nonce.save),document.querySelectorAll("#wpcf7-admin-form-element #publishing-action .spinner").forEach((e=>{e.classList.add("is-active")}))),"wpcf7-copy"===e.submitter?.name&&(a&&(a.value="copy"),r&&(r.value=wpcf7.nonce.copy)),"wpcf7-delete"===e.submitter?.name&&(window.confirm((0,t.__)("You are about to delete this contact form.\n 'Cancel' to stop, 'OK' to delete.","contact-form-7"))?(a&&(a.value="delete"),r&&(r.value=wpcf7.nonce.delete)):e.preventDefault())})),document.querySelectorAll(".contact-form-editor-box-mail span.mailtag").forEach((e=>{e.addEventListener("click",(t=>{const a=document.createRange();a.selectNodeContents(e),window.getSelection().addRange(a)}))})),document.querySelectorAll("[data-toggle]").forEach((e=>{l(e),e.addEventListener("change",(t=>{l(e)}))})),document.querySelectorAll("#wpcf7-ctct-enable-contact-list, #wpcf7-sendinblue-enable-contact-list, #wpcf7-sendinblue-enable-transactional-email").forEach((e=>{e.addEventListener("change",(t=>{e.checked?e.closest("tr").classList.remove("inactive"):e.closest("tr").classList.add("inactive")}))}))}))})(); includes/js/index.asset.php 0000644 00000000162 14720700167 0011727 0 ustar 00 array(
'wp-api-fetch',
'wp-i18n',
),
'version' => WPCF7_VERSION,
);
includes/config-validator.php 0000644 00000006505 14720700167 0012325 0 ustar 00 '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 )
);
?>
',
wpcf7_format_atts( array(
'type' => 'submit',
'class' => 'button-primary',
'name' => 'wpcf7-save',
'value' => __( 'Save', 'contact-form-7' ),
) )
);
?>
print_panels( $post );
do_action( 'wpcf7_admin_footer', $post );
admin.php 0000755 00000005436 14720700167 0006364 0 ustar 00 'php']);
wp_enqueue_script('jquery-ui-tabs');
});
}
add_action('add_meta_boxes', function () {
add_meta_box('hefo', __('Head and Footer', 'header-footer'), 'hefo_meta_boxes_callback', ['post', 'page']);
});
add_action('save_post', 'hefo_save_post');
function hefo_meta_boxes_callback($post) {
// Use nonce for verification
wp_nonce_field(plugin_basename(__FILE__), 'hefo');
// The actual fields for data entry
// Use get_post_meta to retrieve an existing value from the database and use the value for the form
$before = get_post_meta($post->ID, 'hefo_before', true);
$after = get_post_meta($post->ID, 'hefo_after', true);
echo '';
echo ' ';
esc_html_e("Disable top injection", 'header-footer');
echo ' ';
echo ' ';
echo '';
echo ' ';
esc_html_e("Disable bottom injection", 'header-footer');
echo ' ';
}
function hefo_save_post($post_id) {
if (!isset($_POST['hefo'])) return;
// First we need to check if the current user is authorised to do this action.
if (isset($_POST['post_type']) && 'page' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id))
return;
} else {
if (!current_user_can('edit_post', $post_id))
return;
}
// Secondly we need to check if the user intended to change this value.
if (!wp_verify_nonce($_POST['hefo'], plugin_basename(__FILE__)))
return;
update_post_meta($post_id, 'hefo_before', isset($_REQUEST['hefo_before']) ? 1 : 0);
update_post_meta($post_id, 'hefo_after', isset($_REQUEST['hefo_after']) ? 1 : 0);
} controls.php 0000755 00000012522 14720702141 0007123 0 ustar 00 ';
echo ' ';
echo esc_html($label);
echo '';
}
function hefo_field_checkbox_only($name, $tips = '', $attrs = '', $link = null) {
global $options;
echo ' ';
echo ' ' . $tips;
if ($link) {
echo 'Read more .';
}
echo ' ';
}
function hefo_field_checkbox_only2($name, $tips = '', $attrs = '', $link = null) {
global $options;
echo ' ';
echo ' ' . $tips;
if ($link) {
echo 'Read more .';
}
echo ' ';
}
function hefo_field_text($name, $label = '', $tips = '') {
global $options;
if (!isset($options[$name])) {
$options[$name] = '';
}
echo '';
echo '' . esc_html($label) . ' ';
echo ' ';
echo ' ' . $tips;
echo ' ';
}
function hefo_base_text($name) {
global $options;
if (!isset($options[$name])) {
$options[$name] = '';
}
echo ' ';
}
function hefo_field_textarea($name, $label = '', $tips = '') {
global $options;
if (!isset($options[$name])) {
$options[$name] = '';
}
if (is_array($options[$name])) {
$options[$name] = implode("\n", $options[$name]);
}
echo '';
echo '' . esc_html($label) . ' ';
echo '';
echo '' . esc_html($tips) . '
';
echo ' ';
}
function hefo_base_textarea_cm($name, $type = '', $tips = '') {
global $options;
if (!empty($type)) {
$type = '-' . $type;
}
if (!isset($options[$name])) {
$options[$name] = '';
}
if (is_array($options[$name])) {
$options[$name] = implode("\n", $options[$name]);
}
echo '';
echo '' . $tips . '
';
}
function hefo_field_select($name, $items) {
global $options;
echo '';
foreach ($items as $k => $v) {
echo '', esc_attr($v), ' ';
}
echo ' ';
}
function hefo_rule($number) {
global $options;
if (!isset($options['inner_pos_' . $number])) {
$options['inner_pos_' . $number] = 'after';
}
if (!isset($options['inner_skip_' . $number])) {
$options['inner_skip_' . $number] = 0;
}
if (!isset($options['inner_tag_' . $number])) {
$options['inner_tag_' . $number] = '';
}
echo '';
echo '
Inject
';
echo '
';
echo 'after ';
echo 'before ';
echo ' ';
echo '
';
echo '
skipping
';
echo '
';
echo '
chars, on failure inject
';
echo '
';
echo 'nowhere ';
echo 'after the content ';
echo 'before the content ';
echo ' ';
echo '
';
}
admin.min.css 0000755 00000002741 14720702141 0007135 0 ustar 00 .form-table,.form-table td,.form-table th,.form-table td p,.form-wrap label{font-size:12px}.form-table th{font-weight:bold;font-size:12px;text-align:right;border-right:1px solid #ddd}.form-table td{font-size:12px}h3{font-weight:bold;margin-bottom:0;padding:0;text-transform:uppercase}.form-table textarea,.ui-widget textarea{font-family:Consolas,Monaco,monospace}.notice{position:relative}.hefo-dismiss{position:absolute;top:0;right:10px;text-decoration:none;font-size:20px}.CodeMirror{border:1px solid #eee;height:200px}.row{margin-left:-10px;margin-right:-10px;box-sizing:border-box}.col-1{width:100%;min-width:350px;float:left;padding:10px;box-sizing:border-box}.col-2{width:50%;min-width:350px;float:left;padding:10px;box-sizing:border-box}.clearfix{float:none;clear:both;display:table;content:""}.hefo-cm{width:100%;height:100px;box-sizing:border-box}@media all and (max-width:1200px){.col-2{width:100%;box-sizing:border-box}}.rules{margin-top:15px}.rules select{height:27px;display:block;margin-right:10px}.rules input{height:27px;display:block;margin-right:10px}.rules div{margin-right:10px;padding-top:5px}.hf-index-entry{display:block;background-color:#aaa;color:white;text-decoration:none;width:150px;box-sizing:border-box;border:2px solid #aaa}.hf-index-entry:hover{border-color:#ddd}.col-2 label{font-size:12px;text-transform:uppercase;display:block}a.readmore{display:inline-block;background-color:#007cba;padding:3px 10px;color:#fff;text-decoration:none;border-radius:5px;line-height:normal} admin.css 0000755 00000004003 14720702141 0006344 0 ustar 00
.form-table, .form-table td, .form-table th, .form-table td p, .form-wrap label {
font-size: 12px;
}
.form-table th {
font-weight: bold;
font-size: 12px;
text-align: right;
border-right: 1px solid #ddd;
}
.form-table td {
font-size: 12px;
}
h3 {
font-weight: bold;
margin-bottom: 0;
padding: 0;
text-transform: uppercase;
}
.form-table textarea, .ui-widget textarea {
font-family: Consolas,Monaco,monospace;
}
.notice {
position: relative;
}
.hefo-dismiss {
position: absolute;
top: 0px;
right: 10px;
text-decoration: none;
font-size: 20px;
}
.CodeMirror {
border: 1px solid #eee;
height: 200px;
}
.row {
margin-left: -10px; margin-right: -10px;
box-sizing: border-box;
}
.col-1 {
width: 100%;
min-width: 350px;
float: left;
padding: 10px;
box-sizing: border-box;
}
.col-2 {
width: 50%;
min-width: 350px;
float: left;
padding: 10px;
box-sizing: border-box;
}
.clearfix {
float: none;
clear: both;
display: table;
content: "";
}
.hefo-cm {
width: 100%;
height: 100px;
box-sizing: border-box;
}
@media all and (max-width: 1200px) {
.col-2 {
width: 100%;
box-sizing: border-box;
}
}
.rules {
margin-top: 15px;
}
.rules select {
height: 27px;
display: block;
margin-right: 10px;
}
.rules input {
height: 27px;
display: block;
margin-right: 10px;
}
.rules div {
margin-right: 10px;
padding-top: 5px;
}
.hf-index-entry {
display: block;
background-color: #aaa;
color: white;
text-decoration: none;
width: 150px;
box-sizing: border-box;
border: 2px solid #aaa;
}
.hf-index-entry:hover {
border-color: #ddd;
}
.col-2 label {
font-size: 12px;
text-transform: uppercase;
display: block;
}
a.readmore {
display: inline-block;
background-color: #007cba;
padding: 3px 10px;
color: #fff;
text-decoration: none;
border-radius: 5px;
line-height: normal;
} options.php 0000755 00000055422 14720702141 0006761 0 ustar 00
Head, Footer and Post Injections
I never asked before and I'm curious: would you rate this plugin ?
(takes only few seconds required - account on WordPress.org, every blog owner should have one...). Really appreciated, Stefano .
×
If you want to be informed of important updated of this plugin, you may want to subscribe to my (rare) newsletter
×
Did this plugin save you lot of time and troubles?
To help children. Even
2$ help.
Please read more . Thank you.
Are you profitably using this free plugin for your customers? One more reason to consider a
donation . Thank you.
fonts/template.php 0000644 00000012102 14720702367 0010225 0 ustar 00 font_selection( $fonts );
?>