PK)o#]dAload.phpnu[ $value ) ) ); do_action( 'wpcf7_update_option', $name, $value, $old_option ); } } add_action( 'plugins_loaded', 'wpcf7', 10, 0 ); /** * Loads modules and registers WordPress shortcodes. */ function wpcf7() { WPCF7::load_modules(); add_shortcode( 'contact-form-7', 'wpcf7_contact_form_tag_func' ); add_shortcode( 'contact-form', 'wpcf7_contact_form_tag_func' ); } add_action( 'init', 'wpcf7_init', 10, 0 ); /** * Registers post types for contact forms. */ function wpcf7_init() { wpcf7_get_request_uri(); wpcf7_register_post_types(); do_action( 'wpcf7_init' ); } add_action( 'admin_init', 'wpcf7_upgrade', 10, 0 ); /** * Upgrades option data when necessary. */ function wpcf7_upgrade() { $old_ver = WPCF7::get_option( 'version', '0' ); $new_ver = WPCF7_VERSION; if ( $old_ver === $new_ver ) { return; } do_action( 'wpcf7_upgrade', $new_ver, $old_ver ); WPCF7::update_option( 'version', $new_ver ); } add_action( 'activate_' . WPCF7_PLUGIN_BASENAME, 'wpcf7_install', 10, 0 ); /** * Callback tied to plugin activation action hook. Attempts to create * initial user dataset. */ function wpcf7_install() { if ( $opt = get_option( 'wpcf7' ) ) { return; } wpcf7_register_post_types(); wpcf7_upgrade(); if ( get_posts( array( 'post_type' => 'wpcf7_contact_form' ) ) ) { return; } $contact_form = WPCF7_ContactForm::get_template( array( 'title' => /* translators: title of your first contact form. %d: number fixed to '1' */ sprintf( __( 'Contact form %d', 'contact-form-7' ), 1 ), ) ); $contact_form->save(); WPCF7::update_option( 'bulk_validate', array( 'timestamp' => time(), 'version' => WPCF7_VERSION, 'count_valid' => 1, 'count_invalid' => 0, ) ); } PK)o#]/ Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. PK)o#]3thhwp-contact-form-7.phpnu[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 ); } } PK)o#]EJв((admin/includes/editor.phpnu[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 ''; 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' ) ); /* translators: %s: link labeled 'Editing form template' */ $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, ) ); ?>

%3$s', 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( '

%s

', esc_html( __( "Mail (2) is an additional mail template often used as an autoresponder.", 'contact-form-7' ) ) ); } ?>
'; echo esc_html( __( "In the following fields, you can use these mail-tags:", 'contact-form-7' ) ); echo '
'; $post->suggest_mail_tags( $options['name'] ); ?>

$arr ) { $field_id = sprintf( 'wpcf7-message-%s', strtr( $key, '_', '-' ) ); $field_name = sprintf( 'wpcf7-messages[%s]', $key ); ?>

{"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")}))}))}))})();PK)o#]#X``admin/includes/js/error_lognu[[03-Sep-2026 07:45:52 UTC] PHP Fatal error: Uncaught Error: Undefined constant "WPCF7_VERSION" in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/admin/includes/js/index.asset.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/admin/includes/js/index.asset.php on line 8 PK)o#] Ϸrr!admin/includes/js/index.asset.phpnu[ array( 'wp-api-fetch', 'wp-i18n', ), 'version' => WPCF7_VERSION, ); PK)o#]31admin/includes/class-contact-forms-list-table.phpnu[ '', '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( /* translators: %s: number of errors detected */ _n( '%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; } } PK)o#] 2!! admin/includes/welcome-panel.phpnu[', 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 to maintain this plugin without support from users like you.", 'contact-form-7' ) ), sprintf( /* translators: %s: link labeled 'contribute to the project' */ esc_html( __( 'There are several ways for you to %s: testing, coding, translating it into your local languages, helping other users, financial donations, etc, etc. We equally welcome you regardless of the way you contribute.', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/contributing/', 'contact-form-7' ), __( 'contribute to the project', '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'; } ?>
print_content(); } ?>
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, true ); $checkbox = sprintf( '', wpcf7_format_atts( array( 'id' => $checkbox_id, 'type' => 'checkbox', 'checked' => $checked, ) ) ); $screen_settings .= sprintf( '
%1$s
', esc_html( __( 'Welcome panel', 'contact-form-7' ) ), esc_attr( $checkbox_id ), $checkbox, esc_html( __( 'Show welcome panel', 'contact-form-7' ) ) ); return $screen_settings; } PK)o#]2GDD"admin/includes/admin-functions.phpnu[add( $name, $title, $callback, $options ); } PK)o#]G ( (admin/includes/css/styles.cssnu[#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 ); height: 720px; width: 720px; overflow: auto; } .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; min-height: 120px; overflow: auto; } .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; } PK)o#]mx||!admin/includes/css/styles-rtl.cssnu[/* * 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; } PK)o#]D\)1)1 admin/includes/tag-generator.phpnu[ '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( '', 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( '', 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( '
', 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 '
'; 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(), ) ); ?>

'', ) ); ?>

'number', 'title' => __( 'Length', 'contact-form-7' ), 'min_option' => 'minlength:', 'max_option' => 'maxlength:', 'accept_minus' => false, ) ); ?>
'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' ), ) ) ); ?>
' ); ?>

'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 ), array( '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( /* translators: %s: number of contact forms */ _n( "Validate %s contact form now", "Validate %s contact forms now", $count, 'contact-form-7' ), number_format_i18n( $count ) ); ?>

service_exists() ) { $integration = add_submenu_page( 'wpcf7', __( 'Integration with External API', 'contact-form-7' ), __( 'Integration', 'contact-form-7' ) . wpcf7_admin_menu_change_notice( 'wpcf7-integration' ), 'wpcf7_manage_integration', 'wpcf7-integration', 'wpcf7_admin_integration_page' ); add_action( 'load-' . $integration, 'wpcf7_load_integration_page', 10, 0 ); } } function wpcf7_admin_menu_change_notice( $menu_slug = '' ) { $counts = apply_filters( 'wpcf7_admin_menu_change_notice', array( 'wpcf7' => 0, 'wpcf7-new' => 0, 'wpcf7-integration' => 0, ) ); if ( empty( $menu_slug ) ) { $count = absint( array_sum( $counts ) ); } elseif ( isset( $counts[$menu_slug] ) ) { $count = absint( $counts[$menu_slug] ); } else { $count = 0; } if ( $count ) { return sprintf( ' %2$s', $count, esc_html( number_format_i18n( $count ) ) ); } return ''; } add_action( 'admin_enqueue_scripts', 'wpcf7_admin_enqueue_scripts', 10, 1 ); function wpcf7_admin_enqueue_scripts( $hook_suffix ) { if ( false === strpos( $hook_suffix, 'wpcf7' ) ) { return; } wp_enqueue_style( 'contact-form-7-admin', wpcf7_plugin_url( 'admin/includes/css/styles.css' ), array(), WPCF7_VERSION, 'all' ); if ( wpcf7_is_rtl() ) { wp_enqueue_style( 'contact-form-7-admin-rtl', wpcf7_plugin_url( 'admin/includes/css/styles-rtl.css' ), array(), WPCF7_VERSION, 'all' ); } $assets = include wpcf7_plugin_path( 'admin/includes/js/index.asset.php' ); $assets = wp_parse_args( $assets, array( 'dependencies' => array(), 'version' => WPCF7_VERSION, ) ); wp_enqueue_script( 'wpcf7-admin', wpcf7_plugin_url( 'admin/includes/js/index.js' ), $assets['dependencies'], $assets['version'], array( 'in_footer' => true ) ); wp_set_script_translations( 'wpcf7-admin', 'contact-form-7' ); $wpcf7_obj = array( 'apiSettings' => array( 'root' => sanitize_url( rest_url( 'contact-form-7/v1' ) ), 'namespace' => 'contact-form-7/v1', ), ); $post = wpcf7_get_current_contact_form(); if ( $post ) { $wpcf7_obj = array_merge( $wpcf7_obj, array( 'nonce' => array( 'save' => wp_create_nonce( sprintf( 'wpcf7-save-contact-form_%s', $post->initial() ? -1 : $post->id() ) ), 'copy' => wp_create_nonce( sprintf( 'wpcf7-copy-contact-form_%s', $post->initial() ? -1 : $post->id() ) ), 'delete' => wp_create_nonce( sprintf( 'wpcf7-delete-contact-form_%s', $post->initial() ? -1 : $post->id() ) ), ), 'configValidator' => array( 'errors' => array(), 'docUrl' => WPCF7_ConfigValidator::get_doc_link(), ), ) ); if ( current_user_can( 'wpcf7_edit_contact_form', $post->id() ) and wpcf7_validate_configuration() ) { $config_validator = new WPCF7_ConfigValidator( $post ); $config_validator->restore(); $wpcf7_obj['configValidator'] = array_merge( $wpcf7_obj['configValidator'], array( 'errors' => $config_validator->collect_error_messages(), ) ); } } wp_add_inline_script( 'wpcf7-admin', sprintf( 'var wpcf7 = %s;', wp_json_encode( $wpcf7_obj, JSON_PRETTY_PRINT ) ), 'before' ); } add_filter( 'set_screen_option_wpcf7_contact_forms_per_page', static function ( $result, $option, $value ) { $wpcf7_screens = array( 'wpcf7_contact_forms_per_page', ); if ( in_array( $option, $wpcf7_screens, true ) ) { $result = $value; } return $result; }, 10, 3 ); function wpcf7_load_contact_form_admin() { global $plugin_page; $action = wpcf7_current_action(); do_action( 'wpcf7_admin_load', trim( $_GET['page'] ?? '' ), $action ); if ( 'save' === $action ) { $id = $_POST['post_ID'] ?? '-1'; check_admin_referer( 'wpcf7-save-contact-form_' . $id ); if ( ! current_user_can( 'wpcf7_edit_contact_form', $id ) ) { wp_die( __( "You are not allowed to edit this item.", 'contact-form-7' ) ); } $contact_form = wpcf7_save_contact_form( array_merge( $_REQUEST, array( 'id' => $id, 'title' => $_POST['post_title'] ?? null, 'locale' => $_POST['wpcf7-locale'] ?? null, 'form' => $_POST['wpcf7-form'] ?? '', 'mail' => $_POST['wpcf7-mail'] ?? array(), 'mail_2' => $_POST['wpcf7-mail-2'] ?? array(), 'messages' => $_POST['wpcf7-messages'] ?? array(), 'additional_settings' => $_POST['wpcf7-additional-settings'] ?? '', ) ) ); if ( $contact_form and wpcf7_validate_configuration() ) { $config_validator = new WPCF7_ConfigValidator( $contact_form ); $config_validator->validate(); $config_validator->save(); } $query = array( 'post' => $contact_form ? $contact_form->id() : 0, 'active-tab' => wpcf7_canonicalize_name( $_POST['active-tab'] ?? '' ), ); if ( ! $contact_form ) { $query['message'] = 'failed'; } elseif ( -1 === (int) $id ) { $query['message'] = 'created'; } else { $query['message'] = 'saved'; } $redirect_to = add_query_arg( $query, menu_page_url( 'wpcf7', false ) ); wp_safe_redirect( $redirect_to ); exit(); } if ( 'copy' === $action ) { $id = absint( $_POST['post_ID'] ?? $_REQUEST['post'] ?? '' ); check_admin_referer( 'wpcf7-copy-contact-form_' . $id ); if ( ! current_user_can( 'wpcf7_edit_contact_form', $id ) ) { wp_die( __( "You are not allowed to edit this item.", 'contact-form-7' ) ); } $query = array(); if ( $contact_form = wpcf7_contact_form( $id ) ) { $new_contact_form = $contact_form->copy(); $new_contact_form->save(); $query['post'] = $new_contact_form->id(); $query['message'] = 'created'; } $redirect_to = add_query_arg( $query, menu_page_url( 'wpcf7', false ) ); wp_safe_redirect( $redirect_to ); exit(); } if ( 'delete' === $action ) { if ( ! empty( $_POST['post_ID'] ) ) { check_admin_referer( 'wpcf7-delete-contact-form_' . $_POST['post_ID'] ); } elseif ( ! is_array( $_REQUEST['post'] ) ) { check_admin_referer( 'wpcf7-delete-contact-form_' . $_REQUEST['post'] ); } else { check_admin_referer( 'bulk-posts' ); } $posts = (array) ( $_POST['post_ID'] ?? $_REQUEST['post'] ?? array() ); $deleted = 0; foreach ( $posts as $post ) { $post = WPCF7_ContactForm::get_instance( $post ); if ( empty( $post ) ) { continue; } if ( ! current_user_can( 'wpcf7_delete_contact_form', $post->id() ) ) { wp_die( __( "You are not allowed to delete this item.", 'contact-form-7' ) ); } if ( ! $post->delete() ) { wp_die( __( "Error in deleting.", 'contact-form-7' ) ); } $deleted += 1; } $query = array(); if ( ! empty( $deleted ) ) { $query['message'] = 'deleted'; } $redirect_to = add_query_arg( $query, menu_page_url( 'wpcf7', false ) ); wp_safe_redirect( $redirect_to ); exit(); } $post = null; if ( 'wpcf7-new' === $plugin_page ) { $post = WPCF7_ContactForm::get_template( array( 'locale' => $_GET['locale'] ?? null, ) ); } elseif ( ! empty( $_GET['post'] ) ) { $post = WPCF7_ContactForm::get_instance( $_GET['post'] ); } $current_screen = get_current_screen(); $help_tabs = new WPCF7_Help_Tabs( $current_screen ); if ( $post and current_user_can( 'wpcf7_edit_contact_form', $post->id() ) ) { $help_tabs->set_help_tabs( 'edit' ); } else { $help_tabs->set_help_tabs( 'list' ); if ( ! class_exists( 'WPCF7_Contact_Form_List_Table' ) ) { require_once WPCF7_PLUGIN_DIR . '/admin/includes/class-contact-forms-list-table.php'; } add_filter( 'manage_' . $current_screen->id . '_columns', array( 'WPCF7_Contact_Form_List_Table', 'define_columns' ), 10, 0 ); add_screen_option( 'per_page', array( 'default' => 20, 'option' => 'wpcf7_contact_forms_per_page', ) ); } } function wpcf7_admin_management_page() { if ( $post = wpcf7_get_current_contact_form() ) { $post_id = $post->initial() ? -1 : $post->id(); require_once WPCF7_PLUGIN_DIR . '/admin/includes/editor.php'; require_once WPCF7_PLUGIN_DIR . '/admin/edit-contact-form.php'; return; } if ( 'validate' === wpcf7_current_action() and wpcf7_validate_configuration() and current_user_can( 'wpcf7_edit_contact_forms' ) ) { wpcf7_admin_bulk_validate_page(); return; } $list_table = new WPCF7_Contact_Form_List_Table(); $list_table->prepare_items(); ?>

'page-title-action' ) ); } if ( ! empty( $_REQUEST['s'] ) ) { echo sprintf( '' /* translators: %s: search keywords */ . __( 'Search results for “%s”', 'contact-form-7' ) . '', esc_html( $_REQUEST['s'] ) ); } ?>
search_box( __( 'Search Contact Forms', 'contact-form-7' ), 'wpcf7-contact' ); ?> display(); ?>
service_exists( $_REQUEST['service'] ) ) { $service = $integration->get_service( $_REQUEST['service'] ); $service->load( wpcf7_current_action() ); } $help_tabs = new WPCF7_Help_Tabs( get_current_screen() ); $help_tabs->set_help_tabs( 'integration' ); } function wpcf7_admin_integration_page() { $integration = WPCF7_Integration::get_instance(); $service = isset( $_REQUEST['service'] ) ? $integration->get_service( $_REQUEST['service'] ) : null; ?>

admin_notice( $message ); $integration->list_services( array( 'include' => $_REQUEST['service'], ) ); } else { $integration->list_services(); } ?>
'success' ) ); } if ( 'failed' === $_REQUEST['message'] ) { $message = __( "There was an error saving the contact form.", 'contact-form-7' ); wp_admin_notice( esc_html( $message ), array( 'type' => 'error' ) ); } if ( 'validated' === $_REQUEST['message'] ) { $bulk_validate = WPCF7::get_option( 'bulk_validate', array() ); $count_invalid = absint( $bulk_validate['count_invalid'] ?? 0 ); if ( $count_invalid ) { $message = sprintf( /* translators: %s: number of contact forms */ _n( "Configuration validation completed. %s invalid contact form was found.", "Configuration validation completed. %s invalid contact forms were found.", $count_invalid, 'contact-form-7' ), number_format_i18n( $count_invalid ) ); wp_admin_notice( esc_html( $message ), array( 'type' => 'warning' ) ); } else { $message = __( "Configuration validation completed. No invalid contact form was found.", 'contact-form-7' ); wp_admin_notice( esc_html( $message ), array( 'type' => 'success' ) ); } } } add_filter( 'plugin_action_links', 'wpcf7_plugin_action_links', 10, 2 ); function wpcf7_plugin_action_links( $links, $file ) { if ( WPCF7_PLUGIN_BASENAME !== $file ) { return $links; } if ( ! current_user_can( 'wpcf7_read_contact_forms' ) ) { return $links; } $settings_link = wpcf7_link( menu_page_url( 'wpcf7', false ), __( 'Settings', 'contact-form-7' ) ); array_unshift( $links, $settings_link ); return $links; } add_action( 'wpcf7_admin_warnings', 'wpcf7_old_wp_version_error', 10, 3 ); function wpcf7_old_wp_version_error( $page, $action, $object ) { $wp_version = get_bloginfo( 'version' ); if ( version_compare( $wp_version, WPCF7_REQUIRED_WP_VERSION, '<' ) ) { $message = sprintf( /* translators: 1: version of Contact Form 7, 2: version of WordPress, 3: URL */ __( 'Contact Form 7 %1$s requires WordPress %2$s or higher. Please update WordPress first.', 'contact-form-7' ), WPCF7_VERSION, WPCF7_REQUIRED_WP_VERSION, admin_url( 'update-core.php' ) ); wp_admin_notice( $message, array( 'type' => 'warning' ) ); } } add_action( 'wpcf7_admin_warnings', 'wpcf7_not_allowed_to_edit', 10, 3 ); function wpcf7_not_allowed_to_edit( $page, $action, $object ) { if ( $object instanceof WPCF7_ContactForm ) { $contact_form = $object; } else { return; } if ( ! current_user_can( 'wpcf7_edit_contact_form', $contact_form->id() ) ) { $message = __( "You are not allowed to edit this contact form.", 'contact-form-7' ); wp_admin_notice( esc_html( $message ), array( 'type' => 'warning' ) ); } } add_action( 'wpcf7_admin_warnings', 'wpcf7_outdated_php_warning', 10, 3 ); function wpcf7_outdated_php_warning( $page, $action, $object ) { if ( version_compare( PHP_VERSION, '7.4', '<' ) ) { $message = __( "The next major release of Contact Form 7 will discontinue support for outdated PHP versions. If you don't upgrade PHP, you will not be able to upgrade the plugin.", 'contact-form-7' ); wp_admin_notice( esc_html( $message ), array( 'type' => 'warning' ) ); } } add_action( 'wpcf7_admin_warnings', 'wpcf7_ctct_deprecated_warning', 10, 3 ); function wpcf7_ctct_deprecated_warning( $page, $action, $object ) { $service = WPCF7_ConstantContact::get_instance(); if ( $service->is_active() ) { $message = wp_kses( __( 'The Constant Contact integration is deprecated and planned to be completely removed anytime soon. Contact Form 7 recommends Brevo as an alternative.', 'contact-form-7' ), array( 'a' => array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); wp_admin_notice( $message, array( 'type' => 'warning' ) ); } } PK)o#]_K!!admin/edit-contact-form.phpnu[', wpcf7_format_atts( array( 'type' => 'submit', 'class' => 'button-primary', 'name' => 'wpcf7-save', 'value' => __( 'Save', 'contact-form-7' ), ) ) ); ?>
%1$s %2$s', esc_html( $post->initial() ? __( 'Add New Contact Form', 'contact-form-7' ) : __( 'Edit Contact Form', 'contact-form-7' ) ), ( $post->initial() || ! current_user_can( 'wpcf7_edit_contact_forms' ) ) ? '' : wpcf7_link( menu_page_url( 'wpcf7-new', false ), __( 'Add New', 'contact-form-7' ), array( 'class' => 'page-title-action' ) ) ); ?>
initial() ? 'wpcf7-new' : 'wpcf7', wpcf7_current_action(), $post ); do_action( 'wpcf7_admin_notices', $post->initial() ? 'wpcf7-new' : 'wpcf7', wpcf7_current_action(), $post ); if ( $post ) : echo sprintf( '
', wpcf7_format_atts( array( 'method' => 'post', 'action' => esc_url( add_query_arg( array( 'post' => $post_id ), menu_page_url( 'wpcf7', false ) ) ), 'id' => 'wpcf7-admin-form-element', 'disabled' => ! current_user_can( 'wpcf7_edit_contact_form', $post_id ), ) ) ); if ( current_user_can( 'wpcf7_edit_contact_form', $post_id ) ) { wp_nonce_field( 'wpcf7-save-contact-form_' . $post_id ); } ?>
', wpcf7_format_atts( array( 'type' => 'text', 'name' => 'post_title', 'value' => $post->initial() ? '' : $post->title(), 'id' => 'title', 'spellcheck' => 'true', 'autocomplete' => 'off', 'disabled' => ! current_user_can( 'wpcf7_edit_contact_form', $post_id ), 'placeholder' => __( 'Enter title here', 'contact-form-7' ), 'aria-label' => __( 'Enter title here', 'contact-form-7' ), ) ) ); ?>
initial() ) { if ( $shortcode = $post->shortcode() ) { echo sprintf( '

', esc_html( __( "Copy this shortcode and paste it into your post, page, or text widget content:", 'contact-form-7' ) ), wpcf7_format_atts( array( 'type' => 'text', 'id' => 'wpcf7-shortcode', 'onfocus' => 'this.select();', 'readonly' => true, 'class' => 'large-text code', 'value' => $shortcode, ) ) ); } if ( $shortcode = $post->shortcode( array( 'use_old_format' => true ) ) ) { echo sprintf( '

', esc_html( __( "You can also use this old-style shortcode:", 'contact-form-7' ) ), wpcf7_format_atts( array( 'type' => 'text', 'id' => 'wpcf7-shortcode-old', 'onfocus' => 'this.select();', 'readonly' => true, 'class' => 'large-text code', 'value' => $shortcode, ) ) ); } } ?>

initial() ) { echo sprintf( '', wpcf7_format_atts( array( 'type' => 'submit', 'name' => 'wpcf7-copy', 'class' => 'copy button', 'value' => __( 'Duplicate', 'contact-form-7' ), ) ) ); } ?>
initial() ) { echo sprintf( '
', wpcf7_format_atts( array( 'type' => 'submit', 'name' => 'wpcf7-delete', 'class' => 'delete submitdelete', 'value' => __( 'Delete', 'contact-form-7' ), ) ) ); } ?>

array( 'title' => __( 'Form', 'contact-form-7' ), 'callback' => 'wpcf7_editor_panel_form', ), 'mail-panel' => array( 'title' => __( 'Mail', 'contact-form-7' ), 'callback' => 'wpcf7_editor_panel_mail', ), 'messages-panel' => array( 'title' => __( 'Messages', 'contact-form-7' ), 'callback' => 'wpcf7_editor_panel_messages', ), ); $additional_settings = $post->prop( 'additional_settings' ); if ( ! is_scalar( $additional_settings ) ) { $additional_settings = ''; } $additional_settings = trim( $additional_settings ); $additional_settings = explode( "\n", $additional_settings ); $additional_settings = array_filter( $additional_settings ); $additional_settings = count( $additional_settings ); $panels['additional-settings-panel'] = array( 'title' => $additional_settings ? sprintf( /* translators: %d: number of additional settings */ __( 'Additional Settings (%d)', 'contact-form-7' ), $additional_settings ) : __( 'Additional Settings', 'contact-form-7' ), 'callback' => 'wpcf7_editor_panel_additional_settings', ); } $panels = apply_filters( 'wpcf7_editor_panels', $panels ); foreach ( $panels as $id => $panel ) { $editor->add_panel( $id, $panel['title'], $panel['callback'] ); } $editor->display(); ?>
%s

', $save_button ); } ?>

print_panels( $post ); do_action( 'wpcf7_admin_footer', $post ); PK)o#]  error_lognu[[22-Jan-2026 21:22:47 UTC] PHP Fatal error: Uncaught Error: Call to undefined function plugin_basename() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/wp-contact-form-7.php:23 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/wp-contact-form-7.php on line 23 [03-Sep-2026 07:30:45 UTC] PHP Fatal error: Uncaught Error: Call to undefined function plugin_basename() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/wp-contact-form-7.php:23 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/wp-contact-form-7.php on line 23 [03-Sep-2026 07:31:15 UTC] PHP Fatal error: Uncaught Error: Undefined constant "WPCF7_PLUGIN_DIR" in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/load.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/load.php on line 3 [03-Sep-2026 08:09:02 UTC] PHP Fatal error: Uncaught Error: Undefined constant "WPCF7_PLUGIN_DIR" in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/load.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/load.php on line 3 [03-Sep-2026 08:09:04 UTC] PHP Fatal error: Uncaught Error: Call to undefined function plugin_basename() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/wp-contact-form-7.php:23 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/wp-contact-form-7.php on line 23 [03-Sep-2026 13:47:59 UTC] PHP Fatal error: Uncaught Error: Undefined constant "WPCF7_PLUGIN_DIR" in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/load.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/load.php on line 3 PK)o#] uninstall.phpnu[ -1, 'post_type' => 'wpcf7_contact_form', 'post_status' => 'any', ) ); foreach ( $posts as $post ) { wp_delete_post( $post->ID, true ); } $wpdb->query( sprintf( "DROP TABLE IF EXISTS %s", $wpdb->prefix . 'contact_form_7' ) ); return true; } if ( ! defined( 'WPCF7_VERSION' ) ) { wpcf7_delete_plugin(); } PK)o#]tgHAAincludes/html-formatter.phpnu[options = wp_parse_args( $options, array( 'auto_br' => true, 'auto_indent' => true, ) ); } /** * Separates the given text into chunks of HTML. Each chunk must be an * associative array that includes 'position', 'type', and 'content' keys. * * @param string $input Text to be separated into chunks. * @return iterable Iterable of chunks. */ public function separate_into_chunks( $input ) { $input_bytelength = strlen( $input ); $position = 0; while ( $position < $input_bytelength ) { $next_tag = preg_match( '/(?:|<(?:\/?)[a-z].*?>)/is', $input, $matches, PREG_OFFSET_CAPTURE, $position ); if ( ! $next_tag ) { yield array( 'position' => $position, 'type' => self::text, 'content' => substr( $input, $position ), ); break; } $next_tag = $matches[0][0]; $next_tag_position = $matches[0][1]; if ( $position < $next_tag_position ) { yield array( 'position' => $position, 'type' => self::text, 'content' => substr( $input, $position, $next_tag_position - $position ), ); } if ( ' $next_tag_position, 'type' => $next_tag_type, 'content' => substr( $input, $next_tag_position, strlen( $next_tag ) ), ); $position = $next_tag_position + strlen( $next_tag ); } } /** * Normalizes content in each chunk. This may change the type and position * of the chunk. * * @param iterable $chunks The original chunks. * @return iterable Normalized chunks. */ public function pre_format( $chunks ) { $position = 0; foreach ( $chunks as $chunk ) { $chunk['position'] = $position; // Standardize newline characters to "\n". $chunk['content'] = str_replace( array( "\r\n", "\r" ), "\n", $chunk['content'] ); if ( self::start_tag === $chunk['type'] ) { list( $chunk['content'] ) = self::normalize_start_tag( $chunk['content'] ); // Replace
by a line break. if ( $this->options['auto_br'] and preg_match( '/^$/i', $chunk['content'] ) ) { $chunk['type'] = self::text; $chunk['content'] = "\n"; } } yield $chunk; $position = self::calc_next_position( $chunk ); } } /** * Concatenates neighboring text chunks to create a single chunk. * * @param iterable $chunks The original chunks. * @return iterable Processed chunks. */ public function concatenate_texts( $chunks ) { $position = 0; $text_left = null; foreach ( $chunks as $chunk ) { $chunk['position'] = $position; if ( self::text === $chunk['type'] ) { if ( isset( $text_left ) ) { $text_left['content'] .= $chunk['content']; } else { $text_left = $chunk; } continue; } if ( isset( $text_left ) ) { yield $text_left; $chunk['position'] = self::calc_next_position( $text_left ); $text_left = null; } yield $chunk; $position = self::calc_next_position( $chunk ); } if ( isset( $text_left ) ) { yield $text_left; } } /** * Outputs formatted HTML based on the given chunks. * * @param iterable $chunks The original chunks. * @return string Formatted HTML. */ public function format( $chunks ) { $chunks = $this->pre_format( $chunks ); $chunks = $this->concatenate_texts( $chunks ); $this->output = ''; $this->stacked_elements = array(); foreach ( $chunks as $chunk ) { if ( self::text === $chunk['type'] ) { $this->append_text( $chunk['content'] ); } if ( self::start_tag === $chunk['type'] ) { $this->start_tag( $chunk['content'] ); } if ( self::end_tag === $chunk['type'] ) { $this->end_tag( $chunk['content'] ); } if ( self::comment === $chunk['type'] ) { $this->append_comment( $chunk['content'] ); } } // Close all remaining tags. $this->close_all_tags(); return $this->output; } /** * Appends a text node content to the output property. * * @param string $content Text node content. */ public function append_text( $content ) { if ( $this->is_inside( array( 'pre', 'template' ) ) ) { $this->output .= $content; return; } if ( empty( $this->stacked_elements ) or $this->has_parent( 'p' ) or $this->has_parent( self::p_parent_elements ) ) { // Close

if the content starts with multiple line breaks. if ( preg_match( '/^\s*\n\s*\n\s*/', $content ) ) { $this->end_tag( 'p' ); } // Split up the contents into paragraphs, separated by double line breaks. $paragraphs = preg_split( '/\s*\n\s*\n\s*/', $content ); $paragraphs = array_filter( $paragraphs, static function ( $paragraph ) { return '' !== trim( $paragraph ); } ); $paragraphs = array_values( $paragraphs ); if ( $paragraphs ) { if ( $this->is_inside( 'p' ) ) { $paragraph = array_shift( $paragraphs ); $paragraph = self::normalize_paragraph( $paragraph, $this->options['auto_br'] ); $this->output .= $paragraph; } foreach ( $paragraphs as $paragraph ) { $this->start_tag( 'p' ); $paragraph = ltrim( $paragraph ); $paragraph = self::normalize_paragraph( $paragraph, $this->options['auto_br'] ); $this->output .= $paragraph; } } // Close

if the content ends with multiple line breaks. if ( preg_match( '/\s*\n\s*\n\s*$/', $content ) ) { $this->end_tag( 'p' ); } // Cases where the content is a single line break. if ( preg_match( '/^\s*\n\s*$/', $content ) ) { $auto_br = $this->options['auto_br'] && $this->is_inside( 'p' ); $content = self::normalize_paragraph( $content, $auto_br ); $this->output .= $content; } } else { $auto_br = $this->options['auto_br'] && $this->has_parent( self::br_parent_elements ); $content = self::normalize_paragraph( $content, $auto_br ); $this->output .= $content; } } /** * Appends a start tag to the output property. * * @param string $tag A start tag. */ public function start_tag( $tag ) { list( $tag, $tag_name ) = self::normalize_start_tag( $tag ); if ( in_array( $tag_name, self::p_child_elements, true ) ) { if ( ! $this->is_inside( 'p' ) and ! $this->is_inside( self::p_child_elements ) and ! $this->has_parent( self::p_nonparent_elements ) ) { // Open

if it does not exist. $this->start_tag( 'p' ); } } elseif ( 'p' === $tag_name or in_array( $tag_name, self::p_parent_elements, true ) or in_array( $tag_name, self::p_nonparent_elements, true ) ) { // Close

if it exists. $this->end_tag( 'p' ); } if ( 'dd' === $tag_name or 'dt' === $tag_name ) { // Close

and
if closing tag is omitted. $this->end_tag( 'dd' ); $this->end_tag( 'dt' ); } if ( 'li' === $tag_name ) { // Close
  • if closing tag is omitted. $this->end_tag( 'li' ); } if ( 'optgroup' === $tag_name ) { // Close if closing tag is omitted. $this->end_tag( 'option' ); $this->end_tag( 'optgroup' ); } if ( 'option' === $tag_name ) { // Close
  • %2$s
  • ', esc_attr( $validation_error_id ), $list_item ); $validation_errors[] = $list_item; } } } } $primary_response = sprintf( '

    %s

    ', esc_html( $primary_response ) ); $validation_errors = sprintf( '
      %s
    ', implode( "\n", $validation_errors ) ); $output = sprintf( '
    %1$s %2$s
    ', $primary_response, $validation_errors ); return $output; } /** * Returns a validation error for the specified input field. * * @param string $name Input field name. */ public function validation_error( $name ) { $error = ''; if ( $this->is_posted() ) { $submission = WPCF7_Submission::get_instance(); if ( $invalid_field = $submission->get_invalid_field( $name ) ) { $error = trim( $invalid_field['reason'] ); } } if ( ! $error ) { return $error; } $atts = array( 'class' => 'wpcf7-not-valid-tip', 'aria-hidden' => 'true', ); $error = sprintf( '%2$s', wpcf7_format_atts( $atts ), esc_html( $error ) ); return apply_filters( 'wpcf7_validation_error', $error, $name, $this ); } /** * Replaces all form-tags in the form template with corresponding HTML. * * @return string Replaced form content. */ public function replace_all_form_tags() { $manager = WPCF7_FormTagsManager::get_instance(); $form = $this->prop( 'form' ); if ( wpcf7_autop_or_not() ) { $form = $manager->replace_with_placeholders( $form ); $form = wpcf7_autop( $form ); $form = $manager->restore_from_placeholders( $form ); } $form = $manager->replace_all( $form ); $this->scanned_form_tags = $manager->get_scanned_tags(); return $form; } /** * Replaces all form-tags in the form template with corresponding HTML. * * @deprecated 4.6 Use replace_all_form_tags() * * @return string Replaced form content. */ public function form_do_shortcode() { wpcf7_deprecated_function( __METHOD__, '4.6', 'WPCF7_ContactForm::replace_all_form_tags' ); return $this->replace_all_form_tags(); } /** * Scans form-tags from the form template. * * @param string|array|null $cond Optional. Filters. Default null. * @return array Form-tags matching the given filter conditions. */ public function scan_form_tags( $cond = null ) { $manager = WPCF7_FormTagsManager::get_instance(); if ( empty( $this->scanned_form_tags ) ) { $this->scanned_form_tags = $manager->scan( $this->prop( 'form' ) ); } $tags = $this->scanned_form_tags; return $manager->filter( $tags, $cond ); } /** * Scans form-tags from the form template. * * @deprecated 4.6 Use scan_form_tags() * * @param string|array|null $cond Optional. Filters. Default null. * @return array Form-tags matching the given filter conditions. */ public function form_scan_shortcode( $cond = null ) { wpcf7_deprecated_function( __METHOD__, '4.6', 'WPCF7_ContactForm::scan_form_tags' ); return $this->scan_form_tags( $cond ); } /** * Replaces all form-tags in the form template with corresponding HTML. * * @return string Replaced form content. wpcf7_form_elements filters applied. */ public function form_elements() { return apply_filters( 'wpcf7_form_elements', $this->replace_all_form_tags() ); } /** * Collects mail-tags available for this contact form. * * @param string|array $options Optional. Search options. * @return array Mail-tag names. */ public function collect_mail_tags( $options = '' ) { $manager = WPCF7_FormTagsManager::get_instance(); $options = wp_parse_args( $options, array( 'include' => array(), 'exclude' => $manager->collect_tag_types( 'not-for-mail' ), ) ); $tags = $this->scan_form_tags(); $mailtags = array(); foreach ( (array) $tags as $tag ) { $type = $tag->basetype; if ( empty( $type ) ) { continue; } elseif ( ! empty( $options['include'] ) ) { if ( ! in_array( $type, $options['include'], true ) ) { continue; } } elseif ( ! empty( $options['exclude'] ) ) { if ( in_array( $type, $options['exclude'], true ) ) { continue; } } $mailtags[] = $tag->name; } $mailtags = array_unique( $mailtags ); $mailtags = array_filter( $mailtags ); $mailtags = array_values( $mailtags ); return apply_filters( 'wpcf7_collect_mail_tags', $mailtags, $options, $this ); } /** * Prints a mail-tag suggestion list. * * @param string $template_name Optional. Mail template name. Default 'mail'. */ public function suggest_mail_tags( $template_name = 'mail' ) { $mail = wp_parse_args( $this->prop( $template_name ), array( 'active' => false, 'recipient' => '', 'sender' => '', 'subject' => '', 'body' => '', 'additional_headers' => '', 'attachments' => '', 'use_html' => false, 'exclude_blank' => false, ) ); $mail = array_filter( $mail ); foreach ( (array) $this->collect_mail_tags() as $mail_tag ) { $pattern = sprintf( '/\[(_[a-z]+_)?%s([ \t]+[^]]+)?\]/', preg_quote( $mail_tag, '/' ) ); $used = preg_grep( $pattern, $mail ); echo sprintf( '[%2$s]', 'mailtag code ' . ( $used ? 'used' : 'unused' ), esc_html( $mail_tag ) ); } } /** * Submits this contact form. * * @param string|array $options Optional. Submission options. Default empty. * @return array Result of submission. */ public function submit( $options = '' ) { $options = wp_parse_args( $options, array( 'skip_mail' => ( $this->in_demo_mode() || $this->is_true( 'skip_mail' ) || ! empty( $this->skip_mail ) ), ) ); if ( $this->is_true( 'subscribers_only' ) and ! current_user_can( 'wpcf7_submit', $this->id() ) ) { $result = array( 'contact_form_id' => $this->id(), 'status' => 'error', 'message' => __( "This contact form is available only for logged in users.", 'contact-form-7' ), ); return $result; } $submission = WPCF7_Submission::get_instance( $this, array( 'skip_mail' => $options['skip_mail'], ) ); $result = array( 'contact_form_id' => $this->id(), ); $result += $submission->get_result(); if ( $this->in_demo_mode() ) { $result['demo_mode'] = true; } do_action( 'wpcf7_submit', $this, $result ); return $result; } /** * Returns message used for given status. * * @param string $status Status. * @param bool $filter Optional. Whether filters are applied. Default true. * @return string Message. */ public function message( $status, $filter = true ) { $messages = $this->prop( 'messages' ); $message = isset( $messages[$status] ) ? $messages[$status] : ''; if ( $filter ) { $message = $this->filter_message( $message, $status ); } return $message; } /** * Filters a message. * * @param string $message Message to filter. * @param string $status Optional. Status. Default empty. * @return string Filtered message. */ public function filter_message( $message, $status = '' ) { $message = wpcf7_mail_replace_tags( $message ); $message = apply_filters( 'wpcf7_display_message', $message, $status ); $message = wp_strip_all_tags( $message ); return $message; } /** * Returns the additional setting value searched by name. * * @param string $name Name of setting. * @return string Additional setting value. */ public function pref( $name ) { $settings = $this->additional_setting( $name ); if ( $settings ) { return $settings[0]; } } /** * Returns additional setting values searched by name. * * @param string $name Name of setting. * @param int $max Maximum result item count. * @return array Additional setting values. */ public function additional_setting( $name, $max = 1 ) { $settings = (array) explode( "\n", $this->prop( 'additional_settings' ) ); $pattern = '/^([a-zA-Z0-9_]+)[\t ]*:(.*)$/'; $count = 0; $values = array(); foreach ( $settings as $setting ) { if ( preg_match( $pattern, $setting, $matches ) ) { if ( $matches[1] !== $name ) { continue; } if ( ! $max or $count < (int) $max ) { $values[] = trim( $matches[2] ); $count += 1; } } } return $values; } /** * Returns true if the specified setting has a truthy string value. * * @param string $name Name of setting. * @return bool True if the setting value is 'on', 'true', or '1'. */ public function is_true( $name ) { return in_array( $this->pref( $name ), array( 'on', 'true', '1' ), true ); } /** * Returns true if this contact form is in the demo mode. */ public function in_demo_mode() { return $this->is_true( 'demo_mode' ); } /** * Returns true if nonce is active for this contact form. */ public function nonce_is_active() { $is_active = WPCF7_VERIFY_NONCE; if ( $this->is_true( 'subscribers_only' ) ) { $is_active = true; } return (bool) apply_filters( 'wpcf7_verify_nonce', $is_active, $this ); } /** * Returns true if the specified setting has a falsey string value. * * @param string $name Name of setting. * @return bool True if the setting value is 'off', 'false', or '0'. */ public function is_false( $name ) { return in_array( $this->pref( $name ), array( 'off', 'false', '0' ), true ); } /** * Upgrades this contact form properties. */ private function upgrade() { $mail = $this->prop( 'mail' ); if ( is_array( $mail ) and ! isset( $mail['recipient'] ) ) { $mail['recipient'] = get_option( 'admin_email' ); } $this->properties['mail'] = $mail; $messages = $this->prop( 'messages' ); if ( is_array( $messages ) ) { foreach ( wpcf7_messages() as $key => $arr ) { if ( ! isset( $messages[$key] ) ) { $messages[$key] = $arr['default']; } } } $this->properties['messages'] = $messages; } /** * Stores this contact form properties to the database. * * @return int The post ID on success. The value 0 on failure. */ public function save() { $title = wp_slash( $this->title ); $props = wp_slash( $this->get_properties() ); $post_content = implode( "\n", wpcf7_array_flatten( $props ) ); if ( $this->initial() ) { $post_id = wp_insert_post( array( 'post_type' => self::post_type, 'post_status' => 'publish', 'post_title' => $title, 'post_content' => trim( $post_content ), ) ); } else { $post_id = wp_update_post( array( 'ID' => (int) $this->id, 'post_status' => 'publish', 'post_title' => $title, 'post_content' => trim( $post_content ), ) ); } if ( $post_id ) { foreach ( $props as $prop => $value ) { update_post_meta( $post_id, '_' . $prop, wpcf7_normalize_newline_deep( $value ) ); } if ( wpcf7_is_valid_locale( $this->locale ) ) { update_post_meta( $post_id, '_locale', $this->locale ); } add_post_meta( $post_id, '_hash', wpcf7_generate_contact_form_hash( $post_id ), true // Unique ); if ( $this->initial() ) { $this->id = $post_id; do_action( 'wpcf7_after_create', $this ); } else { do_action( 'wpcf7_after_update', $this ); } do_action( 'wpcf7_after_save', $this ); } return $post_id; } /** * Makes a copy of this contact form. * * @return WPCF7_ContactForm New contact form object. */ public function copy() { $new = new self(); $new->title = $this->title . '_copy'; $new->locale = $this->locale; $new->properties = $this->properties; return apply_filters( 'wpcf7_copy', $new, $this ); } /** * Deletes this contact form. * * @return bool True if deletion succeeded, false otherwise. */ public function delete() { if ( $this->initial() ) { return false; } if ( wp_delete_post( $this->id, true ) ) { $this->id = 0; return true; } return false; } /** * Returns a WordPress shortcode for this contact form. */ public function shortcode( $options = '' ) { $options = wp_parse_args( $options, array( 'use_old_format' => false ) ); $title = str_replace( array( '"', '[', ']' ), '', $this->title ); if ( $options['use_old_format'] ) { $old_unit_id = (int) get_post_meta( $this->id, '_old_cf7_unit_id', true ); if ( $old_unit_id ) { $shortcode = sprintf( '[contact-form %1$d "%2$s"]', $old_unit_id, $title ); } else { $shortcode = ''; } } else { $shortcode = sprintf( '[contact-form-7 id="%1$s" title="%2$s"]', $this->hash(), $title ); } return apply_filters( 'wpcf7_contact_form_shortcode', $shortcode, $options, $this ); } } PK)o#]( 55includes/form-tag.phpnu[ $value ) { if ( property_exists( __CLASS__, $key ) ) { $this->{$key} = $value; } } } } /** * Returns true if the type has a trailing asterisk. */ public function is_required() { return str_ends_with( $this->type, '*' ); } /** * Returns true if the form-tag has a specified option. */ public function has_option( $option_name ) { $pattern = sprintf( '/^%s(:.+)?$/i', preg_quote( $option_name, '/' ) ); return (bool) preg_grep( $pattern, $this->options ); } /** * Retrieves option values with the specified option name. * * @param string $option_name Option name. * @param string $pattern Optional. A regular expression pattern or one of * the keys of preset patterns. If specified, only options * whose value part matches this pattern will be returned. * @param bool $single Optional. If true, only the first matching option * will be returned. Default false. * @return string|array|bool The option value or an array of option values. * False if there is no option matches the pattern. */ public function get_option( $option_name, $pattern = '', $single = false ) { $preset_patterns = array( 'date' => '[0-9]{4}-[0-9]{2}-[0-9]{2}', 'int' => '[0-9]+', 'signed_int' => '[-]?[0-9]+', 'num' => '(?:[0-9]+|(?:[0-9]+)?[.][0-9]+)', 'signed_num' => '[-]?(?:[0-9]+|(?:[0-9]+)?[.][0-9]+)', 'class' => '[-0-9a-zA-Z_]+', 'id' => '[-0-9a-zA-Z_]+', ); if ( isset( $preset_patterns[$pattern] ) ) { $pattern = $preset_patterns[$pattern]; } if ( '' === $pattern ) { $pattern = '.+'; } $pattern = sprintf( '/^%s:%s$/i', preg_quote( $option_name, '/' ), $pattern ); if ( $single ) { $matches = $this->get_first_match_option( $pattern ); if ( ! $matches ) { return false; } return substr( $matches[0], strlen( $option_name ) + 1 ); } else { $matches_a = $this->get_all_match_options( $pattern ); if ( ! $matches_a ) { return false; } $results = array(); foreach ( $matches_a as $matches ) { $results[] = substr( $matches[0], strlen( $option_name ) + 1 ); } return $results; } } /** * Retrieves the id option value from the form-tag. */ public function get_id_option() { static $used = array(); $option = $this->get_option( 'id', 'id', true ); if ( ! $option or str_starts_with( $option, 'wpcf7' ) or in_array( $option, $used, true ) ) { return false; } $used[] = $option; return $option; } /** * Retrieves the class option value from the form-tag. * * @param string|array $default_classes Optional. Preset classes as an array * or a whitespace-separated list. Default empty string. * @return string|bool A whitespace-separated list of classes. * False if there is no class to return. */ public function get_class_option( $default_classes = '' ) { if ( is_string( $default_classes ) ) { $default_classes = explode( ' ', $default_classes ); } $options = array_merge( (array) $default_classes, (array) $this->get_option( 'class' ) ); $options = array_map( 'sanitize_html_class', $options ); $options = array_filter( array_unique( $options ) ); if ( empty( $options ) ) { return false; } return implode( ' ', $options ); } /** * Retrieves the size option value from the form-tag. * * @param string $default_value Optional default value. * @return string The option value. */ public function get_size_option( $default_value = false ) { $option = $this->get_option( 'size', 'int', true ); if ( $option ) { return $option; } $matches_a = $this->get_all_match_options( '%^([0-9]*)/[0-9]*$%' ); foreach ( $matches_a as $matches ) { if ( isset( $matches[1] ) and '' !== $matches[1] ) { return $matches[1]; } } return $default_value; } /** * Retrieves the maxlength option value from the form-tag. * * @param string $default_value Optional default value. * @return string The option value. */ public function get_maxlength_option( $default_value = false ) { $option = $this->get_option( 'maxlength', 'int', true ); if ( $option ) { return $option; } $matches_a = $this->get_all_match_options( '%^(?:[0-9]*x?[0-9]*)?/([0-9]+)$%' ); foreach ( $matches_a as $matches ) { if ( isset( $matches[1] ) and '' !== $matches[1] ) { return $matches[1]; } } return $default_value; } /** * Retrieves the minlength option value from the form-tag. * * @param string $default_value Optional default value. * @return string The option value. */ public function get_minlength_option( $default_value = false ) { $option = $this->get_option( 'minlength', 'int', true ); if ( $option ) { return $option; } else { return $default_value; } } /** * Retrieves the cols option value from the form-tag. * * @param string $default_value Optional default value. * @return string The option value. */ public function get_cols_option( $default_value = false ) { $option = $this->get_option( 'cols', 'int', true ); if ( $option ) { return $option; } $matches_a = $this->get_all_match_options( '%^([0-9]*)x([0-9]*)(?:/[0-9]+)?$%' ); foreach ( $matches_a as $matches ) { if ( isset( $matches[1] ) and '' !== $matches[1] ) { return $matches[1]; } } return $default_value; } /** * Retrieves the rows option value from the form-tag. * * @param string $default_value Optional default value. * @return string The option value. */ public function get_rows_option( $default_value = false ) { $option = $this->get_option( 'rows', 'int', true ); if ( $option ) { return $option; } $matches_a = $this->get_all_match_options( '%^([0-9]*)x([0-9]*)(?:/[0-9]+)?$%' ); foreach ( $matches_a as $matches ) { if ( isset( $matches[2] ) and '' !== $matches[2] ) { return $matches[2]; } } return $default_value; } /** * Retrieves a date-type option value from the form-tag. * * @param string $option_name A date-type option name, such as 'min' or 'max'. * @return string|bool The option value in YYYY-MM-DD format. False if the * option does not exist or the date value is invalid. */ public function get_date_option( $option_name ) { $option_value = $this->get_option( $option_name, '', true ); if ( empty( $option_value ) ) { return false; } $date = apply_filters( 'wpcf7_form_tag_date_option', null, array( $option_name => $option_value ) ); if ( $date ) { $date_pattern = '/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/'; if ( preg_match( $date_pattern, $date, $matches ) and checkdate( $matches[2], $matches[3], $matches[1] ) ) { return $date; } } else { $datetime_obj = date_create_immutable( preg_replace( '/[_]+/', ' ', $option_value ), wp_timezone() ); if ( $datetime_obj ) { return $datetime_obj->format( 'Y-m-d' ); } } return false; } /** * Retrieves the default option value from the form-tag. * * @param string|array $default_value Optional default value. * @param string|array $args Optional options for the option value retrieval. * @return string|array The option value. If the multiple option is enabled, * an array of option values. */ public function get_default_option( $default_value = '', $args = '' ) { $args = wp_parse_args( $args, array( 'multiple' => false, 'shifted' => false, ) ); $options = (array) $this->get_option( 'default' ); $values = array(); if ( empty( $options ) ) { return $args['multiple'] ? $values : $default_value; } foreach ( $options as $opt ) { $opt = sanitize_key( $opt ); if ( 'user_' === substr( $opt, 0, 5 ) and is_user_logged_in() ) { $primary_props = array( 'user_login', 'user_email', 'user_url' ); $opt = in_array( $opt, $primary_props, true ) ? $opt : substr( $opt, 5 ); $user = wp_get_current_user(); $user_prop = $user->get( $opt ); if ( ! empty( $user_prop ) ) { if ( $args['multiple'] ) { $values[] = $user_prop; } else { return $user_prop; } } } elseif ( 'post_meta' === $opt and in_the_loop() ) { if ( $args['multiple'] ) { $values = array_merge( $values, get_post_meta( get_the_ID(), $this->name ) ); } else { $val = (string) get_post_meta( get_the_ID(), $this->name, true ); if ( strlen( $val ) ) { return $val; } } } elseif ( 'get' === $opt and isset( $_GET[$this->name] ) ) { $vals = (array) $_GET[$this->name]; $vals = array_map( 'wpcf7_sanitize_query_var', $vals ); if ( $args['multiple'] ) { $values = array_merge( $values, $vals ); } else { $val = isset( $vals[0] ) ? (string) $vals[0] : ''; if ( strlen( $val ) ) { return $val; } } } elseif ( 'post' === $opt and isset( $_POST[$this->name] ) ) { $vals = (array) $_POST[$this->name]; $vals = array_map( 'wpcf7_sanitize_query_var', $vals ); if ( $args['multiple'] ) { $values = array_merge( $values, $vals ); } else { $val = isset( $vals[0] ) ? (string) $vals[0] : ''; if ( strlen( $val ) ) { return $val; } } } elseif ( 'shortcode_attr' === $opt ) { if ( $contact_form = WPCF7_ContactForm::get_current() ) { $val = $contact_form->shortcode_attr( $this->name ); if ( isset( $val ) and strlen( $val ) ) { if ( $args['multiple'] ) { $values[] = $val; } else { return $val; } } } } elseif ( preg_match( '/^[0-9_]+$/', $opt ) ) { $nums = explode( '_', $opt ); foreach ( $nums as $num ) { $num = absint( $num ); $num = $args['shifted'] ? $num : $num - 1; if ( isset( $this->values[$num] ) ) { if ( $args['multiple'] ) { $values[] = $this->values[$num]; } else { return $this->values[$num]; } } } } } if ( $args['multiple'] ) { $values = array_unique( $values ); return $values; } else { return $default_value; } } /** * Retrieves the data option value from the form-tag. * * @param string|array $args Optional options for the option value retrieval. * @return mixed The option value. */ public function get_data_option( $args = '' ) { $options = (array) $this->get_option( 'data' ); return apply_filters( 'wpcf7_form_tag_data_option', null, $options, $args ); } /** * Retrieves the limit option value from the form-tag. * * @param int $default_value Optional default value. Default 1048576. * @return int The option value. */ public function get_limit_option( $default_value = MB_IN_BYTES ) { $pattern = '/^limit:([1-9][0-9]*)([kKmM]?[bB])?$/'; $matches = $this->get_first_match_option( $pattern ); if ( $matches ) { $size = (int) $matches[1]; if ( ! empty( $matches[2] ) ) { $kbmb = strtolower( $matches[2] ); if ( 'kb' === $kbmb ) { $size *= KB_IN_BYTES; } elseif ( 'mb' === $kbmb ) { $size *= MB_IN_BYTES; } } return $size; } return (int) $default_value; } /** * Retrieves the value of the first option matches the given * regular expression pattern. * * @param string $pattern Regular expression pattern. * @return array|bool Option value as an array of matched strings. * False if there is no option matches the pattern. */ public function get_first_match_option( $pattern ) { foreach ( (array) $this->options as $option ) { if ( preg_match( $pattern, $option, $matches ) ) { return $matches; } } return false; } /** * Retrieves values of options that match the given * regular expression pattern. * * @param string $pattern Regular expression pattern. * @return array Array of arrays of strings that match the pattern. */ public function get_all_match_options( $pattern ) { $result = array(); foreach ( (array) $this->options as $option ) { if ( preg_match( $pattern, $option, $matches ) ) { $result[] = $matches; } } return $result; } /** * Assigns a value to the specified offset. * * @link https://www.php.net/manual/en/arrayaccess.offsetset.php */ #[ReturnTypeWillChange] public function offsetSet( $offset, $value ) { if ( property_exists( __CLASS__, $offset ) ) { $this->{$offset} = $value; } } /** * Returns the value at specified offset. * * @link https://www.php.net/manual/en/arrayaccess.offsetget.php */ #[ReturnTypeWillChange] public function offsetGet( $offset ) { if ( property_exists( __CLASS__, $offset ) ) { return $this->{$offset}; } return null; } /** * Returns true if the specified offset exists. * * @link https://www.php.net/manual/en/arrayaccess.offsetexists.php */ #[ReturnTypeWillChange] public function offsetExists( $offset ) { return property_exists( __CLASS__, $offset ); } /** * Unsets an offset. * * @link https://www.php.net/manual/en/arrayaccess.offsetunset.php */ #[ReturnTypeWillChange] public function offsetUnset( $offset ) { } } PK)o#] [0>0>includes/functions.phpnu[ $uploads['basedir'], 'url' => $uploads['baseurl'], ) ); if ( 'dir' === $type ) { return $uploads['dir']; } if ( 'url' === $type ) { return $uploads['url']; } return $uploads; } /** * Verifies that a correct security nonce was used with time limit. * * @param string $nonce Nonce value that was used for verification. * @param string $action Optional. Context to what is taking place. * Default 'wp_rest'. * @return int|bool 1 if the nonce is generated between 0-12 hours ago, * 2 if the nonce is generated between 12-24 hours ago. * False if the nonce is invalid. */ function wpcf7_verify_nonce( $nonce, $action = 'wp_rest' ) { return wp_verify_nonce( $nonce, $action ); } /** * Creates a cryptographic token tied to a specific action, user, user session, * and window of time. * * @param string $action Optional. Context to what is taking place. * Default 'wp_rest'. * @return string The token. */ function wpcf7_create_nonce( $action = 'wp_rest' ) { return wp_create_nonce( $action ); } /** * Converts multi-dimensional array to a flat array. * * @param mixed $input Array or item of array. * @return array Flatten array. */ function wpcf7_array_flatten( $input ) { if ( ! is_array( $input ) ) { return array( $input ); } $output = array(); foreach ( $input as $value ) { $output = array_merge( $output, wpcf7_array_flatten( $value ) ); } return $output; } /** * Excludes unset or blank text values from the given array. * * @param array $input The array. * @return array Array without blank text values. */ function wpcf7_exclude_blank( $input ) { $output = array_filter( $input, static function ( $i ) { return isset( $i ) && '' !== $i; } ); return array_values( $output ); } /** * Creates a comma-separated list from a multi-dimensional array. * * @param mixed $input Array or item of array. * @param string|array $options Optional. Output options. * @return string Comma-separated list. */ function wpcf7_flat_join( $input, $options = '' ) { $options = wp_parse_args( $options, array( 'separator' => ', ', ) ); $input = wpcf7_array_flatten( $input ); $output = array(); foreach ( $input as $value ) { if ( is_scalar( $value ) ) { $output[] = trim( (string) $value ); } } return implode( $options['separator'], $output ); } /** * Returns true if HTML5 is supported. */ function wpcf7_support_html5() { return (bool) wpcf7_apply_filters_deprecated( 'wpcf7_support_html5', array( true ), '5.6', '' ); } /** * Returns true if HTML5 fallback is active. */ function wpcf7_support_html5_fallback() { return (bool) apply_filters( 'wpcf7_support_html5_fallback', false ); } /** * Returns true if the Really Simple CAPTCHA plugin is used for contact forms. */ function wpcf7_use_really_simple_captcha() { return apply_filters( 'wpcf7_use_really_simple_captcha', WPCF7_USE_REALLY_SIMPLE_CAPTCHA ); } /** * Returns true if config validation is active. */ function wpcf7_validate_configuration() { return apply_filters( 'wpcf7_validate_configuration', WPCF7_VALIDATE_CONFIGURATION ); } /** * Returns true if wpcf7_autop() is applied. */ function wpcf7_autop_or_not( $options = '' ) { $options = wp_parse_args( $options, array( 'for' => 'form', ) ); return (bool) apply_filters( 'wpcf7_autop_or_not', WPCF7_AUTOP, $options ); } /** * Returns true if JavaScript for this plugin is loaded. */ function wpcf7_load_js() { return apply_filters( 'wpcf7_load_js', WPCF7_LOAD_JS ); } /** * Returns true if CSS for this plugin is loaded. */ function wpcf7_load_css() { return apply_filters( 'wpcf7_load_css', WPCF7_LOAD_CSS ); } /** * Builds an HTML anchor element. * * @param string $url Link URL. * @param string $anchor_text Anchor label text. * @param string|array $atts Optional. HTML attributes. * @return string Formatted anchor element. */ function wpcf7_link( $url, $anchor_text, $atts = '' ) { $atts = wp_parse_args( $atts, array( 'id' => null, 'class' => null, ) ); $atts = array_merge( $atts, array( 'href' => esc_url( $url ), ) ); return sprintf( '%2$s', wpcf7_format_atts( $atts ), esc_html( $anchor_text ) ); } /** * Returns the current request URL. */ function wpcf7_get_request_uri() { static $request_uri = ''; if ( empty( $request_uri ) ) { $request_uri = add_query_arg( array() ); $request_uri = '/' . ltrim( $request_uri, '/' ); } return sanitize_url( $request_uri ); } /** * Registers post types used for this plugin. */ function wpcf7_register_post_types() { if ( class_exists( 'WPCF7_ContactForm' ) ) { WPCF7_ContactForm::register_post_type(); return true; } else { return false; } } /** * Returns the version string of this plugin. * * @param string|array $options Optional. Output options. * @return string Version string. */ function wpcf7_version( $options = '' ) { $options = wp_parse_args( $options, array( 'limit' => -1, 'only_major' => false, ) ); if ( $options['only_major'] ) { $options['limit'] = 2; } $options['limit'] = (int) $options['limit']; $ver = WPCF7_VERSION; $ver = strtr( $ver, '_-+', '...' ); $ver = preg_replace( '/[^0-9.]+/', ".$0.", $ver ); $ver = preg_replace( '/[.]+/', ".", $ver ); $ver = trim( $ver, '.' ); $ver = explode( '.', $ver ); if ( -1 < $options['limit'] ) { $ver = array_slice( $ver, 0, $options['limit'] ); } $ver = implode( '.', $ver ); return $ver; } /** * Returns array entries that match the given version. * * @param string $version The version to search for. * @param array $input Search target array. * @return array|bool Array of matched entries. False on failure. */ function wpcf7_version_grep( $version, array $input ) { $pattern = '/^' . preg_quote( (string) $version, '/' ) . '(?:\.|$)/'; return preg_grep( $pattern, $input ); } /** * Returns an enctype attribute value. * * @param string $enctype Enctype value. * @return string Enctype value. Empty if not a valid enctype. */ function wpcf7_enctype_value( $enctype ) { $enctype = trim( $enctype ); if ( empty( $enctype ) ) { return ''; } $valid_enctypes = array( 'application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain', ); if ( in_array( $enctype, $valid_enctypes, true ) ) { return $enctype; } $pattern = '%^enctype="(' . implode( '|', $valid_enctypes ) . ')"$%'; if ( preg_match( $pattern, $enctype, $matches ) ) { return $matches[1]; // for back-compat } return ''; } /** * Removes directory recursively. * * @param string $dir Directory path. * @return bool True on success, false on failure. */ function wpcf7_rmdir_p( $dir ) { if ( is_file( $dir ) ) { $file = $dir; if ( @unlink( $file ) ) { return true; } $stat = stat( $file ); if ( @chmod( $file, $stat['mode'] | 0200 ) ) { // add write for owner if ( @unlink( $file ) ) { return true; } @chmod( $file, $stat['mode'] ); } return false; } if ( ! is_dir( $dir ) ) { return false; } if ( $handle = opendir( $dir ) ) { while ( false !== ( $file = readdir( $handle ) ) ) { if ( '.' === $file or '..' === $file ) { continue; } wpcf7_rmdir_p( path_join( $dir, $file ) ); } closedir( $handle ); } if ( false !== ( $files = scandir( $dir ) ) and ! array_diff( $files, array( '.', '..' ) ) ) { return rmdir( $dir ); } return false; } /** * Builds a URL-encoded query string. * * @link https://developer.wordpress.org/reference/functions/_http_build_query/ * * @param array $data URL query parameters. * @param string $key Optional. If specified, used to prefix key name. * @return string Query string. */ function wpcf7_build_query( $data, $key = '' ) { $sep = '&'; $ret = array(); foreach ( (array) $data as $k => $v ) { $k = urlencode( $k ); if ( ! empty( $key ) ) { $k = $key . '%5B' . $k . '%5D'; } if ( null === $v ) { continue; } elseif ( false === $v ) { $v = '0'; } if ( is_array( $v ) or is_object( $v ) ) { array_push( $ret, wpcf7_build_query( $v, $k ) ); } else { array_push( $ret, $k . '=' . urlencode( $v ) ); } } return implode( $sep, $ret ); } /** * Returns the number of code units in a string. * * @link http://www.w3.org/TR/html5/infrastructure.html#code-unit-length * * @param string $text Input string. * @return int|bool The number of code units, or false if * mb_convert_encoding is not available. */ function wpcf7_count_code_units( $text ) { static $use_mb = null; if ( is_null( $use_mb ) ) { $use_mb = function_exists( 'mb_convert_encoding' ); } if ( ! $use_mb ) { return false; } $text = (string) $text; $text = str_replace( "\r\n", "\n", $text ); $encoding = mb_detect_encoding( $text, mb_detect_order(), true ); if ( $encoding ) { $text = mb_convert_encoding( $text, 'UTF-16', $encoding ); } else { $text = mb_convert_encoding( $text, 'UTF-16', 'UTF-8' ); } $byte_count = mb_strlen( $text, '8bit' ); return floor( $byte_count / 2 ); } /** * Returns true if WordPress is running on the localhost. */ function wpcf7_is_localhost() { $sitename = wp_parse_url( network_home_url(), PHP_URL_HOST ); return in_array( strtolower( $sitename ), array( 'localhost', '127.0.0.1' ), true ); } /** * Marks a function as deprecated and informs when it has been used. * * @param string $function_name The function that was called. * @param string $version The version of Contact Form 7 that deprecated * the function. * @param string $replacement The function that should have been called. */ function wpcf7_deprecated_function( $function_name, $version, $replacement ) { if ( ! WP_DEBUG ) { return; } if ( function_exists( '__' ) ) { /* translators: 1: PHP function name, 2: version number, 3: alternative function name */ $message = __( 'Function %1$s is deprecated since Contact Form 7 version %2$s! Use %3$s instead.', 'contact-form-7' ); } else { $message = 'Function %1$s is deprecated since Contact Form 7 version %2$s! Use %3$s instead.'; } $message = sprintf( $message, $function_name, $version, $replacement ); wp_trigger_error( '', $message, E_USER_DEPRECATED ); } /** * Fires functions attached to a deprecated filter hook. * * @param string $hook_name The name of the filter hook. * @param array $args Array of additional function arguments to be * passed to apply_filters(). * @param string $version The version of Contact Form 7 that deprecated * the hook. * @param string $replacement The hook that should have been used. */ function wpcf7_apply_filters_deprecated( $hook_name, $args, $version, $replacement = '' ) { if ( ! has_filter( $hook_name ) ) { return $args[0]; } if ( WP_DEBUG and apply_filters( 'deprecated_hook_trigger_error', true ) ) { if ( $replacement ) { wp_trigger_error( '', sprintf( /* translators: 1: WordPress hook name, 2: version number, 3: alternative hook name */ __( 'Hook %1$s is deprecated since Contact Form 7 version %2$s! Use %3$s instead.', 'contact-form-7' ), $hook_name, $version, $replacement ), E_USER_DEPRECATED ); } else { wp_trigger_error( '', sprintf( /* translators: 1: WordPress hook name, 2: version number */ __( 'Hook %1$s is deprecated since Contact Form 7 version %2$s with no alternative available.', 'contact-form-7' ), $hook_name, $version ), E_USER_DEPRECATED ); } } return apply_filters_ref_array( $hook_name, $args ); } /** * Marks something as being incorrectly called. * * @param string $function_name The function that was called. * @param string $message A message explaining what has been done incorrectly. * @param string $version The version of Contact Form 7 where the message * was added. */ function wpcf7_doing_it_wrong( $function_name, $message, $version ) { if ( ! WP_DEBUG ) { return; } if ( function_exists( '__' ) ) { if ( $version ) { $version = sprintf( /* translators: %s: Contact Form 7 version number. */ __( '(This message was added in Contact Form 7 version %s.)', 'contact-form-7' ), $version ); } wp_trigger_error( '', sprintf( /* translators: Developer debugging message. 1: PHP function name, 2: Explanatory message, 3: Contact Form 7 version number. */ __( 'Function %1$s was called incorrectly. %2$s %3$s', 'contact-form-7' ), $function_name, $message, $version ), E_USER_NOTICE ); } else { if ( $version ) { $version = sprintf( '(This message was added in Contact Form 7 version %s.)', $version ); } wp_trigger_error( '', sprintf( 'Function %1$s was called incorrectly. %2$s %3$s', $function_name, $message, $version ), E_USER_NOTICE ); } } /** * Triggers an error about a remote HTTP request and response. * * @param string $url The resource URL. * @param array $request Request arguments. * @param array|WP_Error $response The response or WP_Error on failure. */ function wpcf7_log_remote_request( $url, $request, $response ) { if ( ! WP_DEBUG ) { return; } $log = sprintf( /* translators: 1: response code, 2: message, 3: body, 4: URL */ __( 'HTTP Response: %1$s %2$s %3$s from %4$s', 'contact-form-7' ), (int) wp_remote_retrieve_response_code( $response ), wp_remote_retrieve_response_message( $response ), wp_remote_retrieve_body( $response ), $url ); $log = apply_filters( 'wpcf7_log_remote_request', $log, $url, $request, $response ); if ( $log ) { wp_trigger_error( '', $log, E_USER_NOTICE ); } } /** * Anonymizes an IP address by masking local part. * * @param string $ip_addr The original IP address. * @return string|bool Anonymized IP address, or false on failure. */ function wpcf7_anonymize_ip_addr( $ip_addr ) { if ( ! function_exists( 'inet_ntop' ) or ! function_exists( 'inet_pton' ) ) { return $ip_addr; } $packed = inet_pton( $ip_addr ); if ( false === $packed ) { return $ip_addr; } if ( 4 === strlen( $packed ) ) { // IPv4 $mask = '255.255.255.0'; } elseif ( 16 === strlen( $packed ) ) { // IPv6 $mask = 'ffff:ffff:ffff:0000:0000:0000:0000:0000'; } else { return $ip_addr; } return inet_ntop( $packed & inet_pton( $mask ) ); } PK)o#]ȿ66includes/formatting.phpnu[/is', static function ( $matches ) use ( &$placeholders ) { $placeholder = sprintf( '<%1$s id="%2$s" />', WPCF7_HTMLFormatter::placeholder_inline, sha1( $matches[0] ) ); list( $placeholder ) = WPCF7_HTMLFormatter::normalize_start_tag( $placeholder ); $placeholders[$placeholder] = $matches[0]; return $placeholder; }, $input ); $formatter = new WPCF7_HTMLFormatter( array( 'auto_br' => $br, ) ); $chunks = $formatter->separate_into_chunks( $input ); $output = $formatter->format( $chunks ); // Restore from placeholders. $output = str_replace( array_keys( $placeholders ), array_values( $placeholders ), $output ); return $output; } /** * Newline preservation help function for wpcf7_autop(). * * @deprecated 5.7 Unnecessary to use any more. * * @param array $matches preg_replace_callback() matches array. * @return string Text including newline placeholders. */ function wpcf7_autop_preserve_newline_callback( $matches ) { return str_replace( "\n", '', $matches[0] ); } /** * Sanitizes the query variables. * * @param string $text Query variable. * @return string Text sanitized. */ function wpcf7_sanitize_query_var( $text ) { $text = wp_unslash( $text ); $text = wp_check_invalid_utf8( $text ); if ( false !== strpos( $text, '<' ) ) { $text = wp_pre_kses_less_than( $text ); $text = wp_strip_all_tags( $text ); } $text = preg_replace( '/%[a-f0-9]{2}/i', '', $text ); $text = preg_replace( '/ +/', ' ', $text ); $text = trim( $text, ' ' ); return $text; } /** * Strips quote characters surrounding the input. * * @param string $text Input text. * @return string Processed output. */ function wpcf7_strip_quote( $text ) { $text = trim( $text ); if ( preg_match( '/^"(.*)"$/s', $text, $matches ) ) { $text = $matches[1]; } elseif ( preg_match( "/^'(.*)'$/s", $text, $matches ) ) { $text = $matches[1]; } return $text; } /** * Navigates through an array, object, or scalar, and * strips quote characters surrounding the each value. * * @param mixed $input The array or string to be processed. * @return mixed Processed value. */ function wpcf7_strip_quote_deep( $input ) { if ( is_string( $input ) ) { return wpcf7_strip_quote( $input ); } if ( is_array( $input ) ) { $result = array(); foreach ( $input as $key => $text ) { $result[$key] = wpcf7_strip_quote_deep( $text ); } return $result; } } /** * Normalizes newline characters. * * @param string $text Input text. * @param string $to Optional. The newline character that is used in the output. * @return string Normalized text. */ function wpcf7_normalize_newline( $text, $to = "\n" ) { if ( ! is_string( $text ) ) { return $text; } $nls = array( "\r\n", "\r", "\n" ); if ( ! in_array( $to, $nls, true ) ) { return $text; } return str_replace( $nls, $to, $text ); } /** * Navigates through an array, object, or scalar, and * normalizes newline characters in the each value. * * @param mixed $input The array or string to be processed. * @param string $to Optional. The newline character that is used in the output. * @return mixed Processed value. */ function wpcf7_normalize_newline_deep( $input, $to = "\n" ) { if ( is_array( $input ) ) { $result = array(); foreach ( $input as $key => $text ) { $result[$key] = wpcf7_normalize_newline_deep( $text, $to ); } return $result; } return wpcf7_normalize_newline( $input, $to ); } /** * Strips newline characters. * * @param string $text Input text. * @return string Processed one-line text. */ function wpcf7_strip_newline( $text ) { $text = (string) $text; $text = str_replace( array( "\r", "\n" ), '', $text ); return trim( $text ); } /** * Canonicalizes text. * * @param string $text Input text. * @param string|array|object $options Options. * @return string Canonicalized text. */ function wpcf7_canonicalize( $text, $options = '' ) { // for back-compat if ( is_string( $options ) and '' !== $options and false === strpos( $options, '=' ) ) { $options = array( 'strto' => $options, ); } $options = wp_parse_args( $options, array( 'strto' => 'lower', 'strip_separators' => false, ) ); static $charset = null; if ( ! isset( $charset ) ) { $charset = get_option( 'blog_charset' ); $is_utf8 = in_array( $charset, array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ), true ); if ( $is_utf8 ) { $charset = 'UTF-8'; } } $text = html_entity_decode( $text, ENT_QUOTES | ENT_HTML5, $charset ); if ( function_exists( 'mb_convert_kana' ) ) { $text = mb_convert_kana( $text, 'asKV', $charset ); } if ( $options['strip_separators'] ) { $text = preg_replace( '/[\r\n\t ]+/', '', $text ); } else { $text = preg_replace( '/[\r\n\t ]+/', ' ', $text ); } if ( 'lower' === $options['strto'] ) { if ( function_exists( 'mb_strtolower' ) ) { $text = mb_strtolower( $text, $charset ); } else { $text = strtolower( $text ); } } elseif ( 'upper' === $options['strto'] ) { if ( function_exists( 'mb_strtoupper' ) ) { $text = mb_strtoupper( $text, $charset ); } else { $text = strtoupper( $text ); } } $text = trim( $text ); return $text; } /** * Returns a canonical keyword usable for a name or an ID purposes. */ function wpcf7_canonicalize_name( $text ) { return preg_replace( '/[^0-9a-z]+/i', '-', $text ); } /** * Sanitizes Contact Form 7's form unit-tag. * * @param string $tag Unit-tag. * @return string Sanitized unit-tag. */ function wpcf7_sanitize_unit_tag( $tag ) { $tag = preg_replace( '/[^A-Za-z0-9_-]/', '', (string) $tag ); return $tag; } /** * Converts a file name to one that is not executable as a script. * * @param string $filename File name. * @return string Converted file name. */ function wpcf7_antiscript_file_name( $filename ) { $filename = wp_basename( $filename ); // Apply part of protection logic from sanitize_file_name(). $filename = str_replace( array( '?', '[', ']', '/', '\\', '=', '<', '>', ':', ';', ',', "'", '"', '&', '$', '#', '*', '(', ')', '|', '~', '`', '!', '{', '}', '%', '+', '’', '«', '»', '”', '“', chr( 0 ) ), '', $filename ); $filename = preg_replace( '/[\r\n\t -]+/', '-', $filename ); $filename = preg_replace( '/[\pC\pZ]+/iu', '', $filename ); $parts = explode( '.', $filename ); if ( count( $parts ) < 2 ) { return $filename; } $script_pattern = '/^(php|phtml|pl|py|rb|cgi|asp|aspx)\d?$/i'; $filename = array_shift( $parts ); $extension = array_pop( $parts ); foreach ( $parts as $part ) { if ( preg_match( $script_pattern, $part ) ) { $filename .= '.' . $part . '_'; } else { $filename .= '.' . $part; } } if ( preg_match( $script_pattern, $extension ) ) { $filename .= '.' . $extension . '_.txt'; } else { $filename .= '.' . $extension; } return $filename; } /** * Masks a password with asterisks (*). * * @param int $right Length of right-hand unmasked text. Default 0. * @param int $left Length of left-hand unmasked text. Default 0. * @return string Text of masked password. */ function wpcf7_mask_password( $text, $right = 0, $left = 0 ) { $length = strlen( $text ); $right = absint( $right ); $left = absint( $left ); if ( $length < $right + $left ) { $right = $left = 0; } if ( $length <= 48 ) { $masked = str_repeat( '*', $length - ( $right + $left ) ); } elseif ( $right + $left < 48 ) { $masked = str_repeat( '*', 48 - ( $right + $left ) ); } else { $masked = '****'; } $left_unmasked = $left ? substr( $text, 0, $left ) : ''; $right_unmasked = $right ? substr( $text, -1 * $right ) : ''; $text = $left_unmasked . $masked . $right_unmasked; return $text; } /** * Returns an array of allowed HTML tags and attributes for a given context. * * @param string $context Context used to decide allowed tags and attributes. * @return array Array of allowed HTML tags and their allowed attributes. */ function wpcf7_kses_allowed_html( $context = 'form' ) { static $allowed_tags = array(); if ( isset( $allowed_tags[$context] ) ) { return apply_filters( 'wpcf7_kses_allowed_html', $allowed_tags[$context], $context ); } $allowed_tags[$context] = wp_kses_allowed_html( 'post' ); if ( 'form' === $context ) { $additional_tags_for_form = array( 'button' => array( 'disabled' => true, 'name' => true, 'type' => true, 'value' => true, ), 'datalist' => array(), 'fieldset' => array( 'disabled' => true, 'name' => true, ), 'input' => array( 'accept' => true, 'alt' => true, 'capture' => true, 'checked' => true, 'disabled' => true, 'list' => true, 'max' => true, 'maxlength' => true, 'min' => true, 'minlength' => true, 'multiple' => true, 'name' => true, 'placeholder' => true, 'readonly' => true, 'size' => true, 'step' => true, 'type' => true, 'value' => true, ), 'label' => array( 'for' => true, ), 'legend' => array(), 'meter' => array( 'value' => true, 'min' => true, 'max' => true, 'low' => true, 'high' => true, 'optimum' => true, ), 'optgroup' => array( 'disabled' => true, 'label' => true, ), 'option' => array( 'disabled' => true, 'label' => true, 'selected' => true, 'value' => true, ), 'output' => array( 'for' => true, 'name' => true, ), 'progress' => array( 'max' => true, 'value' => true, ), 'select' => array( 'disabled' => true, 'multiple' => true, 'name' => true, 'size' => true, ), 'textarea' => array( 'cols' => true, 'disabled' => true, 'maxlength' => true, 'minlength' => true, 'name' => true, 'placeholder' => true, 'readonly' => true, 'rows' => true, 'spellcheck' => true, 'wrap' => true, ), ); $additional_tags_for_form = array_map( static function ( $elm ) { $global_attributes = array( 'aria-atomic' => true, 'aria-checked' => true, 'aria-describedby' => true, 'aria-details' => true, 'aria-disabled' => true, 'aria-hidden' => true, 'aria-invalid' => true, 'aria-label' => true, 'aria-labelledby' => true, 'aria-live' => true, 'aria-relevant' => true, 'aria-required' => true, 'aria-selected' => true, 'class' => true, 'data-*' => true, 'id' => true, 'inputmode' => true, 'role' => true, 'style' => true, 'tabindex' => true, 'title' => true, ); return array_merge( $global_attributes, (array) $elm ); }, $additional_tags_for_form ); $allowed_tags[$context] = array_merge( $allowed_tags[$context], $additional_tags_for_form ); } return apply_filters( 'wpcf7_kses_allowed_html', $allowed_tags[$context], $context ); } /** * Sanitizes content for allowed HTML tags for the specified context. * * @param string $input Content to filter. * @param string $context Context used to decide allowed tags and attributes. * @return string Filtered text with allowed HTML tags and attributes intact. */ function wpcf7_kses( $input, $context = 'form' ) { $output = wp_kses( $input, wpcf7_kses_allowed_html( $context ) ); return $output; } /** * Returns a formatted string of HTML attributes. * * @param array $atts Associative array of attribute name and value pairs. * @return string Formatted HTML attributes. */ function wpcf7_format_atts( $atts ) { $atts_filtered = array(); foreach ( $atts as $name => $value ) { $name = strtolower( trim( $name ) ); if ( ! preg_match( '/^[a-z_:][a-z_:.0-9-]*$/', $name ) ) { continue; } static $boolean_attributes = array( 'checked', 'disabled', 'inert', 'multiple', 'readonly', 'required', 'selected', ); if ( in_array( $name, $boolean_attributes, true ) and '' === $value ) { $value = false; } if ( is_numeric( $value ) ) { $value = (string) $value; } if ( null === $value or false === $value ) { unset( $atts_filtered[$name] ); } elseif ( true === $value ) { $atts_filtered[$name] = $name; // boolean attribute } elseif ( is_string( $value ) ) { $atts_filtered[$name] = trim( $value ); } } $output = ''; foreach ( $atts_filtered as $name => $value ) { $output .= sprintf( ' %1$s="%2$s"', $name, esc_attr( $value ) ); } return trim( $output ); } /** * Strips surrounding whitespaces. * * @link https://contactform7.com/2024/07/13/consistent-handling-policy-of-surrounding-whitespaces/ * * @param string|array $input Input text. * @return string|array Output text. */ function wpcf7_strip_whitespaces( $input ) { if ( is_array( $input ) ) { return array_map( 'wpcf7_strip_whitespaces', $input ); } // https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt // https://tc39.es/ecma262/multipage/ecmascript-language-lexical-grammar.html $whitespaces = '\x09-\x0D\x20\x85\xA0\x{1680}\x{2000}-\x{200A}\x{2028}\x{2029}\x{202F}\x{205F}\x{3000}\x{FEFF}'; // Strip leading whitespaces $input = preg_replace( sprintf( '/^[%s]+/u', $whitespaces ), '', $input ); // Strip trailing whitespaces $input = preg_replace( sprintf( '/[%s]+$/u', $whitespaces ), '', $input ); return $input; } PK)o#]5 includes/validation.phpnu[container = array( 'valid' => true, 'reason' => array(), 'idref' => array(), ); } /** * Marks a form control as an invalid field. * * @param WPCF7_FormTag|array|string $context Context representing the * target field. * @param WP_Error|string $error The error of the field. */ public function invalidate( $context, $error ) { if ( $context instanceof WPCF7_FormTag ) { $tag = $context; } elseif ( is_array( $context ) ) { $tag = new WPCF7_FormTag( $context ); } elseif ( is_string( $context ) ) { $tags = wpcf7_scan_form_tags( array( 'name' => trim( $context ) ) ); $tag = $tags ? new WPCF7_FormTag( $tags[0] ) : null; } $name = ! empty( $tag ) ? $tag->name : null; if ( empty( $name ) or ! wpcf7_is_name( $name ) ) { return; } if ( is_wp_error( $error ) ) { $message = $error->get_error_message(); } else { $message = $error; } if ( $this->is_valid( $name ) ) { $id = (string) $tag->get_option( 'id', 'id', true ); if ( ! wpcf7_is_name( $id ) or str_starts_with( $id, 'wpcf7' ) ) { $id = null; } $this->invalid_fields[$name] = array( 'reason' => (string) $message, 'idref' => $id, ); } } /** * Returns true if the target field is valid. * * @param string|null $name Optional. If specified, this is the name of * the target field. Default null. * @return bool True if the target field has no error. If no target is * specified, returns true if all fields are valid. * Otherwise false. */ public function is_valid( $name = null ) { if ( ! empty( $name ) ) { return ! isset( $this->invalid_fields[$name] ); } else { return empty( $this->invalid_fields ); } } /** * Retrieves an associative array of invalid fields. * * @return array The associative array of invalid fields. */ public function get_invalid_fields() { return $this->invalid_fields; } /** * Assigns a value to the specified offset. * * @link https://www.php.net/manual/en/arrayaccess.offsetset.php */ #[ReturnTypeWillChange] public function offsetSet( $offset, $value ) { if ( isset( $this->container[$offset] ) ) { $this->container[$offset] = $value; } if ( 'reason' === $offset and is_array( $value ) ) { foreach ( $value as $k => $v ) { $this->invalidate( $k, $v ); } } } /** * Returns the value at specified offset. * * @link https://www.php.net/manual/en/arrayaccess.offsetget.php */ #[ReturnTypeWillChange] public function offsetGet( $offset ) { if ( isset( $this->container[$offset] ) ) { return $this->container[$offset]; } } /** * Returns true if the specified offset exists. * * @link https://www.php.net/manual/en/arrayaccess.offsetexists.php */ #[ReturnTypeWillChange] public function offsetExists( $offset ) { return isset( $this->container[$offset] ); } /** * Unsets an offset. * * @link https://www.php.net/manual/en/arrayaccess.offsetunset.php */ #[ReturnTypeWillChange] public function offsetUnset( $offset ) { } } PK)o#]@EEincludes/pocket-holder.phpnu[pocket[$key] ) ) { return $this->pocket[$key]; } } public function push( $key, $value ) { $this->pocket[$key] = $value; } } PK)o#]"n33includes/rest-api.phpnu[register_routes(); }, 10, 0 ); class WPCF7_REST_Controller { const route_namespace = 'contact-form-7/v1'; public function register_routes() { register_rest_route( self::route_namespace, '/contact-forms', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_contact_forms' ), 'permission_callback' => static function () { if ( current_user_can( 'wpcf7_read_contact_forms' ) ) { return true; } else { return new WP_Error( 'wpcf7_forbidden', __( "You are not allowed to access contact forms.", 'contact-form-7' ), array( 'status' => 403 ) ); } }, ), array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'create_contact_form' ), 'permission_callback' => static function () { if ( current_user_can( 'wpcf7_edit_contact_forms' ) ) { return true; } else { return new WP_Error( 'wpcf7_forbidden', __( "You are not allowed to create a contact form.", 'contact-form-7' ), array( 'status' => 403 ) ); } }, ), ) ); register_rest_route( self::route_namespace, '/contact-forms/(?P\d+)', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_contact_form' ), 'permission_callback' => static function ( WP_REST_Request $request ) { $id = (int) $request->get_param( 'id' ); if ( current_user_can( 'wpcf7_edit_contact_form', $id ) ) { return true; } else { return new WP_Error( 'wpcf7_forbidden', __( "You are not allowed to access the requested contact form.", 'contact-form-7' ), array( 'status' => 403 ) ); } }, ), array( 'methods' => WP_REST_Server::EDITABLE, 'callback' => array( $this, 'update_contact_form' ), 'permission_callback' => static function ( WP_REST_Request $request ) { $id = (int) $request->get_param( 'id' ); if ( current_user_can( 'wpcf7_edit_contact_form', $id ) ) { return true; } else { return new WP_Error( 'wpcf7_forbidden', __( "You are not allowed to access the requested contact form.", 'contact-form-7' ), array( 'status' => 403 ) ); } }, ), array( 'methods' => WP_REST_Server::DELETABLE, 'callback' => array( $this, 'delete_contact_form' ), 'permission_callback' => static function ( WP_REST_Request $request ) { $id = (int) $request->get_param( 'id' ); if ( current_user_can( 'wpcf7_delete_contact_form', $id ) ) { return true; } else { return new WP_Error( 'wpcf7_forbidden', __( "You are not allowed to access the requested contact form.", 'contact-form-7' ), array( 'status' => 403 ) ); } }, ), ) ); register_rest_route( self::route_namespace, '/contact-forms/(?P\d+)/feedback', array( array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'create_feedback' ), 'permission_callback' => '__return_true', ), ) ); register_rest_route( self::route_namespace, '/contact-forms/(?P\d+)/feedback/schema', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_schema' ), 'permission_callback' => '__return_true', ), 'schema' => 'wpcf7_swv_get_meta_schema', ) ); register_rest_route( self::route_namespace, '/contact-forms/(?P\d+)/refill', array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_refill' ), 'permission_callback' => '__return_true', ), ) ); } public function get_contact_forms( WP_REST_Request $request ) { $args = array(); $per_page = $request->get_param( 'per_page' ); if ( null !== $per_page ) { $args['posts_per_page'] = (int) $per_page; } $offset = $request->get_param( 'offset' ); if ( null !== $offset ) { $args['offset'] = (int) $offset; } $order = $request->get_param( 'order' ); if ( null !== $order ) { $args['order'] = (string) $order; } $orderby = $request->get_param( 'orderby' ); if ( null !== $orderby ) { $args['orderby'] = (string) $orderby; } $search = $request->get_param( 'search' ); if ( null !== $search ) { $args['s'] = (string) $search; } $items = WPCF7_ContactForm::find( $args ); $response = array(); foreach ( $items as $item ) { $response[] = array( 'id' => $item->id(), 'hash' => $item->hash(), 'slug' => $item->name(), 'title' => $item->title(), 'locale' => $item->locale(), ); } return rest_ensure_response( $response ); } public function create_contact_form( WP_REST_Request $request ) { $id = (int) $request->get_param( 'id' ); if ( $id ) { return new WP_Error( 'wpcf7_post_exists', __( "Cannot create existing contact form.", 'contact-form-7' ), array( 'status' => 400 ) ); } $args = $request->get_params(); $args['id'] = -1; // Create $context = $request->get_param( 'context' ); $item = wpcf7_save_contact_form( $args, $context ); if ( ! $item ) { return new WP_Error( 'wpcf7_cannot_save', __( "There was an error saving the contact form.", 'contact-form-7' ), array( 'status' => 500 ) ); } $response = array( 'id' => $item->id(), 'slug' => $item->name(), 'title' => $item->title(), 'locale' => $item->locale(), 'properties' => $this->get_properties( $item ), 'config_errors' => array(), ); if ( wpcf7_validate_configuration() ) { $config_validator = new WPCF7_ConfigValidator( $item ); $config_validator->validate(); $response['config_errors'] = $config_validator->collect_error_messages(); if ( 'save' === $context ) { $config_validator->save(); } } return rest_ensure_response( $response ); } public function get_contact_form( WP_REST_Request $request ) { $id = (int) $request->get_param( 'id' ); $item = wpcf7_contact_form( $id ); if ( ! $item ) { return new WP_Error( 'wpcf7_not_found', __( "The requested contact form was not found.", 'contact-form-7' ), array( 'status' => 404 ) ); } $response = array( 'id' => $item->id(), 'slug' => $item->name(), 'title' => $item->title(), 'locale' => $item->locale(), 'properties' => $this->get_properties( $item ), ); return rest_ensure_response( $response ); } public function update_contact_form( WP_REST_Request $request ) { $id = (int) $request->get_param( 'id' ); $item = wpcf7_contact_form( $id ); if ( ! $item ) { return new WP_Error( 'wpcf7_not_found', __( "The requested contact form was not found.", 'contact-form-7' ), array( 'status' => 404 ) ); } $args = $request->get_params(); $context = $request->get_param( 'context' ); $item = wpcf7_save_contact_form( $args, $context ); if ( ! $item ) { return new WP_Error( 'wpcf7_cannot_save', __( "There was an error saving the contact form.", 'contact-form-7' ), array( 'status' => 500 ) ); } $response = array( 'id' => $item->id(), 'slug' => $item->name(), 'title' => $item->title(), 'locale' => $item->locale(), 'properties' => $this->get_properties( $item ), 'config_errors' => array(), ); if ( wpcf7_validate_configuration() ) { $config_validator = new WPCF7_ConfigValidator( $item ); $config_validator->validate(); $response['config_errors'] = $config_validator->collect_error_messages(); if ( 'save' === $context ) { $config_validator->save(); } } return rest_ensure_response( $response ); } public function delete_contact_form( WP_REST_Request $request ) { $id = (int) $request->get_param( 'id' ); $item = wpcf7_contact_form( $id ); if ( ! $item ) { return new WP_Error( 'wpcf7_not_found', __( "The requested contact form was not found.", 'contact-form-7' ), array( 'status' => 404 ) ); } $result = $item->delete(); if ( ! $result ) { return new WP_Error( 'wpcf7_cannot_delete', __( "There was an error deleting the contact form.", 'contact-form-7' ), array( 'status' => 500 ) ); } $response = array( 'deleted' => true ); return rest_ensure_response( $response ); } public function create_feedback( WP_REST_Request $request ) { $content_type = $request->get_header( 'Content-Type' ) ?? ''; if ( ! str_starts_with( $content_type, 'multipart/form-data' ) ) { return new WP_Error( 'wpcf7_unsupported_media_type', __( "The request payload format is not supported.", 'contact-form-7' ), array( 'status' => 415 ) ); } $url_params = $request->get_url_params(); $item = null; if ( ! empty( $url_params['id'] ) ) { $item = wpcf7_contact_form( $url_params['id'] ); } if ( ! $item ) { return new WP_Error( 'wpcf7_not_found', __( "The requested contact form was not found.", 'contact-form-7' ), array( 'status' => 404 ) ); } $unit_tag = wpcf7_sanitize_unit_tag( $request->get_param( '_wpcf7_unit_tag' ) ); if ( empty( $unit_tag ) ) { return new WP_Error( 'wpcf7_unit_tag_not_found', __( "There is no valid unit tag.", 'contact-form-7' ), array( 'status' => 400 ) ); } $result = $item->submit(); $response = array_merge( $result, array( 'into' => sprintf( '#%s', $unit_tag ), 'invalid_fields' => array(), ) ); if ( ! empty( $result['invalid_fields'] ) ) { $invalid_fields = array(); foreach ( (array) $result['invalid_fields'] as $name => $field ) { if ( ! wpcf7_is_name( $name ) ) { continue; } $name = strtr( $name, '.', '_' ); $invalid_fields[] = array( 'field' => $name, 'message' => $field['reason'], 'idref' => $field['idref'], 'error_id' => sprintf( '%1$s-ve-%2$s', $unit_tag, $name ), ); } $response['invalid_fields'] = $invalid_fields; } $response = wpcf7_apply_filters_deprecated( 'wpcf7_ajax_json_echo', array( $response, $result ), '5.2', 'wpcf7_feedback_response' ); $response = apply_filters( 'wpcf7_feedback_response', $response, $result ); return rest_ensure_response( $response ); } public function get_schema( WP_REST_Request $request ) { $url_params = $request->get_url_params(); $item = null; if ( ! empty( $url_params['id'] ) ) { $item = wpcf7_contact_form( $url_params['id'] ); } if ( ! $item ) { return new WP_Error( 'wpcf7_not_found', __( "The requested contact form was not found.", 'contact-form-7' ), array( 'status' => 404 ) ); } $schema = $item->get_schema(); $response = isset( $schema ) ? $schema->to_array() : array(); return rest_ensure_response( $response ); } public function get_refill( WP_REST_Request $request ) { $id = (int) $request->get_param( 'id' ); $item = wpcf7_contact_form( $id ); if ( ! $item ) { return new WP_Error( 'wpcf7_not_found', __( "The requested contact form was not found.", 'contact-form-7' ), array( 'status' => 404 ) ); } $response = wpcf7_apply_filters_deprecated( 'wpcf7_ajax_onload', array( array() ), '5.2', 'wpcf7_refill_response' ); $response = apply_filters( 'wpcf7_refill_response', array() ); return rest_ensure_response( $response ); } private function get_properties( WPCF7_ContactForm $contact_form ) { $properties = $contact_form->get_properties(); $properties['form'] = array( 'content' => (string) $properties['form'], 'fields' => array_map( static function ( WPCF7_FormTag $form_tag ) { return array( 'type' => $form_tag->type, 'basetype' => $form_tag->basetype, 'name' => $form_tag->name, 'options' => $form_tag->options, 'raw_values' => $form_tag->raw_values, 'labels' => $form_tag->labels, 'values' => $form_tag->values, 'pipes' => $form_tag->pipes instanceof WPCF7_Pipes ? $form_tag->pipes->to_array() : $form_tag->pipes, 'content' => $form_tag->content, ); }, $contact_form->scan_form_tags() ), ); $properties['additional_settings'] = array( 'content' => (string) $properties['additional_settings'], 'settings' => array_filter( array_map( static function ( $setting ) { $pattern = '/^([a-zA-Z0-9_]+)[\t ]*:(.*)$/'; if ( preg_match( $pattern, $setting, $matches ) ) { $name = trim( $matches[1] ); $value = trim( $matches[2] ); if ( in_array( $value, array( 'on', 'true' ), true ) ) { $value = true; } elseif ( in_array( $value, array( 'off', 'false' ), true ) ) { $value = false; } return array( $name, $value ); } return false; }, explode( "\n", $properties['additional_settings'] ) ) ), ); return $properties; } private function get_argument_schema() { return array( 'id' => array( 'description' => __( "Unique identifier for the contact form.", 'contact-form-7' ), 'type' => 'integer', 'required' => true, ), ); } } PK)o#])V=Q=Qincludes/submission.phpnu[proceed(); return self::$instance; } else { return null; } } else { if ( empty( self::$instance ) ) { return null; } else { return self::$instance; } } } /** * Returns true if this submission is created via WP REST API. */ public static function is_restful() { return wp_is_serving_rest_request(); } /** * Constructor. */ private function __construct( WPCF7_ContactForm $contact_form, $options = '' ) { $options = wp_parse_args( $options, array( 'skip_mail' => false, ) ); $this->contact_form = $contact_form; $this->skip_mail = (bool) $options['skip_mail']; } /** * Destructor. */ public function __destruct() { $this->remove_uploaded_files(); } /** * The main logic of submission. */ private function proceed() { $callback = function () { $contact_form = $this->contact_form; $this->setup_meta_data(); $this->setup_posted_data(); if ( $this->is( 'init' ) and ! $this->validate() ) { $this->set_status( 'validation_failed' ); $this->set_response( $contact_form->message( 'validation_error' ) ); } if ( $this->is( 'init' ) and ! $this->accepted() ) { $this->set_status( 'acceptance_missing' ); $this->set_response( $contact_form->message( 'accept_terms' ) ); } if ( $this->is( 'init' ) and $this->spam() ) { $this->set_status( 'spam' ); $this->set_response( $contact_form->message( 'spam' ) ); } if ( $this->is( 'init' ) and ! $this->unship_uploaded_files() ) { $this->set_status( 'validation_failed' ); $this->set_response( $contact_form->message( 'validation_error' ) ); } if ( $this->is( 'init' ) ) { $abort = ! $this->before_send_mail(); if ( $abort ) { if ( $this->is( 'init' ) ) { $this->set_status( 'aborted' ); } if ( '' === $this->get_response() ) { $this->set_response( $contact_form->filter_message( __( "Sending mail has been aborted.", 'contact-form-7' ) ) ); } } elseif ( $this->mail() ) { $this->set_status( 'mail_sent' ); $this->set_response( $contact_form->message( 'mail_sent_ok' ) ); do_action( 'wpcf7_mail_sent', $contact_form ); } else { $this->set_status( 'mail_failed' ); $this->set_response( $contact_form->message( 'mail_sent_ng' ) ); do_action( 'wpcf7_mail_failed', $contact_form ); } } }; wpcf7_switch_locale( $this->contact_form->locale(), $callback ); } /** * Returns the current status property. */ public function get_status() { return $this->status; } /** * Sets the status property. * * @param string $status The status. */ public function set_status( $status ) { if ( preg_match( '/^[a-z][0-9a-z_]+$/', $status ) ) { $this->status = $status; return true; } return false; } /** * Returns true if the specified status is identical to the current * status property. * * @param string $status The status to compare. */ public function is( $status ) { return $this->status === $status; } /** * Returns an associative array of submission result properties. * * @return array Submission result properties. */ public function get_result() { $result = array_merge( $this->result_props, array( 'status' => $this->get_status(), 'message' => $this->get_response(), ) ); if ( $this->is( 'validation_failed' ) ) { $result['invalid_fields'] = $this->get_invalid_fields(); } switch ( $this->get_status() ) { case 'init': case 'validation_failed': case 'acceptance_missing': case 'spam': $result['posted_data_hash'] = ''; break; default: $result['posted_data_hash'] = $this->get_posted_data_hash(); break; } $result = apply_filters( 'wpcf7_submission_result', $result, $this ); return $result; } /** * Adds items to the array of submission result properties. * * @param string|array|object $data Value to add to result properties. * @return array Added result properties. */ public function add_result_props( $data = '' ) { $data = wp_parse_args( $data, array() ); $this->result_props = array_merge( $this->result_props, $data ); return $data; } /** * Retrieves the response property. * * @return string The current response property value. */ public function get_response() { return $this->response; } /** * Sets the response property. * * @param string $response New response property value. */ public function set_response( $response ) { $this->response = $response; return true; } /** * Retrieves the contact form property. * * @return WPCF7_ContactForm A contact form object. */ public function get_contact_form() { return $this->contact_form; } /** * Search an invalid field by field name. * * @param string $name The field name. * @return array|bool An associative array of validation error * or false when no invalid field. */ public function get_invalid_field( $name ) { return $this->invalid_fields[$name] ?? false; } /** * Retrieves all invalid fields. * * @return array Invalid fields. */ public function get_invalid_fields() { return $this->invalid_fields; } /** * Retrieves meta information. * * @param string $name Name of the meta information. * @return string|null The meta information of the given name if it exists, * null otherwise. */ public function get_meta( $name ) { return $this->meta[$name] ?? null; } /** * Collects meta information about this submission. */ private function setup_meta_data() { $this->meta = array( 'timestamp' => time(), 'remote_ip' => $this->get_remote_ip_addr(), 'remote_port' => $_SERVER['REMOTE_PORT'] ?? '', 'user_agent' => substr( $_SERVER['HTTP_USER_AGENT'] ?? '', 0, 254 ), 'url' => $this->get_request_url(), 'unit_tag' => wpcf7_sanitize_unit_tag( $_POST['_wpcf7_unit_tag'] ?? '' ), 'container_post_id' => absint( $_POST['_wpcf7_container_post'] ?? 0 ), 'current_user_id' => get_current_user_id(), 'do_not_store' => $this->contact_form->is_true( 'do_not_store' ), ); return $this->meta; } /** * Retrieves user input data through this submission. * * @param string $name Optional field name. * @return string|array|null The user input of the field, or array of all * fields values if no field name specified. */ public function get_posted_data( $name = '' ) { if ( ! empty( $name ) ) { return $this->posted_data[$name] ?? null; } return $this->posted_data; } /** * Retrieves a user input string value through the specified field. * * @param string $name Field name. * @return string The user input. If the input is an array, * the first item in the array. */ public function get_posted_string( $name ) { $data = $this->get_posted_data( $name ); $data = wpcf7_array_flatten( $data ); if ( empty( $data ) ) { return ''; } // Returns the first array item. return trim( reset( $data ) ); } /** * Constructs posted data property based on user input values. */ private function setup_posted_data() { $posted_data = array_filter( (array) $_POST, static function ( $key ) { return ! str_starts_with( $key, '_' ); }, ARRAY_FILTER_USE_KEY ); $posted_data = wp_unslash( $posted_data ); $posted_data = $this->sanitize_posted_data( $posted_data ); $tags = $this->contact_form->scan_form_tags( array( 'feature' => array( 'name-attr', '! not-for-mail', ), ) ); $tags = array_reduce( $tags, static function ( $carry, $tag ) { if ( $tag->name and ! isset( $carry[$tag->name] ) ) { $carry[$tag->name] = $tag; } return $carry; }, array() ); foreach ( $tags as $tag ) { $value_orig = $value = $posted_data[$tag->name] ?? ''; if ( wpcf7_form_tag_supports( $tag->type, 'selectable-values' ) ) { $value = ( '' === $value ) ? array() : (array) $value; if ( WPCF7_USE_PIPE ) { $pipes = $this->contact_form->get_pipes( $tag->name ); $value = array_map( static function ( $value ) use ( $pipes ) { return $pipes->do_pipe( $value ); }, $value ); } } $value = apply_filters( "wpcf7_posted_data_{$tag->type}", $value, $value_orig, $tag ); $posted_data[$tag->name] = $value; if ( $tag->has_option( 'consent_for:storage' ) and empty( $value ) ) { $this->meta['do_not_store'] = true; } } $this->posted_data = apply_filters( 'wpcf7_posted_data', $posted_data ); $this->posted_data_hash = $this->create_posted_data_hash(); return $this->posted_data; } /** * Sanitizes user input data. */ private function sanitize_posted_data( $value ) { if ( is_array( $value ) ) { $value = array_map( array( $this, 'sanitize_posted_data' ), $value ); } elseif ( is_string( $value ) ) { $value = wp_check_invalid_utf8( $value ); $value = wp_kses_no_null( $value ); $value = wpcf7_strip_whitespaces( $value ); } return $value; } /** * Returns the time-dependent variable for hash creation. * * @return float Float value rounded up to the next highest integer. */ private function posted_data_hash_tick() { return ceil( time() / ( HOUR_IN_SECONDS / 2 ) ); } /** * Creates a hash string based on posted data, the remote IP address, * contact form location, and window of time. * * @param string $tick Optional. If not specified, result of * posted_data_hash_tick() will be used. * @return string The hash. */ private function create_posted_data_hash( $tick = '' ) { if ( '' === $tick ) { $tick = $this->posted_data_hash_tick(); } $hash = wp_hash( wpcf7_flat_join( array_merge( array( $tick, $this->get_meta( 'remote_ip' ), $this->get_meta( 'unit_tag' ), ), $this->posted_data ) ), 'wpcf7_submission' ); return $hash; } /** * Returns the hash string created for this submission. * * @return string The current hash for the submission. */ public function get_posted_data_hash() { return $this->posted_data_hash; } /** * Verifies that the given string is equivalent to the posted data hash. * * @param string $hash Optional. This value will be compared to the * current posted data hash for the submission. If not * specified, the value of $_POST['_wpcf7_posted_data_hash'] * will be used. * @return int|bool 1 if $hash is created 0-30 minutes ago, * 2 if $hash is created 30-60 minutes ago, * false if $hash is invalid. */ public function verify_posted_data_hash( $hash = '' ) { if ( '' === $hash and ! empty( $_POST['_wpcf7_posted_data_hash'] ) ) { $hash = trim( $_POST['_wpcf7_posted_data_hash'] ); } if ( '' === $hash ) { return false; } $tick = $this->posted_data_hash_tick(); // Hash created 0-30 minutes ago. $expected_1 = $this->create_posted_data_hash( $tick ); if ( hash_equals( $expected_1, $hash ) ) { return 1; } // Hash created 30-60 minutes ago. $expected_2 = $this->create_posted_data_hash( $tick - 1 ); if ( hash_equals( $expected_2, $hash ) ) { return 2; } return false; } /** * Retrieves the remote IP address of this submission. */ private function get_remote_ip_addr() { $ip_addr = ''; if ( isset( $_SERVER['REMOTE_ADDR'] ) and WP_Http::is_ip_address( $_SERVER['REMOTE_ADDR'] ) ) { $ip_addr = $_SERVER['REMOTE_ADDR']; } return apply_filters( 'wpcf7_remote_ip_addr', $ip_addr ); } /** * Retrieves the request URL of this submission. */ private function get_request_url() { $home_url = untrailingslashit( home_url() ); if ( self::is_restful() ) { $referer = trim( $_SERVER['HTTP_REFERER'] ?? '' ); if ( $referer and str_starts_with( $referer, $home_url ) ) { return sanitize_url( $referer ); } } $url = preg_replace( '%(?invalid_fields ) { return false; } $result = new WPCF7_Validation(); $this->contact_form->validate_schema( array( 'text' => true, 'file' => false, 'field' => array(), ), $result ); $tags = $this->contact_form->scan_form_tags( array( 'feature' => '! file-uploading', ) ); foreach ( $tags as $tag ) { $type = $tag->type; $result = apply_filters( "wpcf7_validate_{$type}", $result, $tag ); } $result = apply_filters( 'wpcf7_validate', $result, $tags ); $this->invalid_fields = $result->get_invalid_fields(); return $result->is_valid(); } /** * Returns true if user consent is obtained. */ private function accepted() { return apply_filters( 'wpcf7_acceptance', true, $this ); } /** * Adds user consent data to this submission. * * @param string $name Field name. * @param string $conditions Conditions of consent. */ public function add_consent( $name, $conditions ) { $this->consent[$name] = $conditions; return true; } /** * Collects user consent data. * * @return array User consent data. */ public function collect_consent() { return (array) $this->consent; } /** * Executes spam protections. * * @return bool True if spam captured. */ private function spam() { $spam = false; $skip_spam_check = apply_filters( 'wpcf7_skip_spam_check', $this->skip_spam_check, $this ); if ( $skip_spam_check ) { return $spam; } if ( $this->contact_form->is_true( 'subscribers_only' ) and current_user_can( 'wpcf7_submit', $this->contact_form->id() ) ) { return $spam; } $user_agent = (string) $this->get_meta( 'user_agent' ); if ( strlen( $user_agent ) < 2 ) { $spam = true; $this->add_spam_log( array( 'agent' => 'wpcf7', 'reason' => __( "User-Agent string is unnaturally short.", 'contact-form-7' ), ) ); } if ( ! $this->verify_nonce() ) { $spam = true; $this->add_spam_log( array( 'agent' => 'wpcf7', 'reason' => __( "Submitted nonce is invalid.", 'contact-form-7' ), ) ); } return apply_filters( 'wpcf7_spam', $spam, $this ); } /** * Adds a spam log. * * @link https://contactform7.com/2019/05/31/why-is-this-message-marked-spam/ */ public function add_spam_log( $data = '' ) { $data = wp_parse_args( $data, array( 'agent' => '', 'reason' => '', ) ); $this->spam_log[] = $data; } /** * Retrieves the spam logging data. * * @return array Spam logging data. */ public function get_spam_log() { return $this->spam_log; } /** * Verifies that a correct security nonce was used. */ private function verify_nonce() { if ( ! $this->contact_form->nonce_is_active() or ! is_user_logged_in() ) { return true; } $nonce = $_POST['_wpnonce'] ?? ''; return wpcf7_verify_nonce( $nonce ); } /** * Function called just before sending email. */ private function before_send_mail() { $abort = false; do_action_ref_array( 'wpcf7_before_send_mail', array( $this->contact_form, &$abort, $this, ) ); return ! $abort; } /** * Sends emails based on user input values and contact form email templates. */ private function mail() { $contact_form = $this->contact_form; $skip_mail = apply_filters( 'wpcf7_skip_mail', $this->skip_mail, $contact_form ); if ( $skip_mail ) { return true; } $result = WPCF7_Mail::send( $contact_form->prop( 'mail' ), 'mail' ); if ( $result ) { $additional_mail = array(); if ( $mail_2 = $contact_form->prop( 'mail_2' ) and $mail_2['active'] ) { $additional_mail['mail_2'] = $mail_2; } $additional_mail = apply_filters( 'wpcf7_additional_mail', $additional_mail, $contact_form ); foreach ( $additional_mail as $name => $template ) { WPCF7_Mail::send( $template, $name ); } return true; } return false; } /** * Retrieves files uploaded through this submission. */ public function uploaded_files() { return $this->uploaded_files; } /** * Adds a file to the uploaded files array. * * @param string $name Field name. * @param string|array $file_path File path or array of file paths. */ private function add_uploaded_file( $name, $file_path ) { if ( ! wpcf7_is_name( $name ) ) { return false; } $paths = (array) $file_path; $uploaded_files = array(); $hash_strings = array(); foreach ( $paths as $path ) { if ( @is_file( $path ) and @is_readable( $path ) ) { $uploaded_files[] = $path; $hash_strings[] = md5_file( $path ); } } $this->uploaded_files[$name] = $uploaded_files; if ( empty( $this->posted_data[$name] ) ) { $this->posted_data[$name] = implode( ' ', $hash_strings ); } } /** * Removes uploaded files. */ private function remove_uploaded_files() { foreach ( (array) $this->uploaded_files as $file_path ) { $paths = (array) $file_path; foreach ( $paths as $path ) { wpcf7_rmdir_p( $path ); if ( $dir = dirname( $path ) and false !== ( $files = scandir( $dir ) ) and ! array_diff( $files, array( '.', '..' ) ) ) { // remove parent dir if it's empty. rmdir( $dir ); } } } } /** * Moves uploaded files to the tmp directory and validates them. * * @return bool True if no invalid file is found. */ private function unship_uploaded_files() { $result = new WPCF7_Validation(); $tags = $this->contact_form->scan_form_tags( array( 'feature' => 'file-uploading', ) ); foreach ( $tags as $tag ) { if ( empty( $_FILES[$tag->name] ) ) { continue; } $file = $_FILES[$tag->name]; $options = array( 'tag' => $tag, 'name' => $tag->name, 'required' => $tag->is_required(), 'filetypes' => $tag->get_option( 'filetypes' ), 'limit' => $tag->get_limit_option(), 'schema' => $this->contact_form->get_schema(), ); $new_files = wpcf7_unship_uploaded_file( $file, $options ); if ( is_wp_error( $new_files ) ) { $result->invalidate( $tag, $new_files ); } else { $this->add_uploaded_file( $tag->name, $new_files ); } $result = apply_filters( "wpcf7_validate_{$tag->type}", $result, $tag, array( 'uploaded_files' => $new_files, ) ); } $this->invalid_fields = $result->get_invalid_fields(); return $result->is_valid(); } /** * Adds extra email attachment files that are independent from form fields. * * @param string|array $file_path A file path or an array of file paths. * @param string $template Optional. The name of the template to which * the files are attached. * @return bool True if it succeeds to attach a file at least, * or false otherwise. */ public function add_extra_attachments( $file_path, $template = 'mail' ) { if ( ! did_action( 'wpcf7_before_send_mail' ) ) { return false; } $extra_attachments = array(); foreach ( (array) $file_path as $path ) { $path = path_join( WP_CONTENT_DIR, $path ); if ( file_exists( $path ) ) { $extra_attachments[] = $path; } } if ( empty( $extra_attachments ) ) { return false; } if ( ! isset( $this->extra_attachments[$template] ) ) { $this->extra_attachments[$template] = array(); } $this->extra_attachments[$template] = array_merge( $this->extra_attachments[$template], $extra_attachments ); return true; } /** * Returns extra email attachment files. * * @param string $template An email template name. * @return array Array of file paths. */ public function extra_attachments( $template ) { if ( isset( $this->extra_attachments[$template] ) ) { return (array) $this->extra_attachments[$template]; } return array(); } } PK)o#]M-\mtmtassets/icon.pngnu[PNG  IHDR\rfgAMA a cHRMz&u0`:pQ<eXIfMM*JR(iZHHwJ pHYs  hiTXtXML:com.adobe.xmp 1 2 1 240 241 #P@IDATx}|\WN.rc4{$!@BHh%j:aދ,[{=Iwt{Tmgtw훷;;;;3;bK։JĆ^pm֛Fih%mL?DE!Ze@]K0S/"!:9$JU4CC|s=㈱2ÉD: JF`nRCSw4 yDaG{ Kw1(3Tbѵ.{7+c16DrA:a ֎trZnλȀGD%/ 0b)1(`W0 N3tpz >HA"b.# dY z'fERLOu#EȌn"'eGu@Dp(KaV0@R.o~#!N&ʠ_SEE*eBHD !EQ7(;O| ڪ-p< G'g8xx-ͨ1 7.QwM(χGg8654!7RUZ5vvTE(a"#G%?3P2O"%C}>ր amy&GDy{ F78x nxxBЂZ <3Rxs;: h57LM-ȪDQEpnME߹d'k9;!V@0cD@h"'eMK pxDS@HO&zVL A I;H:w et[B R `#9+i4R(9J ,C#5h*-_IZJrP{|?J z,g5+_Sz=zH(}4Qf"" )`A8#8qq썖e+hGsE~7 (%X0''SDR00C]8!~)QGDHyh/$^AL$DY4 !h Apd,B#n nٻύ )KKO#B+ wuǑL83!;~¼M׉H =[HqQމhěDn^nNMkv(Lϸq߬H9efUJ?!"z ~:ADp?;4,eQ ǽF FU8/Y; -_ , bv)bik&t :Q&]u5|g_1 Po4q}YL4LS@^3{} bA7ooKZdA_&ш^waDk,É={.!W۰N෩?5nF9 0erN&3,DV/?;A*X0QY8}U"#uƻZM4QCۧ==b@p1Gabjz.K#*?d ;XO_ ^?`$1ֻx1(}OwE<,x/yf^hjd# vzsvwQWEr[7 "A|he%:|a8]y6딼 N'>4Z71WދYp@%ӏ0x( FGVxTQ }i7.cE*ؗREA,x҉Sr/М0΁a(7)#gJ: ^ 4swe.CF7`F5"w2aX~ 8,y~x1ѝ gE땏sƠ |}koPf#p_S#?_jG%w~b8݋kQSI`7ұf) 2(\޳&`U{=|O@RQڳo~u 1,8a&ܝQvОQ>B"uhQ;cpaa>Q ;~߅ؑ-L{6| /G(}+nG}-vdlju@11KX7#?/'(.1I'yMp`տ"* e|'d1Hf-Ja8Ɂ gvڮ (:+*D/ t@~79(0z␅bH_!DG ӌSZ oDq0i >}kn[A=KclLZ|`Qݾ,#drQ C*vũ֞Pq\Q߄W#nZ}=X/3d)0.r4s,Ue%0Ӻ>x61(LЂ $dDk |˾aјr툾؝4Su]L " njq5#d/AcwCJ/0(b.!N-L1x5݄\w-F^\hɈdLw bZ.K}lbϴ ,xa(1ݗeDON cRbo:Q@: Q70n&bq^ꐻ],z* ŧ bOO_2OzS@mX H ơMm'ƅ̑XXI?G C-VdI|ӌ_lY:P/I)J_2eiqP{V`2L(r*9xEsaJ7VzSe-=$צ#5TJ)AR<Da+F 0DӜ`\}?"* |aR4X!CkglOPxr--ڢ2Ygb9XF& `Qf HsfUngȤS.S"3,UNڡN.=P@@ǘE$ϛ Bs *3wV<&ŭdudCYx f=T 3NQhL$Gc%J3؛e{ Qψ$pލI _QL?>ZSt\Ke_62x1r$LH1|gc=XMo&ba:: *;:j,h'Ѝl !'Vg< WR h0\r_uS`(Q@@B"=z^H z8h2;` Np!9C؀Jhc{9 iK.jWChSS`pQ@,$iHLrƁ?vO>&bxSW8Cʁ!ZKߠ$ Rö^vS`(P@Lcp HȦf 2(D͂7J@[)}hDQ]T2F;=ĥWÁ2,&#lȲ`+)*Eؿ^-#X"DM[xȩ"6S`8Q@t vmD"<^Xۃ˸x*'S[9 >AjG_C儳"Ɓ:Pdy|1j4RWjAe|J<%p*l?OMW@kQeciRI.Bk@({Ge?q/^  m!x)QsKq] ? 𧀢cq{00,Gu,ރ2S%T1_?' Iq3 򆻑7I﷊ 6Ì־^s"QQTL**e(©`BlZھI?_~}߆NzˆDjdl0yXUM?+{D1 #!`ϰy u'0]tJHAqt j 9ca(D07kJ2ϏhWsۇhp p,/Ɲ{.’m :Fd,t5! J=!aLjC`@`  eDٺPѓ#p`RRAO)0( na h%?e%WN!O4 bzk:EDv}!3χ^S`RkEݑ POJgg / 颿*đL,X3L͵>)uּM/Jx Q]Kip`L6/E^ikƝ JTN4Il?_z1YH8N=fANm 41Z;u uBƚɖ{6=D[f=BXx8ZDÙTVڄ8i,3^=lmk]_e=bH$&Cetw)C AyVD* $Ўjkl|!kuDٛ%+o@Kȣ[:Ds5"ڡ%HK "7!mKUpcUW6`a\ν 呣ʠm'G.cƢiZLU@9_C dL*Ѓ/ё4vwey(ߕLov) j npvBGuluP@"Q.y OV]Sx_@[m?5:4 =M9obeloe9*cJƖIHއ ?<\yg_JMX upqqA Y_*LB$5y_Nm]"HyEXÙо .09P^T i_U47 lL6 ?:4p6D%|dEʋa.CSU1rX]F0#F-$~( wM9,7J;Rps3ިgV't,Fk cr1c`o@$+hXwU3]t`CL: 0_ob-S4iY8fJ}hI=ƭ}6Oe#zO_Cu8Mrۯ ʎRn1-c/ת<oGC(v}"VF=w-6ʌOQi4b1D/^hr!0 c=ٯL3d#;Eo2q̀X]/ )KSCھ?9]]Os(ʼn;R7w;#,, \>w{PዼZWpW Hݻ]E+RIoòƐU`jK`HU4k+{ة" ~8).ZLt8p$ݝ9\^ם_$ z*ȾuZ^xu_xAg-7]gc-¶e2n#Pw0.2%R@Xn+j38Ri ˘AOڅ2.{Pɿ{uAQhRDD"zb?( Bѹ0n7ۏ{\*OQV*K1%>adžP6A@|D F̲WHz3/ܱ857X/5 @ѻW#dի(z]E"s UMM5qժuUh ڔ/wbԄv+Sګ7ϫӘv{3矃E͖ve`;/i9舀{^k\멤XgI)6w+)x^$VLJ ;'dEhO36|~M-APu)$d@ ֬Y\Ï୷œ3 pqvs;!))IM@75Qsܜ<t8=)a)GT2iU2E} 1Fb-&aF)jeS/: Nw`oEFU2smC9///qwÓO>K/lp |}GE6nؠ\έҊ%wfL= (\nߨUviDMe`w J^|=ѦՀgC%F]$8h{cA6gxܶz]gΜxw0FH11$Yv- 4DQ*Ѵ{$'&&:KA2@SgW <|!hJGju8 ` ӦQGQ̪4\r)n&FQר\]ln!.$kWpk>_oaxPLեĮNB?^I<[^baRtFɩ &L}Jb0% Yny޼qͷ >6/5xgԬ'bV\ÿ dӮS@$GC(fɖ ha6;a &s&b4s>x{WN _ j+X%ظx7nt`=}"?-~شY]7!vrEֶ2y?2u\p|s@,fi-.{!I&I-4&t K:]+ˏ1>y_vq/ VI /W\qFދ{~;E!hM)) Q;.o*G_(@=~,\k5_,`!o(Cuco_D٩+Q6U&ę. ekP.6F%˃3!6n$8z,99ہM뚯bЮwBDc35!Mp/>ATr ?[^A?X"mIB! nO6I3!*4Ι2zg5=,*KLع!?4eEC( ]ҷ==v˟[oRZE)Sh>CWv!¡GB=GĚBT 'K֒pot*OK(y>;O@&87ޭZ~{9v}]Ą8_ܻAyZ ׾&Jt r1J1cXB"i3.O9S4q7cw"V2xo`GL8Qzk+@"4TQ[6л/ %}RukA5&MƦkp8\8V5@$>a4ؑÀ8uZ(049tֵӓ2}y g(z&J׎׻r744৷{.Ex9Fww[o6!Hg+~y_Z6X'Бa 5\3QC h/$F/@gh5靗kAFc ϟbTR*x`.e]_yEi4TU>{>B{xHg}{rxk!\QkkUDL tTp & )y.*U=xys{AWoch#OqG>wV+/ӧO]lx`.C"""իW)LOtQ)Ǜ?nd1a6yLtIHpH_rUEs"#U%y0# ܽ}ek,㺏P*1z}OoM 1}8} SrmcB(/_,WSp݁9 )0eT X@ 4r {V[HڞWm\VV1k~~~&ϡR r෿-.=Bc5X_Q{(ᡨ$Ԝl3DXiFEG$Xbe"2q^P$:tO٥ ɞ185bb1B39JbG~>>'\"ҫ+ .wމ0x'xUKAz图7(HP%MgʹHƸI)ZeGIz@awZv@fzXv<>ՕK=~`yvjYG'3>YfVnhGTp(c Ҩk *0h 4bEuױAq:,Ư~u'Y]Foab݃1cOJ`p x2zP%ӉDѯ8^gW"ʆ-41THo_D% ZY ]|<Oh۷Ҫ+uRpZt&Е@~ p4zK+^D+ **i`^waG!}vB2}oj( ƤSZYFgo㳗t&F44m % _(=x3ѕh)hȦ36:TaW#{tdY^ކ#+AD Bzz&rJLQQ\֊"lèIhd?eG QXgmj@8w3O{oEg~npQ%jɺF7 ;3!b׽]teM; /ۂtjqoZ3#/EwbM#͍%ɞ\jџ"Q܊j٢欧Cc;~ 2݅$U"(ErVM1J=Juz5w) Ga0QhEDz챿 E#P?FW׮UJ >+WT(R#?Lk?1fZ@+G~&̛W H5S[ EK@=@ʌ`?%<P⍍hN0O3la0eGJAs?E`ư aC>ctfRB]֊/>KÖ9 qCp/\U}zDF 񈎎_| jYj0ӚO5j,@8 X|Ksrh+e[y zۅ3{5ݮ.kplmNwb[uOO?5 K1vԶPL̲܄6kc|xrQX'VcUQ\B;>'vq?=VR{O°[xT(X#Q-(ѻN!6~bX+CbdC+Wˎ5󇇆".,'Ww~5\B_9Pߨ8}Pw◷}w?ހҲ~ӓASnSOU@ l!]wGnj,`ol ~(F|ۍ??O#?z QARGݏ58Qrw$g`nZ F[ ND%][ߕ'ENts6QwRa->$E%?凱OU[j8(v_ (ۤ/Xt(~1; n]Źjۉg_Z:u=j'?܃OP+҉qo|1/'m^;G<5ıg|~.]gq[`p T6cPxЂr8(RjF x;ix=n9/<4yK;^}`a-:Q`DSBăߏaiqq=ll>}(Eפ?BSݝpˇNJ .|2G0al׶lS\\42~ՅhRvJw^1k wnԜ'$&MC؋>"7˹ !7^ MWbΙ}%Z ciu){>y_+dlẎG88M_e±5Jh ^Aj,xmAx`hv^Ȭx9"JWAEU"%HzHd1g ;@q rQ3/V|.0szRkxDuϚ&| ?ŭ&TX~UQc3(x:XJ9r8+_ 柍 ck /ՠ"֗XHN s^3>eP_ K ޔS6@}q8+/CJ?~;q(`Ț6&)wե'7u:Un1(m1PI=31)p&Tn0H/W3lhMXҌ'^^ ##L˵Ŷ211>A]BۚNޭ ɃY8deTʺGS.258m>9^W Ӭ Q@eyIo L . :Č&u9cjd(KĐN3fq(sze;@I~6# DL x@+PFvdյHJVk$yoiG 𓿬'&J@̘JY8eSg}y.i_O& EXj5]T&њ@Βw%7(W {? %-3f: *؉z:IfHΛCT>=AfO7JQb>ꎷLE|/nn#{doG-!Cjۢm` : n!F,8EFv>[Y0@$<ĔN|OUT~V7X*@Qu '>l7o7 ~o'[cv8Dcg'&BXtliJZ0!!=422HhXqfE O4X_#lг3JI@|+OQSbxBt0g"5GCN{u;~q|{WUscH,*)J%& fٺbKb[Ja)!]هP]X>Z~(HhExrqy>la! 3wZz0~/Wc= ڽ "5>AФ”M(yp nɈI^x[:1ֿT탉L2C^%>F<jx628(`10R܋ڳiߊ4U@]A¢8 )`G˫&Da8d32vAliە}-B|"~r |UwxYclB4VX%TfU|:Bâg lڏB[#*m+ })= _ź1e2k:yL&;e%%4|\xKd,M'H'oQc;upfP:zB=7xŜ] g tvB:&lzcMmcS1RI8߇Hr6hd6DbEQ:8zN"nld8&!A,Nt1#gVϝ#`qz"pck|C n}|>PwddLC)- ywGb̥ Iм,%w<}pRsK OCHup,w7P֞͒k1Pk&d#/@K؜h evxO>1S3ll3G3\kypųll Nq~1 p*!˪J3jo{\4.=><&QҬKɃa XRPt_\k3ʲ_ߑnr*m8[$Dgmm+}7aPfnn2n|şupwPsp2:‚yd&FAMv+ٸpJ8k d52$̐[P lGك҉H1DCQgnbv󎠾z@촵Zӓt9˧ +_9iڵh)3YH7ȪOο nqySS%a)1h>~y{p'ìv|N <$V<0IDAT7.TZu$2r*ʐK>L8}a`! %ZҚS 7LMdi/FܥpN'vM.܄=|Oj~'v}%e3vdsˬiw' i8"LH`Pyp-|&2|/%g͙-)<&½;nq1f\|(Ǝ3 {e\T2#}16%4=H >}l@پ\<0s-X0or hqSEDJ.-Q6`?@iO΄TSwoS]‹ zOP1klGwߒP,b+}^%)IW3+ b ;q^Ex#E`92OMU(K_*f_fZLMxMQ\ی`ZXbҟ9盰eOv)ƞ~L SSR­% 'wkF۟'8|1e}ޟz,9ÈB--ki *2P7Ruû;#ԋ' u*CagPF'ٳ),bH@Cڃ./Cס2vJh>,;V$KY!\V<'YJ S8&T pKݎگ<SlǎFH"z$ C el|~tf4.]:CyR.>CIi5OY;Yσ9ʐG4NIy,xZCd_SbB7; pAv.-+qSnKA) aӉa upbUʎNt~/&+-HWrPĻ Vӊ0 %ݏޫ[(eЌz3o=vLZ"M2ɴ2.S =U)p@p3 }7y[rK#=gL? .&WC⊸t\slN.*Ǹ3L@4b#^d -ȈĬhbCN(f8K3kzgBZbAT3\L~t{՘R?? ] O JhZ\Rwl(P5XkҒ gmڝ KJS`p@,ndAp>yѤFj2\!ʾfz~qzD_GKsu^^^5qkxxmQ8s[ɂFzkxkWҞЄ ?W<׺H1rd5H @SS3֮QLj Z:œMk8Hü1c6כ>9E ^YrwwxJN؞vðv%|BA&jJڱZ{V.t{De?#P DY= =OTK H/>cŋXC(cm S`G狨s1{4yjR_!gEqϚ(Ͽv>G'O?zVߟ7݁b̚ќQxoέfA}¹E̕ @,n"n&х2!bd$TY W^XčXzbk ؄ <|'`O3-S_֌__;nW`x/؋9F1vM_u3qnY^Y53[4\S !c0&9kV%C$uS+dP0i0:7 >n?Oy1.C }uRY 0rBC:+ uç{m۰J7Ѽ~]40ɜ{ڄB&OD?2s,faZyt J s@eFbջw=ݽ4f."a]k+Y /rIK53gďes'I١P:{43G6qyWX!5wӣr$h[\$TX2i)N@ r+"vb"ՠ8$ĽmjXڷwvJiDBT\†*g92FLrc*upٌX|۶yp~ִD*; b'bt<6`{YGitߥ'oo<pMr]XéL|B Oe0p)F`@l%qK:HHG>\@$;_1X:&fW~K"M5`AWҶc"Bמ'rb5iˣsګUɍsx:rZo|3 I/F)jЩޒb⺹308;0́/HG8Ruo6[]#k@x,! nh{s4hcp{t ǛVu#,D5ZooB7\4 5+! 4r Xlb$te{iC*kc z ;~I}ߣ7W1yg_ tᶧ%p[Yoٖ~}sZr{J^4N㲓#^n?euPY՚" j}~VۅCt.je/cǔcj/$.CGoDB`>9&[2Re|2u,6mc%ݝ&cfAA icXVsh{߈(3Ӛ4|3iK+ܸ?QUǛ7O7#{Eל;Qmqz_Mu e\p`q %X8g|శ xS˾)xhv}¢bZ s<7j%CoǛuT)7Y`:ѷcA^Fk4EœZ[~nħWoȵp6mLx{¥(tAeK[]H9sK?#{2 q \ ]cPd2$W/( my%|F3iϤ9WtVn=tמH?V_DE!Ü|T#JyXj!/džC"5(cg)j`@:p'F\r߄1 =N(@}݇=qi"@Bx~`jykmIWl>Ulx=pu/n]֔Ni4Zz__bwq\:?l) Fo6c4&.AsFwLGm1*:[ʎ#0BUd:~FG+@h kv(&HvqFa>%yN_8840vz"}?~oÁi>T?3Q8o8]o :àg}NPVVVlij?d q@O({Sѣbx@xU() |>ϾԫI_n"lG$p,D zkаg+˳9¼O}6$$eq2&OoHi$]60_p)PqQ(l_m ֞~C;*ܟP r/]Bz.)Syy]g/ن7icSg7vD(cx6pֱet7 UN8WXRZ `כqp^ԷT?_zLl4!nv4!Qt(*A ,Y~i~3ԭՃ۔;WL(lb'bYJ”N7:~8ViEܾaDW`vw#pv$u)q* qqvNNjǷb`N^;ݽ?]w{ TB%ڍ܉XF/L ~6_^R@qyOq4-u$|O:߽ĵj/xxڅ=I D|916? N9oOx(LFՇx7 tq>ňr*CM1ۆ6:p&yb_V B^gi-7dO>EDrmX 3ȴgy:BMThstJ~ 5w1~pt;ըuw[ndSMbR F#c$P٨3`{-pzKF5!20Fw8 Tow4551^<8hC?H$8flzN DW# /%()Jy)xwĎ!xх S!)fF&=G9u tC%]G^?kBvvJR׈{:|ҦxbPf=rқ|"KN'iEf=MȤ2yr(!FAgn@t=,#=abIe*1@bK"x8j =QNP@ 8BKwG`rR4+]u/xvbVewdȵ*xqO[!uS@@w%uq3,Q4ؿB ElnYJ':t R@u6[5CUkkٞ2Y`HsP_6y2zN}H2Bju*{CU=}ZZ[$ E&=]@( cJƖo:c亮^p].L-)c)(" U i pIH'ppNVYQ(%Y")QH/ۖ:H$͛3;ߔk{sml+,`SpAW+vRŀb PSԭW_.vo#Xr |7&3+I1hCU,.~@ PS- ShKnzr _=8,)H* %J%*Jg?u:E䶮yO'Y1E'CGfŕ)MI%(%3S\)\lco08z<j8rq X  I)Ja'eaꢶKNt;M&UbwdNZpTˣÐ(;JS 4,ƿN/uYXl~)` n@>Q*E1P̑IO jWu랝Ew+K "GaGZ(j:p 8 ph^,Vl-4^(4,􌏸VYd` XJ5ɪq ]sp$vY[b˳1)d4@d= /EJ3q;{ďUP%u3Dd^~ǼNd cjșǁ9q{P~{RiIex# #XVČ]vh̓sRXWPݶV|rK߰[uiqI{q9%ѕСJ%<|{YG/}wlT#ixG teDm#Mm&vD1P/ $ Y$qcy ?Lg֍6+aA1n$zJ)KJ1{&1|2qdn= M Z]ns`LEĹ|MbTIR)*x5jb8|G6dj2;PX 0hk6n[!O)~ ((Iiq[+!s ҥ6l"|K2<̹;'5! 2QCGo@WR`uy/^2Ě`n ʿ4%K2:tA|y TG gM[6“'a,1@W0 FIb .]*qaX/;P[g$bϗM iO6 \%8QJ8$-"ҔcJ6\/4 Q)?]}va}k#<X<'07fۊحNia#oo.ЃM}fD':$9oaasK}cMZ1$-4Mna¼"C҆DܮV a.Up(Yo Es&ż<*c@jBjP 8$%SZZwKۃV2`Nɺ1@gqkôv>]~^2*7恚yMk3B\¡"zH4k 5.Hɖa1}FѷXN|Ql)a=񪺹 o3 03\Cb5YFUrgi yt!'O9<ׁ/5Z4x=@-3ߔC=^,<╔ @)Q T!h5ô$E9yUmT_=lG W竘%YR =DX.1{u(nJ o@M4ϕJ)j+ݒ$NgAQGP |Kي9 /{0<Z2k^@ܨԍfM'Ćo|[P;fp=>,`=-u%Nɍ#.+]m2kn\*]1p/q. wT;Լԋ t8-ࣀ0Aiwd&Ici`ڤz26sO'BM4?vppۓuz2^z''Tea~FBJo[ %@4WU yk,Y|ț%{MGs41Xq*u#fH,U]ad2F#kSLvaX1)11D1<^Evȴu팄BK*?R~>z4n%2ὤS YNI",tD꒑ F@y!~z4kGٱKI,ξ;E w1hPzkE V.:8U Sa\ H`i%Nʑ1e^55&ݘ>۴L.K*]R!>C|xXVxk_C0;*.kJRXpG2N'jWYwﲘgH&HdܼJ}%wOJrJ:&e \MK:Џ6-.6 !o%>"7>|paǤ縌'an,\ o7%1gằx3,ɢ]ᲄׁ`UrK#Tx'(Y`l. W<@#Y2qUH'n(>qSr3>~@H#SC@kOtNɚ,0f/h#Z.3j4Ϧe%*)9rT|"e?^N]e ZP6'?ēbGmZRD:)_X%kg+&pc£Trp>F__'e[vOT$ǎ=G$j3#`B,1i/J{Qp%Y`\= |eV?y>< xČfD.dL~ò-tRf&ly^6uYgez\xbdRP6+">Y`)7-CX,GȞz*K1,ڭ\0& Mli`ηޒkפmJPx| `6M1q7c  |ђE)\Jo{C!}o,WᇒPr ق 4&V@I \ķ*1 @,p;? 8@`꾒`cɧŸ@Ncr9wQ(JQ^TG хo$ l'ӟwwnW+d@ nn~;hZ.20.[3 np:>  C.=4-@C>7@e9==9 aV_Vj 67 O8H0Be=BE'9l[oUR (PKAh1a: 0`4r M;BThog.=_I1.x[IENDB`PK)o#]U7assets/icon.svgnu[ PK)o#]fOmodules/recaptcha/index.jsnu[document.addEventListener("DOMContentLoaded",(e=>{var t;wpcf7_recaptcha={...null!==(t=wpcf7_recaptcha)&&void 0!==t?t:{}};const c=wpcf7_recaptcha.sitekey,{homepage:n,contactform:a}=wpcf7_recaptcha.actions,o=e=>{const{action:t,func:n,params:a}=e;grecaptcha.execute(c,{action:t}).then((e=>{const c=new CustomEvent("wpcf7grecaptchaexecuted",{detail:{action:t,token:e}});document.dispatchEvent(c)})).then((()=>{"function"==typeof n&&n(...a)})).catch((e=>console.error(e)))};if(grecaptcha.ready((()=>{o({action:n})})),document.addEventListener("change",(e=>{o({action:a})})),"undefined"!=typeof wpcf7&&"function"==typeof wpcf7.submit){const e=wpcf7.submit;wpcf7.submit=(t,c={})=>{o({action:a,func:e,params:[t,c]})}}document.addEventListener("wpcf7grecaptchaexecuted",(e=>{const t=document.querySelectorAll('form.wpcf7-form input[name="_wpcf7_recaptcha_response"]');for(let c=0;cadd_service( 'recaptcha', WPCF7_RECAPTCHA::get_instance() ); } add_action( 'wp_enqueue_scripts', 'wpcf7_recaptcha_enqueue_scripts', 20, 0 ); /** * Enqueues frontend scripts for reCAPTCHA. */ function wpcf7_recaptcha_enqueue_scripts() { $service = WPCF7_RECAPTCHA::get_instance(); if ( ! $service->is_active() ) { return; } $url = 'https://www.google.com/recaptcha/api.js'; if ( apply_filters( 'wpcf7_use_recaptcha_net', false ) ) { $url = 'https://www.recaptcha.net/recaptcha/api.js'; } wp_register_script( 'google-recaptcha', add_query_arg( array( 'render' => $service->get_sitekey(), ), $url ), array(), '3.0', array( 'in_footer' => true ) ); $assets = include wpcf7_plugin_path( 'modules/recaptcha/index.asset.php' ); $assets = wp_parse_args( $assets, array( 'dependencies' => array(), 'version' => WPCF7_VERSION, ) ); wp_register_script( 'wpcf7-recaptcha', wpcf7_plugin_url( 'modules/recaptcha/index.js' ), array_merge( $assets['dependencies'], array( 'google-recaptcha', 'wp-polyfill', ) ), $assets['version'], array( 'in_footer' => true ) ); wp_enqueue_script( 'wpcf7-recaptcha' ); $wpcf7_recaptcha_obj = array( 'sitekey' => $service->get_sitekey(), 'actions' => apply_filters( 'wpcf7_recaptcha_actions', array( 'homepage' => 'homepage', 'contactform' => 'contactform', ) ), ); wp_add_inline_script( 'wpcf7-recaptcha', sprintf( 'var wpcf7_recaptcha = %s;', wp_json_encode( $wpcf7_recaptcha_obj, JSON_PRETTY_PRINT ) ), 'before' ); } add_filter( 'wpcf7_form_hidden_fields', 'wpcf7_recaptcha_add_hidden_fields', 100, 1 ); /** * Adds hidden form field for reCAPTCHA. */ function wpcf7_recaptcha_add_hidden_fields( $fields ) { $service = WPCF7_RECAPTCHA::get_instance(); if ( ! $service->is_active() ) { return $fields; } return array_merge( $fields, array( '_wpcf7_recaptcha_response' => '', ) ); } add_filter( 'wpcf7_spam', 'wpcf7_recaptcha_verify_response', 9, 2 ); /** * Verifies reCAPTCHA token on the server side. */ function wpcf7_recaptcha_verify_response( $spam, $submission ) { if ( $spam ) { return $spam; } $service = WPCF7_RECAPTCHA::get_instance(); if ( ! $service->is_active() ) { return $spam; } $token = trim( $_POST['_wpcf7_recaptcha_response'] ?? '' ); if ( $service->verify( $token ) ) { // Human $spam = false; } else { // Bot $spam = true; if ( '' === $token ) { $submission->add_spam_log( array( 'agent' => 'recaptcha', 'reason' => __( 'reCAPTCHA response token is empty.', 'contact-form-7' ), ) ); } else { $submission->add_spam_log( array( 'agent' => 'recaptcha', 'reason' => sprintf( /* translators: 1: value of reCAPTCHA score 2: value of reCAPTCHA threshold */ __( 'reCAPTCHA score (%1$.2f) is lower than the threshold (%2$.2f).', 'contact-form-7' ), $service->get_last_score(), $service->get_threshold() ), ) ); } } return $spam; } add_action( 'wpcf7_init', 'wpcf7_recaptcha_add_form_tag_recaptcha', 10, 0 ); /** * Registers form-tag types for reCAPTCHA. */ function wpcf7_recaptcha_add_form_tag_recaptcha() { $service = WPCF7_RECAPTCHA::get_instance(); if ( ! $service->is_active() ) { return; } wpcf7_add_form_tag( 'recaptcha', '__return_empty_string', // no output array( 'display-block' => true ) ); } add_action( 'wpcf7_upgrade', 'wpcf7_upgrade_recaptcha_v2_v3', 10, 2 ); /** * Adds warnings for users upgrading from reCAPTCHA v2 to v3. */ function wpcf7_upgrade_recaptcha_v2_v3( $new_ver, $old_ver ) { if ( version_compare( '5.1-dev', $old_ver, '<=' ) ) { return; } $service = WPCF7_RECAPTCHA::get_instance(); if ( ! $service->is_active() or $service->get_global_sitekey() ) { return; } // Maybe v2 keys are used now. Warning necessary. WPCF7::update_option( 'recaptcha_v2_v3_warning', true ); WPCF7::update_option( 'recaptcha', null ); } add_action( 'wpcf7_admin_menu', 'wpcf7_admin_init_recaptcha_v2_v3', 10, 0 ); /** * Adds filters and actions for warnings. */ function wpcf7_admin_init_recaptcha_v2_v3() { if ( ! WPCF7::get_option( 'recaptcha_v2_v3_warning' ) ) { return; } add_filter( 'wpcf7_admin_menu_change_notice', 'wpcf7_admin_menu_change_notice_recaptcha_v2_v3', 10, 1 ); add_action( 'wpcf7_admin_warnings', 'wpcf7_admin_warnings_recaptcha_v2_v3', 5, 3 ); } /** * Increments the admin menu counter for the Integration page. */ function wpcf7_admin_menu_change_notice_recaptcha_v2_v3( $counts ) { $counts['wpcf7-integration'] += 1; return $counts; } /** * Prints warnings on the admin screen. */ function wpcf7_admin_warnings_recaptcha_v2_v3( $page, $action, $object ) { if ( 'wpcf7-integration' !== $page ) { return; } $message = sprintf( esc_html( /* translators: %s: link labeled 'reCAPTCHA (v3)' */ __( "API keys for reCAPTCHA v3 are different from those for v2; keys for v2 do not work with the v3 API. You need to register your sites again to get new keys for v3. For details, see %s.", 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/recaptcha/', 'contact-form-7' ), __( 'reCAPTCHA (v3)', 'contact-form-7' ) ) ); wp_admin_notice( $message, array( 'type' => 'warning' ) ); } add_action( 'wpcf7_admin_warnings', 'wpcf7_captcha_future_warning', 10, 3 ); function wpcf7_captcha_future_warning( $page, $action, $object ) { $service = WPCF7_RECAPTCHA::get_instance(); if ( ! $service->is_active() ) { return; } $message = wp_kses( __( 'Attention reCAPTCHA users: Google has a plan to make all reCAPTCHA users migrate to reCAPTCHA Enterprise. This means a cost increase for many of you. Learn about our future plans for CAPTCHAs and the options you have.', 'contact-form-7' ), array( 'a' => array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); wp_admin_notice( $message, array( 'type' => 'warning' ) ); } PK)o#]'偠modules/recaptcha/error_lognu[[03-Sep-2026 07:34:41 UTC] PHP Fatal error: Uncaught Error: Undefined constant "WPCF7_VERSION" in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/recaptcha/index.asset.php:5 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/recaptcha/index.asset.php on line 5 [03-Sep-2026 07:34:42 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/recaptcha/recaptcha.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/recaptcha/recaptcha.php on line 8 [03-Sep-2026 08:09:03 UTC] PHP Fatal error: Uncaught Error: Undefined constant "WPCF7_VERSION" in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/recaptcha/index.asset.php:5 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/recaptcha/index.asset.php on line 5 [03-Sep-2026 08:09:04 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/recaptcha/recaptcha.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/recaptcha/recaptcha.php on line 8 PK)o#] modules/recaptcha/service.phpnu[sitekeys = WPCF7::get_option( 'recaptcha' ); } public function get_title() { return __( 'reCAPTCHA', 'contact-form-7' ); } public function is_active() { $sitekey = $this->get_sitekey(); $secret = $this->get_secret( $sitekey ); return $sitekey && $secret; } public function get_categories() { return array( 'spam_protection' ); } public function icon() { } public function link() { echo wpcf7_link( 'https://www.google.com/recaptcha/intro/index.html', 'google.com/recaptcha' ); } public function get_global_sitekey() { static $sitekey = ''; if ( $sitekey ) { return $sitekey; } if ( defined( 'WPCF7_RECAPTCHA_SITEKEY' ) ) { $sitekey = WPCF7_RECAPTCHA_SITEKEY; } $sitekey = apply_filters( 'wpcf7_recaptcha_sitekey', $sitekey ); return $sitekey; } public function get_global_secret() { static $secret = ''; if ( $secret ) { return $secret; } if ( defined( 'WPCF7_RECAPTCHA_SECRET' ) ) { $secret = WPCF7_RECAPTCHA_SECRET; } $secret = apply_filters( 'wpcf7_recaptcha_secret', $secret ); return $secret; } public function get_sitekey() { if ( $this->get_global_sitekey() and $this->get_global_secret() ) { return $this->get_global_sitekey(); } if ( empty( $this->sitekeys ) or ! is_array( $this->sitekeys ) ) { return false; } $sitekeys = array_keys( $this->sitekeys ); return $sitekeys[0]; } public function get_secret( $sitekey ) { if ( $this->get_global_sitekey() and $this->get_global_secret() ) { return $this->get_global_secret(); } $sitekeys = (array) $this->sitekeys; if ( isset( $sitekeys[$sitekey] ) ) { return $sitekeys[$sitekey]; } else { return false; } } protected function log( $url, $request, $response ) { wpcf7_log_remote_request( $url, $request, $response ); } public function verify( $token ) { $is_human = false; if ( empty( $token ) or ! $this->is_active() ) { return $is_human; } $endpoint = 'https://www.google.com/recaptcha/api/siteverify'; if ( apply_filters( 'wpcf7_use_recaptcha_net', false ) ) { $endpoint = 'https://www.recaptcha.net/recaptcha/api/siteverify'; } $sitekey = $this->get_sitekey(); $secret = $this->get_secret( $sitekey ); $request = array( 'body' => array( 'secret' => $secret, 'response' => $token, ), ); $response = wp_remote_post( sanitize_url( $endpoint ), $request ); if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } return $is_human; } $response_body = wp_remote_retrieve_body( $response ); $response_body = json_decode( $response_body, true ); $this->last_score = $score = isset( $response_body['score'] ) ? $response_body['score'] : 0; $threshold = $this->get_threshold(); $is_human = $threshold < $score; $is_human = apply_filters( 'wpcf7_recaptcha_verify_response', $is_human, $response_body ); if ( $submission = WPCF7_Submission::get_instance() ) { $submission->push( 'recaptcha', array( 'version' => '3.0', 'threshold' => $threshold, 'response' => $response_body, ) ); } return $is_human; } public function get_threshold() { return apply_filters( 'wpcf7_recaptcha_threshold', 0.50 ); } public function get_last_score() { return $this->last_score; } protected function menu_page_url( $args = '' ) { $args = wp_parse_args( $args, array() ); $url = menu_page_url( 'wpcf7-integration', false ); $url = add_query_arg( array( 'service' => 'recaptcha' ), $url ); if ( ! empty( $args ) ) { $url = add_query_arg( $args, $url ); } return $url; } protected function save_data() { WPCF7::update_option( 'recaptcha', $this->sitekeys ); } protected function reset_data() { $this->sitekeys = null; $this->save_data(); } public function load( $action = '' ) { if ( 'setup' === $action and 'POST' === $_SERVER['REQUEST_METHOD'] ) { check_admin_referer( 'wpcf7-recaptcha-setup' ); if ( ! empty( $_POST['reset'] ) ) { $this->reset_data(); $redirect_to = $this->menu_page_url( 'action=setup' ); } else { $sitekey = trim( $_POST['sitekey'] ?? '' ); $secret = trim( $_POST['secret'] ?? '' ); if ( $sitekey and $secret ) { $this->sitekeys = array( $sitekey => $secret ); $this->save_data(); $redirect_to = $this->menu_page_url( array( 'message' => 'success', ) ); } else { $redirect_to = $this->menu_page_url( array( 'action' => 'setup', 'message' => 'invalid', ) ); } } if ( WPCF7::get_option( 'recaptcha_v2_v3_warning' ) ) { WPCF7::update_option( 'recaptcha_v2_v3_warning', false ); } wp_safe_redirect( $redirect_to ); exit(); } } public function admin_notice( $message = '' ) { if ( 'invalid' === $message ) { wp_admin_notice( sprintf( '%1$s: %2$s', esc_html( __( "Error", 'contact-form-7' ) ), esc_html( __( "Invalid key values.", 'contact-form-7' ) ) ), array( 'type' => 'error' ) ); } if ( 'success' === $message ) { wp_admin_notice( esc_html( __( "Settings saved.", 'contact-form-7' ) ), array( 'type' => 'success' ) ); } } public function display( $action = '' ) { echo sprintf( '

    %s

    ', esc_html( __( "reCAPTCHA protects you against spam and other types of automated abuse. With Contact Form 7’s reCAPTCHA integration module, you can block abusive form submissions by spam bots.", 'contact-form-7' ) ) ); echo sprintf( '

    %s

    ', wpcf7_link( __( 'https://contactform7.com/recaptcha/', 'contact-form-7' ), __( 'reCAPTCHA (v3)', 'contact-form-7' ) ) ); if ( $this->is_active() ) { echo sprintf( '

    %s

    ', esc_html( __( "reCAPTCHA is active on this site.", 'contact-form-7' ) ) ); } if ( 'setup' === $action ) { $this->display_setup(); } else { echo sprintf( '

    %2$s

    ', esc_url( $this->menu_page_url( 'action=setup' ) ), esc_html( __( 'Setup Integration', 'contact-form-7' ) ) ); } } private function display_setup() { $sitekey = $this->is_active() ? $this->get_sitekey() : ''; $secret = $this->is_active() ? $this->get_secret( $sitekey ) : ''; ?>
    is_active() ) { echo esc_html( $sitekey ); echo sprintf( '', esc_attr( $sitekey ) ); } else { echo sprintf( '', esc_attr( $sitekey ) ); } ?>
    is_active() ) { echo esc_html( wpcf7_mask_password( $secret, 4, 4 ) ); echo sprintf( '', esc_attr( $secret ) ); } else { echo sprintf( '', esc_attr( $secret ) ); } ?>
    is_active() ) { if ( $this->get_global_sitekey() and $this->get_global_secret() ) { // nothing } else { submit_button( _x( 'Remove Keys', 'API keys', 'contact-form-7' ), 'small', 'reset' ); } } else { submit_button( __( 'Save Changes', 'contact-form-7' ) ); } ?>
    array(), 'version' => WPCF7_VERSION, ); PK)o#]modules/date.phpnu[ true, ) ); } function wpcf7_date_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); $class .= ' wpcf7-validates-as-date'; if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $atts = array(); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $atts['min'] = $tag->get_date_option( 'min' ); $atts['max'] = $tag->get_date_option( 'max' ); $atts['step'] = $tag->get_option( 'step', 'int', true ); $atts['readonly'] = $tag->has_option( 'readonly' ); $atts['autocomplete'] = $tag->get_option( 'autocomplete', '[-0-9a-zA-Z]+', true ); if ( $tag->is_required() ) { $atts['aria-required'] = 'true'; } if ( $validation_error ) { $atts['aria-invalid'] = 'true'; $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $atts['aria-invalid'] = 'false'; } $value = (string) reset( $tag->values ); if ( $tag->has_option( 'placeholder' ) or $tag->has_option( 'watermark' ) ) { $atts['placeholder'] = $value; $value = ''; } $value = $tag->get_default_option( $value ); if ( $value ) { $datetime_obj = date_create_immutable( preg_replace( '/[_]+/', ' ', $value ), wp_timezone() ); if ( $datetime_obj ) { $value = $datetime_obj->format( 'Y-m-d' ); } } $value = wpcf7_get_hangover( $tag->name, $value ); $atts['value'] = $value; $atts['type'] = $tag->basetype; $atts['name'] = $tag->name; $html = sprintf( '%3$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), $validation_error ); return $html; } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_date_rules', 10, 2 ); function wpcf7_swv_add_date_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'basetype' => array( 'date' ), ) ); foreach ( $tags as $tag ) { if ( $tag->is_required() ) { $schema->add_rule( wpcf7_swv_create_rule( 'required', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_required' ), ) ) ); } $schema->add_rule( wpcf7_swv_create_rule( 'date', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_date' ), ) ) ); $min = $tag->get_date_option( 'min' ); $max = $tag->get_date_option( 'max' ); if ( false !== $min ) { $schema->add_rule( wpcf7_swv_create_rule( 'mindate', array( 'field' => $tag->name, 'threshold' => $min, 'error' => wpcf7_get_message( 'date_too_early' ), ) ) ); } if ( false !== $max ) { $schema->add_rule( wpcf7_swv_create_rule( 'maxdate', array( 'field' => $tag->name, 'threshold' => $max, 'error' => wpcf7_get_message( 'date_too_late' ), ) ) ); } } } /* Messages */ add_filter( 'wpcf7_messages', 'wpcf7_date_messages', 10, 1 ); function wpcf7_date_messages( $messages ) { return array_merge( $messages, array( 'invalid_date' => array( 'description' => __( "Date format that the sender entered is invalid", 'contact-form-7' ), 'default' => __( "Please enter a date in YYYY-MM-DD format.", 'contact-form-7' ), ), 'date_too_early' => array( 'description' => __( "Date is earlier than minimum limit", 'contact-form-7' ), 'default' => __( "This field has a too early date.", 'contact-form-7' ), ), 'date_too_late' => array( 'description' => __( "Date is later than maximum limit", 'contact-form-7' ), 'default' => __( "This field has a too late date.", 'contact-form-7' ), ), ) ); } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_date', 19, 0 ); function wpcf7_add_tag_generator_date() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'date', __( 'date', 'contact-form-7' ), 'wpcf7_tag_generator_date', array( 'version' => '2' ) ); } function wpcf7_tag_generator_date( $contact_form, $options ) { $field_types = array( 'date' => array( 'display_name' => __( 'Date field', 'contact-form-7' ), 'heading' => __( 'Date field form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a date input field.', 'contact-form-7' ), ), ); $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'with_required' => true, 'select_options' => array( 'date' => $field_types['date']['display_name'], ), ) ); $tgg->print( 'field_name' ); $tgg->print( 'class_attr' ); $tgg->print( 'min_max', array( 'type' => 'date', 'title' => __( 'Range', 'contact-form-7' ), 'min_option' => 'min:', 'max_option' => 'max:', ) ); $tgg->print( 'default_value', array( 'type' => 'date', 'with_placeholder' => false, ) ); ?>
    print( 'insert_box_content' ); $tgg->print( 'mail_tag_tip' ); ?>
    true, 'selectable-values' => true, ) ); } function wpcf7_acceptance_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } if ( $tag->has_option( 'invert' ) ) { $class .= ' invert'; } if ( $tag->has_option( 'optional' ) ) { $class .= ' optional'; } $atts = array( 'class' => trim( $class ), ); $item_atts = array( 'type' => 'checkbox', 'name' => $tag->name, 'value' => '1', 'tabindex' => $tag->get_option( 'tabindex', 'signed_int', true ), 'checked' => $tag->has_option( 'default:on' ), 'class' => $tag->get_class_option() ? $tag->get_class_option() : null, 'id' => $tag->get_id_option(), ); if ( $validation_error ) { $item_atts['aria-invalid'] = 'true'; $item_atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $item_atts['aria-invalid'] = 'false'; } $item_atts = wpcf7_format_atts( $item_atts ); $content = empty( $tag->content ) ? (string) reset( $tag->values ) : $tag->content; $content = trim( $content ); if ( $content ) { if ( $tag->has_option( 'label_first' ) ) { $html = sprintf( '%2$s', $item_atts, $content ); } else { $html = sprintf( '%2$s', $item_atts, $content ); } $html = sprintf( '', $html ); } else { $html = sprintf( '', $item_atts ); } $html = sprintf( '%3$s%4$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), $html, $validation_error ); return $html; } /* Validation filter */ add_filter( 'wpcf7_validate_acceptance', 'wpcf7_acceptance_validation_filter', 10, 2 ); function wpcf7_acceptance_validation_filter( $result, $tag ) { if ( ! wpcf7_acceptance_as_validation() ) { return $result; } if ( $tag->has_option( 'optional' ) ) { return $result; } $name = $tag->name; $value = ( ! empty( $_POST[$name] ) ? 1 : 0 ); $invert = $tag->has_option( 'invert' ); if ( $invert and $value or ! $invert and ! $value ) { $result->invalidate( $tag, wpcf7_get_message( 'accept_terms' ) ); } return $result; } /* Acceptance filter */ add_filter( 'wpcf7_acceptance', 'wpcf7_acceptance_filter', 10, 2 ); function wpcf7_acceptance_filter( $accepted, $submission ) { $tags = wpcf7_scan_form_tags( array( 'type' => 'acceptance' ) ); foreach ( $tags as $tag ) { $name = $tag->name; if ( empty( $name ) ) { continue; } $value = ( ! empty( $_POST[$name] ) ? 1 : 0 ); $content = empty( $tag->content ) ? (string) reset( $tag->values ) : $tag->content; $content = trim( $content ); if ( $value and $content ) { $submission->add_consent( $name, $content ); } if ( $tag->has_option( 'optional' ) ) { continue; } $invert = $tag->has_option( 'invert' ); if ( $invert and $value or ! $invert and ! $value ) { $accepted = false; } } return $accepted; } add_filter( 'wpcf7_form_class_attr', 'wpcf7_acceptance_form_class_attr', 10, 1 ); function wpcf7_acceptance_form_class_attr( $class_attr ) { if ( wpcf7_acceptance_as_validation() ) { return $class_attr . ' wpcf7-acceptance-as-validation'; } return $class_attr; } function wpcf7_acceptance_as_validation() { if ( ! $contact_form = wpcf7_get_current_contact_form() ) { return false; } return $contact_form->is_true( 'acceptance_as_validation' ); } add_filter( 'wpcf7_mail_tag_replaced_acceptance', 'wpcf7_acceptance_mail_tag', 10, 4 ); function wpcf7_acceptance_mail_tag( $replaced, $submitted, $html, $mail_tag ) { $form_tag = $mail_tag->corresponding_form_tag(); if ( ! $form_tag ) { return $replaced; } if ( ! empty( $submitted ) ) { $replaced = __( 'Consented', 'contact-form-7' ); } else { $replaced = __( 'Not consented', 'contact-form-7' ); } $content = empty( $form_tag->content ) ? (string) reset( $form_tag->values ) : $form_tag->content; if ( ! $html ) { $content = wp_strip_all_tags( $content ); } $content = trim( $content ); if ( $content ) { $replaced = sprintf( /* translators: 1: 'Consented' or 'Not consented', 2: conditions */ _x( '%1$s: %2$s', 'mail output for acceptance checkboxes', 'contact-form-7' ), $replaced, $content ); } return $replaced; } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_acceptance', 35, 0 ); function wpcf7_add_tag_generator_acceptance() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'acceptance', __( 'acceptance', 'contact-form-7' ), 'wpcf7_tag_generator_acceptance', array( 'version' => '2' ) ); } function wpcf7_tag_generator_acceptance( $contact_form, $options ) { $field_types = array( 'acceptance' => array( 'display_name' => __( 'Acceptance checkbox', 'contact-form-7' ), 'heading' => __( 'Acceptance checkbox form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for an acceptance checkbox.', 'contact-form-7' ), ), ); $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>


    print( 'field_name' ); $tgg->print( 'class_attr' ); ?>
    ', wpcf7_format_atts( array( 'type' => 'text', 'required' => true, 'value' => __( 'Put the condition for consent here.', 'contact-form-7' ), 'data-tag-part' => 'content', 'aria-labelledby' => $tgg->ref( 'value-legend' ), ) ) ); ?>
    print( 'insert_box_content' ); $tgg->print( 'mail_tag_tip' ); ?>
    true, ) ); } function wpcf7_response_form_tag_handler( $tag ) { if ( $contact_form = wpcf7_get_current_contact_form() ) { return $contact_form->form_response_output(); } } PK)o#]*-Qmodules/count.phpnu[ true, 'zero-controls-container' => true, 'not-for-mail' => true, ) ); } function wpcf7_count_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $targets = wpcf7_scan_form_tags( array( 'name' => $tag->name ) ); $maxlength = $minlength = null; while ( $targets ) { $target = array_shift( $targets ); if ( 'count' !== $target->type ) { $maxlength = $target->get_maxlength_option(); $minlength = $target->get_minlength_option(); break; } } if ( $maxlength and $minlength and $maxlength < $minlength ) { $maxlength = $minlength = null; } if ( $tag->has_option( 'down' ) ) { $value = (int) $maxlength; $class = 'wpcf7-character-count down'; } else { $value = '0'; $class = 'wpcf7-character-count up'; } $atts = array(); $atts['id'] = $tag->get_id_option(); $atts['class'] = $tag->get_class_option( $class ); $atts['data-target-name'] = $tag->name; $atts['data-starting-value'] = $value; $atts['data-current-value'] = $value; $atts['data-maximum-value'] = $maxlength; $atts['data-minimum-value'] = $minlength; $html = sprintf( '%2$s', wpcf7_format_atts( $atts ), $value ); return $html; } PK)o#]bK  modules/select.phpnu[ true, 'selectable-values' => true, ) ); } function wpcf7_select_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $atts = array(); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $atts['autocomplete'] = $tag->get_option( 'autocomplete', '[-0-9a-zA-Z]+', true ); if ( $tag->is_required() ) { $atts['aria-required'] = 'true'; } if ( $validation_error ) { $atts['aria-invalid'] = 'true'; $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $atts['aria-invalid'] = 'false'; } $multiple = $tag->has_option( 'multiple' ); $include_blank = $tag->has_option( 'include_blank' ); $first_as_label = $tag->has_option( 'first_as_label' ); if ( $tag->has_option( 'size' ) ) { $size = $tag->get_option( 'size', 'int', true ); if ( $size ) { $atts['size'] = $size; } elseif ( $multiple ) { $atts['size'] = 4; } else { $atts['size'] = 1; } } if ( $data = (array) $tag->get_data_option() ) { $tag->values = array_merge( $tag->values, array_values( $data ) ); $tag->labels = array_merge( $tag->labels, array_values( $data ) ); } $values = $tag->values; $labels = $tag->labels; $default_choice = $tag->get_default_option( null, array( 'multiple' => $multiple, ) ); if ( $include_blank or empty( $values ) ) { array_unshift( $labels, __( '—Please choose an option—', 'contact-form-7' ) ); array_unshift( $values, '' ); } elseif ( $first_as_label ) { $values[0] = ''; } $html = ''; $hangover = wpcf7_get_hangover( $tag->name ); foreach ( $values as $key => $value ) { if ( $hangover ) { $selected = in_array( $value, (array) $hangover, true ); } else { $selected = in_array( $value, (array) $default_choice, true ); } $item_atts = array( 'value' => $value, 'selected' => $selected, ); $label = isset( $labels[$key] ) ? $labels[$key] : $value; $html .= sprintf( '', wpcf7_format_atts( $item_atts ), esc_html( $label ) ); } $atts['multiple'] = (bool) $multiple; $atts['name'] = $tag->name . ( $multiple ? '[]' : '' ); $html = sprintf( '%4$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), $html, $validation_error ); return $html; } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_select_rules', 10, 2 ); function wpcf7_swv_add_select_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'type' => array( 'select*' ), ) ); foreach ( $tags as $tag ) { $schema->add_rule( wpcf7_swv_create_rule( 'required', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_required' ), ) ) ); } } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_select_enum_rules', 20, 2 ); function wpcf7_swv_add_select_enum_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'basetype' => array( 'select' ), ) ); $values = array_reduce( $tags, function ( $values, $tag ) { if ( ! isset( $values[$tag->name] ) ) { $values[$tag->name] = array(); } $tag_values = array_merge( (array) $tag->values, (array) $tag->get_data_option() ); if ( $tag->has_option( 'first_as_label' ) ) { $tag_values = array_slice( $tag_values, 1 ); } $values[$tag->name] = array_merge( $values[$tag->name], $tag_values ); return $values; }, array() ); foreach ( $values as $field => $field_values ) { $field_values = array_map( static function ( $value ) { return html_entity_decode( (string) $value, ENT_QUOTES | ENT_HTML5, 'UTF-8' ); }, $field_values ); $field_values = array_filter( array_unique( $field_values ), static function ( $value ) { return '' !== $value; } ); $schema->add_rule( wpcf7_swv_create_rule( 'enum', array( 'field' => $field, 'accept' => array_values( $field_values ), 'error' => $contact_form->filter_message( __( "Undefined value was submitted through this field.", 'contact-form-7' ) ), ) ) ); } } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_menu', 25, 0 ); function wpcf7_add_tag_generator_menu() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'menu', __( 'drop-down menu', 'contact-form-7' ), 'wpcf7_tag_generator_menu', array( 'version' => '2' ) ); } function wpcf7_tag_generator_menu( $contact_form, $options ) { $field_types = array( 'select' => array( 'display_name' => __( 'Drop-down menu', 'contact-form-7' ), 'heading' => __( 'Drop-down menu form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a drop-down menu.', 'contact-form-7' ), ), ); $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'with_required' => true, 'select_options' => array( 'select' => $field_types['select']['display_name'], ), ) ); $tgg->print( 'field_name' ); $tgg->print( 'class_attr' ); $tgg->print( 'selectable_values', array( 'first_as_label' => true, ) ); ?>
    print( 'insert_box_content' ); $tgg->print( 'mail_tag_tip' ); ?>
    add_service( 'constant_contact', $service ); } add_action( 'wpcf7_submit', 'wpcf7_constant_contact_submit', 10, 2 ); /** * Callback to the wpcf7_submit action hook. Creates a contact * based on the submission. */ function wpcf7_constant_contact_submit( $contact_form, $result ) { $service = WPCF7_ConstantContact::get_instance(); if ( ! $service->is_active() ) { return; } if ( $contact_form->in_demo_mode() ) { return; } $do_submit = true; if ( empty( $result['status'] ) or ! in_array( $result['status'], array( 'mail_sent' ), true ) ) { $do_submit = false; } $prop = $contact_form->prop( 'constant_contact' ); if ( empty( $prop['enable_contact_list'] ) ) { $do_submit = false; } $do_submit = apply_filters( 'wpcf7_constant_contact_submit', $do_submit, $contact_form, $result ); if ( ! $do_submit ) { return; } $submission = WPCF7_Submission::get_instance(); $consented = true; foreach ( $contact_form->scan_form_tags( 'feature=name-attr' ) as $tag ) { if ( $tag->has_option( 'consent_for:constant_contact' ) and null == $submission->get_posted_data( $tag->name ) ) { $consented = false; break; } } if ( ! $consented ) { return; } $request_builder_class_name = apply_filters( 'wpcf7_constant_contact_contact_post_request_builder', 'WPCF7_ConstantContact_ContactPostRequest' ); if ( ! class_exists( $request_builder_class_name ) ) { return; } $request_builder = new $request_builder_class_name(); $request_builder->build( $submission ); if ( ! $request_builder->is_valid() ) { return; } $email = $request_builder->get_email_address(); if ( $email ) { if ( $service->email_exists( $email ) ) { return; } $token = null; do_action_ref_array( 'wpcf7_doi', array( 'wpcf7_constant_contact', array( 'email_to' => $email, 'properties' => $request_builder->to_array(), ), &$token, ) ); if ( isset( $token ) ) { return; } } $service->create_contact( $request_builder->to_array() ); } PK)o#] 7"modules/constant-contact/error_lognu[[03-Sep-2026 07:36:26 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/constant-contact.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/constant-contact.php on line 8 [03-Sep-2026 07:37:05 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_filter() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/contact-form-properties.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/contact-form-properties.php on line 3 [03-Sep-2026 07:46:46 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/doi.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/doi.php on line 9 [03-Sep-2026 08:09:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/constant-contact.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/constant-contact.php on line 8 [03-Sep-2026 08:09:04 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_filter() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/contact-form-properties.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/contact-form-properties.php on line 3 [03-Sep-2026 08:09:06 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/doi.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/constant-contact/doi.php on line 9 PK)o#](4modules/constant-contact/contact-form-properties.phpnu[is_active() ) { $properties += array( 'constant_contact' => array(), ); } return $properties; } add_filter( 'wpcf7_contact_form_property_constant_contact', 'wpcf7_constant_contact_setup_property', 10, 2 ); /** * Sets up the constant_contact property value. For back-compat, this attempts * to take over the value from old settings if the property is empty. */ function wpcf7_constant_contact_setup_property( $property, $contact_form ) { if ( ! empty( $property ) ) { $property = wp_parse_args( $property, array( 'enable_contact_list' => false, 'contact_lists' => array(), ) ); return $property; } $property = array( 'enable_contact_list' => true, 'contact_lists' => array(), ); if ( $contact_form->initial() ) { return $property; } $service_option = (array) WPCF7::get_option( 'constant_contact' ); $property['enable_contact_list'] = ! $contact_form->is_false( 'constant_contact' ); if ( isset( $service_option['contact_lists'] ) ) { $contact_lists = (array) $service_option['contact_lists']; $contact_lists_selected = array(); foreach ( $contact_lists as $list ) { if ( empty( $list['selected'] ) ) { continue; } foreach ( (array) $list['selected'] as $key => $val ) { if ( ! isset( $contact_lists_selected[$key] ) ) { $contact_lists_selected[$key] = array(); } $contact_lists_selected[$key][] = $list['list_id']; } } $related_keys = array( sprintf( 'wpcf7_contact_form:%d', $contact_form->id() ), 'default', ); foreach ( $related_keys as $key ) { if ( ! empty( $contact_lists_selected[$key] ) ) { $property['contact_lists'] = $contact_lists_selected[$key]; break; } } } return $property; } add_action( 'wpcf7_save_contact_form', 'wpcf7_constant_contact_save_contact_form', 10, 1 ); /** * Saves the constant_contact property value. */ function wpcf7_constant_contact_save_contact_form( $contact_form ) { $service = WPCF7_ConstantContact::get_instance(); if ( ! $service->is_active() ) { return; } $prop = isset( $_POST['wpcf7-ctct'] ) ? (array) $_POST['wpcf7-ctct'] : array(); $prop = wp_parse_args( $prop, array( 'enable_contact_list' => false, 'contact_lists' => array(), ) ); $contact_form->set_properties( array( 'constant_contact' => $prop, ) ); } add_filter( 'wpcf7_editor_panels', 'wpcf7_constant_contact_editor_panels', 10, 1 ); /** * Builds the editor panel for the constant_contact property. */ function wpcf7_constant_contact_editor_panels( $panels ) { $service = WPCF7_ConstantContact::get_instance(); if ( ! $service->is_active() ) { return $panels; } $contact_form = WPCF7_ContactForm::get_current(); $prop = wp_parse_args( $contact_form->prop( 'constant_contact' ), array( 'enable_contact_list' => false, 'contact_lists' => array(), ) ); $editor_panel = static function () use ( $prop, $service ) { $description = sprintf( esc_html( /* translators: %s: link labeled 'Constant Contact integration' */ __( "You can set up the Constant Contact integration here. For details, see %s.", 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/constant-contact-integration/', 'contact-form-7' ), __( 'Constant Contact integration', 'contact-form-7' ) ) ); $lists = $service->get_contact_lists(); ?>

    array( 'title' => __( 'Constant Contact', 'contact-form-7' ), 'callback' => $editor_panel, ), ); return $panels; } PK)o#][A modules/constant-contact/doi.phpnu[ apply_filters( 'wpcf7_constant_contact_doi_optin_callback', 'wpcf7_constant_contact_doi_default_optin_callback' ), 'email_callback' => apply_filters( 'wpcf7_constant_contact_doi_email_callback', 'wpcf7_constant_contact_doi_default_email_callback' ), ) ); } /** * Default optin_callback function. */ function wpcf7_constant_contact_doi_default_optin_callback( $properties ) { $service = WPCF7_ConstantContact::get_instance(); if ( $service->is_active() ) { $service->create_contact( $properties ); } } /** * Default email_callback function. */ function wpcf7_constant_contact_doi_default_email_callback( $args ) { if ( ! isset( $args['token'] ) or ! isset( $args['email_to'] ) ) { return; } $site_title = wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ); $link = add_query_arg( array( 'doitoken' => $args['token'] ), home_url() ); $to = $args['email_to']; $subject = sprintf( /* translators: %s: blog name */ __( 'Opt-in confirmation from %s', 'contact-form-7' ), $site_title ); $message = sprintf( /* translators: 1: blog name, 2: confirmation link */ __( 'Hello, This is a confirmation email sent from %1$s. We have received your submission to our web form, according to which you have allowed us to add you to our contact list. But, the process has not yet been completed. To complete it, please click the following link. %2$s If it was not your intention, or if you have no idea why you received this message, please do not click on the link, and ignore this message. We will never collect or use your personal data without your clear consent. Sincerely, %1$s', 'contact-form-7' ), $site_title, $link ); wp_mail( $to, $subject, $message ); } PK)o#]IQRYt0t0$modules/constant-contact/service.phpnu[authorization_endpoint = self::authorization_endpoint; $this->token_endpoint = self::token_endpoint; $option = (array) WPCF7::get_option( self::service_name ); if ( isset( $option['client_id'] ) ) { $this->client_id = $option['client_id']; } if ( isset( $option['client_secret'] ) ) { $this->client_secret = $option['client_secret']; } if ( isset( $option['access_token'] ) ) { $this->access_token = $option['access_token']; } if ( isset( $option['refresh_token'] ) ) { $this->refresh_token = $option['refresh_token']; } if ( $this->is_active() ) { if ( isset( $option['contact_lists'] ) ) { $this->contact_lists = $option['contact_lists']; } } add_action( 'wpcf7_admin_init', array( $this, 'auth_redirect' ) ); } public function auth_redirect() { $auth = isset( $_GET['auth'] ) ? trim( $_GET['auth'] ) : ''; if ( self::service_name === $auth and current_user_can( 'wpcf7_manage_integration' ) ) { $redirect_to = add_query_arg( array( 'service' => self::service_name, 'action' => 'auth_redirect', 'code' => isset( $_GET['code'] ) ? trim( $_GET['code'] ) : '', 'state' => isset( $_GET['state'] ) ? trim( $_GET['state'] ) : '', ), menu_page_url( 'wpcf7-integration', false ) ); wp_safe_redirect( $redirect_to ); exit(); } } protected function save_data() { $option = array_merge( (array) WPCF7::get_option( self::service_name ), array( 'client_id' => $this->client_id, 'client_secret' => $this->client_secret, 'access_token' => $this->access_token, 'refresh_token' => $this->refresh_token, 'contact_lists' => $this->contact_lists, ) ); WPCF7::update_option( self::service_name, $option ); } protected function reset_data() { $this->client_id = ''; $this->client_secret = ''; $this->access_token = ''; $this->refresh_token = ''; $this->contact_lists = array(); $this->save_data(); } public function get_title() { return __( 'Constant Contact', 'contact-form-7' ); } public function get_categories() { return array( 'email_marketing' ); } public function icon() { } public function link() { echo 'constantcontact.com'; } protected function get_redirect_uri() { return admin_url( '/?auth=' . self::service_name ); } protected function menu_page_url( $args = '' ) { $args = wp_parse_args( $args, array() ); $url = menu_page_url( 'wpcf7-integration', false ); $url = add_query_arg( array( 'service' => self::service_name ), $url ); if ( ! empty( $args ) ) { $url = add_query_arg( $args, $url ); } return $url; } public function load( $action = '' ) { if ( 'auth_redirect' === $action ) { $code = isset( $_GET['code'] ) ? urldecode( $_GET['code'] ) : ''; $state = isset( $_GET['state'] ) ? urldecode( $_GET['state'] ) : ''; if ( $code and $state and wpcf7_verify_nonce( $state, 'wpcf7_constant_contact_authorize' ) ) { $response = $this->request_token( $code ); } if ( ! empty( $this->access_token ) ) { $message = 'success'; } else { $message = 'failed'; } wp_safe_redirect( $this->menu_page_url( array( 'action' => 'setup', 'message' => $message, ) ) ); exit(); } if ( 'setup' === $action and 'POST' === $_SERVER['REQUEST_METHOD'] ) { check_admin_referer( 'wpcf7-constant-contact-setup' ); if ( ! empty( $_POST['reset'] ) ) { $this->reset_data(); } else { $this->client_id = isset( $_POST['client_id'] ) ? trim( $_POST['client_id'] ) : ''; $this->client_secret = isset( $_POST['client_secret'] ) ? trim( $_POST['client_secret'] ) : ''; $this->save_data(); $this->authorize( 'contact_data offline_access' ); } wp_safe_redirect( $this->menu_page_url( 'action=setup' ) ); exit(); } } protected function authorize( $scope = '' ) { $endpoint = add_query_arg( array_map( 'urlencode', array( 'response_type' => 'code', 'client_id' => $this->client_id, 'redirect_uri' => $this->get_redirect_uri(), 'scope' => $scope, 'state' => wpcf7_create_nonce( 'wpcf7_constant_contact_authorize' ), ) ), $this->authorization_endpoint ); if ( wp_redirect( sanitize_url( $endpoint ) ) ) { exit(); } } public function email_exists( $email ) { $endpoint = add_query_arg( array( 'email' => $email, 'status' => 'all', ), 'https://api.cc.email/v3/contacts' ); $request = array( 'method' => 'GET', 'headers' => array( 'Accept' => 'application/json', 'Content-Type' => 'application/json; charset=utf-8', ), ); $response = $this->remote_request( $endpoint, $request ); if ( 400 <= (int) wp_remote_retrieve_response_code( $response ) ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } return false; } $response_body = wp_remote_retrieve_body( $response ); if ( empty( $response_body ) ) { return false; } $response_body = json_decode( $response_body, true ); return ! empty( $response_body['contacts'] ); } public function create_contact( $properties ) { $endpoint = 'https://api.cc.email/v3/contacts'; $request = array( 'method' => 'POST', 'headers' => array( 'Accept' => 'application/json', 'Content-Type' => 'application/json; charset=utf-8', ), 'body' => wp_json_encode( $properties ), ); $response = $this->remote_request( $endpoint, $request ); if ( 400 <= (int) wp_remote_retrieve_response_code( $response ) ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } return false; } } public function get_contact_lists() { $endpoint = 'https://api.cc.email/v3/contact_lists'; $request = array( 'method' => 'GET', 'headers' => array( 'Accept' => 'application/json', 'Content-Type' => 'application/json; charset=utf-8', ), ); $response = $this->remote_request( $endpoint, $request ); if ( 400 <= (int) wp_remote_retrieve_response_code( $response ) ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } return false; } $response_body = wp_remote_retrieve_body( $response ); if ( empty( $response_body ) ) { return false; } $response_body = json_decode( $response_body, true ); if ( ! empty( $response_body['lists'] ) ) { return (array) $response_body['lists']; } else { return array(); } } public function update_contact_lists( $selection = array() ) { $contact_lists = array(); $contact_lists_on_api = $this->get_contact_lists(); if ( false !== $contact_lists_on_api ) { foreach ( (array) $contact_lists_on_api as $list ) { if ( isset( $list['list_id'] ) ) { $list_id = trim( $list['list_id'] ); } else { continue; } if ( isset( $this->contact_lists[$list_id]['selected'] ) ) { $list['selected'] = $this->contact_lists[$list_id]['selected']; } else { $list['selected'] = array(); } $contact_lists[$list_id] = $list; } } else { $contact_lists = $this->contact_lists; } foreach ( (array) $selection as $key => $ids_or_names ) { foreach ( $contact_lists as $list_id => $list ) { if ( in_array( $list['list_id'], (array) $ids_or_names, true ) or in_array( $list['name'], (array) $ids_or_names, true ) ) { $contact_lists[$list_id]['selected'][$key] = true; } else { unset( $contact_lists[$list_id]['selected'][$key] ); } } } $this->contact_lists = $contact_lists; if ( $selection ) { $this->save_data(); } return $this->contact_lists; } public function admin_notice( $message = '' ) { switch ( $message ) { case 'success': wp_admin_notice( esc_html( __( "Connection established.", 'contact-form-7' ) ), array( 'type' => 'success' ) ); break; case 'failed': wp_admin_notice( sprintf( '%1$s: %2$s', esc_html( __( "Error", 'contact-form-7' ) ), esc_html( __( "Failed to establish connection. Please double-check your configuration.", 'contact-form-7' ) ) ), array( 'type' => 'error' ) ); break; case 'updated': wp_admin_notice( esc_html( __( "Configuration updated.", 'contact-form-7' ) ), array( 'type' => 'success' ) ); break; } } public function display( $action = '' ) { echo sprintf( '

    %1$s %2$s

    ', esc_html( __( 'Warning:', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/2024/02/02/we-end-the-constant-contact-integration/', 'contact-form-7' ), __( "This feature is deprecated. You are not recommended to use it.", 'contact-form-7' ) ) ); echo sprintf( '

    %s

    ', esc_html( __( "The Constant Contact integration module allows you to send contact data collected through your contact forms to the Constant Contact API. You can create reliable email subscription services in a few easy steps.", 'contact-form-7' ) ) ); echo sprintf( '

    %s

    ', wpcf7_link( __( 'https://contactform7.com/constant-contact-integration/', 'contact-form-7' ), __( 'Constant Contact integration', 'contact-form-7' ) ) ); if ( $this->is_active() ) { echo sprintf( '

    %s

    ', esc_html( __( "This site is connected to the Constant Contact API.", 'contact-form-7' ) ) ); } if ( 'setup' === $action ) { $this->display_setup(); } else { echo sprintf( '

    %2$s

    ', esc_url( $this->menu_page_url( 'action=setup' ) ), esc_html( __( 'Setup Integration', 'contact-form-7' ) ) ); } } private function display_setup() { ?>
    is_active() ) { echo esc_html( $this->client_id ); echo sprintf( '', esc_attr( $this->client_id ) ); } else { echo sprintf( '', esc_attr( $this->client_id ) ); } ?>
    is_active() ) { echo esc_html( wpcf7_mask_password( $this->client_secret, 4, 4 ) ); echo sprintf( '', esc_attr( $this->client_secret ) ); } else { echo sprintf( '', esc_attr( $this->client_secret ) ); } ?>
    ', $this->get_redirect_uri() ); ?>

    is_active() ) { submit_button( _x( 'Reset Keys', 'API keys', 'contact-form-7' ), 'small', 'reset' ); } else { submit_button( __( 'Connect to the Constant Contact API', 'contact-form-7' ) ); } ?>
    set_create_source( 'Contact' ); $this->set_first_name( $submission->get_posted_string( 'your-first-name' ) ); $this->set_last_name( $submission->get_posted_string( 'your-last-name' ) ); if ( ! ( $this->first_name || $this->last_name ) and $your_name = $submission->get_posted_string( 'your-name' ) ) { $your_name = preg_split( '/[\s]+/', $your_name, 2 ); $this->set_first_name( array_shift( $your_name ) ); $this->set_last_name( array_shift( $your_name ) ); } $this->set_email_address( $submission->get_posted_string( 'your-email' ), 'implicit' ); $this->set_job_title( $submission->get_posted_string( 'your-job-title' ) ); $this->set_company_name( $submission->get_posted_string( 'your-company-name' ) ); $this->set_birthday( $submission->get_posted_string( 'your-birthday-month' ), $submission->get_posted_string( 'your-birthday-day' ) ); if ( ! ( $this->birthday_month && $this->birthday_day ) ) { $date = $submission->get_posted_string( 'your-birthday' ); if ( preg_match( '/^(\d{4})-(\d{2})-(\d{2})$/', $date, $matches ) ) { $this->set_birthday( $matches[2], $matches[3] ); } } $this->set_anniversary( $submission->get_posted_string( 'your-anniversary' ) ); $this->add_phone_number( $submission->get_posted_string( 'your-phone-number' ) ); $this->add_street_address( $submission->get_posted_string( 'your-address-street' ), $submission->get_posted_string( 'your-address-city' ), $submission->get_posted_string( 'your-address-state' ), $submission->get_posted_string( 'your-address-postal-code' ), $submission->get_posted_string( 'your-address-country' ) ); $service_option = (array) WPCF7::get_option( 'constant_contact' ); $contact_lists = isset( $service_option['contact_lists'] ) ? $service_option['contact_lists'] : array(); $contact_form = $submission->get_contact_form(); $prop = $contact_form->prop( 'constant_contact' ); if ( ! empty( $prop['enable_contact_list'] ) and ! empty( $prop['contact_lists'] ) ) { foreach ( (array) $prop['contact_lists'] as $list_id ) { $this->add_list_membership( $list_id ); } } } public function is_valid() { return $this->create_source && ( $this->email_address || $this->first_name || $this->last_name ); } public function to_array() { $output = array( 'email_address' => $this->email_address, 'first_name' => $this->first_name, 'last_name' => $this->last_name, 'job_title' => $this->job_title, 'company_name' => $this->company_name, 'create_source' => $this->create_source, 'birthday_month' => $this->birthday_month, 'birthday_day' => $this->birthday_day, 'anniversary' => $this->anniversary, 'custom_fields' => $this->custom_fields, 'phone_numbers' => $this->phone_numbers, 'street_addresses' => $this->street_addresses, 'list_memberships' => $this->list_memberships, ); return array_filter( $output ); } public function get_email_address() { if ( isset( $this->email_address['address'] ) ) { return $this->email_address['address']; } return ''; } public function set_email_address( $address, $permission_to_send = '' ) { if ( ! wpcf7_is_email( $address ) or 80 < $this->strlen( $address ) ) { return false; } $types_of_permission = array( 'implicit', 'explicit', 'deprecate', 'pending', 'unsubscribe', 'temp_hold', 'not_set', ); if ( ! in_array( $permission_to_send, $types_of_permission, true ) ) { $permission_to_send = 'implicit'; } return $this->email_address = array( 'address' => $address, 'permission_to_send' => $permission_to_send, ); } public function set_first_name( $first_name ) { $first_name = trim( $first_name ); if ( empty( $first_name ) or 50 < $this->strlen( $first_name ) ) { return false; } return $this->first_name = $first_name; } public function set_last_name( $last_name ) { $last_name = trim( $last_name ); if ( empty( $last_name ) or 50 < $this->strlen( $last_name ) ) { return false; } return $this->last_name = $last_name; } public function set_job_title( $job_title ) { $job_title = trim( $job_title ); if ( empty( $job_title ) or 50 < $this->strlen( $job_title ) ) { return false; } return $this->job_title = $job_title; } public function set_company_name( $company_name ) { $company_name = trim( $company_name ); if ( empty( $company_name ) or 50 < $this->strlen( $company_name ) ) { return false; } return $this->company_name = $company_name; } public function set_create_source( $create_source ) { if ( ! in_array( $create_source, array( 'Contact', 'Account' ), true ) ) { return false; } return $this->create_source = $create_source; } public function set_birthday( $month, $day ) { $month = (int) $month; $day = (int) $day; if ( $month < 1 || 12 < $month or $day < 1 || 31 < $day ) { return false; } $this->birthday_month = $month; $this->birthday_day = $day; return array( $this->birthday_month, $this->birthday_day ); } public function set_anniversary( $anniversary ) { $pattern = sprintf( '#^(%s)$#', implode( '|', array( '\d{1,2}/\d{1,2}/\d{4}', '\d{4}/\d{1,2}/\d{1,2}', '\d{4}-\d{1,2}-\d{1,2}', '\d{1,2}-\d{1,2}-\d{4}', ) ) ); if ( ! preg_match( $pattern, $anniversary ) ) { return false; } return $this->anniversary = $anniversary; } public function add_custom_field( $custom_field_id, $value ) { $uuid_pattern = '/^[0-9a-f-]+$/i'; $value = trim( $value ); if ( 25 <= count( $this->custom_fields ) or ! preg_match( $uuid_pattern, $custom_field_id ) or 255 < $this->strlen( $value ) ) { return false; } return $this->custom_fields[] = array( 'custom_field_id' => $custom_field_id, 'value' => $value, ); } public function add_phone_number( $phone_number, $kind = 'home' ) { $phone_number = trim( $phone_number ); if ( empty( $phone_number ) or ! wpcf7_is_tel( $phone_number ) or 25 < $this->strlen( $phone_number ) or 2 <= count( $this->phone_numbers ) or ! in_array( $kind, array( 'home', 'work', 'other' ), true ) ) { return false; } return $this->phone_numbers[] = array( 'phone_number' => $phone_number, 'kind' => $kind, ); } public function add_street_address( $street, $city, $state, $postal_code, $country, $kind = 'home' ) { $street = trim( $street ); $city = trim( $city ); $state = trim( $state ); $postal_code = trim( $postal_code ); $country = trim( $country ); if ( ! ( $street || $city || $state || $postal_code || $country ) or 1 <= count( $this->street_addresses ) or ! in_array( $kind, array( 'home', 'work', 'other' ), true ) or 255 < $this->strlen( $street ) or 50 < $this->strlen( $city ) or 50 < $this->strlen( $state ) or 50 < $this->strlen( $postal_code ) or 50 < $this->strlen( $country ) ) { return false; } return $this->street_addresses[] = array( 'kind' => $kind, 'street' => $street, 'city' => $city, 'state' => $state, 'postal_code' => $postal_code, 'country' => $country, ); } public function add_list_membership( $list_id ) { $uuid_pattern = '/^[0-9a-f-]+$/i'; if ( 50 <= count( $this->list_memberships ) or ! preg_match( $uuid_pattern, $list_id ) ) { return false; } return $this->list_memberships[] = $list_id; } protected function strlen( $text ) { return wpcf7_count_code_units( $text ); } } PK)o#]H? ? modules/submit.phpnu[type, 'has-spinner' ); $atts = array(); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $value = isset( $tag->values[0] ) ? $tag->values[0] : ''; if ( empty( $value ) ) { $value = __( 'Send', 'contact-form-7' ); } $atts['type'] = 'submit'; $atts['value'] = $value; $atts = wpcf7_format_atts( $atts ); $html = sprintf( '', $atts ); return $html; } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_submit', 55, 0 ); function wpcf7_add_tag_generator_submit() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'submit', __( 'submit', 'contact-form-7' ), 'wpcf7_tag_generator_submit', array( 'version' => '2' ) ); } function wpcf7_tag_generator_submit( $contact_form, $options ) { $field_types = array( 'submit' => array( 'display_name' => __( 'Submit button', 'contact-form-7' ), 'heading' => __( 'Submit button form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a submit button.', 'contact-form-7' ), ), ); $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'select_options' => array( 'submit' => $field_types['submit']['display_name'], ), ) ); $tgg->print( 'class_attr' ); $tgg->print( 'default_value', array( 'title' => __( 'Label', 'contact-form-7' ), ) ); ?>
    print( 'insert_box_content' ); ?>
    true, ) ); } function wpcf7_text_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type, 'wpcf7-text' ); if ( in_array( $tag->basetype, array( 'email', 'url', 'tel' ), true ) ) { $class .= ' wpcf7-validates-as-' . $tag->basetype; } if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $atts = array(); $atts['size'] = $tag->get_size_option( '40' ); $atts['maxlength'] = $tag->get_maxlength_option( '400' ); $atts['minlength'] = $tag->get_minlength_option(); if ( $atts['maxlength'] and $atts['minlength'] and $atts['maxlength'] < $atts['minlength'] ) { unset( $atts['maxlength'], $atts['minlength'] ); } $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['list'] = $tag->get_option( 'list', 'id', true ); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $atts['readonly'] = $tag->has_option( 'readonly' ); $atts['autocomplete'] = $tag->get_option( 'autocomplete', '[-0-9a-zA-Z]+', true ); if ( $tag->is_required() ) { $atts['aria-required'] = 'true'; } if ( $validation_error ) { $atts['aria-invalid'] = 'true'; $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $atts['aria-invalid'] = 'false'; } $value = (string) reset( $tag->values ); if ( $tag->has_option( 'placeholder' ) or $tag->has_option( 'watermark' ) ) { $atts['placeholder'] = $value; $value = ''; } $value = $tag->get_default_option( $value ); $value = wpcf7_get_hangover( $tag->name, $value ); $atts['value'] = $value; $atts['type'] = $tag->basetype; $atts['name'] = $tag->name; $html = sprintf( '%3$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), $validation_error ); return $html; } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_text_rules', 10, 2 ); function wpcf7_swv_add_text_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'basetype' => array( 'text', 'email', 'url', 'tel' ), ) ); foreach ( $tags as $tag ) { if ( $tag->is_required() ) { $schema->add_rule( wpcf7_swv_create_rule( 'required', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_required' ), ) ) ); } if ( 'email' === $tag->basetype ) { $schema->add_rule( wpcf7_swv_create_rule( 'email', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_email' ), ) ) ); } if ( 'url' === $tag->basetype ) { $schema->add_rule( wpcf7_swv_create_rule( 'url', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_url' ), ) ) ); } if ( 'tel' === $tag->basetype ) { $schema->add_rule( wpcf7_swv_create_rule( 'tel', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_tel' ), ) ) ); } if ( $minlength = $tag->get_minlength_option() ) { $schema->add_rule( wpcf7_swv_create_rule( 'minlength', array( 'field' => $tag->name, 'threshold' => absint( $minlength ), 'error' => wpcf7_get_message( 'invalid_too_short' ), ) ) ); } if ( $maxlength = $tag->get_maxlength_option( '400' ) ) { $schema->add_rule( wpcf7_swv_create_rule( 'maxlength', array( 'field' => $tag->name, 'threshold' => absint( $maxlength ), 'error' => wpcf7_get_message( 'invalid_too_long' ), ) ) ); } } } /* Messages */ add_filter( 'wpcf7_messages', 'wpcf7_text_messages', 10, 1 ); function wpcf7_text_messages( $messages ) { $messages = array_merge( $messages, array( 'invalid_email' => array( 'description' => __( "Email address that the sender entered is invalid", 'contact-form-7' ), 'default' => __( "Please enter an email address.", 'contact-form-7' ), ), 'invalid_url' => array( 'description' => __( "URL that the sender entered is invalid", 'contact-form-7' ), 'default' => __( "Please enter a URL.", 'contact-form-7' ), ), 'invalid_tel' => array( 'description' => __( "Telephone number that the sender entered is invalid", 'contact-form-7' ), 'default' => __( "Please enter a telephone number.", 'contact-form-7' ), ), ) ); return $messages; } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_text', 15, 0 ); function wpcf7_add_tag_generator_text() { $tag_generator = WPCF7_TagGenerator::get_instance(); $basetypes = array( 'text' => __( 'text', 'contact-form-7' ), 'email' => __( 'email', 'contact-form-7' ), 'url' => __( 'URL', 'contact-form-7' ), 'tel' => __( 'tel', 'contact-form-7' ), ); foreach ( $basetypes as $id => $title ) { $tag_generator->add( $id, $title, 'wpcf7_tag_generator_text', array( 'version' => '2' ) ); } } function wpcf7_tag_generator_text( $contact_form, $options ) { $field_types = array( 'text' => array( 'display_name' => __( 'Text field', 'contact-form-7' ), 'heading' => __( 'Text field form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a single-line plain text input field.', 'contact-form-7' ), 'maybe_purpose' => 'author_name', ), 'email' => array( 'display_name' => __( 'Email address field', 'contact-form-7' ), 'heading' => __( 'Email address field form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for an email address input field.', 'contact-form-7' ), 'maybe_purpose' => 'author_email', ), 'url' => array( 'display_name' => __( 'URL field', 'contact-form-7' ), 'heading' => __( 'URL field form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a URL input field.', 'contact-form-7' ), 'maybe_purpose' => 'author_url', ), 'tel' => array( 'display_name' => __( 'Telephone number field', 'contact-form-7' ), 'heading' => __( 'Telephone number field form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a telephone number input field.', 'contact-form-7' ), 'maybe_purpose' => 'author_tel', ), ); $basetype = $options['id']; if ( ! in_array( $basetype, array_keys( $field_types ), true ) ) { $basetype = 'text'; } $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'with_required' => true, 'select_options' => array( $basetype => $field_types[$basetype]['display_name'], ), ) ); $tgg->print( 'field_name', array( 'ask_if' => $field_types[$basetype]['maybe_purpose'] ) ); $tgg->print( 'class_attr' ); $tgg->print( 'min_max', array( 'title' => __( 'Length', 'contact-form-7' ), 'min_option' => 'minlength:', 'max_option' => 'maxlength:', ) ); $tgg->print( 'default_value', array( 'with_placeholder' => true, ) ); ?>
    print( 'insert_box_content' ); $tgg->print( 'mail_tag_tip' ); ?>
    true, 'display-hidden' => true, ) ); } function wpcf7_hidden_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $atts = array(); $class = wpcf7_form_controls_class( $tag->type ); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $value = (string) reset( $tag->values ); $value = $tag->get_default_option( $value ); $atts['value'] = $value; $atts['type'] = 'hidden'; $atts['name'] = $tag->name; $atts = wpcf7_format_atts( $atts ); $html = sprintf( '', $atts ); return $html; } PK)o#]h11modules/error_lognu[[03-Sep-2026 07:33:55 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/really-simple-captcha.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/really-simple-captcha.php on line 8 [03-Sep-2026 07:34:30 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/hidden.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/hidden.php on line 3 [03-Sep-2026 07:34:31 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/select.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/select.php on line 8 [03-Sep-2026 07:34:37 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/doi-helper.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/doi-helper.php on line 9 [03-Sep-2026 07:34:50 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_filter() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/listo.php:7 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/listo.php on line 7 [03-Sep-2026 07:35:24 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/count.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/count.php on line 8 [03-Sep-2026 07:36:17 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/response.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/response.php on line 8 [03-Sep-2026 07:36:20 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/reflection.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/reflection.php on line 9 [03-Sep-2026 07:36:20 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/acceptance.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/acceptance.php on line 8 [03-Sep-2026 07:36:40 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/quiz.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/quiz.php on line 8 [03-Sep-2026 07:36:43 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/file.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/file.php on line 8 [03-Sep-2026 07:36:43 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/text.php:12 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/text.php on line 12 [03-Sep-2026 07:36:44 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/date.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/date.php on line 9 [03-Sep-2026 07:43:40 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/submit.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/submit.php on line 8 [03-Sep-2026 07:43:50 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/number.php:10 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/number.php on line 10 [03-Sep-2026 07:46:56 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/checkbox.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/checkbox.php on line 8 [03-Sep-2026 07:47:00 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/textarea.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/textarea.php on line 8 [03-Sep-2026 07:47:01 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/flamingo.php:7 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/flamingo.php on line 7 [03-Sep-2026 07:48:24 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_filter() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/disallowed-list.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/disallowed-list.php on line 3 [03-Sep-2026 08:09:03 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/acceptance.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/acceptance.php on line 8 [03-Sep-2026 08:09:04 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/checkbox.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/checkbox.php on line 8 [03-Sep-2026 08:09:05 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/count.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/count.php on line 8 [03-Sep-2026 08:09:06 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/date.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/date.php on line 9 [03-Sep-2026 08:09:06 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_filter() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/disallowed-list.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/disallowed-list.php on line 3 [03-Sep-2026 08:09:07 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/doi-helper.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/doi-helper.php on line 9 [03-Sep-2026 08:09:08 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/file.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/file.php on line 8 [03-Sep-2026 08:09:09 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/flamingo.php:7 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/flamingo.php on line 7 [03-Sep-2026 08:09:10 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/hidden.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/hidden.php on line 3 [03-Sep-2026 08:09:10 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_filter() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/listo.php:7 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/listo.php on line 7 [03-Sep-2026 08:09:11 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/number.php:10 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/number.php on line 10 [03-Sep-2026 08:09:12 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/quiz.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/quiz.php on line 8 [03-Sep-2026 08:09:13 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/really-simple-captcha.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/really-simple-captcha.php on line 8 [03-Sep-2026 08:09:15 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/reflection.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/reflection.php on line 9 [03-Sep-2026 08:09:16 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/response.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/response.php on line 8 [03-Sep-2026 08:09:16 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/select.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/select.php on line 8 [03-Sep-2026 08:09:17 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/submit.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/submit.php on line 8 [03-Sep-2026 08:09:18 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/text.php:12 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/text.php on line 12 [03-Sep-2026 08:09:19 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/textarea.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/textarea.php on line 8 PK)o#]P>h!h!modules/flamingo.phpnu[in_demo_mode() ) { return; } $cases = (array) apply_filters( 'wpcf7_flamingo_submit_if', array( 'spam', 'mail_sent', 'mail_failed' ) ); if ( empty( $result['status'] ) or ! in_array( $result['status'], $cases, true ) ) { return; } $submission = WPCF7_Submission::get_instance(); if ( ! $submission or ! $posted_data = $submission->get_posted_data() ) { return; } if ( $submission->get_meta( 'do_not_store' ) ) { return; } // Exclude do-not-store form-tag values. $posted_data = array_filter( $posted_data, static function ( $name ) use ( $contact_form ) { return ! $contact_form->scan_form_tags( array( 'name' => $name, 'feature' => 'do-not-store', ) ); }, ARRAY_FILTER_USE_KEY ); $email = wpcf7_flamingo_get_value( 'email', $contact_form ); $name = wpcf7_flamingo_get_value( 'name', $contact_form ); $subject = wpcf7_flamingo_get_value( 'subject', $contact_form ); $meta = array(); $special_mail_tags = array( 'serial_number', 'remote_ip', 'user_agent', 'url', 'date', 'time', 'post_id', 'post_name', 'post_title', 'post_url', 'post_author', 'post_author_email', 'site_title', 'site_description', 'site_url', 'site_admin_email', 'user_login', 'user_email', 'user_display_name', ); foreach ( $special_mail_tags as $smt ) { $tagname = sprintf( '_%s', $smt ); $mail_tag = new WPCF7_MailTag( sprintf( '[%s]', $tagname ), $tagname, '' ); $meta[$smt] = apply_filters( 'wpcf7_special_mail_tags', null, $tagname, false, $mail_tag ); } $timestamp = $submission->get_meta( 'timestamp' ); if ( $timestamp and $datetime = date_create( '@' . $timestamp ) ) { $datetime->setTimezone( wp_timezone() ); $last_contacted = $datetime->format( 'Y-m-d H:i:s' ); } else { $last_contacted = '0000-00-00 00:00:00'; } if ( 'mail_sent' === $result['status'] ) { $flamingo_contact = Flamingo_Contact::add( array( 'email' => $email, 'name' => $name, 'last_contacted' => $last_contacted, ) ); } $post_meta = get_post_meta( $contact_form->id(), '_flamingo', true ); $channel_id = isset( $post_meta['channel'] ) ? (int) $post_meta['channel'] : wpcf7_flamingo_add_channel( $contact_form->name(), $contact_form->title() ); if ( $channel_id ) { if ( ! isset( $post_meta['channel'] ) or $post_meta['channel'] !== $channel_id ) { $post_meta = empty( $post_meta ) ? array() : (array) $post_meta; $post_meta = array_merge( $post_meta, array( 'channel' => $channel_id, ) ); update_post_meta( $contact_form->id(), '_flamingo', $post_meta ); } $channel = get_term( $channel_id, Flamingo_Inbound_Message::channel_taxonomy ); if ( ! $channel or is_wp_error( $channel ) ) { $channel = 'contact-form-7'; } else { $channel = $channel->slug; } } else { $channel = 'contact-form-7'; } $args = array( 'channel' => $channel, 'status' => $submission->get_status(), 'subject' => $subject, 'from' => trim( sprintf( '%s <%s>', $name, $email ) ), 'from_name' => $name, 'from_email' => $email, 'fields' => $posted_data, 'meta' => $meta, 'akismet' => $submission->pull( 'akismet' ), 'spam' => ( 'spam' === $result['status'] ), 'consent' => $submission->collect_consent(), 'timestamp' => $timestamp, 'posted_data_hash' => $submission->get_posted_data_hash(), ); if ( $args['spam'] ) { $args['spam_log'] = $submission->get_spam_log(); } $args['recaptcha'] = $submission->pull( 'recaptcha' ); $args = apply_filters( 'wpcf7_flamingo_inbound_message_parameters', $args ); $flamingo_inbound = Flamingo_Inbound_Message::add( $args ); if ( empty( $flamingo_contact ) ) { $flamingo_contact_id = 0; } elseif ( method_exists( $flamingo_contact, 'id' ) ) { $flamingo_contact_id = $flamingo_contact->id(); } else { $flamingo_contact_id = $flamingo_contact->id; } if ( empty( $flamingo_inbound ) ) { $flamingo_inbound_id = 0; } elseif ( method_exists( $flamingo_inbound, 'id' ) ) { $flamingo_inbound_id = $flamingo_inbound->id(); } else { $flamingo_inbound_id = $flamingo_inbound->id; } $result += array( 'flamingo_contact_id' => absint( $flamingo_contact_id ), 'flamingo_inbound_id' => absint( $flamingo_inbound_id ), ); do_action( 'wpcf7_after_flamingo', $result ); } function wpcf7_flamingo_get_value( $field, $contact_form ) { if ( empty( $field ) or empty( $contact_form ) ) { return false; } $value = ''; if ( in_array( $field, array( 'email', 'name', 'subject' ), true ) ) { $template = $contact_form->pref( 'flamingo_' . $field ); if ( null === $template ) { $template = sprintf( '[your-%s]', $field ); } else { $template = trim( wpcf7_strip_quote( $template ) ); } $value = wpcf7_mail_replace_tags( $template ); } $value = apply_filters( 'wpcf7_flamingo_get_value', $value, $field, $contact_form ); return $value; } function wpcf7_flamingo_add_channel( $slug, $name = '' ) { if ( ! class_exists( 'Flamingo_Inbound_Message' ) ) { return false; } $parent = term_exists( 'contact-form-7', Flamingo_Inbound_Message::channel_taxonomy ); if ( ! $parent ) { $parent = wp_insert_term( __( 'Contact Form 7', 'contact-form-7' ), Flamingo_Inbound_Message::channel_taxonomy, array( 'slug' => 'contact-form-7' ) ); if ( is_wp_error( $parent ) ) { return false; } } $parent = (int) $parent['term_id']; if ( ! is_taxonomy_hierarchical( Flamingo_Inbound_Message::channel_taxonomy ) ) { // backward compat for Flamingo 1.0.4 and lower return $parent; } if ( empty( $name ) ) { $name = $slug; } $channel = term_exists( $slug, Flamingo_Inbound_Message::channel_taxonomy, $parent ); if ( ! $channel ) { $channel = wp_insert_term( $name, Flamingo_Inbound_Message::channel_taxonomy, array( 'slug' => $slug, 'parent' => $parent ) ); if ( is_wp_error( $channel ) ) { return false; } } return (int) $channel['term_id']; } add_action( 'wpcf7_after_update', 'wpcf7_flamingo_update_channel', 10, 1 ); function wpcf7_flamingo_update_channel( $contact_form ) { if ( ! class_exists( 'Flamingo_Inbound_Message' ) ) { return false; } $post_meta = get_post_meta( $contact_form->id(), '_flamingo', true ); $channel = isset( $post_meta['channel'] ) ? get_term( $post_meta['channel'], Flamingo_Inbound_Message::channel_taxonomy ) : get_term_by( 'slug', $contact_form->name(), Flamingo_Inbound_Message::channel_taxonomy ); if ( ! $channel or is_wp_error( $channel ) ) { return; } if ( $channel->name !== wp_unslash( $contact_form->title() ) ) { wp_update_term( $channel->term_id, Flamingo_Inbound_Message::channel_taxonomy, array( 'name' => $contact_form->title(), 'slug' => $contact_form->name(), 'parent' => $channel->parent, ) ); } } add_filter( 'wpcf7_special_mail_tags', 'wpcf7_flamingo_serial_number', 10, 4 ); /** * Returns output string of a special mail-tag. * * @param string $output The string to be output. * @param string $name The tag name of the special mail-tag. * @param bool $html Whether the mail-tag is used in an HTML content. * @param WPCF7_MailTag $mail_tag An object representation of the mail-tag. * @return string Output of the given special mail-tag. */ function wpcf7_flamingo_serial_number( $output, $name, $html, $mail_tag = null ) { if ( ! $mail_tag instanceof WPCF7_MailTag ) { wpcf7_doing_it_wrong( sprintf( '%s()', __FUNCTION__ ), __( 'The fourth parameter ($mail_tag) must be an instance of the WPCF7_MailTag class.', 'contact-form-7' ), '5.2.2' ); } if ( '_serial_number' !== $name ) { return $output; } if ( ! class_exists( 'Flamingo_Inbound_Message' ) or ! method_exists( 'Flamingo_Inbound_Message', 'count' ) ) { return $output; } if ( ! $contact_form = WPCF7_ContactForm::get_current() ) { return $output; } $post_meta = get_post_meta( $contact_form->id(), '_flamingo', true ); $channel_id = isset( $post_meta['channel'] ) ? (int) $post_meta['channel'] : wpcf7_flamingo_add_channel( $contact_form->name(), $contact_form->title() ); if ( $channel_id ) { return 1 + (int) Flamingo_Inbound_Message::count( array( 'channel_id' => $channel_id ) ); } return 0; } PK)o#]׻modules/file.phpnu[ true, 'file-uploading' => true, ) ); } function wpcf7_file_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $atts = array(); $atts['size'] = $tag->get_size_option( '40' ); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['capture'] = $tag->get_option( 'capture', '(user|environment)', true ); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $atts['accept'] = wpcf7_acceptable_filetypes( $tag->get_option( 'filetypes' ), 'attr' ); if ( $tag->is_required() ) { $atts['aria-required'] = 'true'; } if ( $validation_error ) { $atts['aria-invalid'] = 'true'; $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $atts['aria-invalid'] = 'false'; } $atts['type'] = 'file'; $atts['name'] = $tag->name; $html = sprintf( '%3$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), $validation_error ); return $html; } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_file_rules', 10, 2 ); function wpcf7_swv_add_file_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'basetype' => array( 'file' ), ) ); foreach ( $tags as $tag ) { if ( $tag->is_required() ) { $schema->add_rule( wpcf7_swv_create_rule( 'requiredfile', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_required' ), ) ) ); } $schema->add_rule( wpcf7_swv_create_rule( 'file', array( 'field' => $tag->name, 'accept' => explode( ',', wpcf7_acceptable_filetypes( $tag->get_option( 'filetypes' ), 'attr' ) ), 'error' => wpcf7_get_message( 'upload_file_type_invalid' ), ) ) ); $schema->add_rule( wpcf7_swv_create_rule( 'maxfilesize', array( 'field' => $tag->name, 'threshold' => $tag->get_limit_option(), 'error' => wpcf7_get_message( 'upload_file_too_large' ), ) ) ); } } add_filter( 'wpcf7_mail_tag_replaced_file', 'wpcf7_file_mail_tag', 10, 4 ); add_filter( 'wpcf7_mail_tag_replaced_file*', 'wpcf7_file_mail_tag', 10, 4 ); function wpcf7_file_mail_tag( $replaced, $submitted, $html, $mail_tag ) { $submission = WPCF7_Submission::get_instance(); $uploaded_files = $submission->uploaded_files(); $name = $mail_tag->field_name(); if ( ! empty( $uploaded_files[$name] ) ) { $paths = (array) $uploaded_files[$name]; $paths = array_map( 'wp_basename', $paths ); $replaced = wpcf7_flat_join( $paths, array( 'separator' => wp_get_list_item_separator(), ) ); } return $replaced; } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_file', 50, 0 ); function wpcf7_add_tag_generator_file() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'file', __( 'file', 'contact-form-7' ), 'wpcf7_tag_generator_file', array( 'version' => '2' ) ); } function wpcf7_tag_generator_file( $contact_form, $options ) { $field_types = array( 'file' => array( 'display_name' => __( 'File uploading field', 'contact-form-7' ), 'heading' => __( 'File uploading field form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a file uploading field.', 'contact-form-7' ), ), ); $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'with_required' => true, 'select_options' => array( 'file' => $field_types['file']['display_name'], ), ) ); $tgg->print( 'field_name' ); $tgg->print( 'class_attr' ); ?>
    print( 'insert_box_content' ); $tgg->print( 'mail_tag_tip' ); ?>
    true, 'selectable-values' => true, 'multiple-controls-container' => true, ) ); } function wpcf7_checkbox_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $label_first = $tag->has_option( 'label_first' ); $use_label_element = $tag->has_option( 'use_label_element' ); $exclusive = $tag->has_option( 'exclusive' ); $free_text = $tag->has_option( 'free_text' ); $multiple = false; if ( 'checkbox' === $tag->basetype ) { $multiple = ! $exclusive; } else { // radio $exclusive = false; } if ( $exclusive ) { $class .= ' wpcf7-exclusive-checkbox'; } $atts = array(); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); if ( $validation_error ) { $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } $tabindex = $tag->get_option( 'tabindex', 'signed_int', true ); if ( false !== $tabindex ) { $tabindex = (int) $tabindex; } $html = ''; $count = 0; if ( $data = (array) $tag->get_data_option() ) { if ( $free_text ) { $tag->values = array_merge( array_slice( $tag->values, 0, -1 ), array_values( $data ), array_slice( $tag->values, -1 ) ); $tag->labels = array_merge( array_slice( $tag->labels, 0, -1 ), array_values( $data ), array_slice( $tag->labels, -1 ) ); } else { $tag->values = array_merge( $tag->values, array_values( $data ) ); $tag->labels = array_merge( $tag->labels, array_values( $data ) ); } } $values = $tag->values; $labels = $tag->labels; $default_choice = $tag->get_default_option( null, array( 'multiple' => $multiple, ) ); $hangover = wpcf7_get_hangover( $tag->name, $multiple ? array() : '' ); foreach ( $values as $key => $value ) { if ( $hangover ) { $checked = in_array( $value, (array) $hangover, true ); } else { $checked = in_array( $value, (array) $default_choice, true ); } if ( isset( $labels[$key] ) ) { $label = $labels[$key]; } else { $label = $value; } $item_atts = array( 'type' => $tag->basetype, 'name' => $tag->name . ( $multiple ? '[]' : '' ), 'value' => $value, 'checked' => $checked, 'tabindex' => $tabindex, ); $item_atts = wpcf7_format_atts( $item_atts ); if ( $label_first ) { // put label first, input last $item = sprintf( '%1$s', esc_html( $label ), $item_atts ); } else { $item = sprintf( '%1$s', esc_html( $label ), $item_atts ); } if ( $use_label_element ) { $item = ''; } if ( false !== $tabindex and 0 < $tabindex ) { $tabindex += 1; } $class = 'wpcf7-list-item'; $count += 1; if ( 1 === $count ) { $class .= ' first'; } if ( count( $values ) === $count ) { // last round $class .= ' last'; if ( $free_text ) { $free_text_name = sprintf( '_wpcf7_free_text_%s', $tag->name ); $free_text_atts = array( 'name' => $free_text_name, 'class' => 'wpcf7-free-text', 'tabindex' => $tabindex, ); if ( wpcf7_is_posted() and isset( $_POST[$free_text_name] ) ) { $free_text_atts['value'] = wp_unslash( $_POST[$free_text_name] ); } $free_text_atts = wpcf7_format_atts( $free_text_atts ); $item .= sprintf( ' ', $free_text_atts ); $class .= ' has-free-text'; } } $item = '' . $item . ''; $html .= $item; } $html = sprintf( '%3$s%4$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), $html, $validation_error ); return $html; } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_checkbox_rules', 10, 2 ); function wpcf7_swv_add_checkbox_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'basetype' => array( 'checkbox', 'radio' ), ) ); foreach ( $tags as $tag ) { if ( $tag->is_required() or 'radio' === $tag->type ) { $schema->add_rule( wpcf7_swv_create_rule( 'required', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_required' ), ) ) ); } if ( 'radio' === $tag->type or $tag->has_option( 'exclusive' ) ) { $schema->add_rule( wpcf7_swv_create_rule( 'maxitems', array( 'field' => $tag->name, 'threshold' => 1, 'error' => $contact_form->filter_message( __( "Too many items are selected.", 'contact-form-7' ) ), ) ) ); } } } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_checkbox_enum_rules', 20, 2 ); function wpcf7_swv_add_checkbox_enum_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'basetype' => array( 'checkbox', 'radio' ), ) ); $values = array_reduce( $tags, function ( $values, $tag ) { if ( $tag->has_option( 'free_text' ) ) { $values[$tag->name] = 'free_text'; } if ( isset( $values[$tag->name] ) and ! is_array( $values[$tag->name] ) // Maybe 'free_text' ) { return $values; } if ( ! isset( $values[$tag->name] ) ) { $values[$tag->name] = array(); } $tag_values = array_merge( (array) $tag->values, (array) $tag->get_data_option() ); $values[$tag->name] = array_merge( $values[$tag->name], $tag_values ); return $values; }, array() ); foreach ( $values as $field => $field_values ) { if ( ! is_array( $field_values ) ) { // Maybe 'free_text' continue; } $field_values = array_map( static function ( $value ) { return html_entity_decode( (string) $value, ENT_QUOTES | ENT_HTML5, 'UTF-8' ); }, $field_values ); $field_values = array_filter( array_unique( $field_values ), static function ( $value ) { return '' !== $value; } ); $schema->add_rule( wpcf7_swv_create_rule( 'enum', array( 'field' => $field, 'accept' => array_values( $field_values ), 'error' => $contact_form->filter_message( __( "Undefined value was submitted through this field.", 'contact-form-7' ) ), ) ) ); } } add_filter( 'wpcf7_posted_data_checkbox', 'wpcf7_posted_data_checkbox', 10, 3 ); add_filter( 'wpcf7_posted_data_checkbox*', 'wpcf7_posted_data_checkbox', 10, 3 ); add_filter( 'wpcf7_posted_data_radio', 'wpcf7_posted_data_checkbox', 10, 3 ); function wpcf7_posted_data_checkbox( $value, $value_orig, $form_tag ) { if ( $form_tag->has_option( 'free_text' ) ) { $value = (array) $value; $free_text_name = sprintf( '_wpcf7_free_text_%s', $form_tag->name ); $free_text = wp_unslash( $_POST[$free_text_name] ?? '' ); $last_val = array_pop( $value ); if ( isset( $last_val ) ) { $last_val = sprintf( '%s %s', $last_val, $free_text ); $value[] = trim( $last_val ); } } return $value; } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_checkbox_and_radio', 30, 0 ); function wpcf7_add_tag_generator_checkbox_and_radio() { $tag_generator = WPCF7_TagGenerator::get_instance(); $basetypes = array( 'checkbox' => __( 'checkboxes', 'contact-form-7' ), 'radio' => __( 'radio buttons', 'contact-form-7' ), ); foreach ( $basetypes as $id => $title ) { $tag_generator->add( $id, $title, 'wpcf7_tag_generator_checkbox', array( 'version' => '2' ) ); } } function wpcf7_tag_generator_checkbox( $contact_form, $options ) { $field_types = array( 'checkbox' => array( 'display_name' => __( 'Checkboxes', 'contact-form-7' ), 'heading' => __( 'Checkboxes form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a group of checkboxes.', 'contact-form-7' ), ), 'radio' => array( 'display_name' => __( 'Radio buttons', 'contact-form-7' ), 'heading' => __( 'Radio buttons form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a group of radio buttons.', 'contact-form-7' ), ), ); $basetype = $options['id']; if ( ! in_array( $basetype, array_keys( $field_types ), true ) ) { $basetype = 'checkbox'; } $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'with_required' => 'checkbox' === $basetype, 'select_options' => array( $basetype => $field_types[$basetype]['display_name'], ), ) ); $tgg->print( 'field_name' ); $tgg->print( 'class_attr' ); $tgg->print( 'selectable_values', array( 'use_label_element' => 'checked', ) ); ?>
    print( 'insert_box_content' ); $tgg->print( 'mail_tag_tip' ); ?>
    true, 'do-not-store' => true, 'not-for-mail' => true, ) ); } function wpcf7_quiz_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $atts = array(); $atts['size'] = $tag->get_size_option( '40' ); $atts['maxlength'] = $tag->get_maxlength_option(); $atts['minlength'] = $tag->get_minlength_option(); if ( $atts['maxlength'] and $atts['minlength'] and $atts['maxlength'] < $atts['minlength'] ) { unset( $atts['maxlength'], $atts['minlength'] ); } $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $atts['autocomplete'] = 'off'; $atts['aria-required'] = 'true'; if ( $validation_error ) { $atts['aria-invalid'] = 'true'; $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $atts['aria-invalid'] = 'false'; } $pipes = $tag->pipes; if ( $pipes instanceof WPCF7_Pipes and ! $pipes->zero() ) { $pipe = $pipes->random_pipe(); $question = $pipe->before; $answer = $pipe->after; } else { // default quiz $question = '1+1=?'; $answer = '2'; } $answer = wpcf7_canonicalize( $answer, array( 'strip_separators' => true, ) ); $atts['type'] = 'text'; $atts['name'] = $tag->name; $html = sprintf( '%6$s', esc_attr( $tag->name ), esc_html( $question ), wpcf7_format_atts( $atts ), $tag->name, wp_hash( $answer, 'wpcf7_quiz' ), $validation_error ); return $html; } /* Validation filter */ add_filter( 'wpcf7_validate_quiz', 'wpcf7_quiz_validation_filter', 10, 2 ); function wpcf7_quiz_validation_filter( $result, $tag ) { $name = $tag->name; $answer = wp_unslash( $_POST[$name] ?? '' ); $answer = wpcf7_canonicalize( $answer, array( 'strip_separators' => true, ) ); $answer_hash = wp_hash( $answer, 'wpcf7_quiz' ); $expected_hash = (string) ( $_POST['_wpcf7_quiz_answer_' . $name] ?? '' ); if ( ! hash_equals( $expected_hash, $answer_hash ) ) { $result->invalidate( $tag, wpcf7_get_message( 'quiz_answer_not_correct' ) ); } return $result; } /* Ajax echo filter */ add_filter( 'wpcf7_refill_response', 'wpcf7_quiz_ajax_refill', 10, 1 ); add_filter( 'wpcf7_feedback_response', 'wpcf7_quiz_ajax_refill', 10, 1 ); function wpcf7_quiz_ajax_refill( $items ) { if ( ! is_array( $items ) ) { return $items; } $fes = wpcf7_scan_form_tags( array( 'type' => 'quiz' ) ); if ( empty( $fes ) ) { return $items; } $refill = array(); foreach ( $fes as $fe ) { $name = $fe['name']; $pipes = $fe['pipes']; if ( empty( $name ) ) { continue; } if ( $pipes instanceof WPCF7_Pipes and ! $pipes->zero() ) { $pipe = $pipes->random_pipe(); $question = $pipe->before; $answer = $pipe->after; } else { // default quiz $question = '1+1=?'; $answer = '2'; } $answer = wpcf7_canonicalize( $answer, array( 'strip_separators' => true, ) ); $refill[$name] = array( $question, wp_hash( $answer, 'wpcf7_quiz' ) ); } if ( ! empty( $refill ) ) { $items['quiz'] = $refill; } return $items; } /* Messages */ add_filter( 'wpcf7_messages', 'wpcf7_quiz_messages', 10, 1 ); function wpcf7_quiz_messages( $messages ) { $messages = array_merge( $messages, array( 'quiz_answer_not_correct' => array( 'description' => __( "Sender does not enter the correct answer to the quiz", 'contact-form-7' ), 'default' => __( "The answer to the quiz is incorrect.", 'contact-form-7' ), ), ) ); return $messages; } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_quiz', 40, 0 ); function wpcf7_add_tag_generator_quiz() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'quiz', __( 'quiz', 'contact-form-7' ), 'wpcf7_tag_generator_quiz', array( 'version' => '2' ) ); } function wpcf7_tag_generator_quiz( $contact_form, $options ) { $field_types = array( 'quiz' => array( 'display_name' => __( 'Quiz', 'contact-form-7' ), 'heading' => __( 'Quiz form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a quiz.', 'contact-form-7' ), ), ); $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'select_options' => array( 'quiz' => $field_types['quiz']['display_name'], ), ) ); $tgg->print( 'field_name' ); $tgg->print( 'class_attr' ); ?>
    %2$s', wpcf7_format_atts( array( 'id' => $tgg->ref( 'selectable-values-description' ), ) ), esc_html( __( "One pipe-separated question-answer pair (question|answer) per line.", 'contact-form-7' ) ) ); ?>
    %2$s', wpcf7_format_atts( array( 'required' => true, 'data-tag-part' => 'value', 'aria-labelledby' => $tgg->ref( 'selectable-values-legend' ), 'aria-describedby' => $tgg->ref( 'selectable-values-description' ), ) ), esc_html( __( "The capital of Brazil? | Rio", 'contact-form-7' ) ) ); ?>
    print( 'insert_box_content' ); ?>
    locale(); } foreach ( (array) $options as $option ) { $option = explode( '.', $option ); $type = $option[0]; if ( isset( $option[1] ) ) { $args['group'] = $option[1]; } else { unset( $args['group'] ); } if ( $list = listo( $type, $args ) ) { $data = array_merge( (array) $data, $list ); } } return $data; } PK)o#] l1yymodules/akismet/akismet.phpnu[add_service( 'akismet', WPCF7_Akismet::get_instance() ); } add_filter( 'wpcf7_spam', 'wpcf7_akismet', 10, 2 ); function wpcf7_akismet( $spam, $submission ) { if ( $spam ) { return $spam; } if ( ! wpcf7_akismet_is_available() ) { return false; } if ( ! $params = wpcf7_akismet_submitted_params() ) { return false; } $comment = array( 'comment_type' => 'contact-form', 'comment_author' => $params['author'], 'comment_author_email' => $params['author_email'], 'comment_author_url' => $params['author_url'], 'comment_content' => $params['content'], 'blog' => home_url(), 'blog_lang' => get_locale(), 'blog_charset' => get_option( 'blog_charset' ), 'user_ip' => $submission->get_meta( 'remote_ip' ), 'user_agent' => $submission->get_meta( 'user_agent' ), 'referrer' => $_SERVER['HTTP_REFERER'] ?? '', ); $datetime = date_create_immutable( '@' . $submission->get_meta( 'timestamp' ) ); if ( $datetime ) { $comment['comment_date_gmt'] = $datetime->format( DATE_ATOM ); } if ( $permalink = get_permalink() ) { $comment['permalink'] = $permalink; } $server_vars = array_diff_key( $_SERVER, array_flip( array( 'HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW' ) ) ); $comment = array_merge( $comment, $server_vars ); $comment = apply_filters( 'wpcf7_akismet_parameters', $comment ); if ( wpcf7_akismet_comment_check( $comment ) ) { $spam = true; $submission->add_spam_log( array( 'agent' => 'akismet', 'reason' => __( "Akismet returns a spam response.", 'contact-form-7' ), ) ); } else { $spam = false; } return $spam; } /** * Returns true if Akismet is active and has a valid API key. */ function wpcf7_akismet_is_available() { if ( is_callable( array( 'Akismet', 'get_api_key' ) ) ) { return (bool) Akismet::get_api_key(); } return false; } /** * Returns an array of parameters based on the current form submission. * Returns false if Akismet is not active on the contact form. */ function wpcf7_akismet_submitted_params() { $akismet_tags = array_filter( wpcf7_scan_form_tags(), static function ( $tag ) { $akismet_option = $tag->get_option( 'akismet', '(author|author_email|author_url)', true ); return (bool) $akismet_option; } ); if ( ! $akismet_tags ) { // Akismet is not active on this contact form. return false; } $params = array( 'author' => '', 'author_email' => '', 'author_url' => '', 'content' => '', ); foreach ( (array) $_POST as $key => $val ) { if ( '_wpcf7' === substr( $key, 0, 6 ) or '_wpnonce' === $key ) { continue; } $vals = array_filter( wpcf7_array_flatten( $val ), static function ( $val ) { return '' !== trim( $val ); } ); if ( empty( $vals ) ) { continue; } if ( $tags = wpcf7_scan_form_tags( array( 'name' => $key ) ) ) { $tag = $tags[0]; $akismet_option = $tag->get_option( 'akismet', '(author|author_email|author_url)', true ); if ( 'author' === $akismet_option ) { $params['author'] = sprintf( '%s %s', $params['author'], implode( ' ', $vals ) ); continue; } if ( 'author_email' === $akismet_option and '' === $params['author_email'] ) { $params['author_email'] = $vals[0]; continue; } if ( 'author_url' === $akismet_option and '' === $params['author_url'] ) { $params['author_url'] = $vals[0]; continue; } $vals = array_filter( $vals, static function ( $val ) use ( $tag ) { if ( wpcf7_form_tag_supports( $tag->type, 'selectable-values' ) and in_array( $val, $tag->labels ) ) { return false; } else { return true; } } ); } if ( $vals ) { $params['content'] .= "\n\n" . implode( ', ', $vals ); } } $params = array_map( 'trim', $params ); return $params; } /** * Sends data to Akismet. * * @param array $comment Submission and environment data. * @return bool True if Akismet called it spam, or false otherwise. */ function wpcf7_akismet_comment_check( $comment ) { $spam = false; $query_string = wpcf7_build_query( $comment ); if ( is_callable( array( 'Akismet', 'http_post' ) ) ) { $response = Akismet::http_post( $query_string, 'comment-check' ); } else { return $spam; } if ( 'true' == $response[1] ) { $spam = true; } if ( $submission = WPCF7_Submission::get_instance() ) { $submission->push( 'akismet', array( 'comment' => $comment, 'spam' => $spam, ) ); } return apply_filters( 'wpcf7_akismet_comment_check', $spam, $comment ); } add_filter( 'wpcf7_posted_data', 'wpcf7_akismet_posted_data', 10, 1 ); /** * Removes Akismet-related properties from the posted data. * * This does not affect the $_POST variable itself. * * @link https://plugins.trac.wordpress.org/browser/akismet/tags/5.0/_inc/akismet-frontend.js */ function wpcf7_akismet_posted_data( $posted_data ) { if ( wpcf7_akismet_is_available() ) { $posted_data = array_diff_key( $posted_data, array( 'ak_bib' => '', 'ak_bfs' => '', 'ak_bkpc' => '', 'ak_bkp' => '', 'ak_bmc' => '', 'ak_bmcc' => '', 'ak_bmk' => '', 'ak_bck' => '', 'ak_bmmc' => '', 'ak_btmc' => '', 'ak_bsc' => '', 'ak_bte' => '', 'ak_btec' => '', 'ak_bmm' => '', ) ); } return $posted_data; } add_filter( 'wpcf7_default_template', 'wpcf7_akismet_default_template', 10, 2 ); function wpcf7_akismet_default_template( $template, $prop ) { if ( ! wpcf7_akismet_is_available() ) { return $template; } if ( 'form' === $prop ) { $template = str_replace( array( '[text* your-name ', '[email* your-email ', ), array( '[text* your-name akismet:author ', '[email* your-email akismet:author_email ', ), $template ); $privacy_notice = sprintf( '%s %s', __( "This form uses Akismet to reduce spam.", 'contact-form-7' ), wpcf7_link( 'https://akismet.com/privacy/', __( "Learn how your data is processed.", 'contact-form-7' ), array( 'target' => '_blank', 'rel' => 'nofollow noopener', ) ) ); $template .= "\n\n" . $privacy_notice; } return $template; } PK)o#]tSshhmodules/akismet/error_lognu[[03-Sep-2026 07:47:19 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/akismet/akismet.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/akismet/akismet.php on line 8 PK)o#]modules/akismet/service.phpnu[%s

    ', esc_html( __( "CAPTCHAs are designed to distinguish spambots from humans, and are therefore helpless against human spammers. In contrast to CAPTCHAs, Akismet checks form submissions against the global database of spam; this means Akismet is a comprehensive solution against spam. This is why we consider Akismet to be the centerpiece of the spam prevention strategy.", 'contact-form-7' ) ) ); echo sprintf( '

    %s

    ', wpcf7_link( __( 'https://contactform7.com/spam-filtering-with-akismet/', 'contact-form-7' ), __( 'Spam filtering with Akismet', 'contact-form-7' ) ) ); if ( $this->is_active() ) { echo sprintf( '

    %s

    ', esc_html( __( "Akismet is active on this site.", 'contact-form-7' ) ) ); } } } PK)o#]-  modules/number.phpnu[ true, ) ); } function wpcf7_number_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); $class .= ' wpcf7-validates-as-number'; if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $atts = array(); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $atts['min'] = $tag->get_option( 'min', 'signed_num', true ); $atts['max'] = $tag->get_option( 'max', 'signed_num', true ); $atts['step'] = $tag->get_option( 'step', 'num', true ); $atts['readonly'] = $tag->has_option( 'readonly' ); $atts['autocomplete'] = $tag->get_option( 'autocomplete', '[-0-9a-zA-Z]+', true ); if ( $tag->is_required() ) { $atts['aria-required'] = 'true'; } if ( $validation_error ) { $atts['aria-invalid'] = 'true'; $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $atts['aria-invalid'] = 'false'; } $value = (string) reset( $tag->values ); if ( $tag->has_option( 'placeholder' ) or $tag->has_option( 'watermark' ) ) { $atts['placeholder'] = $value; $value = ''; } $value = $tag->get_default_option( $value ); $value = wpcf7_get_hangover( $tag->name, $value ); $atts['value'] = $value; if ( 'range' === $tag->basetype ) { if ( ! wpcf7_is_number( $atts['min'] ) ) { $atts['min'] = '0'; } if ( ! wpcf7_is_number( $atts['max'] ) ) { $atts['max'] = '100'; } if ( '' === $atts['value'] ) { if ( $atts['min'] < $atts['max'] ) { $atts['value'] = ( $atts['min'] + $atts['max'] ) / 2; } else { $atts['value'] = $atts['min']; } } } $atts['type'] = $tag->basetype; $atts['name'] = $tag->name; $html = sprintf( '%3$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), $validation_error ); return $html; } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_number_rules', 10, 2 ); function wpcf7_swv_add_number_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'basetype' => array( 'number', 'range' ), ) ); foreach ( $tags as $tag ) { if ( $tag->is_required() ) { $schema->add_rule( wpcf7_swv_create_rule( 'required', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_required' ), ) ) ); } $schema->add_rule( wpcf7_swv_create_rule( 'number', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_number' ), ) ) ); $min = $tag->get_option( 'min', 'signed_num', true ); $max = $tag->get_option( 'max', 'signed_num', true ); if ( 'range' === $tag->basetype ) { if ( ! wpcf7_is_number( $min ) ) { $min = '0'; } if ( ! wpcf7_is_number( $max ) ) { $max = '100'; } } if ( wpcf7_is_number( $min ) ) { $schema->add_rule( wpcf7_swv_create_rule( 'minnumber', array( 'field' => $tag->name, 'threshold' => $min, 'error' => wpcf7_get_message( 'number_too_small' ), ) ) ); } if ( wpcf7_is_number( $max ) ) { $schema->add_rule( wpcf7_swv_create_rule( 'maxnumber', array( 'field' => $tag->name, 'threshold' => $max, 'error' => wpcf7_get_message( 'number_too_large' ), ) ) ); } } } /* Messages */ add_filter( 'wpcf7_messages', 'wpcf7_number_messages', 10, 1 ); function wpcf7_number_messages( $messages ) { return array_merge( $messages, array( 'invalid_number' => array( 'description' => __( "Number format that the sender entered is invalid", 'contact-form-7' ), 'default' => __( "Please enter a number.", 'contact-form-7' ), ), 'number_too_small' => array( 'description' => __( "Number is smaller than minimum limit", 'contact-form-7' ), 'default' => __( "This field has a too small number.", 'contact-form-7' ), ), 'number_too_large' => array( 'description' => __( "Number is larger than maximum limit", 'contact-form-7' ), 'default' => __( "This field has a too large number.", 'contact-form-7' ), ), ) ); } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_number', 18, 0 ); function wpcf7_add_tag_generator_number() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'number', __( 'number', 'contact-form-7' ), 'wpcf7_tag_generator_number', array( 'version' => '2' ) ); } function wpcf7_tag_generator_number( $contact_form, $options ) { $field_types = array( 'number' => array( 'display_name' => __( 'Number field', 'contact-form-7' ), 'heading' => __( 'Number field form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a number input field.', 'contact-form-7' ), ), ); $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'with_required' => true, 'select_options' => array( 'number' => __( 'Spinbox', 'contact-form-7' ), 'range' => __( 'Slider', 'contact-form-7' ), ), ) ); $tgg->print( 'field_name' ); $tgg->print( 'class_attr' ); $tgg->print( 'min_max', array( 'title' => __( 'Range', 'contact-form-7' ), 'min_option' => 'min:', 'max_option' => 'max:', ) ); $tgg->print( 'default_value', array( 'type' => 'number', 'with_placeholder' => false, ) ); ?>
    print( 'insert_box_content' ); $tgg->print( 'mail_tag_tip' ); ?>
    get_posted_data() ); $target[] = $submission->get_meta( 'remote_ip' ); $target[] = $submission->get_meta( 'user_agent' ); $target = implode( "\n", $target ); $word = wpcf7_check_disallowed_list( $target ); $word = wpcf7_apply_filters_deprecated( 'wpcf7_submission_is_blacklisted', array( $word, $submission ), '5.3', 'wpcf7_submission_has_disallowed_words' ); $word = apply_filters( 'wpcf7_submission_has_disallowed_words', $word, $submission ); if ( $word ) { if ( is_bool( $word ) ) { $reason = __( "Disallowed words are used.", 'contact-form-7' ); } else { $reason = sprintf( /* translators: %s: comma separated list of disallowed words */ __( "Disallowed words (%s) are used.", 'contact-form-7' ), implode( ', ', (array) $word ) ); } $submission->add_spam_log( array( 'agent' => 'disallowed_list', 'reason' => $reason, ) ); } $spam = (bool) $word; return $spam; } function wpcf7_check_disallowed_list( $target ) { $mod_keys = get_option( 'disallowed_keys' ); if ( is_scalar( $mod_keys ) ) { $mod_keys = trim( $mod_keys ); } else { $mod_keys = ''; } if ( '' === $mod_keys ) { return false; } foreach ( explode( "\n", $mod_keys ) as $word ) { $word = trim( $word ); $length = strlen( $word ); if ( $length < 2 or 256 < $length ) { continue; } $pattern = sprintf( '#%s#i', preg_quote( $word, '#' ) ); if ( preg_match( $pattern, $target ) ) { return $word; } } return false; } function wpcf7_blacklist_check( $target ) { wpcf7_deprecated_function( __FUNCTION__, '5.3', 'wpcf7_check_disallowed_list' ); return wpcf7_check_disallowed_list( $target ); } PK)o#]Ymodules/stripe/index.jsnu[document.addEventListener("DOMContentLoaded",(e=>{const t=()=>{const e=document.querySelectorAll("form.wpcf7-form .wpcf7-stripe");for(let t=0;t{const t=e.detail.unitTag,s=`${t}-ve-stripe-card-element`,n=document.querySelector(`#${t} form`),o=n.closest(".wpcf7").querySelector(".screen-reader-response"),d=n.querySelector(".wpcf7-stripe .wpcf7-form-control-wrap"),c=n.querySelector(".wpcf7-stripe button.first"),a=n.querySelector(".wpcf7-stripe button.second"),l=n.querySelector('[name="_wpcf7_stripe_payment_intent"]');if(!l)return;l.setAttribute("value","");const u=e=>{const t=o.querySelector("ul"),r=t.querySelector(`li#${s}`);r&&r.remove();const i=document.createElement("li");i.setAttribute("id",s),i.insertAdjacentText("beforeend",e.message),t.appendChild(i)},p=e=>{const t=d.querySelector(".wpcf7-form-control");t.classList.add("wpcf7-not-valid"),t.setAttribute("aria-describedby",s);const r=document.createElement("span");r.setAttribute("class","wpcf7-not-valid-tip"),r.setAttribute("aria-hidden","true"),r.insertAdjacentText("beforeend",e.message),d.appendChild(r),d.querySelectorAll("[aria-invalid]").forEach((e=>{e.setAttribute("aria-invalid","true")})),t.closest(".use-floating-validation-tip")&&(t.addEventListener("focus",(e=>{r.setAttribute("style","display: none")})),r.addEventListener("mouseover",(e=>{r.setAttribute("style","display: none")})))},f=()=>{o.querySelectorAll(`ul li#${s}`).forEach((e=>{e.remove()})),d.querySelectorAll(".wpcf7-not-valid-tip").forEach((e=>{e.remove()})),d.querySelectorAll("[aria-invalid]").forEach((e=>{e.setAttribute("aria-invalid","false")})),d.querySelectorAll(".wpcf7-form-control").forEach((e=>{e.removeAttribute("aria-describedby"),e.classList.remove("wpcf7-not-valid")}))};if("payment_required"===e.detail.status){const s=e.detail.apiResponse.stripe.payment_intent;s.id&&l.setAttribute("value",s.id);const o=i.getElement("card")||i.create("card");o.mount(`#${t} .wpcf7-stripe .card-element`),o.clear(),d.classList.remove("hidden"),c.classList.add("hidden"),a.classList.remove("hidden"),a.disabled=!0,o.addEventListener("change",(e=>{if(f(),e.error){const t={message:e.error.message};u(t),p(t),a.disabled=!0}else a.disabled=!1})),a.addEventListener("click",(e=>{f(),a.disabled=!0,n.classList.add("submitting"),wpcf7.blocked||r.confirmCardPayment(s.client_secret,{payment_method:{card:o}}).then((e=>{if(e.error){e.error.decline_code&&["fraudulent","lost_card","merchant_blacklist","pickup_card","restricted_card","security_violation","service_not_allowed","stolen_card","transaction_not_allowed"].includes(e.error.decline_code)&&(wpcf7.blocked=!0),n.classList.remove("submitting");const t={message:e.error.message};u(t),p(t)}else"succeeded"===e.paymentIntent.status&&wpcf7.submit(n)}))}))}else d.classList.add("hidden"),c.classList.remove("hidden"),a.classList.add("hidden"),["mail_sent","mail_failed"].includes(e.detail.status)&&(c.disabled=!0)}))}));PK)o#]U/||modules/stripe/error_lognu[[03-Sep-2026 07:34:44 UTC] PHP Fatal error: Uncaught Error: Undefined constant "WPCF7_VERSION" in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/stripe/index.asset.php:5 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/stripe/index.asset.php on line 5 [03-Sep-2026 07:46:57 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/stripe/stripe.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/stripe/stripe.php on line 8 [03-Sep-2026 08:09:05 UTC] PHP Fatal error: Uncaught Error: Undefined constant "WPCF7_VERSION" in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/stripe/index.asset.php:5 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/stripe/index.asset.php on line 5 [03-Sep-2026 08:09:06 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/stripe/stripe.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/stripe/stripe.php on line 8 PK)o#]8modules/stripe/stripe.phpnu[add_service( 'stripe', WPCF7_Stripe::get_instance() ); } add_action( 'wpcf7_enqueue_scripts', 'wpcf7_stripe_enqueue_scripts', 10, 0 ); /** * Enqueues scripts and styles for the Stripe module. */ function wpcf7_stripe_enqueue_scripts() { $service = WPCF7_Stripe::get_instance(); if ( ! $service->is_active() ) { return; } wp_enqueue_style( 'wpcf7-stripe', wpcf7_plugin_url( 'modules/stripe/style.css' ), array(), WPCF7_VERSION, 'all' ); wp_register_script( 'stripe', 'https://js.stripe.com/v3/', array(), null ); $assets = include wpcf7_plugin_path( 'modules/stripe/index.asset.php' ); $assets = wp_parse_args( $assets, array( 'dependencies' => array(), 'version' => WPCF7_VERSION, ) ); wp_enqueue_script( 'wpcf7-stripe', wpcf7_plugin_url( 'modules/stripe/index.js' ), array_merge( $assets['dependencies'], array( 'wp-polyfill', 'contact-form-7', 'stripe', ) ), $assets['version'], array( 'in_footer' => true ) ); $api_keys = $service->get_api_keys(); if ( $api_keys['publishable'] ) { wp_add_inline_script( 'wpcf7-stripe', sprintf( 'var wpcf7_stripe = %s;', wp_json_encode( array( 'publishable_key' => $api_keys['publishable'], ), JSON_PRETTY_PRINT ) ), 'before' ); } } add_filter( 'wpcf7_skip_spam_check', 'wpcf7_stripe_skip_spam_check', 10, 2 ); /** * Skips the spam check if it is not necessary. * * @return bool True if the spam check is not necessary. */ function wpcf7_stripe_skip_spam_check( $skip_spam_check, $submission ) { $service = WPCF7_Stripe::get_instance(); if ( ! $service->is_active() ) { return $skip_spam_check; } if ( ! empty( $_POST['_wpcf7_stripe_payment_intent'] ) ) { $pi_id = trim( $_POST['_wpcf7_stripe_payment_intent'] ); $payment_intent = $service->api()->retrieve_payment_intent( $pi_id ); if ( isset( $payment_intent['metadata']['wpcf7_submission_timestamp'] ) ) { // This PI has already been used. Ignore. return $skip_spam_check; } if ( isset( $payment_intent['status'] ) and 'succeeded' === $payment_intent['status'] ) { $submission->push( 'payment_intent', $pi_id ); $service->api()->update_payment_intent( $pi_id, array( 'metadata' => array( 'wpcf7_submission_timestamp' => $submission->get_meta( 'timestamp' ), ), ) ); } } if ( ! empty( $submission->pull( 'payment_intent' ) ) and $submission->verify_posted_data_hash() ) { $skip_spam_check = true; } return $skip_spam_check; } add_filter( 'wpcf7_spam', 'wpcf7_stripe_verify_payment_intent', 6, 2 ); /** * Verifies submitted Stripe Payment Intent ID. */ function wpcf7_stripe_verify_payment_intent( $spam, $submission ) { $service = WPCF7_Stripe::get_instance(); if ( ! $service->is_active() ) { return $spam; } if ( ! empty( $_POST['_wpcf7_stripe_payment_intent'] ) ) { $pi_id = trim( $_POST['_wpcf7_stripe_payment_intent'] ); $payment_intent = $service->api()->retrieve_payment_intent( $pi_id ); if ( ! $payment_intent or isset( $payment_intent['metadata']['wpcf7_submission_timestamp'] ) ) { $spam = true; $submission->add_spam_log( array( 'agent' => 'stripe', 'reason' => __( 'Invalid Stripe Payment Intent ID detected.', 'contact-form-7' ), ) ); } } return $spam; } add_action( 'wpcf7_before_send_mail', 'wpcf7_stripe_before_send_mail', 10, 3 ); /** * Creates Stripe's Payment Intent. */ function wpcf7_stripe_before_send_mail( $contact_form, &$abort, $submission ) { $service = WPCF7_Stripe::get_instance(); if ( ! $service->is_active() ) { return; } $tags = $contact_form->scan_form_tags( array( 'type' => 'stripe' ) ); if ( ! $tags ) { return; } if ( ! empty( $submission->pull( 'payment_intent' ) ) ) { return; } $tag = $tags[0]; $amount = $tag->get_option( 'amount', 'int', true ); $currency = $tag->get_option( 'currency', '[a-zA-Z]{3}', true ); $payment_intent_params = apply_filters( 'wpcf7_stripe_payment_intent_parameters', array( 'amount' => $amount ? absint( $amount ) : null, 'currency' => $currency ? strtolower( $currency ) : null, 'receipt_email' => $submission->get_posted_data( 'your-email' ), ) ); $payment_intent = $service->api()->create_payment_intent( $payment_intent_params ); if ( $payment_intent ) { $submission->add_result_props( array( 'stripe' => array( 'payment_intent' => array( 'id' => $payment_intent['id'], 'client_secret' => $payment_intent['client_secret'], ), ), ) ); $submission->set_status( 'payment_required' ); $submission->set_response( __( "Payment is required. Please pay by credit card.", 'contact-form-7' ) ); } $abort = true; } /** * Returns payment link URL. * * @param string $pi_id Payment Intent ID. * @return string The URL. */ function wpcf7_stripe_get_payment_link( $pi_id ) { return sprintf( 'https://dashboard.stripe.com/payments/%s', urlencode( $pi_id ) ); } add_filter( 'wpcf7_special_mail_tags', 'wpcf7_stripe_smt', 10, 4 ); /** * Registers the [_stripe_payment_link] special mail-tag. */ function wpcf7_stripe_smt( $output, $tag_name, $html, $mail_tag = null ) { if ( '_stripe_payment_link' === $tag_name ) { $submission = WPCF7_Submission::get_instance(); $pi_id = $submission->pull( 'payment_intent' ); if ( ! empty( $pi_id ) ) { $output = wpcf7_stripe_get_payment_link( $pi_id ); } } return $output; } add_filter( 'wpcf7_flamingo_inbound_message_parameters', 'wpcf7_stripe_add_flamingo_inbound_message_params', 10, 1 ); /** * Adds Stripe-related meta data to Flamingo Inbound Message parameters. */ function wpcf7_stripe_add_flamingo_inbound_message_params( $args ) { $submission = WPCF7_Submission::get_instance(); $pi_id = $submission->pull( 'payment_intent' ); if ( empty( $pi_id ) ) { return $args; } $pi_link = wpcf7_stripe_get_payment_link( $pi_id ); $meta = (array) $args['meta']; $meta['stripe_payment_link'] = $pi_link; $args['meta'] = $meta; return $args; } add_action( 'wpcf7_init', 'wpcf7_add_form_tag_stripe', 10, 0 ); /** * Registers the stripe form-tag handler. */ function wpcf7_add_form_tag_stripe() { wpcf7_add_form_tag( 'stripe', 'wpcf7_stripe_form_tag_handler', array( 'display-block' => true, 'singular' => true, ) ); } /** * Defines the stripe form-tag handler. * * @return string HTML content that replaces a stripe form-tag. */ function wpcf7_stripe_form_tag_handler( $tag ) { $card_element = sprintf( '
    ', wpcf7_format_atts( array( 'class' => 'card-element wpcf7-form-control', 'aria-invalid' => 'false', ) ) ); $card_element = sprintf( '', $card_element ); $button_1_label = __( 'Proceed to checkout', 'contact-form-7' ); if ( isset( $tag->values[0] ) ) { $button_1_label = trim( $tag->values[0] ); } $button_1 = sprintf( '', wpcf7_format_atts( array( 'type' => 'submit', 'class' => 'first', ) ), esc_html( $button_1_label ) ); $button_2_label = __( 'Complete payment', 'contact-form-7' ); if ( isset( $tag->values[1] ) ) { $button_2_label = trim( $tag->values[1] ); } $button_2 = sprintf( '', wpcf7_format_atts( array( 'type' => 'button', 'class' => 'second hidden', ) ), esc_html( $button_2_label ) ); $buttons = sprintf( '%1$s %2$s', $button_1, $button_2 ); return sprintf( '
    %1$s %2$s %3$s
    ', $card_element, $buttons, '' ); } PK)o#]AD;;modules/stripe/style.cssnu[.wpcf7 .wpcf7-stripe .wpcf7-form-control-wrap { margin: .6em 0; } .wpcf7 .wpcf7-stripe .wpcf7-form-control { display: block; background: #f6f7f7; padding: 12px 12px; border: 1px solid #787c82; } .wpcf7 .wpcf7-stripe button:disabled { cursor: not-allowed; } .wpcf7 .wpcf7-stripe .hidden { display: none; } PK)o#]ld\\modules/stripe/api.phpnu[secret = $secret; } /** * Sends a debug information for a remote request to the PHP error log. * * @param string $url URL to retrieve. * @param array $request Request arguments. * @param array|WP_Error $response The response or WP_Error on failure. */ private function log( $url, $request, $response ) { wpcf7_log_remote_request( $url, $request, $response ); } /** * Returns default set of HTTP request headers used for Stripe API. * * @link https://docs.stripe.com/building-plugins#setappinfo * * @return array An associative array of headers. */ private function default_headers() { $app_info = array( 'name' => self::app_name, 'partner_id' => self::partner_id, 'url' => self::app_url, 'version' => WPCF7_VERSION, ); $ua = array( 'lang' => 'php', 'lang_version' => PHP_VERSION, 'application' => $app_info, ); $headers = array( 'Authorization' => sprintf( 'Bearer %s', $this->secret ), 'Stripe-Version' => self::api_version, 'X-Stripe-Client-User-Agent' => wp_json_encode( $ua ), 'User-Agent' => sprintf( '%1$s/%2$s (%3$s)', self::app_name, WPCF7_VERSION, self::app_url ), ); return $headers; } /** * Creates a Payment Intent. * * @link https://docs.stripe.com/api/payment_intents/create * * @param string|array $args Optional. Arguments to control behavior. * @return array|bool An associative array if 200 OK, false otherwise. */ public function create_payment_intent( $args = '' ) { $args = wp_parse_args( $args, array( 'amount' => 0, 'currency' => '', 'receipt_email' => '', ) ); if ( ! is_email( $args['receipt_email'] ) ) { unset( $args['receipt_email'] ); } $endpoint = 'https://api.stripe.com/v1/payment_intents'; $request = array( 'headers' => $this->default_headers(), 'body' => $args, ); $response = wp_remote_post( sanitize_url( $endpoint ), $request ); if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } return false; } $response_body = wp_remote_retrieve_body( $response ); $response_body = json_decode( $response_body, true ); return $response_body; } /** * Retrieves a Payment Intent. * * @link https://docs.stripe.com/api/payment_intents/retrieve * * @param string $id Payment Intent identifier. * @return array|bool An associative array if 200 OK, false otherwise. */ public function retrieve_payment_intent( $id ) { $endpoint = sprintf( 'https://api.stripe.com/v1/payment_intents/%s', urlencode( $id ) ); $request = array( 'headers' => $this->default_headers(), ); $response = wp_remote_get( sanitize_url( $endpoint ), $request ); if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } return false; } $response_body = wp_remote_retrieve_body( $response ); $response_body = json_decode( $response_body, true ); return $response_body; } /** * Updates a Payment Intent. * * @link https://docs.stripe.com/api/payment_intents/update * * @param string $id Payment Intent identifier. * @param array $parameters Parameters. * @return array|bool An associative array if 200 OK, false otherwise. */ public function update_payment_intent( $id, $parameters ) { $endpoint = sprintf( 'https://api.stripe.com/v1/payment_intents/%s', urlencode( $id ) ); $request = array( 'headers' => $this->default_headers(), 'body' => wp_parse_args( $parameters, array() ), ); $response = wp_remote_post( sanitize_url( $endpoint ), $request ); if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } return false; } $response_body = wp_remote_retrieve_body( $response ); $response_body = json_decode( $response_body, true ); return $response_body; } } PK)o#]TKmodules/stripe/service.phpnu[api_keys = array( 'publishable' => $option['api_keys']['publishable'], 'secret' => $option['api_keys']['secret'], ); } } public function get_title() { return __( 'Stripe', 'contact-form-7' ); } public function is_active() { return (bool) $this->get_api_keys(); } public function api() { if ( $this->is_active() ) { $api = new WPCF7_Stripe_API( $this->api_keys['secret'] ); return $api; } } public function get_api_keys() { return $this->api_keys; } public function get_categories() { return array( 'payments' ); } public function icon() { } public function link() { echo wpcf7_link( 'https://stripe.com/', 'stripe.com' ); } protected function menu_page_url( $args = '' ) { $args = wp_parse_args( $args, array() ); $url = menu_page_url( 'wpcf7-integration', false ); $url = add_query_arg( array( 'service' => 'stripe' ), $url ); if ( ! empty( $args ) ) { $url = add_query_arg( $args, $url ); } return $url; } protected function save_data() { WPCF7::update_option( 'stripe', array( 'api_keys' => $this->api_keys, ) ); } protected function reset_data() { $this->api_keys = null; $this->save_data(); } public function load( $action = '' ) { if ( 'setup' === $action and 'POST' === $_SERVER['REQUEST_METHOD'] ) { check_admin_referer( 'wpcf7-stripe-setup' ); if ( ! empty( $_POST['reset'] ) ) { $this->reset_data(); $redirect_to = $this->menu_page_url( 'action=setup' ); } else { $publishable = trim( $_POST['publishable'] ?? '' ); $secret = trim( $_POST['secret'] ?? '' ); if ( $publishable and $secret ) { $this->api_keys = array( 'publishable' => $publishable, 'secret' => $secret, ); $this->save_data(); $redirect_to = $this->menu_page_url( array( 'message' => 'success', ) ); } else { $redirect_to = $this->menu_page_url( array( 'action' => 'setup', 'message' => 'invalid', ) ); } } wp_safe_redirect( $redirect_to ); exit(); } } public function admin_notice( $message = '' ) { if ( 'invalid' === $message ) { wp_admin_notice( sprintf( '%1$s: %2$s', esc_html( __( "Error", 'contact-form-7' ) ), esc_html( __( "Invalid key values.", 'contact-form-7' ) ) ), array( 'type' => 'error' ) ); } if ( 'success' === $message ) { wp_admin_notice( esc_html( __( "Settings saved.", 'contact-form-7' ) ), array( 'type' => 'success' ) ); } } public function display( $action = '' ) { echo sprintf( '

    %s

    ', // https://stripe.com/docs/partners/support#intro esc_html( __( "Stripe is a simple and powerful way to accept payments online. Stripe has no setup fees, no monthly fees, and no hidden costs. Millions of businesses rely on Stripe’s software tools to accept payments securely and expand globally.", 'contact-form-7' ) ) ); echo sprintf( '

    %s

    ', wpcf7_link( __( 'https://contactform7.com/stripe-integration/', 'contact-form-7' ), __( 'Stripe integration', 'contact-form-7' ) ) ); if ( $this->is_active() ) { echo sprintf( '

    %s

    ', esc_html( __( "Stripe is active on this site.", 'contact-form-7' ) ) ); } if ( 'setup' === $action ) { $this->display_setup(); } elseif ( is_ssl() or WP_DEBUG ) { echo sprintf( '

    %2$s

    ', esc_url( $this->menu_page_url( 'action=setup' ) ), esc_html( __( 'Setup Integration', 'contact-form-7' ) ) ); } else { echo sprintf( '

    %s

    ', esc_html( __( "Stripe is not available on this site. It requires an HTTPS-enabled site.", 'contact-form-7' ) ) ); } } private function display_setup() { $api_keys = $this->get_api_keys(); if ( $api_keys ) { $publishable = $api_keys['publishable']; $secret = $api_keys['secret']; } else { $publishable = ''; $secret = ''; } ?>
    is_active() ) { echo esc_html( $publishable ); echo sprintf( '', esc_attr( $publishable ) ); } else { echo sprintf( '', esc_attr( $publishable ) ); } ?>
    is_active() ) { echo esc_html( wpcf7_mask_password( $secret ) ); echo sprintf( '', esc_attr( $secret ) ); } else { echo sprintf( '', esc_attr( $secret ) ); } ?>
    is_active() ) { submit_button( _x( 'Remove Keys', 'API keys', 'contact-form-7' ), 'small', 'reset' ); } else { submit_button( __( 'Save Changes', 'contact-form-7' ) ); } ?>
    array(), 'version' => WPCF7_VERSION, ); PK)o#]˔modules/sendinblue/error_lognu[[03-Sep-2026 07:36:14 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_filter() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/contact-form-properties.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/contact-form-properties.php on line 3 [03-Sep-2026 07:36:15 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/sendinblue.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/sendinblue.php on line 8 [03-Sep-2026 07:47:24 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/doi.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/doi.php on line 9 [03-Sep-2026 08:09:04 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_filter() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/contact-form-properties.php:3 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/contact-form-properties.php on line 3 [03-Sep-2026 08:09:04 UTC] PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/doi.php:9 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/doi.php on line 9 [03-Sep-2026 08:09:05 UTC] PHP Fatal error: Uncaught Error: Call to undefined function wpcf7_include_module_file() in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/sendinblue.php:8 Stack trace: #0 {main} thrown in /home/veronikagstoette/public_html/wp-content/plugins/contact-form-7/modules/sendinblue/sendinblue.php on line 8 PK)o#]0Uh!modules/sendinblue/sendinblue.phpnu[add_service( 'sendinblue', WPCF7_Sendinblue::get_instance() ); } add_action( 'wpcf7_submit', 'wpcf7_sendinblue_submit', 10, 2 ); /** * Callback to the wpcf7_submit action hook. Creates a contact * based on the submission. */ function wpcf7_sendinblue_submit( $contact_form, $result ) { if ( $contact_form->in_demo_mode() ) { return; } $service = WPCF7_Sendinblue::get_instance(); if ( ! $service->is_active() ) { return; } if ( empty( $result['posted_data_hash'] ) ) { return; } if ( empty( $result['status'] ) or ! in_array( $result['status'], array( 'mail_sent', 'mail_failed' ), true ) ) { return; } $submission = WPCF7_Submission::get_instance(); $consented = true; foreach ( $contact_form->scan_form_tags( 'feature=name-attr' ) as $tag ) { if ( $tag->has_option( 'consent_for:sendinblue' ) and null == $submission->get_posted_data( $tag->name ) ) { $consented = false; break; } } if ( ! $consented ) { return; } $prop = wp_parse_args( $contact_form->prop( 'sendinblue' ), array( 'enable_contact_list' => false, 'contact_lists' => array(), 'enable_transactional_email' => false, 'email_template' => 0, ) ); if ( ! $prop['enable_contact_list'] ) { return; } $attributes = wpcf7_sendinblue_collect_parameters(); $params = array( 'contact' => array(), 'email' => array(), ); if ( ! empty( $attributes['EMAIL'] ) or ! empty( $attributes['SMS'] ) ) { $params['contact'] = apply_filters( 'wpcf7_sendinblue_contact_parameters', array( 'email' => $attributes['EMAIL'], 'attributes' => (object) $attributes, 'listIds' => (array) $prop['contact_lists'], 'updateEnabled' => false, ) ); } if ( $prop['enable_transactional_email'] and $prop['email_template'] ) { $first_name = isset( $attributes['FIRSTNAME'] ) ? trim( $attributes['FIRSTNAME'] ) : ''; $last_name = isset( $attributes['LASTNAME'] ) ? trim( $attributes['LASTNAME'] ) : ''; if ( $first_name or $last_name ) { $email_to_name = sprintf( /* translators: 1: first name, 2: last name */ _x( '%1$s %2$s', 'personal name', 'contact-form-7' ), $first_name, $last_name ); } else { $email_to_name = ''; } $params['email'] = apply_filters( 'wpcf7_sendinblue_email_parameters', array( 'templateId' => absint( $prop['email_template'] ), 'to' => array( array( 'name' => $email_to_name, 'email' => $attributes['EMAIL'], ), ), 'params' => (object) $attributes, 'tags' => array( 'Contact Form 7' ), ) ); } if ( is_email( $attributes['EMAIL'] ) ) { $token = null; do_action_ref_array( 'wpcf7_doi', array( 'wpcf7_sendinblue', array( 'email_to' => $attributes['EMAIL'], 'properties' => $params, ), &$token, ) ); if ( isset( $token ) ) { return; } } if ( ! empty( $params['contact'] ) ) { $contact_id = $service->create_contact( $params['contact'] ); if ( $contact_id and ! empty( $params['email'] ) ) { $service->send_email( $params['email'] ); } } } /** * Collects parameters for Sendinblue contact data based on submission. * * @return array Sendinblue contact parameters. */ function wpcf7_sendinblue_collect_parameters() { $params = array(); $submission = WPCF7_Submission::get_instance(); foreach ( (array) $submission->get_posted_data() as $name => $val ) { $name = strtoupper( $name ); if ( 'YOUR-' === substr( $name, 0, 5 ) ) { $name = substr( $name, 5 ); } if ( $val ) { $params += array( $name => $val, ); } } if ( isset( $params['SMS'] ) ) { $sms = trim( implode( ' ', (array) $params['SMS'] ) ); $sms = preg_replace( '/[#*].*$/', '', $sms ); // Remove extension $is_international = false || str_starts_with( $sms, '+' ) || str_starts_with( $sms, '00' ); if ( $is_international ) { $sms = preg_replace( '/^[+0]+/', '', $sms ); } $sms = preg_replace( '/[^0-9]/', '', $sms ); if ( $is_international and 6 < strlen( $sms ) and strlen( $sms ) < 16 ) { $params['SMS'] = '+' . $sms; } else { // Invalid telephone number unset( $params['SMS'] ); } } if ( isset( $params['NAME'] ) ) { $your_name = implode( ' ', (array) $params['NAME'] ); $your_name = explode( ' ', $your_name ); if ( ! isset( $params['LASTNAME'] ) ) { $params['LASTNAME'] = implode( ' ', array_slice( $your_name, 1 ) ); } if ( ! isset( $params['FIRSTNAME'] ) ) { $params['FIRSTNAME'] = implode( ' ', array_slice( $your_name, 0, 1 ) ); } } $params = array_map( function ( $param ) { if ( is_array( $param ) ) { $param = wpcf7_array_flatten( $param ); $param = reset( $param ); } return $param; }, $params ); $params = apply_filters( 'wpcf7_sendinblue_collect_parameters', $params ); return $params; } PK)o#]XU]].modules/sendinblue/contact-form-properties.phpnu[is_active() ) { $properties += array( 'sendinblue' => array(), ); } return $properties; } add_action( 'wpcf7_save_contact_form', 'wpcf7_sendinblue_save_contact_form', 10, 3 ); /** * Saves the sendinblue property value. */ function wpcf7_sendinblue_save_contact_form( $contact_form, $args, $context ) { $service = WPCF7_Sendinblue::get_instance(); if ( ! $service->is_active() ) { return; } $prop = (array) ( $_POST['wpcf7-sendinblue'] ?? array() ); $prop = wp_parse_args( $prop, array( 'enable_contact_list' => false, 'contact_lists' => array(), 'enable_transactional_email' => false, 'email_template' => 0, ) ); $prop['contact_lists'] = array_map( 'absint', $prop['contact_lists'] ); $prop['email_template'] = absint( $prop['email_template'] ); $contact_form->set_properties( array( 'sendinblue' => $prop, ) ); } add_filter( 'wpcf7_editor_panels', 'wpcf7_sendinblue_editor_panels', 10, 1 ); /** * Builds the editor panel for the sendinblue property. */ function wpcf7_sendinblue_editor_panels( $panels ) { $service = WPCF7_Sendinblue::get_instance(); if ( ! $service->is_active() ) { return $panels; } $contact_form = WPCF7_ContactForm::get_current(); $prop = wp_parse_args( $contact_form->prop( 'sendinblue' ), array( 'enable_contact_list' => false, 'contact_lists' => array(), 'enable_transactional_email' => false, 'email_template' => 0, ) ); $editor_panel = static function () use ( $prop, $service ) { $description = sprintf( esc_html( /* translators: %s: link labeled 'Brevo integration' */ __( "You can set up the Brevo integration here. For details, see %s.", 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/sendinblue-integration/', 'contact-form-7' ), __( 'Brevo integration', 'contact-form-7' ) ) ); $lists = wpcf7_sendinblue_get_lists(); $templates = $service->get_templates(); ?>

    array( 'title' => __( 'Brevo', 'contact-form-7' ), 'callback' => $editor_panel, ), ); return $panels; } /** * Retrieves contact lists from Brevo's database. */ function wpcf7_sendinblue_get_lists() { static $lists = array(); $service = WPCF7_Sendinblue::get_instance(); if ( ! empty( $lists ) or ! $service->is_active() ) { return $lists; } $limit = 50; $offset = 0; while ( count( $lists ) < $limit * 10 ) { $lists_next = (array) $service->get_lists( array( 'limit' => $limit, 'offset' => $offset, ) ); if ( ! empty( $lists_next ) ) { $lists = array_merge( $lists, $lists_next ); } if ( count( $lists_next ) < $limit ) { break; } $offset += $limit; } return $lists; } PK)o#]7  modules/sendinblue/doi.phpnu[ apply_filters( 'wpcf7_sendinblue_doi_optin_callback', 'wpcf7_sendinblue_doi_default_optin_callback' ), 'email_callback' => apply_filters( 'wpcf7_sendinblue_doi_email_callback', 'wpcf7_sendinblue_doi_default_email_callback' ), ) ); } /** * Default optin_callback function. */ function wpcf7_sendinblue_doi_default_optin_callback( $properties ) { $service = WPCF7_Sendinblue::get_instance(); if ( ! $service->is_active() ) { return; } if ( ! empty( $properties['contact'] ) ) { $contact_id = $service->create_contact( $properties['contact'] ); if ( $contact_id and ! empty( $properties['email'] ) ) { $service->send_email( $properties['email'] ); } } } /** * Default email_callback function. */ function wpcf7_sendinblue_doi_default_email_callback( $args ) { if ( ! isset( $args['token'] ) or ! isset( $args['email_to'] ) ) { return; } $site_title = wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ); $link = add_query_arg( array( 'doitoken' => $args['token'] ), home_url() ); $to = $args['email_to']; $subject = sprintf( /* translators: %s: blog name */ __( 'Opt-in confirmation from %s', 'contact-form-7' ), $site_title ); $message = sprintf( /* translators: 1: blog name, 2: confirmation link */ __( 'Hello, This is a confirmation email sent from %1$s. We have received your submission to our web form, according to which you have allowed us to add you to our contact list. But, the process has not yet been completed. To complete it, please click the following link. %2$s If it was not your intention, or if you have no idea why you received this message, please do not click on the link, and ignore this message. We will never collect or use your personal data without your clear consent. Sincerely, %1$s', 'contact-form-7' ), $site_title, $link ); wp_mail( $to, $subject, $message ); } PK)o#]v$$modules/sendinblue/service.phpnu[api_key = $option['api_key']; } } public function get_title() { return __( 'Brevo', 'contact-form-7' ); } public function is_active() { return (bool) $this->get_api_key(); } public function get_api_key() { return $this->api_key; } public function get_categories() { return array( 'email_marketing' ); } public function icon() { } public function link() { echo wpcf7_link( 'https://get.brevo.com/wpcf7-integration', 'brevo.com' ); } protected function log( $url, $request, $response ) { wpcf7_log_remote_request( $url, $request, $response ); } protected function menu_page_url( $args = '' ) { $args = wp_parse_args( $args, array() ); $url = menu_page_url( 'wpcf7-integration', false ); $url = add_query_arg( array( 'service' => 'sendinblue' ), $url ); if ( ! empty( $args ) ) { $url = add_query_arg( $args, $url ); } return $url; } protected function save_data() { WPCF7::update_option( 'sendinblue', array( 'api_key' => $this->api_key, ) ); } protected function reset_data() { $this->api_key = null; $this->save_data(); } public function load( $action = '' ) { if ( 'setup' === $action and 'POST' === $_SERVER['REQUEST_METHOD'] ) { check_admin_referer( 'wpcf7-sendinblue-setup' ); if ( ! empty( $_POST['reset'] ) ) { $this->reset_data(); $redirect_to = $this->menu_page_url( 'action=setup' ); } else { $this->api_key = trim( $_POST['api_key'] ?? '' ); $confirmed = $this->confirm_key(); if ( true === $confirmed ) { $redirect_to = $this->menu_page_url( array( 'message' => 'success', ) ); $this->save_data(); } elseif ( false === $confirmed ) { $redirect_to = $this->menu_page_url( array( 'action' => 'setup', 'message' => 'unauthorized', ) ); } else { $redirect_to = $this->menu_page_url( array( 'action' => 'setup', 'message' => 'invalid', ) ); } } wp_safe_redirect( $redirect_to ); exit(); } } public function admin_notice( $message = '' ) { if ( 'unauthorized' === $message ) { wp_admin_notice( sprintf( '%1$s: %2$s', esc_html( __( "Error", 'contact-form-7' ) ), esc_html( __( "You have not been authenticated. Make sure the provided API key is correct.", 'contact-form-7' ) ) ), array( 'type' => 'error' ) ); } if ( 'invalid' === $message ) { wp_admin_notice( sprintf( '%1$s: %2$s', esc_html( __( "Error", 'contact-form-7' ) ), esc_html( __( "Invalid key values.", 'contact-form-7' ) ) ), array( 'type' => 'error' ) ); } if ( 'success' === $message ) { wp_admin_notice( esc_html( __( "Settings saved.", 'contact-form-7' ) ), array( 'type' => 'success' ) ); } } public function display( $action = '' ) { echo sprintf( '

    %s

    ', esc_html( __( "Store and organize your contacts while protecting user privacy on Brevo, the leading CRM & email marketing platform in Europe. Brevo offers unlimited contacts and advanced marketing features.", 'contact-form-7' ) ) ); echo sprintf( '

    %s

    ', wpcf7_link( __( 'https://contactform7.com/sendinblue-integration/', 'contact-form-7' ), __( 'Brevo integration', 'contact-form-7' ) ) ); if ( $this->is_active() ) { echo sprintf( '

    %s

    ', esc_html( __( "Brevo is active on this site.", 'contact-form-7' ) ) ); } if ( 'setup' === $action ) { $this->display_setup(); } else { echo sprintf( '

    %2$s

    ', esc_url( $this->menu_page_url( 'action=setup' ) ), esc_html( __( 'Setup integration', 'contact-form-7' ) ) ); } } private function display_setup() { $api_key = $this->get_api_key(); ?>
    is_active() ) { echo esc_html( wpcf7_mask_password( $api_key, 4, 8 ) ); echo sprintf( '', esc_attr( $api_key ) ); } else { echo sprintf( '', esc_attr( $api_key ) ); } ?>
    is_active() ) { submit_button( _x( 'Remove key', 'API keys', 'contact-form-7' ), 'small', 'reset' ); } else { submit_button( __( 'Save changes', 'contact-form-7' ) ); } ?>
    array( 'Accept' => 'application/json', 'Content-Type' => 'application/json; charset=utf-8', 'API-Key' => $this->get_api_key(), ), ); $response = wp_remote_get( $endpoint, $request ); $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( 200 === $response_code ) { // 200 OK return true; } elseif ( 401 === $response_code ) { // 401 Unauthorized return false; } elseif ( 400 <= $response_code ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } } } public function get_lists( $options = '' ) { $options = wp_parse_args( $options, array( 'limit' => 50, 'offset' => 0, ) ); $endpoint = add_query_arg( $options, 'https://api.sendinblue.com/v3/contacts/lists' ); $request = array( 'headers' => array( 'Accept' => 'application/json', 'Content-Type' => 'application/json; charset=utf-8', 'API-Key' => $this->get_api_key(), ), ); $response = wp_remote_get( $endpoint, $request ); $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( 200 === $response_code ) { // 200 OK $response_body = wp_remote_retrieve_body( $response ); $response_body = json_decode( $response_body, true ); if ( empty( $response_body['lists'] ) ) { return array(); } else { return (array) $response_body['lists']; } } elseif ( 400 <= $response_code ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } } } public function get_templates() { $endpoint = add_query_arg( array( 'templateStatus' => 'true', 'limit' => 100, 'offset' => 0, ), 'https://api.sendinblue.com/v3/smtp/templates' ); $request = array( 'headers' => array( 'Accept' => 'application/json', 'Content-Type' => 'application/json; charset=utf-8', 'API-Key' => $this->get_api_key(), ), ); $response = wp_remote_get( $endpoint, $request ); $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( 200 === $response_code ) { // 200 OK $response_body = wp_remote_retrieve_body( $response ); $response_body = json_decode( $response_body, true ); if ( empty( $response_body['templates'] ) ) { return array(); } else { return (array) $response_body['templates']; } } elseif ( 400 <= $response_code ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } } } public function create_contact( $properties ) { $endpoint = 'https://api.sendinblue.com/v3/contacts'; $request = array( 'headers' => array( 'Accept' => 'application/json', 'Content-Type' => 'application/json; charset=utf-8', 'API-Key' => $this->get_api_key(), ), 'body' => wp_json_encode( $properties ), ); $response = wp_remote_post( $endpoint, $request ); $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( in_array( $response_code, array( 201, 204 ), true ) ) { $contact_id = wp_remote_retrieve_body( $response ); return $contact_id; } elseif ( 400 <= $response_code ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } } return false; } public function send_email( $properties ) { $endpoint = 'https://api.sendinblue.com/v3/smtp/email'; $request = array( 'headers' => array( 'Accept' => 'application/json', 'Content-Type' => 'application/json; charset=utf-8', 'API-Key' => $this->get_api_key(), ), 'body' => wp_json_encode( $properties ), ); $response = wp_remote_post( $endpoint, $request ); $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( 201 === $response_code ) { // 201 Transactional email sent $message_id = wp_remote_retrieve_body( $response ); return $message_id; } elseif ( 400 <= $response_code ) { if ( WP_DEBUG ) { $this->log( $endpoint, $request, $response ); } } return false; } } PK)o#]@77!modules/really-simple-captcha.phpnu[ true, 'zero-controls-container' => true, 'not-for-mail' => true, ) ); // CAPTCHA-Response (input) wpcf7_add_form_tag( 'captchar', 'wpcf7_captchar_form_tag_handler', array( 'name-attr' => true, 'do-not-store' => true, 'not-for-mail' => true, ) ); } function wpcf7_captchac_form_tag_handler( $tag ) { if ( ! class_exists( 'ReallySimpleCaptcha' ) ) { $error = sprintf( /* translators: %s: link labeled 'Really Simple CAPTCHA' */ esc_html( __( "To use CAPTCHA, you need %s plugin installed.", 'contact-form-7' ) ), wpcf7_link( 'https://wordpress.org/plugins/really-simple-captcha/', 'Really Simple CAPTCHA' ) ); return sprintf( '%s', $error ); } if ( empty( $tag->name ) ) { return ''; } $class = wpcf7_form_controls_class( $tag->type ); $class .= ' wpcf7-captcha-' . str_replace( ':', '', $tag->name ); $atts = array(); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $op = array( // Default 'img_size' => array( 72, 24 ), 'base' => array( 6, 18 ), 'font_size' => 14, 'font_char_width' => 15, ); $op = array_merge( $op, wpcf7_captchac_options( $tag->options ) ); if ( ! $filename = wpcf7_generate_captcha( $op ) ) { return ''; } if ( ! empty( $op['img_size'] ) ) { if ( isset( $op['img_size'][0] ) ) { $atts['width'] = $op['img_size'][0]; } if ( isset( $op['img_size'][1] ) ) { $atts['height'] = $op['img_size'][1]; } } $atts['alt'] = 'captcha'; $atts['src'] = wpcf7_captcha_url( $filename ); $atts = wpcf7_format_atts( $atts ); $prefix = substr( $filename, 0, strrpos( $filename, '.' ) ); $html = sprintf( '', esc_attr( sprintf( '_wpcf7_captcha_challenge_%s', $tag->name ) ), esc_attr( $prefix ), $atts ); return $html; } function wpcf7_captchar_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $atts = array(); $atts['size'] = $tag->get_size_option( '40' ); $atts['maxlength'] = $tag->get_maxlength_option(); $atts['minlength'] = $tag->get_minlength_option(); if ( $atts['maxlength'] and $atts['minlength'] and $atts['maxlength'] < $atts['minlength'] ) { unset( $atts['maxlength'], $atts['minlength'] ); } $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $atts['autocomplete'] = 'off'; if ( $validation_error ) { $atts['aria-invalid'] = 'true'; $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $atts['aria-invalid'] = 'false'; } $value = (string) reset( $tag->values ); if ( wpcf7_is_posted() ) { $value = ''; } if ( $tag->has_option( 'placeholder' ) or $tag->has_option( 'watermark' ) ) { $atts['placeholder'] = $value; $value = ''; } $atts['value'] = $value; $atts['type'] = 'text'; $atts['name'] = $tag->name; $html = sprintf( '%3$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), $validation_error ); return $html; } /* Validation filter */ add_filter( 'wpcf7_validate_captchar', 'wpcf7_captcha_validation_filter', 10, 2 ); function wpcf7_captcha_validation_filter( $result, $tag ) { $type = $tag->type; $name = $tag->name; $captchac = '_wpcf7_captcha_challenge_' . $name; $prefix = (string) ( $_POST[$captchac] ?? '' ); $response = (string) ( $_POST[$name] ?? '' ); $response = wpcf7_canonicalize( $response ); if ( 0 === strlen( $prefix ) or ! wpcf7_check_captcha( $prefix, $response ) ) { $result->invalidate( $tag, wpcf7_get_message( 'captcha_not_match' ) ); } if ( 0 !== strlen( $prefix ) ) { wpcf7_remove_captcha( $prefix ); } return $result; } /* Ajax echo filter */ add_filter( 'wpcf7_refill_response', 'wpcf7_captcha_ajax_refill', 10, 1 ); add_filter( 'wpcf7_feedback_response', 'wpcf7_captcha_ajax_refill', 10, 1 ); function wpcf7_captcha_ajax_refill( $items ) { if ( ! is_array( $items ) ) { return $items; } $tags = wpcf7_scan_form_tags( array( 'type' => 'captchac' ) ); if ( empty( $tags ) ) { return $items; } $refill = array(); foreach ( $tags as $tag ) { $name = $tag->name; $options = $tag->options; if ( empty( $name ) ) { continue; } $op = wpcf7_captchac_options( $options ); if ( $filename = wpcf7_generate_captcha( $op ) ) { $captcha_url = wpcf7_captcha_url( $filename ); $refill[$name] = $captcha_url; } } if ( ! empty( $refill ) ) { $items['captcha'] = $refill; } return $items; } /* Messages */ add_filter( 'wpcf7_messages', 'wpcf7_captcha_messages', 10, 1 ); function wpcf7_captcha_messages( $messages ) { $messages = array_merge( $messages, array( 'captcha_not_match' => array( 'description' => __( "The code that sender entered does not match the CAPTCHA", 'contact-form-7' ), 'default' => __( 'Your entered code is incorrect.', 'contact-form-7' ), ), ) ); return $messages; } /* Warning message */ add_action( 'wpcf7_admin_warnings', 'wpcf7_captcha_display_warning_message', 10, 3 ); function wpcf7_captcha_display_warning_message( $page, $action, $object ) { if ( $object instanceof WPCF7_ContactForm ) { $contact_form = $object; } else { return; } $has_tags = (bool) $contact_form->scan_form_tags( array( 'type' => array( 'captchac' ) ) ); if ( ! $has_tags ) { return; } if ( ! class_exists( 'ReallySimpleCaptcha' ) ) { return; } $uploads_dir = wpcf7_captcha_tmp_dir(); wpcf7_init_captcha(); if ( ! is_dir( $uploads_dir ) or ! wp_is_writable( $uploads_dir ) ) { $message = sprintf( /* translators: %s: Path to the temporary folder */ __( 'This contact form contains CAPTCHA fields, but the temporary folder for the files (%s) does not exist or is not writable. You can create the folder or change its permission manually.', 'contact-form-7' ), $uploads_dir ); wp_admin_notice( esc_html( $message ), array( 'type' => 'warning' ) ); } if ( ! function_exists( 'imagecreatetruecolor' ) or ! function_exists( 'imagettftext' ) ) { $message = __( "This contact form contains CAPTCHA fields, but the necessary libraries (GD and FreeType) are not available on your server.", 'contact-form-7' ); wp_admin_notice( esc_html( $message ), array( 'type' => 'warning' ) ); } } /* CAPTCHA functions */ function wpcf7_init_captcha() { static $captcha = null; if ( $captcha ) { return $captcha; } if ( class_exists( 'ReallySimpleCaptcha' ) ) { $captcha = new ReallySimpleCaptcha(); } else { return false; } $dir = trailingslashit( wpcf7_captcha_tmp_dir() ); $captcha->tmp_dir = $dir; if ( is_callable( array( $captcha, 'make_tmp_dir' ) ) ) { $result = $captcha->make_tmp_dir(); if ( ! $result ) { return false; } return $captcha; } $result = wp_mkdir_p( $dir ); if ( ! $result ) { return false; } $htaccess_file = path_join( $dir, '.htaccess' ); if ( file_exists( $htaccess_file ) ) { list( $first_line_comment ) = (array) file( $htaccess_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ); if ( '# Apache 2.4+' === $first_line_comment ) { return $captcha; } } if ( $handle = @fopen( $htaccess_file, 'w' ) ) { fwrite( $handle, "# Apache 2.4+\n" ); fwrite( $handle, "\n" ); fwrite( $handle, " Require all denied\n" ); fwrite( $handle, ' ' . "\n" ); fwrite( $handle, " Require all granted\n" ); fwrite( $handle, " \n" ); fwrite( $handle, "\n" ); fwrite( $handle, "\n" ); fwrite( $handle, "# Apache 2.2\n" ); fwrite( $handle, "\n" ); fwrite( $handle, " Order deny,allow\n" ); fwrite( $handle, " Deny from all\n" ); fwrite( $handle, ' ' . "\n" ); fwrite( $handle, " Allow from all\n" ); fwrite( $handle, " \n" ); fwrite( $handle, "\n" ); fclose( $handle ); } return $captcha; } /** * Returns the directory path for Really Simple CAPTCHA files. * * @return string Directory path. */ function wpcf7_captcha_tmp_dir() { if ( defined( 'WPCF7_CAPTCHA_TMP_DIR' ) ) { $dir = path_join( WP_CONTENT_DIR, WPCF7_CAPTCHA_TMP_DIR ); wp_mkdir_p( $dir ); if ( wpcf7_is_file_path_in_content_dir( $dir ) ) { return $dir; } } $dir = path_join( wpcf7_upload_dir( 'dir' ), 'wpcf7_captcha' ); wp_mkdir_p( $dir ); return $dir; } function wpcf7_captcha_tmp_url() { if ( defined( 'WPCF7_CAPTCHA_TMP_URL' ) ) { return WPCF7_CAPTCHA_TMP_URL; } else { return path_join( wpcf7_upload_dir( 'url' ), 'wpcf7_captcha' ); } } function wpcf7_captcha_url( $filename ) { $url = path_join( wpcf7_captcha_tmp_url(), $filename ); if ( is_ssl() and 'http:' === substr( $url, 0, 5 ) ) { $url = 'https:' . substr( $url, 5 ); } return apply_filters( 'wpcf7_captcha_url', sanitize_url( $url ) ); } function wpcf7_generate_captcha( $options = null ) { if ( ! $captcha = wpcf7_init_captcha() ) { return false; } if ( ! is_dir( $captcha->tmp_dir ) or ! wp_is_writable( $captcha->tmp_dir ) ) { return false; } $img_type = imagetypes(); if ( $img_type & IMG_PNG ) { $captcha->img_type = 'png'; } elseif ( $img_type & IMG_GIF ) { $captcha->img_type = 'gif'; } elseif ( $img_type & IMG_JPG ) { $captcha->img_type = 'jpeg'; } else { return false; } if ( is_array( $options ) ) { if ( isset( $options['img_size'] ) ) { $captcha->img_size = $options['img_size']; } if ( isset( $options['base'] ) ) { $captcha->base = $options['base']; } if ( isset( $options['font_size'] ) ) { $captcha->font_size = $options['font_size']; } if ( isset( $options['font_char_width'] ) ) { $captcha->font_char_width = $options['font_char_width']; } if ( isset( $options['fg'] ) ) { $captcha->fg = $options['fg']; } if ( isset( $options['bg'] ) ) { $captcha->bg = $options['bg']; } } $prefix = wp_rand(); $captcha_word = $captcha->generate_random_word(); return $captcha->generate_image( $prefix, $captcha_word ); } function wpcf7_check_captcha( $prefix, $response ) { if ( ! $captcha = wpcf7_init_captcha() ) { return false; } return $captcha->check( $prefix, $response ); } function wpcf7_remove_captcha( $prefix ) { if ( ! $captcha = wpcf7_init_captcha() ) { return false; } // Contact Form 7 generates $prefix with wp_rand() if ( preg_match( '/[^0-9]/', $prefix ) ) { return false; } $captcha->remove( $prefix ); } add_action( 'shutdown', 'wpcf7_cleanup_captcha_files', 20, 0 ); function wpcf7_cleanup_captcha_files() { if ( ! $captcha = wpcf7_init_captcha() ) { return false; } if ( is_callable( array( $captcha, 'cleanup' ) ) ) { return $captcha->cleanup(); } $dir = trailingslashit( wpcf7_captcha_tmp_dir() ); if ( ! is_dir( $dir ) or ! is_readable( $dir ) or ! wp_is_writable( $dir ) ) { return false; } if ( $handle = opendir( $dir ) ) { while ( false !== ( $file = readdir( $handle ) ) ) { if ( ! preg_match( '/^[0-9]+\.(php|txt|png|gif|jpeg)$/', $file ) ) { continue; } $stat = stat( path_join( $dir, $file ) ); if ( $stat['mtime'] + HOUR_IN_SECONDS < time() ) { @unlink( path_join( $dir, $file ) ); } } closedir( $handle ); } } function wpcf7_captchac_options( $options ) { if ( ! is_array( $options ) ) { return array(); } $op = array(); $image_size_array = preg_grep( '%^size:[smlSML]$%', $options ); if ( $image_size = array_shift( $image_size_array ) ) { preg_match( '%^size:([smlSML])$%', $image_size, $is_matches ); switch ( strtolower( $is_matches[1] ) ) { case 's': $op['img_size'] = array( 60, 20 ); $op['base'] = array( 6, 15 ); $op['font_size'] = 11; $op['font_char_width'] = 13; break; case 'l': $op['img_size'] = array( 84, 28 ); $op['base'] = array( 6, 20 ); $op['font_size'] = 17; $op['font_char_width'] = 19; break; case 'm': default: $op['img_size'] = array( 72, 24 ); $op['base'] = array( 6, 18 ); $op['font_size'] = 14; $op['font_char_width'] = 15; } } $fg_color_array = preg_grep( '%^fg:#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$%', $options ); if ( $fg_color = array_shift( $fg_color_array ) ) { preg_match( '%^fg:#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$%', $fg_color, $fc_matches ); if ( 3 === strlen( $fc_matches[1] ) ) { $r = substr( $fc_matches[1], 0, 1 ); $g = substr( $fc_matches[1], 1, 1 ); $b = substr( $fc_matches[1], 2, 1 ); $op['fg'] = array( hexdec( $r . $r ), hexdec( $g . $g ), hexdec( $b . $b ), ); } elseif ( 6 === strlen( $fc_matches[1] ) ) { $r = substr( $fc_matches[1], 0, 2 ); $g = substr( $fc_matches[1], 2, 2 ); $b = substr( $fc_matches[1], 4, 2 ); $op['fg'] = array( hexdec( $r ), hexdec( $g ), hexdec( $b ), ); } } $bg_color_array = preg_grep( '%^bg:#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$%', $options ); if ( $bg_color = array_shift( $bg_color_array ) ) { preg_match( '%^bg:#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$%', $bg_color, $bc_matches ); if ( 3 === strlen( $bc_matches[1] ) ) { $r = substr( $bc_matches[1], 0, 1 ); $g = substr( $bc_matches[1], 1, 1 ); $b = substr( $bc_matches[1], 2, 1 ); $op['bg'] = array( hexdec( $r . $r ), hexdec( $g . $g ), hexdec( $b . $b ), ); } elseif ( 6 === strlen( $bc_matches[1] ) ) { $r = substr( $bc_matches[1], 0, 2 ); $g = substr( $bc_matches[1], 2, 2 ); $b = substr( $bc_matches[1], 4, 2 ); $op['bg'] = array( hexdec( $r ), hexdec( $g ), hexdec( $b ), ); } } return $op; } PK)o#]tP  modules/reflection.phpnu[ true, 'display-block' => true, 'not-for-mail' => true, ) ); wpcf7_add_form_tag( 'output', 'wpcf7_output_form_tag_handler', array( 'name-attr' => true, 'not-for-mail' => true, ) ); } /** * The form-tag handler for the reflection type. */ function wpcf7_reflection_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $values = $tag->values ? $tag->values : array( '' ); if ( ! wpcf7_get_validation_error( $tag->name ) ) { $hangover = array_filter( (array) wpcf7_get_hangover( $tag->name ) ); if ( $hangover ) { $values = $hangover; } } $content = array_reduce( $values, static function ( $carry, $item ) use ( $tag ) { $output_tag = sprintf( '%2$s', wpcf7_format_atts( array( 'name' => $tag->name, 'data-default' => $item, ) ), ( '' !== $item ) ? esc_html( $item ) : ' ' ); return $carry . $output_tag; }, '' ); $html = sprintf( '
    %2$s
    ', wpcf7_format_atts( array( 'data-reflection-of' => $tag->name, 'class' => $tag->get_class_option( wpcf7_form_controls_class( $tag->type ) ), 'id' => $tag->get_id_option(), ) ), $content ); return $html; } /** * The form-tag handler for the output type. */ function wpcf7_output_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $value = (string) reset( $tag->values ); if ( ! wpcf7_get_validation_error( $tag->name ) ) { $hangover = array_filter( (array) wpcf7_get_hangover( $tag->name ) ); if ( $hangover ) { $value = (string) reset( $hangover ); } } $html = sprintf( '%2$s', wpcf7_format_atts( array( 'data-reflection-of' => $tag->name, 'data-default' => $value, 'name' => $tag->name, 'class' => $tag->get_class_option( wpcf7_form_controls_class( $tag->type ) ), 'id' => $tag->get_id_option(), ) ), esc_html( $value ) ); return $html; } PK)o#]>emodules/textarea.phpnu[ true ) ); } function wpcf7_textarea_form_tag_handler( $tag ) { if ( empty( $tag->name ) ) { return ''; } $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) { $class .= ' wpcf7-not-valid'; } $atts = array(); $atts['cols'] = $tag->get_cols_option( '40' ); $atts['rows'] = $tag->get_rows_option( '10' ); $atts['maxlength'] = $tag->get_maxlength_option( '2000' ); $atts['minlength'] = $tag->get_minlength_option(); if ( $atts['maxlength'] and $atts['minlength'] and $atts['maxlength'] < $atts['minlength'] ) { unset( $atts['maxlength'], $atts['minlength'] ); } $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'signed_int', true ); $atts['readonly'] = $tag->has_option( 'readonly' ); $atts['autocomplete'] = $tag->get_option( 'autocomplete', '[-0-9a-zA-Z]+', true ); if ( $tag->is_required() ) { $atts['aria-required'] = 'true'; } if ( $validation_error ) { $atts['aria-invalid'] = 'true'; $atts['aria-describedby'] = wpcf7_get_validation_error_reference( $tag->name ); } else { $atts['aria-invalid'] = 'false'; } $value = empty( $tag->content ) ? (string) reset( $tag->values ) : $tag->content; if ( $tag->has_option( 'placeholder' ) or $tag->has_option( 'watermark' ) ) { $atts['placeholder'] = $value; $value = ''; } $value = $tag->get_default_option( $value ); $value = wpcf7_get_hangover( $tag->name, $value ); $atts['name'] = $tag->name; $html = sprintf( '%4$s', esc_attr( $tag->name ), wpcf7_format_atts( $atts ), esc_textarea( $value ), $validation_error ); return $html; } add_action( 'wpcf7_swv_create_schema', 'wpcf7_swv_add_textarea_rules', 10, 2 ); function wpcf7_swv_add_textarea_rules( $schema, $contact_form ) { $tags = $contact_form->scan_form_tags( array( 'basetype' => array( 'textarea' ), ) ); foreach ( $tags as $tag ) { if ( $tag->is_required() ) { $schema->add_rule( wpcf7_swv_create_rule( 'required', array( 'field' => $tag->name, 'error' => wpcf7_get_message( 'invalid_required' ), ) ) ); } if ( $minlength = $tag->get_minlength_option() ) { $schema->add_rule( wpcf7_swv_create_rule( 'minlength', array( 'field' => $tag->name, 'threshold' => absint( $minlength ), 'error' => wpcf7_get_message( 'invalid_too_short' ), ) ) ); } if ( $maxlength = $tag->get_maxlength_option( '2000' ) ) { $schema->add_rule( wpcf7_swv_create_rule( 'maxlength', array( 'field' => $tag->name, 'threshold' => absint( $maxlength ), 'error' => wpcf7_get_message( 'invalid_too_long' ), ) ) ); } } } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_textarea', 20, 0 ); function wpcf7_add_tag_generator_textarea() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'textarea', __( 'text area', 'contact-form-7' ), 'wpcf7_tag_generator_textarea', array( 'version' => '2' ) ); } function wpcf7_tag_generator_textarea( $contact_form, $options ) { $field_types = array( 'textarea' => array( 'display_name' => __( 'Text area', 'contact-form-7' ), 'heading' => __( 'Text area form-tag generator', 'contact-form-7' ), 'description' => __( 'Generates a form-tag for a multi-line plain text input area.', 'contact-form-7' ), ), ); $tgg = new WPCF7_TagGeneratorGenerator( $options['content'] ); ?>

    array( 'href' => true ), 'strong' => array(), ), array( 'http', 'https' ) ); echo $description; ?>

    print( 'field_type', array( 'with_required' => true, 'select_options' => array( 'textarea' => $field_types['textarea']['display_name'], ), ) ); $tgg->print( 'field_name' ); $tgg->print( 'class_attr' ); $tgg->print( 'min_max', array( 'title' => __( 'Length', 'contact-form-7' ), 'min_option' => 'minlength:', 'max_option' => 'maxlength:', ) ); $tgg->print( 'default_value', array( 'with_placeholder' => true, 'use_content' => true, ) ); ?>
    print( 'insert_box_content' ); $tgg->print( 'mail_tag_tip' ); ?>
    get_contact_form(); $do_doi = apply_filters( 'wpcf7_do_doi', ! $contact_form->is_false( 'doi' ), $agent_name, $args ); if ( ! $do_doi ) { return; } $token = doihelper_start_session( $agent_name, $args ); } PK)o#]ڕ readme.txtnu[=== Contact Form 7 === Contributors: takayukister Donate link: https://contactform7.com/donate/ Tags: contact form, schema-woven validation Tested up to: 6.8 Requires at least: 6.6 Requires PHP: 7.4 Stable tag: 6.0.6 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Just another contact form plugin. Simple but flexible. == Description == Contact Form 7 is a plugin designed to be a practical tool for all WordPress users who embrace the philosophy of free and open source software. It employs sophisticatedly modularized architecture and its original [Schema-Woven Validation](https://contactform7.com/schema-woven-validation/) technology. = Docs and support = You can find [docs](https://contactform7.com/docs/), [FAQ](https://contactform7.com/faq/) and more detailed information about Contact Form 7 on [contactform7.com](https://contactform7.com/). When you cannot find the answer to your question on the FAQ or in any of the documentation, check the [support forum](https://wordpress.org/support/plugin/contact-form-7/) on WordPress.org. If you cannot locate any topics that pertain to your particular issue, post a new topic for it. = Contact Form 7 needs your support = It is hard to continue to maintain this plugin without support from users like you. There are several ways for you to [contribute to the project](https://contactform7.com/contributing/): testing, coding, translating it into your local languages, helping other users, financial donations, etc, etc. We equally welcome you regardless of the way you contribute. = Privacy notices = With the default configuration, this plugin, in itself, does not: * track users by stealth; * write any user personal data to the database; * send any data to external servers; * use cookies. If you activate certain features in this plugin, the contact form submitter's personal data, including their IP address, may be sent to the service provider. Thus, confirming the provider's privacy policy is recommended. These features include: * reCAPTCHA ([Google](https://policies.google.com/?hl=en)) * Akismet ([Automattic](https://automattic.com/privacy/)) * [Constant Contact](https://www.constantcontact.com/legal/privacy-center) * [Brevo](https://www.brevo.com/legal/privacypolicy/) * [Stripe](https://stripe.com/privacy) == Installation == 1. Upload the entire `contact-form-7` folder to the `/wp-content/plugins/` directory. 1. Activate the plugin through the **Plugins** screen (**Plugins > Installed Plugins**). You will find **Contact** menu in your WordPress admin screen. For basic usage, have a look at the [plugin's website](https://contactform7.com/). == Frequently Asked Questions == Do you have questions or issues with Contact Form 7? Use these support channels appropriately. 1. [Docs](https://contactform7.com/docs/) 1. [FAQ](https://contactform7.com/faq/) 1. [Support forum](https://wordpress.org/support/plugin/contact-form-7/) [Support](https://contactform7.com/support/) == Screenshots == 1. screenshot-1.png == Changelog == For more information, see [Releases](https://contactform7.com/category/releases/). = 6.0.6 = [https://contactform7.com/contact-form-7-606/](https://contactform7.com/contact-form-7-606/) = 6.0.5 = [https://contactform7.com/contact-form-7-605/](https://contactform7.com/contact-form-7-605/) = 6.0.4 = [https://contactform7.com/contact-form-7-604/](https://contactform7.com/contact-form-7-604/) = 6.0.3 = * Updates the copyright year to 2025. * Updates the "Contact Form 7 needs your support" message content. * Updates the Constant Contact deprecation warning. = 6.0.2 = * Removes unnecessary type declaration from nullable arguments to avoid deprecation warnings in PHP 8.4. = 6.0.1 = [https://contactform7.com/contact-form-7-601/](https://contactform7.com/contact-form-7-601/) = 6.0 = [https://contactform7.com/contact-form-7-60/](https://contactform7.com/contact-form-7-60/) = 5.9.7 = [https://contactform7.com/contact-form-7-597/](https://contactform7.com/contact-form-7-597/) = 5.9.6 = [https://contactform7.com/contact-form-7-596/](https://contactform7.com/contact-form-7-596/) = 5.9.5 = [https://contactform7.com/contact-form-7-595/](https://contactform7.com/contact-form-7-595/) = 5.9.4 = [https://contactform7.com/contact-form-7-594/](https://contactform7.com/contact-form-7-594/) = 5.9.3 = [https://contactform7.com/contact-form-7-593/](https://contactform7.com/contact-form-7-593/) = 5.9.2 = [https://contactform7.com/contact-form-7-592/](https://contactform7.com/contact-form-7-592/) = 5.9 = [https://contactform7.com/contact-form-7-59/](https://contactform7.com/contact-form-7-59/) == Upgrade Notice == PK)o#]dAload.phpnu[PK)o#]/J\\vincludes/error_lognu[PK)o#]V:{ { includes/l10n.phpnu[PK)o#]}Bo44 includes/js/index.jsnu[PK)o#]R2>includes/js/error_lognu[PK)o#] ֶEE1Aincludes/js/jquery-ui/themes/smoothness/theme.cssnu[PK)o#]я¸5ȇincludes/js/jquery-ui/themes/smoothness/jquery-ui.cssnu[PK)o#] 6z6z9includes/js/jquery-ui/themes/smoothness/jquery-ui.min.cssnu[PK)o#]ODDJincludes/js/jquery-ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.pngnu[PK)o#]p+EEWBincludes/js/jquery-ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.pngnu[PK)o#]A:DDNincludes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.pngnu[PK)o#]~lʲJЧincludes/js/jquery-ui/themes/smoothness/images/ui-icons_454545_256x240.pngnu[PK)o#]8[DDJincludes/js/jquery-ui/themes/smoothness/images/ui-icons_2e83ff_256x240.pngnu[PK)o#] щNincludes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.pngnu[PK)o#]0qqJincludes/js/jquery-ui/themes/smoothness/images/ui-icons_222222_256x240.pngnu[PK)o#]D;Jincludes/js/jquery-ui/themes/smoothness/images/ui-icons_888888_256x240.pngnu[PK)o#]xvaNincludes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.pngnu[PK)o#]%CCNincludes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.pngnu[PK)o#]  Nincludes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.pngnu[PK)o#]Lj9includes/js/html5-fallback.jsnu[PK)o#]|l`` includes/js/index.asset.phpnu[PK)o#]ۼ))#includes/contact-form-functions.phpnu[PK)o#]  Cincludes/controller.phpnu[PK)o#]8۩::Pincludes/mail.phpnu[PK)o#](((lincludes/file.phpnu[PK)o#]Vw, [includes/shortcodes.phpnu[PK)o#]kp88:includes/form-tags-manager.phpnu[PK)o#]N N vincludes/css/styles.cssnu[PK)o#]QD includes/css/styles-rtl.cssnu[PK)o#]z{bbincludes/mail-tag.phpnu[PK)o#] (##includes/integration.phpnu[PK)o#]Z!7includes/validation-functions.phpnu[PK)o#]vMBBRincludes/capabilities.phpnu[PK)o#] ZW"`Vincludes/contact-form-template.phpnu[PK)o#]} xmincludes/upgrade.phpnu[PK)o#]v֗zzyincludes/contact-form.phpnu[PK)o#]( 55includes/form-tag.phpnu[PK)o#] [0>0>w*includes/functions.phpnu[PK)o#]ȿ66hincludes/formatting.phpnu[PK)o#]5 Fincludes/validation.phpnu[PK)o#]@EEincludes/pocket-holder.phpnu[PK)o#]"n33&includes/rest-api.phpnu[PK)o#])V=Q=Qincludes/submission.phpnu[PK)o#]M-\mtmt3 assets/icon.pngnu[PK)o#]U7/ assets/icon.svgnu[PK)o#]fOm modules/recaptcha/index.jsnu[PK)o#]FF] modules/recaptcha/recaptcha.phpnu[PK)o#]'偠 modules/recaptcha/error_lognu[PK)o#]  modules/recaptcha/service.phpnu[PK)o#]8ܤQQ! modules/recaptcha/index.asset.phpnu[PK)o#]P modules/date.phpnu[PK)o#]٫Qn modules/acceptance.phpnu[PK)o#]|S@( modules/response.phpnu[PK)o#]*-QP* modules/count.phpnu[PK)o#]bK  ]0 modules/select.phpnu[PK)o#] -I modules/constant-contact/constant-contact.phpnu[PK)o#] 7"T modules/constant-contact/error_lognu[PK)o#](4] modules/constant-contact/contact-form-properties.phpnu[PK)o#][A 4v modules/constant-contact/doi.phpnu[PK)o#]IQRYt0t0$ modules/constant-contact/service.phpnu[PK)o#]L$XCC1 modules/constant-contact/contact-post-request.phpnu[PK)o#]H? ?  modules/submit.phpnu[PK)o#],e  modules/text.phpnu[PK)o#]GT modules/hidden.phpnu[PK)o#]h11 modules/error_lognu[PK)o#]P>h!h!- modules/flamingo.phpnu[PK)o#]׻O modules/file.phpnu[PK)o#] kO&&h modules/checkbox.phpnu[PK)o#]3'' modules/quiz.phpnu[PK)o#]l modules/listo.phpnu[PK)o#] l1yy modules/akismet/akismet.phpnu[PK)o#]tSshh| modules/akismet/error_lognu[PK)o#]- modules/akismet/service.phpnu[PK)o#]-  r modules/number.phpnu[PK)o#],AWW modules/disallowed-list.phpnu[PK)o#]Yv modules/stripe/index.jsnu[PK)o#]U/|| modules/stripe/error_lognu[PK)o#]8 modules/stripe/stripe.phpnu[PK)o#]AD;;" modules/stripe/style.cssnu[PK)o#]ld\\$ modules/stripe/api.phpnu[PK)o#]TK5 modules/stripe/service.phpnu[PK)o#]8ܤQQM modules/stripe/index.asset.phpnu[PK)o#]˔?N modules/sendinblue/error_lognu[PK)o#]0Uh!W modules/sendinblue/sendinblue.phpnu[PK)o#]XU]].^l modules/sendinblue/contact-form-properties.phpnu[PK)o#]7   modules/sendinblue/doi.phpnu[PK)o#]v$$~ modules/sendinblue/service.phpnu[PK)o#]@77! modules/really-simple-captcha.phpnu[PK)o#]tP   modules/reflection.phpnu[PK)o#]>e modules/textarea.phpnu[PK)o#]  modules/doi-helper.phpnu[PK)o#]ڕ  readme.txtnu[PK;$