admin/includes/css/styles.css000060400000023763147177201300012300 0ustar00#titlediv .inside p.description { margin: 8px 2px 0; } #titlediv .inside p.description label { cursor: pointer; } span.shortcode { display: block; margin: 2px 0; } span.shortcode.old { background: #777; color: #fff; } span.shortcode input { font-size: 12px; border: none; box-shadow: none; padding: 4px 8px; margin: 0; } #wpcf7-contact-form-list-table span.shortcode input, #wpcf7-contact-form-editor span.shortcode input { background: transparent; } #wpcf7-contact-form-list-table span.shortcode input { color: #444; } #wpcf7-contact-form-editor span.shortcode input { color: #fff; } #submitpost input.copy { margin-bottom: 10px; } #submitpost input.delete { padding: 0; margin: 0; border: none; cursor: pointer; background: inherit; color: #a00; } #submitpost input.delete:hover { color: #dc3232; /* Red */ } #submitpost input.delete:focus { outline: thin dotted; } .postbox-container .postbox h3 { border-bottom: 1px solid transparent; } div.config-error, span.config-error, ul.config-error { color: #444; font-style: normal; font-size: 13px; } ul.config-error { margin: 2px 0; } ul.config-error li { list-style: none; padding: 2px 2px; margin: 0; } #misc-publishing-actions .config-error { line-height: 2; } [data-config-field][aria-invalid="true"] { border-color: #dc3232; } #contact-form-editor-tabs li a .icon-in-circle, #contact-form-editor .config-error .icon-in-circle, .wp-list-table .config-error .icon-in-circle, .icon-in-circle { display: inline-block; vertical-align: baseline; margin: 1px 6px 0; padding: 0 5px; min-width: 7px; height: 17px; border-radius: 11px; background-color: #ca4a1f; color: #fff; font-size: 12px; font-weight: bold; line-height: 17px; text-align: center; z-index: 26; } /* * Tabs */ #contact-form-editor-tabs { border-bottom: 1px solid #aaa; padding: 9px 15px 0 10px; margin: 0; } #contact-form-editor-tabs li { display: inline-block; list-style: none; border: 1px solid #ccc; border-bottom: 1px solid #aaa; padding: 0; margin: 0 4px -1px; background-color: #e4e4e4; } #contact-form-editor-tabs li.active { border-top: 1px solid #aaa; border-right: 1px solid #aaa; border-left: 1px solid #aaa; border-bottom: 1px solid #f5f5f5; background-color: #f5f5f5; } #contact-form-editor-tabs li a { padding: 6px 10px; font-size: 14px; font-weight: normal; line-height: 30px; color: #333; text-decoration: none; } #contact-form-editor-tabs li.active a { color: #000; font-size: 14px; font-weight: bold; } #contact-form-editor-tabs li a:hover { color: #000; } #contact-form-editor .contact-form-editor-panel > div.config-error { margin-bottom: 1.4em; } #contact-form-editor-tabs li.active a .icon-in-circle { display: none; } #contact-form-editor .contact-form-editor-panel h2 { font-size: 18px; font-weight: 400; line-height: 24px; margin: 8px 0; padding: 0; } #contact-form-editor .contact-form-editor-panel { background-color: #f5f5f5; border: 1px solid #aaa; border-top: none; padding: 16px; } #contact-form-editor .form-table th { width: 100px; } #contact-form-editor .contact-form-editor-panel fieldset legend { line-height: 1.5; margin: .6em 0 .4em; } /* * Form Tab */ #tag-generator-list button { font-size: 12px; height: 26px; line-height: 24px; margin: 2px; padding: 0 8px 1px; } .tag-generator-dialog { padding: 12px; border: 1px solid #c3c4c7; box-shadow: 0 1px 1px rgba( 0, 0, 0, 0.04 ); min-height: 720px; /* needed for Safari */ } .tag-generator-dialog::backdrop { background: rgb( 0 0 0 / 50% ); } .tag-generator-dialog > .close-button { position: absolute; top: 8px; right: 8px; } form.tag-generator-panel { display: flex; flex-direction: column; height: 720px; width: 720px; max-height: 100%; max-width: 100%; margin-block-end: 0; } form.tag-generator-panel[data-version="2"] { &:invalid .mail-tag-tip { display: none; } .description-box { box-sizing: border-box; flex: none; margin-inline: -12px; padding-inline: 12px; border-bottom: 1px solid #dfdfdf; } .control-box { box-sizing: border-box; flex: auto; display: flex; flex-direction: column; gap: 12px 0; overflow: scroll; } .control-box > fieldset { margin-block: 8px; margin-inline-start: 10em; line-height: 2.25; } .control-box > fieldset > legend { font-weight: bolder; margin-block: 8px; margin-inline-start: -10em; line-height: 1.25; } .control-box input[type="text"] { width: 20rem; max-width: 88%; } .control-box input[type="number"] { width: 8rem; max-width: 44%; } .control-box textarea { height: 12ex; width: 20rem; max-width: 88%; } .control-box select { width: 20rem; max-width: 88%; } .control-box input:invalid, .control-box textarea:invalid { background-color: #ffe9de; } .insert-box { box-sizing: border-box; flex: none; margin-block-end: -12px; margin-inline: -12px; padding-block: 24px 12px; padding-inline: 12px; background-color: #fcfcfc; border-top: 1px solid #dfdfdf; } .insert-box .flex-container { display: flex; } .insert-box .flex-container > [data-tag-part="tag"] { flex: auto; margin-inline-end: 8px; } .insert-box .mail-tag-tip::before { font: 1.2rem dashicons; content: "\f348"; color: #646970; padding-inline-end: 4px; vertical-align: top; } } form.tag-generator-panel[data-version="1"] { .control-box { padding: 0; margin: 0; overflow: auto; flex-grow: 1; } .control-box > fieldset > legend { border: 1px solid #dfdfdf; border-left: 4px solid #00a0d2; background: #f7fcfe; padding: 4px 12px; margin: 4px 0; line-height: 1.4em; width: 100%; box-sizing: border-box; } table { width: 100%; } table.form-table th { width: 120px; padding: 4px 10px 4px 0; font-size: 13px; } table.form-table td { padding: 4px 10px; font-size: 13px; } .control-box input.oneline { width: 200px; } .control-box input.large-text { width: 400px; } .control-box textarea.values { width: 200px; height: 6em; } .control-box input[type="number"], .control-box input[type="date"] { width: 88px; } .control-box table caption { text-align: left; font-size: 110%; font-weight: bold; color: #777; margin: 10px 0 5px; } .control-box table.form-table td label { line-height: 1.1em; } .control-box table.form-table td label .description { line-height: 1.4em; } .insert-box { margin: 0 -15px -15px; padding: 8px 16px; background-color: #fcfcfc; border-top: 1px solid #dfdfdf; overflow: auto; } .insert-box input.tag { width: 510px; float: left; background-color: transparent; box-shadow: none; } .insert-box .submitbox { padding: 0; } .insert-box .submitbox input[type="button"] { float: right; } .insert-box .description label { cursor: text; } } /* * Mail Tab */ .contact-form-editor-box-mail span.mailtag { display: inline-block; margin: 0 0 0 4px; padding: 1px 2px; cursor: pointer; color: #000; } .contact-form-editor-box-mail span.mailtag.used { color: #666; } .contact-form-editor-box-mail span.mailtag.unused { font-weight: bold; } /* * Messages Tab */ #messages-panel p.description { margin: 5px 0 10px; } /* * Tabs for integration modules */ #ctct-panel table tr.inactive ~ tr, #sendinblue-panel table tr.inactive ~ tr { display: none; } #ctct-panel .dashicons, #sendinblue-panel .dashicons { text-decoration: none; } #ctct-panel td p, #sendinblue-panel td p { margin-top: 12px; } /* * List Table */ .fixed .column-title { width: 38%; } .fixed .column-shortcode { width: 38%; } /* * Welcome Panel */ .wpcf7-welcome-panel { position: relative; overflow: auto; margin: 16px 0; padding: 23px 10px 0; border: 1px solid #c3c4c7; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); background: #fff; font-size: 13px; line-height: 1.7; } .wpcf7-welcome-panel h3 { font-size: 16px; font-weight: 600; line-height: 2.1em; margin: 1em 0 1.2em; } .wpcf7-welcome-panel h3 .dashicons { position: relative; top: -2px; display: inline-block; width: 60px; color: #575757; font-size: 40px; } .wpcf7-welcome-panel p { color: #646970; } .wpcf7-welcome-panel p a { font-weight: bold; } .wpcf7-welcome-panel .welcome-panel-close { position: absolute; z-index: 2; top: 10px; right: 10px; padding: 10px 15px 10px 21px; font-size: 13px; line-height: 1.23076923; /* Chrome rounding, needs to be 16px equivalent */ text-decoration: none; } .wpcf7-welcome-panel .welcome-panel-close::before { background: 0 0; color: #787c82; content: "\f153"; display: block; font: normal 16px/20px dashicons; speak: never; height: 20px; text-align: center; width: 20px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; position: absolute; top: 8px; left: 0; transition: all .1s ease-in-out; } .wpcf7-welcome-panel .welcome-panel-content { display: block; margin-left: 13px; max-width: 1500px; min-height: auto; } .wpcf7-welcome-panel .welcome-panel-column-container { clear: both; position: relative; } .wpcf7-welcome-panel .welcome-panel-column { display: block; width: 48%; min-width: 200px; float: left; padding: 0 2% 0 0; margin: 0 0 1em 0; } @media screen and (max-width: 870px) { .wpcf7-welcome-panel .welcome-panel-column { display: block; float: none; width: 100%; } } .wpcf7-welcome-panel .welcome-panel-column p { margin-top: 7px; color: #3c434a; } /* * Integration */ .card { background: #fff none repeat scroll 0 0; border: 1px solid #e5e5e5; border-left: 4px solid #e5e5e5; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); margin-top: 20px; max-width: 520px; min-width: 255px; padding: 0.7em 2em 1em; position: relative; } .card.active { border-color: #00a0d2; } .card img.icon { float: left; margin: 8px 8px 8px -8px; } .card h2.title { float: left; max-width: 240px; font-size: 1.3em; font-weight: 600; } .card .infobox { float: right; font-size: 13px; color: #666; margin: 1em; line-height: 1.5; max-width: 240px; } .card .inside .form-table th { padding: 15px 10px 15px 0; width: 160px; } .card .inside .form-table td { padding: 10px 10px; } .card .checkboxes li { margin: 0; } admin/includes/css/styles-rtl.css000060400000002174147177201300013070 0ustar00/* * 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; } admin/includes/js/index.asset.php000060400000000162147177201300013011 0ustar00 array( 'wp-api-fetch', 'wp-i18n', ), 'version' => WPCF7_VERSION, ); admin/includes/js/index.js000060400000031114147177201300011521 0ustar00(()=>{"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")}))}))}))})();admin/includes/admin-functions.php000060400000001104147177201300013243 0ustar00add( $name, $title, $callback, $options ); } admin/includes/class-contact-forms-list-table.php000060400000013323147177201300016073 0ustar00 '', 'title' => __( 'Title', 'contact-form-7' ), 'shortcode' => __( 'Shortcode', 'contact-form-7' ), 'author' => __( 'Author', 'contact-form-7' ), 'date' => __( 'Date', 'contact-form-7' ), ); return $columns; } public function __construct() { parent::__construct( array( 'singular' => 'post', 'plural' => 'posts', 'ajax' => false, ) ); } public function prepare_items() { $current_screen = get_current_screen(); $per_page = $this->get_items_per_page( 'wpcf7_contact_forms_per_page' ); $args = array( 'posts_per_page' => $per_page, 'orderby' => 'title', 'order' => 'ASC', 'offset' => ( $this->get_pagenum() - 1 ) * $per_page, ); if ( ! empty( $_REQUEST['s'] ) ) { $args['s'] = $_REQUEST['s']; } if ( ! empty( $_REQUEST['orderby'] ) ) { if ( 'title' == $_REQUEST['orderby'] ) { $args['orderby'] = 'title'; } elseif ( 'author' == $_REQUEST['orderby'] ) { $args['orderby'] = 'author'; } elseif ( 'date' == $_REQUEST['orderby'] ) { $args['orderby'] = 'date'; } } if ( ! empty( $_REQUEST['order'] ) ) { if ( 'asc' == strtolower( $_REQUEST['order'] ) ) { $args['order'] = 'ASC'; } elseif ( 'desc' == strtolower( $_REQUEST['order'] ) ) { $args['order'] = 'DESC'; } } $this->items = WPCF7_ContactForm::find( $args ); $total_items = WPCF7_ContactForm::count(); $total_pages = ceil( $total_items / $per_page ); $this->set_pagination_args( array( 'total_items' => $total_items, 'total_pages' => $total_pages, 'per_page' => $per_page, ) ); } public function get_columns() { return get_column_headers( get_current_screen() ); } protected function get_sortable_columns() { $columns = array( 'title' => array( 'title', true ), 'author' => array( 'author', false ), 'date' => array( 'date', false ), ); return $columns; } protected function get_bulk_actions() { $actions = array( 'delete' => __( 'Delete', 'contact-form-7' ), ); return $actions; } protected function column_default( $item, $column_name ) { return ''; } public function column_cb( $item ) { return sprintf( '', $this->_args['singular'], $item->id() ); } public function column_title( $item ) { $edit_link = add_query_arg( array( 'post' => absint( $item->id() ), 'action' => 'edit', ), menu_page_url( 'wpcf7', false ) ); $output = sprintf( '%3$s', esc_url( $edit_link ), esc_attr( sprintf( /* translators: %s: title of contact form */ __( 'Edit “%s”', 'contact-form-7' ), $item->title() ) ), esc_html( $item->title() ) ); $output = sprintf( '%s', $output ); if ( wpcf7_validate_configuration() and current_user_can( 'wpcf7_edit_contact_form', $item->id() ) ) { $config_validator = new WPCF7_ConfigValidator( $item ); $config_validator->restore(); if ( $count_errors = $config_validator->count_errors() ) { $error_notice = sprintf( _n( /* translators: %s: number of errors detected */ '%s configuration error detected', '%s configuration errors detected', $count_errors, 'contact-form-7' ), number_format_i18n( $count_errors ) ); $output .= sprintf( '
%s
', $error_notice ); } } return $output; } protected function handle_row_actions( $item, $column_name, $primary ) { if ( $column_name !== $primary ) { return ''; } $edit_link = add_query_arg( array( 'post' => absint( $item->id() ), 'action' => 'edit', ), menu_page_url( 'wpcf7', false ) ); $actions = array( 'edit' => wpcf7_link( $edit_link, __( 'Edit', 'contact-form-7' ) ), ); if ( current_user_can( 'wpcf7_edit_contact_form', $item->id() ) ) { $copy_link = add_query_arg( array( 'post' => absint( $item->id() ), 'action' => 'copy', ), menu_page_url( 'wpcf7', false ) ); $copy_link = wp_nonce_url( $copy_link, 'wpcf7-copy-contact-form_' . absint( $item->id() ) ); $actions = array_merge( $actions, array( 'copy' => wpcf7_link( $copy_link, __( 'Duplicate', 'contact-form-7' ) ), ) ); } return $this->row_actions( $actions ); } public function column_author( $item ) { $post = get_post( $item->id() ); if ( ! $post ) { return; } $author = get_userdata( $post->post_author ); if ( false === $author ) { return; } return esc_html( $author->display_name ); } public function column_shortcode( $item ) { $shortcodes = array( $item->shortcode() ); $output = ''; foreach ( $shortcodes as $shortcode ) { $output .= "\n" . ''; } return trim( $output ); } public function column_date( $item ) { $datetime = get_post_datetime( $item->id() ); if ( false === $datetime ) { return ''; } $t_time = sprintf( /* translators: 1: date, 2: time */ __( '%1$s at %2$s', 'contact-form-7' ), /* translators: date format, see https://www.php.net/date */ $datetime->format( __( 'Y/m/d', 'contact-form-7' ) ), /* translators: time format, see https://www.php.net/date */ $datetime->format( __( 'g:i a', 'contact-form-7' ) ) ); return $t_time; } } admin/includes/config-validator.php000060400000006505147177201300013407 0ustar00 'validate' ), menu_page_url( 'wpcf7', false ) ), __( 'Validate Contact Form 7 Configuration', 'contact-form-7' ) ); $message = __( "Misconfiguration leads to mail delivery failure or other troubles. Validate your contact forms now.", 'contact-form-7' ); wp_admin_notice( sprintf( '%1$s » %2$s', esc_html( $message ), $link ), 'type=warning' ); } add_action( 'wpcf7_admin_load', 'wpcf7_load_bulk_validate_page', 10, 2 ); function wpcf7_load_bulk_validate_page( $page, $action ) { if ( 'wpcf7' != $page or 'validate' != $action or ! wpcf7_validate_configuration() or 'POST' != $_SERVER['REQUEST_METHOD'] ) { return; } check_admin_referer( 'wpcf7-bulk-validate' ); if ( ! current_user_can( 'wpcf7_edit_contact_forms' ) ) { wp_die( __( "You are not allowed to validate configuration.", 'contact-form-7' ) ); } $contact_forms = WPCF7_ContactForm::find(); $result = array( 'timestamp' => time(), 'version' => WPCF7_VERSION, 'count_valid' => 0, 'count_invalid' => 0, ); foreach ( $contact_forms as $contact_form ) { $config_validator = new WPCF7_ConfigValidator( $contact_form ); $config_validator->validate(); $config_validator->save(); if ( $config_validator->is_valid() ) { $result['count_valid'] += 1; } else { $result['count_invalid'] += 1; } } WPCF7::update_option( 'bulk_validate', $result ); $redirect_to = add_query_arg( array( 'message' => 'validated', ), menu_page_url( 'wpcf7', false ) ); wp_safe_redirect( $redirect_to ); exit(); } function wpcf7_admin_bulk_validate_page() { $contact_forms = WPCF7_ContactForm::find(); $count = WPCF7_ContactForm::count(); $submit_text = sprintf( _n( /* translators: %s: number of contact forms */ "Validate %s contact form now", "Validate %s contact forms now", $count, 'contact-form-7' ), number_format_i18n( $count ) ); ?>

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' ) ); $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 ); ?>

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 ); } } admin/includes/tag-generator.php000060400000030447147177201300012720 0ustar00 '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' ), ) ) ); ?>
' ); ?>

', esc_attr( $this->icon() ) ); $title = sprintf( '

%1$s %2$s

', $icon, $this->title() ); $content = $this->content(); if ( is_array( $content ) ) { $content = implode( "\n\n", $content ); } $content = wp_kses_post( $content ); $content = wptexturize( $content ); $content = convert_chars( $content ); $content = wpautop( $content ); echo "\n"; echo '
'; echo $title; echo $content; echo '
'; } } class WPCF7_WelcomePanelColumn_AntiSpam extends WPCF7_WelcomePanelColumn { protected function icon() { return 'shield'; } protected function title() { return esc_html( __( "Getting spammed? You have protection.", 'contact-form-7' ) ); } protected function content() { return array( esc_html( __( "Spammers target everything; your contact forms are not an exception. Before you get spammed, protect your contact forms with the powerful anti-spam features Contact Form 7 provides.", 'contact-form-7' ) ), sprintf( /* translators: links labeled 1: 'Akismet', 2: 'reCAPTCHA', 3: 'disallowed list' */ esc_html( __( 'Contact Form 7 supports spam-filtering with %1$s. Intelligent %2$s blocks annoying spambots. Plus, using %3$s, you can block messages containing specified keywords or those sent from specified IP addresses.', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/spam-filtering-with-akismet/', 'contact-form-7' ), __( 'Akismet', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/recaptcha/', 'contact-form-7' ), __( 'reCAPTCHA', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/comment-blacklist/', 'contact-form-7' ), __( 'disallowed list', 'contact-form-7' ) ) ), ); } } class WPCF7_WelcomePanelColumn_Donation extends WPCF7_WelcomePanelColumn { protected function icon() { return 'megaphone'; } protected function title() { return esc_html( __( "Contact Form 7 needs your support.", 'contact-form-7' ) ); } protected function content() { return array( esc_html( __( "It is hard to continue development and support for this plugin without contributions from users like you.", 'contact-form-7' ) ), sprintf( /* translators: %s: link labeled 'making a donation' */ esc_html( __( 'If you enjoy using Contact Form 7 and find it useful, please consider %s.', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/donate/', 'contact-form-7' ), __( 'making a donation', 'contact-form-7' ) ) ), esc_html( __( "Your donation will help encourage and support the plugin’s continued development and better user support.", 'contact-form-7' ) ), ); } } class WPCF7_WelcomePanelColumn_Flamingo extends WPCF7_WelcomePanelColumn { protected function icon() { return 'editor-help'; } protected function title() { return esc_html( __( "Before you cry over spilt mail…", 'contact-form-7' ) ); } protected function content() { return array( esc_html( __( "Contact Form 7 does not store submitted messages anywhere. Therefore, you may lose important messages forever if your mail server has issues or you make a mistake in mail configuration.", 'contact-form-7' ) ), sprintf( /* translators: %s: link labeled 'Flamingo' */ esc_html( __( 'Install a message storage plugin before this happens to you. %s saves all messages through contact forms into the database. Flamingo is a free WordPress plugin created by the same author as Contact Form 7.', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/save-submitted-messages-with-flamingo/', 'contact-form-7' ), __( 'Flamingo', 'contact-form-7' ) ) ), ); } } class WPCF7_WelcomePanelColumn_Integration extends WPCF7_WelcomePanelColumn { protected function icon() { return 'superhero-alt'; } protected function title() { return esc_html( __( "You have strong allies to back you up.", 'contact-form-7' ) ); } protected function content() { return array( sprintf( /* translators: 1: link labeled 'Brevo' */ esc_html( __( 'Your contact forms will become more powerful and versatile by integrating them with external APIs. With CRM and email marketing services, you can build your own contact lists (%1$s).', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/sendinblue-integration/', 'contact-form-7' ), __( 'Brevo', 'contact-form-7' ) ) ), sprintf( /* translators: 1: link labeled 'reCAPTCHA', 2: link labeled 'Stripe' */ esc_html( __( 'With help from cloud-based machine learning, anti-spam services will protect your forms (%1$s). Even payment services are natively supported (%2$s).', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/recaptcha/', 'contact-form-7' ), __( 'reCAPTCHA', 'contact-form-7' ) ), wpcf7_link( __( 'https://contactform7.com/stripe-integration/', 'contact-form-7' ), __( 'Stripe', 'contact-form-7' ) ) ), ); } } function wpcf7_welcome_panel() { $columns = array(); $flamingo_is_active = defined( 'FLAMINGO_VERSION' ); $sendinblue_is_active = false; if ( class_exists( 'WPCF7_Sendinblue' ) and $sendinblue = WPCF7_Sendinblue::get_instance() ) { $sendinblue_is_active = $sendinblue->is_active(); } if ( $flamingo_is_active and $sendinblue_is_active ) { $columns[] = new WPCF7_WelcomePanelColumn_AntiSpam(); $columns[] = new WPCF7_WelcomePanelColumn_Donation(); } elseif ( $flamingo_is_active ) { $columns[] = new WPCF7_WelcomePanelColumn_Integration(); $columns[] = new WPCF7_WelcomePanelColumn_AntiSpam(); } elseif ( $sendinblue_is_active ) { $columns[] = new WPCF7_WelcomePanelColumn_Flamingo(); $columns[] = new WPCF7_WelcomePanelColumn_AntiSpam(); } else { $columns[] = new WPCF7_WelcomePanelColumn_Flamingo(); $columns[] = new WPCF7_WelcomePanelColumn_Integration(); } $classes = 'wpcf7-welcome-panel'; $vers = (array) get_user_meta( get_current_user_id(), 'wpcf7_hide_welcome_panel_on', true ); if ( wpcf7_version_grep( wpcf7_version( 'only_major=1' ), $vers ) ) { $classes .= ' hidden'; } ?>
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 ); $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; } admin/admin.php000060400000041437147177201300007444 0ustar00service_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() ) ), ), ) ); 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 = array_merge( $wpcf7_obj, array( 'configValidator' => array( 'errors' => $config_validator->collect_error_messages(), 'docUrl' => WPCF7_ConfigValidator::get_doc_link(), ), ) ); } } 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 ) ) { $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 == $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(); } ?>
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, '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 ), '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 ), '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 = __( "The Constant Contact integration is deprecated. It is not recommended to continue using the feature.", 'contact-form-7' ); wp_admin_notice( esc_html( $message ), 'type=warning' ); } } admin/edit-contact-form.php000060400000020402147177201300011660 0ustar00', 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 ); assets/icon.png000060400000072155147177201300007514 0ustar00PNG  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`assets/icon.svg000060400000002777147177201300007532 0ustar00 includes/block-editor/block-editor.php000060400000000301147177201300014007 0ustar00 array( 'react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n', 'wp-url', ), 'version' => WPCF7_VERSION, ); includes/block-editor/index.js000060400000011762147177201300012402 0ustar00(()=>{"use strict";var t={n:e=>{var l=e&&e.__esModule?()=>e.default:()=>e;return t.d(l,{a:l}),l},d:(e,l)=>{for(var a in l)t.o(l,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:l[a]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const e=window.wp.i18n,l=window.wp.blocks,a=window.wp.blockEditor,r=window.ReactJSXRuntime,o=(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 242.5 239.46",children:[(0,r.jsx)("defs",{children:(0,r.jsx)("clipPath",{id:"clip-path",transform:"translate(1.72)",children:(0,r.jsx)("circle",{className:"cls-1",cx:"119.73",cy:"119.73",r:"116.15",fill:"none"})})}),(0,r.jsx)("g",{id:"Layer_2","data-name":"Layer 2",children:(0,r.jsxs)("g",{id:"Layer_1","data-name":"Layer 1",children:[(0,r.jsxs)("g",{className:"cls-2",clipPath:"url(#clip-path)",children:[(0,r.jsx)("circle",{className:"cls-3",cx:"121.45",cy:"119.73",r:"116.15",fill:"#33c6f4"}),(0,r.jsx)("path",{className:"cls-4",d:"M239.32,167.79c-53.41-24-108.37-91.46-113-94.55s-10.84.77-10.84.77c-3.87-6.19-10.06.77-10.06.77C76.77,123.55.14,170.11.14,170.11S36.94,237.79,122,237.79C208.48,237.79,239.32,167.79,239.32,167.79Z",transform:"translate(1.72)",fill:"#1b447e"}),(0,r.jsx)("path",{className:"cls-5",d:"M67.48,116.58s15.48-7,12.38,4.65-15.48,28.64-11.61,29.41S83,140.58,86.06,142.12s5.42.78,3.87,6.2-3.1,9.29,0,9.29,5.42-7,9.29-13.94,10.06-3.87,12.38-1.55,9.29,15.49,14.71,13.94,8.51-8.52,6.19-24,1.55-20.12,1.55-20.12,4.64-2.32,13.16,8.51,24,27.09,26.31,26.32-10.83-17.8-7.74-19.35,15.48,2.32,21.68,7.74c0,0,2.12,8.87,2.12.36L126.31,73.24,115.47,74l-10.06.77S80.64,111.94,67.48,116.58Z",transform:"translate(1.72)",fill:"#fff"}),(0,r.jsx)("path",{className:"cls-6",d:"M239.32,170.11c-53.41-24-108.37-93.78-113-96.87s-10.84.77-10.84.77c-3.87-6.19-10.06.77-10.06.77C76.77,123.55.14,170.11.14,170.11",transform:"translate(1.72)",fill:"none",stroke:"#221e1f",strokeMiterlimit:"10",strokeWidth:"8px"})]}),(0,r.jsx)("circle",{className:"cls-6",cx:"121.45",cy:"119.73",r:"116.15",fill:"none",stroke:"#1b447e",strokeMiterlimit:"10",strokeWidth:"8px"})]})})]}),s=window.wp.element,c=window.wp.components,n=window.wp.apiFetch;var i=t.n(n);const m=window.wp.url,h=async t=>i()({path:(0,m.addQueryArgs)("/contact-form-7/v1/contact-forms",{posts_per_page:20,orderby:"modified",order:"DESC",...t})}).then((t=>t)),d=t=>{let e="[contact-form-7]";return t.hash?e=e.replace(/\]$/,` id="${t.hash}"]`):t.id&&(e=e.replace(/\]$/,` id="${t.id}"]`)),t.title&&(e=e.replace(/\]$/,` title="${t.title}"]`)),t.htmlId&&(e=e.replace(/\]$/,` html_id="${t.htmlId}"]`)),t.htmlName&&(e=e.replace(/\]$/,` html_name="${t.htmlName}"]`)),t.htmlTitle&&(e=e.replace(/\]$/,` html_title="${t.htmlTitle}"]`)),t.htmlClass&&(e=e.replace(/\]$/,` html_class="${t.htmlClass}"]`)),"raw_form"===t.output&&(e=e.replace(/\]$/,` output="${t.output}"]`)),e},p=t=>{const e=ajaxurl.replace(/\/admin-ajax\.php$/,"/admin.php");return(0,m.addQueryArgs)(e,{page:"wpcf7",post:t.id,action:"edit"})},f={from:[],to:[{type:"block",blocks:["core/shortcode"],transform:t=>{const e=d(t);return(0,l.createBlock)("core/shortcode",{text:e})}}]};(0,l.registerBlockType)("contact-form-7/contact-form-selector",{icon:o,transforms:f,edit:function({attributes:t,setAttributes:l}){const o=t=>t.reduce(((t,e)=>t.set(e.id,e)),new Map),[n,i]=(0,s.useState)((()=>o([])));return(0,s.useEffect)((()=>{h().then((t=>{i(o(t))}))}),[]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(a.InspectorControls,{children:[t.id&&(0,r.jsx)(c.PanelBody,{title:t.title,children:(0,r.jsx)(c.ExternalLink,{href:p(t),children:(0,e.__)("Edit this contact form","contact-form-7")})}),t.id&&(0,r.jsxs)(c.PanelBody,{title:(0,e.__)("Form attributes","contact-form-7"),initialOpen:!1,children:[(0,r.jsx)(c.TextControl,{label:(0,e.__)("ID","contact-form-7"),value:t.htmlId,onChange:t=>l({htmlId:t}),help:(0,e.__)("Used for the id attribute value of the form element.","contact-form-7")}),(0,r.jsx)(c.TextControl,{label:(0,e.__)("Name","contact-form-7"),value:t.htmlName,onChange:t=>l({htmlName:t}),help:(0,e.__)("Used for the name attribute value of the form element.","contact-form-7")}),(0,r.jsx)(c.TextControl,{label:(0,e.__)("Title","contact-form-7"),value:t.htmlTitle,onChange:t=>l({htmlTitle:t}),help:(0,e.__)("Used for the aria-label attribute value of the form element.","contact-form-7")}),(0,r.jsx)(c.TextControl,{label:(0,e.__)("Class","contact-form-7"),value:t.htmlClass,onChange:t=>l({htmlClass:t}),help:(0,e.__)("Used for the class attribute value of the form element.","contact-form-7")})]})]}),(0,r.jsx)("div",{...(0,a.useBlockProps)({className:"components-placeholder",style:{marginTop:"28px",marginBottom:"28px"}}),children:(0,r.jsx)(c.ComboboxControl,{label:(0,e.__)("Select a contact form:","contact-form-7"),options:(t=>{const e=[];for(const[l,a]of t)e.push({value:l,label:a.title});return e})(n),value:t.id,onChange:t=>l({id:parseInt(t),hash:n.get(parseInt(t))?.hash,title:n.get(parseInt(t))?.title}),onFilterValueChange:t=>{h({search:t}).then((t=>{i(o(t))}))}})})]})},save:({attributes:t})=>{const e=d(t);return(0,r.jsx)("div",{...a.useBlockProps.save(),children:e})}})})();includes/config-validator/actions.php000060400000001203147177201300013745 0ustar00 'unsafe_email_without_protection', ); foreach ( $contact_forms as $contact_form ) { $config_validator = new WPCF7_ConfigValidator( $contact_form, $options ); $config_validator->restore(); $config_validator->validate(); $config_validator->save(); } } } includes/config-validator/additional-settings.php000060400000001306147177201300016257 0ustar00supports( 'deprecated_settings' ) ) { $deprecated_settings_used = $this->contact_form->additional_setting( 'on_sent_ok' ) || $this->contact_form->additional_setting( 'on_submit' ); if ( $deprecated_settings_used ) { $this->add_error( $section, 'deprecated_settings', array( 'message' => __( "Deprecated settings are used.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'deprecated_settings' ); } } } } includes/config-validator/form.php000060400000016456147177201300013270 0ustar00contact_form->prop( 'form' ); if ( $this->supports( 'multiple_controls_in_label' ) ) { if ( $this->detect_multiple_controls_in_label( $section, $form ) ) { $this->add_error( $section, 'multiple_controls_in_label', array( 'message' => __( "Multiple form controls are in a single label element.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'multiple_controls_in_label' ); } } if ( $this->supports( 'unavailable_names' ) ) { $ng_names = $this->detect_unavailable_names( $section, $form ); if ( $ng_names ) { $this->add_error( $section, 'unavailable_names', array( 'message' => /* translators: %names%: a list of form control names */ __( "Unavailable names (%names%) are used for form controls.", 'contact-form-7' ), 'params' => array( 'names' => implode( ', ', $ng_names ) ), ) ); } else { $this->remove_error( $section, 'unavailable_names' ); } } if ( $this->supports( 'unavailable_html_elements' ) ) { if ( $this->detect_unavailable_html_elements( $section, $form ) ) { $this->add_error( $section, 'unavailable_html_elements', array( 'message' => __( "Unavailable HTML elements are used in the form template.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'unavailable_html_elements' ); } } if ( $this->supports( 'dots_in_names' ) ) { if ( $this->detect_dots_in_names( $section, $form ) ) { $this->add_error( $section, 'dots_in_names', array( 'message' => __( "Dots are used in form-tag names.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'dots_in_names' ); } } if ( $this->supports( 'colons_in_names' ) ) { if ( $this->detect_colons_in_names( $section, $form ) ) { $this->add_error( $section, 'colons_in_names', array( 'message' => __( "Colons are used in form-tag names.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'colons_in_names' ); } } if ( $this->supports( 'upload_filesize_overlimit' ) ) { if ( $this->detect_upload_filesize_overlimit( $section, $form ) ) { $this->add_error( $section, 'upload_filesize_overlimit', array( 'message' => __( "Uploadable file size exceeds PHP’s maximum acceptable size.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'upload_filesize_overlimit' ); } } } /** * Detects errors of multiple form controls in a single label. * * @link https://contactform7.com/configuration-errors/multiple-controls-in-label/ */ public function detect_multiple_controls_in_label( $section, $content ) { $pattern = '%(.+?)%s'; if ( preg_match_all( $pattern, $content, $matches ) ) { $form_tags_manager = WPCF7_FormTagsManager::get_instance(); foreach ( $matches[1] as $insidelabel ) { $tags = $form_tags_manager->scan( $insidelabel ); $fields_count = 0; foreach ( $tags as $tag ) { $is_multiple_controls_container = wpcf7_form_tag_supports( $tag->type, 'multiple-controls-container' ); $is_zero_controls_container = wpcf7_form_tag_supports( $tag->type, 'zero-controls-container' ); if ( $is_multiple_controls_container ) { $fields_count += count( $tag->values ); if ( $tag->has_option( 'free_text' ) ) { $fields_count += 1; } } elseif ( $is_zero_controls_container ) { $fields_count += 0; } elseif ( ! empty( $tag->name ) ) { $fields_count += 1; } if ( 1 < $fields_count ) { return true; } } } } return false; } /** * Detects errors of unavailable form-tag names. * * @link https://contactform7.com/configuration-errors/unavailable-names/ */ public function detect_unavailable_names( $section, $content ) { $public_query_vars = array( 'm', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'static', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'taxonomy', 'term', 'cpage', 'post_type', 'embed', ); $form_tags_manager = WPCF7_FormTagsManager::get_instance(); $ng_named_tags = $form_tags_manager->filter( $content, array( 'name' => $public_query_vars, ) ); $ng_names = array(); foreach ( $ng_named_tags as $tag ) { $ng_names[] = sprintf( '"%s"', $tag->name ); } if ( $ng_names ) { return array_unique( $ng_names ); } return false; } /** * Detects errors of unavailable HTML elements. * * @link https://contactform7.com/configuration-errors/unavailable-html-elements/ */ public function detect_unavailable_html_elements( $section, $content ) { $pattern = '%(?:]|)%i'; if ( preg_match( $pattern, $content ) ) { return true; } return false; } /** * Detects errors of dots in form-tag names. * * @link https://contactform7.com/configuration-errors/dots-in-names/ */ public function detect_dots_in_names( $section, $content ) { $form_tags_manager = WPCF7_FormTagsManager::get_instance(); $tags = $form_tags_manager->filter( $content, array( 'feature' => 'name-attr', ) ); foreach ( $tags as $tag ) { if ( str_contains( $tag->raw_name, '.' ) ) { return true; } } return false; } /** * Detects errors of colons in form-tag names. * * @link https://contactform7.com/configuration-errors/colons-in-names/ */ public function detect_colons_in_names( $section, $content ) { $form_tags_manager = WPCF7_FormTagsManager::get_instance(); $tags = $form_tags_manager->filter( $content, array( 'feature' => 'name-attr', ) ); foreach ( $tags as $tag ) { if ( str_contains( $tag->raw_name, ':' ) ) { return true; } } return false; } /** * Detects errors of uploadable file size overlimit. * * @link https://contactform7.com/configuration-errors/upload-filesize-overlimit */ public function detect_upload_filesize_overlimit( $section, $content ) { $upload_max_filesize = ini_get( 'upload_max_filesize' ); if ( ! $upload_max_filesize ) { return false; } $upload_max_filesize = strtolower( $upload_max_filesize ); $upload_max_filesize = trim( $upload_max_filesize ); if ( ! preg_match( '/^(\d+)([kmg]?)$/', $upload_max_filesize, $matches ) ) { return false; } if ( 'k' === $matches[2] ) { $upload_max_filesize = (int) $matches[1] * KB_IN_BYTES; } elseif ( 'm' === $matches[2] ) { $upload_max_filesize = (int) $matches[1] * MB_IN_BYTES; } elseif ( 'g' === $matches[2] ) { $upload_max_filesize = (int) $matches[1] * GB_IN_BYTES; } else { $upload_max_filesize = (int) $matches[1]; } $form_tags_manager = WPCF7_FormTagsManager::get_instance(); $tags = $form_tags_manager->filter( $content, array( 'basetype' => 'file', ) ); foreach ( $tags as $tag ) { if ( $upload_max_filesize < $tag->get_limit_option() ) { return true; } } return false; } } includes/config-validator/mail.php000060400000034377147177201300013251 0ustar00 false, 'callback' => array( $this, 'replace_mail_tags_with_minimum_input_callback' ), ) ); $content = new WPCF7_MailTaggedText( $content, $options ); return $content->replace_tags(); } /** * Callback function for WPCF7_MailTaggedText. Replaces mail-tags with * the most conservative inputs. */ public function replace_mail_tags_with_minimum_input_callback( $matches ) { // allow [[foo]] syntax for escaping a tag if ( $matches[1] === '[' and $matches[4] === ']' ) { return substr( $matches[0], 1, -1 ); } $tag = $matches[0]; $tagname = $matches[2]; $values = $matches[3]; $mail_tag = new WPCF7_MailTag( $tag, $tagname, $values ); $field_name = $mail_tag->field_name(); $example_email = 'example@example.com'; $example_text = 'example'; $example_blank = ''; // for back-compat $field_name = preg_replace( '/^wpcf7\./', '_', $field_name ); if ( '_site_admin_email' === $field_name ) { return get_bloginfo( 'admin_email', 'raw' ); } elseif ( '_user_agent' === $field_name ) { return $example_text; } elseif ( '_user_email' === $field_name ) { return $this->contact_form->is_true( 'subscribers_only' ) ? $example_email : $example_blank; } elseif ( str_starts_with( $field_name, '_user_' ) ) { return $this->contact_form->is_true( 'subscribers_only' ) ? $example_text : $example_blank; } elseif ( str_starts_with( $field_name, '_' ) ) { return str_ends_with( $field_name, '_email' ) ? $example_email : $example_text; } static $opcalcset = array(); if ( ! isset( $opcalcset[$this->contact_form->id()] ) ) { $opcalcset[$this->contact_form->id()] = new WPCF7_MailTag_OutputCalculator( $this->contact_form ); } $opcalc = $opcalcset[$this->contact_form->id()]; $op = $opcalc->calc_output( $mail_tag ); if ( WPCF7_MailTag_OutputCalculator::email === $op ) { return $example_email; } elseif ( ! ( WPCF7_MailTag_OutputCalculator::blank & $op ) ) { return $example_text; } else { return $example_blank; } } /** * Runs error detection for the mail sections. */ public function validate_mail( $template = 'mail' ) { if ( $this->contact_form->is_true( 'demo_mode' ) or $this->contact_form->is_true( 'skip_mail' ) ) { return; } $components = (array) $this->contact_form->prop( $template ); if ( ! $components ) { return; } if ( 'mail' !== $template and empty( $components['active'] ) ) { return; } $components = wp_parse_args( $components, array( 'subject' => '', 'sender' => '', 'recipient' => '', 'additional_headers' => '', 'body' => '', 'attachments' => '', ) ); $this->validate_mail_subject( $template, $components['subject'] ); $this->validate_mail_sender( $template, $components['sender'] ); $this->validate_mail_recipient( $template, $components['recipient'] ); $this->validate_mail_additional_headers( $template, $components['additional_headers'] ); $this->validate_mail_body( $template, $components['body'] ); $this->validate_mail_attachments( $template, $components['attachments'] ); } /** * Runs error detection for the mail subject section. */ public function validate_mail_subject( $template, $content ) { $section = sprintf( '%s.subject', $template ); if ( $this->supports( 'maybe_empty' ) ) { if ( $this->detect_maybe_empty( $section, $content ) ) { $this->add_error( $section, 'maybe_empty', array( 'message' => __( "There is a possible empty field.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'maybe_empty' ); } } } /** * Runs error detection for the mail sender section. */ public function validate_mail_sender( $template, $content ) { $section = sprintf( '%s.sender', $template ); if ( $this->supports( 'invalid_mailbox_syntax' ) ) { if ( $this->detect_invalid_mailbox_syntax( $section, $content ) ) { $this->add_error( $section, 'invalid_mailbox_syntax', array( 'message' => __( "Invalid mailbox syntax is used.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'invalid_mailbox_syntax' ); } } if ( $this->supports( 'email_not_in_site_domain' ) ) { $this->remove_error( $section, 'email_not_in_site_domain' ); if ( ! $this->has_error( $section, 'invalid_mailbox_syntax' ) ) { $sender = $this->replace_mail_tags( $content ); $sender = wpcf7_strip_newline( $sender ); if ( ! wpcf7_is_email_in_site_domain( $sender ) ) { $this->add_error( $section, 'email_not_in_site_domain', array( 'message' => __( "Sender email address does not belong to the site domain.", 'contact-form-7' ), ) ); } } } } /** * Runs error detection for the mail recipient section. */ public function validate_mail_recipient( $template, $content ) { $section = sprintf( '%s.recipient', $template ); if ( $this->supports( 'invalid_mailbox_syntax' ) ) { if ( $this->detect_invalid_mailbox_syntax( $section, $content ) ) { $this->add_error( $section, 'invalid_mailbox_syntax', array( 'message' => __( "Invalid mailbox syntax is used.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'invalid_mailbox_syntax' ); } } if ( $this->supports( 'unsafe_email_without_protection' ) ) { $this->remove_error( $section, 'unsafe_email_without_protection' ); if ( ! $this->has_error( $section, 'invalid_mailbox_syntax' ) ) { if ( $this->detect_unsafe_email_without_protection( $section, $content ) ) { $this->add_error( $section, 'unsafe_email_without_protection', array( 'message' => __( "Unsafe email config is used without sufficient protection.", 'contact-form-7' ), ) ); } } } } /** * Runs error detection for the mail additional headers section. */ public function validate_mail_additional_headers( $template, $content ) { $section = sprintf( '%s.additional_headers', $template ); $invalid_mail_headers = array(); $invalid_mailbox_fields = array(); $unsafe_email_fields = array(); foreach ( explode( "\n", $content ) as $header ) { $header = trim( $header ); if ( '' === $header ) { continue; } $is_valid_header = preg_match( '/^([0-9A-Za-z-]+):(.*)$/', $header, $matches ); if ( ! $is_valid_header ) { $invalid_mail_headers[] = $header; continue; } $header_name = $matches[1]; $header_value = trim( $matches[2] ); if ( in_array( strtolower( $header_name ), array( 'reply-to', 'cc', 'bcc' ) ) and '' !== $header_value and $this->detect_invalid_mailbox_syntax( $section, $header_value ) ) { $invalid_mailbox_fields[] = $header_name; continue; } if ( in_array( strtolower( $header_name ), array( 'cc', 'bcc' ) ) and $this->detect_unsafe_email_without_protection( $section, $header_value ) ) { $unsafe_email_fields[] = $header_name; } } if ( $this->supports( 'invalid_mail_header' ) ) { if ( ! empty( $invalid_mail_headers ) ) { $this->add_error( $section, 'invalid_mail_header', array( 'message' => __( "There are invalid mail header fields.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'invalid_mail_header' ); } } if ( $this->supports( 'invalid_mailbox_syntax' ) ) { if ( ! empty( $invalid_mailbox_fields ) ) { foreach ( $invalid_mailbox_fields as $header_name ) { $this->add_error( $section, 'invalid_mailbox_syntax', array( 'message' => __( "Invalid mailbox syntax is used in the %name% field.", 'contact-form-7' ), 'params' => array( 'name' => $header_name ), ) ); } } else { $this->remove_error( $section, 'invalid_mailbox_syntax' ); } } if ( $this->supports( 'unsafe_email_without_protection' ) ) { if ( ! empty( $unsafe_email_fields ) ) { $this->add_error( $section, 'unsafe_email_without_protection', array( 'message' => __( "Unsafe email config is used without sufficient protection.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'unsafe_email_without_protection' ); } } } /** * Runs error detection for the mail body section. */ public function validate_mail_body( $template, $content ) { $section = sprintf( '%s.body', $template ); if ( $this->supports( 'maybe_empty' ) ) { if ( $this->detect_maybe_empty( $section, $content ) ) { $this->add_error( $section, 'maybe_empty', array( 'message' => __( "There is a possible empty field.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'maybe_empty' ); } } } /** * Runs error detection for the mail attachments section. */ public function validate_mail_attachments( $template, $content ) { $section = sprintf( '%s.attachments', $template ); $total_size = 0; $files_not_found = array(); $files_out_of_content = array(); if ( '' !== $content ) { $attachables = array(); $tags = $this->contact_form->scan_form_tags( array( 'type' => array( 'file', 'file*' ) ) ); foreach ( $tags as $tag ) { $name = $tag->name; if ( ! str_contains( $content, "[{$name}]" ) ) { continue; } $limit = (int) $tag->get_limit_option(); if ( empty( $attachables[$name] ) or $attachables[$name] < $limit ) { $attachables[$name] = $limit; } } $total_size = array_sum( $attachables ); foreach ( explode( "\n", $content ) as $line ) { $line = trim( $line ); if ( '' === $line or str_starts_with( $line, '[' ) ) { continue; } if ( $this->detect_file_not_found( $section, $line ) ) { $files_not_found[] = $line; } elseif ( $this->detect_file_not_in_content_dir( $section, $line ) ) { $files_out_of_content[] = $line; } else { $total_size += (int) @filesize( $path ); } } } if ( $this->supports( 'file_not_found' ) ) { if ( ! empty( $files_not_found ) ) { foreach ( $files_not_found as $line ) { $this->add_error( $section, 'file_not_found', array( 'message' => __( "Attachment file does not exist at %path%.", 'contact-form-7' ), 'params' => array( 'path' => $line ), ) ); } } else { $this->remove_error( $section, 'file_not_found' ); } } if ( $this->supports( 'file_not_in_content_dir' ) ) { if ( ! empty( $files_out_of_content ) ) { $this->add_error( $section, 'file_not_in_content_dir', array( 'message' => __( "It is not allowed to use files outside the wp-content directory.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'file_not_in_content_dir' ); } } if ( $this->supports( 'attachments_overweight' ) ) { $max = 25 * MB_IN_BYTES; // 25 MB if ( $max < $total_size ) { $this->add_error( $section, 'attachments_overweight', array( 'message' => __( "The total size of attachment files is too large.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'attachments_overweight' ); } } } /** * Detects errors of invalid mailbox syntax. * * @link https://contactform7.com/configuration-errors/invalid-mailbox-syntax/ */ public function detect_invalid_mailbox_syntax( $section, $content ) { $content = $this->replace_mail_tags( $content ); $content = wpcf7_strip_newline( $content ); if ( ! wpcf7_is_mailbox_list( $content ) ) { return true; } return false; } /** * Detects errors of empty message fields. * * @link https://contactform7.com/configuration-errors/maybe-empty/ */ public function detect_maybe_empty( $section, $content ) { $content = $this->replace_mail_tags( $content ); $content = wpcf7_strip_newline( $content ); if ( '' === $content ) { return true; } return false; } /** * Detects errors of nonexistent attachment files. * * @link https://contactform7.com/configuration-errors/file-not-found/ */ public function detect_file_not_found( $section, $content ) { $path = path_join( WP_CONTENT_DIR, $content ); if ( ! is_readable( $path ) or ! is_file( $path ) ) { return true; } return false; } /** * Detects errors of attachment files out of the content directory. * * @link https://contactform7.com/configuration-errors/file-not-in-content-dir/ */ public function detect_file_not_in_content_dir( $section, $content ) { $path = path_join( WP_CONTENT_DIR, $content ); if ( ! wpcf7_is_file_path_in_content_dir( $path ) ) { return true; } return false; } /** * Detects errors of that unsafe email config is used without * sufficient protection. * * @link https://contactform7.com/configuration-errors/unsafe-email-without-protection/ */ public function detect_unsafe_email_without_protection( $section, $content ) { static $is_recaptcha_active = null; if ( null === $is_recaptcha_active ) { $is_recaptcha_active = call_user_func( function () { $service = WPCF7_RECAPTCHA::get_instance(); return $service->is_active(); } ); } if ( $is_recaptcha_active ) { return false; } $example_email = 'user-specified@example.com'; // Replace mail-tags connected to an email type form-tag first. $content = $this->replace_mail_tags( $content, array( 'callback' => function ( $matches ) use ( $example_email ) { // allow [[foo]] syntax for escaping a tag if ( $matches[1] === '[' and $matches[4] === ']' ) { return substr( $matches[0], 1, -1 ); } $tag = $matches[0]; $tagname = $matches[2]; $values = $matches[3]; $mail_tag = new WPCF7_MailTag( $tag, $tagname, $values ); $field_name = $mail_tag->field_name(); $form_tags = $this->contact_form->scan_form_tags( array( 'name' => $field_name ) ); if ( $form_tags ) { $form_tag = new WPCF7_FormTag( $form_tags[0] ); if ( 'email' === $form_tag->basetype ) { return $example_email; } } return $tag; }, ) ); // Replace remaining mail-tags. $content = $this->replace_mail_tags( $content ); $content = wpcf7_strip_newline( $content ); if ( str_contains( $content, $example_email ) ) { return true; } return false; } } includes/config-validator/messages.php000060400000002230147177201300014115 0ustar00contact_form->prop( 'messages' ); if ( ! $messages ) { return; } if ( isset( $messages['captcha_not_match'] ) and ! wpcf7_use_really_simple_captcha() ) { unset( $messages['captcha_not_match'] ); } foreach ( $messages as $key => $message ) { $section = sprintf( 'messages.%s', $key ); if ( $this->supports( 'html_in_message' ) ) { if ( $this->detect_html_in_message( $section, $message ) ) { $this->add_error( $section, 'html_in_message', array( 'message' => __( "HTML tags are used in a message.", 'contact-form-7' ), ) ); } else { $this->remove_error( $section, 'html_in_message' ); } } } } /** * Detects errors of HTML uses in a message. * * @link https://contactform7.com/configuration-errors/html-in-message/ */ public function detect_html_in_message( $section, $content ) { $stripped = wp_strip_all_tags( $content ); if ( $stripped !== $content ) { return true; } return false; } } includes/config-validator/validator.php000060400000020137147177201300014301 0ustar00 null, 'exclude' => null, ) ); $this->contact_form = $contact_form; if ( isset( $options['include'] ) ) { $this->include = (array) $options['include']; } if ( isset( $options['exclude'] ) ) { $this->exclude = (array) $options['exclude']; } } /** * Returns the contact form object that is tied to this validator. */ public function contact_form() { return $this->contact_form; } /** * Returns true if no error has been detected. */ public function is_valid() { return ! $this->count_errors(); } /** * Returns true if the given error code is supported by this instance. */ public function supports( $error_code ) { if ( isset( $this->include ) ) { $supported_codes = array_intersect( self::error_codes, $this->include ); } else { $supported_codes = self::error_codes; } if ( isset( $this->exclude ) ) { $supported_codes = array_diff( $supported_codes, $this->exclude ); } return in_array( $error_code, $supported_codes, true ); } /** * Counts detected errors. */ public function count_errors( $options = '' ) { $options = wp_parse_args( $options, array( 'section' => '', 'code' => '', ) ); $count = 0; foreach ( $this->errors as $key => $errors ) { if ( preg_match( '/^mail_[0-9]+\.(.*)$/', $key, $matches ) ) { $key = sprintf( 'mail.%s', $matches[1] ); } if ( $options['section'] and $key !== $options['section'] and preg_replace( '/\..*$/', '', $key, 1 ) !== $options['section'] ) { continue; } foreach ( $errors as $error ) { if ( empty( $error ) ) { continue; } if ( $options['code'] and $error['code'] !== $options['code'] ) { continue; } $count += 1; } } return $count; } /** * Collects messages for detected errors. */ public function collect_error_messages() { $error_messages = array(); foreach ( $this->errors as $section => $errors ) { $error_messages[$section] = array(); foreach ( $errors as $error ) { if ( empty( $error['args']['message'] ) ) { $message = $this->get_default_message( $error['code'] ); } elseif ( empty( $error['args']['params'] ) ) { $message = $error['args']['message']; } else { $message = $this->build_message( $error['args']['message'], $error['args']['params'] ); } $link = ''; if ( ! empty( $error['args']['link'] ) ) { $link = $error['args']['link']; } $error_messages[$section][] = array( 'message' => $message, 'link' => esc_url( $link ), ); } } return $error_messages; } /** * Builds an error message by replacing placeholders. */ public function build_message( $message, $params = '' ) { $params = wp_parse_args( $params, array() ); foreach ( $params as $key => $val ) { if ( ! preg_match( '/^[0-9A-Za-z_]+$/', $key ) ) { // invalid key continue; } $placeholder = '%' . $key . '%'; if ( false !== stripos( $message, $placeholder ) ) { $message = str_ireplace( $placeholder, $val, $message ); } } return $message; } /** * Returns a default message that is used when the message for the error * is not specified. */ public function get_default_message( $code = '' ) { return __( "Configuration error is detected.", 'contact-form-7' ); } /** * Returns true if the specified section has the specified error. * * @param string $section The section where the error detected. * @param string $code The unique code of the error. */ public function has_error( $section, $code ) { if ( empty( $this->errors[$section] ) ) { return false; } foreach ( (array) $this->errors[$section] as $error ) { if ( isset( $error['code'] ) and $error['code'] === $code ) { return true; } } return false; } /** * Adds a validation error. * * @param string $section The section where the error detected. * @param string $code The unique code of the error. * @param string|array $args Optional options for the error. */ public function add_error( $section, $code, $args = '' ) { $args = wp_parse_args( $args, array( 'message' => '', 'params' => array(), ) ); $available_error_codes = (array) apply_filters( 'wpcf7_config_validator_available_error_codes', self::error_codes, $this->contact_form ); if ( ! in_array( $code, $available_error_codes, true ) ) { return false; } if ( ! isset( $args['link'] ) ) { $args['link'] = self::get_doc_link( $code ); } if ( ! isset( $this->errors[$section] ) ) { $this->errors[$section] = array(); } $this->errors[$section][] = array( 'code' => $code, 'args' => $args, ); return true; } /** * Removes an error. * * @param string $section The section where the error detected. * @param string $code The unique code of the error. */ public function remove_error( $section, $code ) { if ( empty( $this->errors[$section] ) ) { return; } foreach ( (array) $this->errors[$section] as $key => $error ) { if ( isset( $error['code'] ) and $error['code'] === $code ) { unset( $this->errors[$section][$key] ); } } if ( empty( $this->errors[$section] ) ) { unset( $this->errors[$section] ); } } /** * The main validation runner. * * @return bool True if there is no error detected. */ public function validate() { $this->validate_form(); $this->validate_mail( 'mail' ); $this->validate_mail( 'mail_2' ); $this->validate_messages(); $this->validate_additional_settings(); do_action( 'wpcf7_config_validator_validate', $this ); return $this->is_valid(); } /** * Saves detected errors as a post meta data. */ public function save() { if ( $this->contact_form->initial() ) { return; } delete_post_meta( $this->contact_form->id(), '_config_validation' ); if ( $this->errors ) { update_post_meta( $this->contact_form->id(), '_config_validation', $this->errors ); } } /** * Restore errors from the database. */ public function restore() { $config_errors = get_post_meta( $this->contact_form->id(), '_config_validation', true ); foreach ( (array) $config_errors as $section => $errors ) { if ( empty( $errors ) ) { continue; } foreach ( (array) $errors as $error ) { if ( ! empty( $error['code'] ) ) { $code = $error['code']; $args = isset( $error['args'] ) ? $error['args'] : ''; $this->add_error( $section, $code, $args ); } } } } } includes/css/styles.css000060400000005516147177201300011204 0ustar00.wpcf7 .screen-reader-response { position: absolute; overflow: hidden; clip: rect(1px, 1px, 1px, 1px); clip-path: inset(50%); height: 1px; width: 1px; margin: -1px; padding: 0; border: 0; word-wrap: normal !important; } .wpcf7 form .wpcf7-response-output { margin: 2em 0.5em 1em; padding: 0.2em 1em; border: 2px solid #00a0d2; /* Blue */ } .wpcf7 form.init .wpcf7-response-output, .wpcf7 form.resetting .wpcf7-response-output, .wpcf7 form.submitting .wpcf7-response-output { display: none; } .wpcf7 form.sent .wpcf7-response-output { border-color: #46b450; /* Green */ } .wpcf7 form.failed .wpcf7-response-output, .wpcf7 form.aborted .wpcf7-response-output { border-color: #dc3232; /* Red */ } .wpcf7 form.spam .wpcf7-response-output { border-color: #f56e28; /* Orange */ } .wpcf7 form.invalid .wpcf7-response-output, .wpcf7 form.unaccepted .wpcf7-response-output, .wpcf7 form.payment-required .wpcf7-response-output { border-color: #ffb900; /* Yellow */ } .wpcf7-form-control-wrap { position: relative; } .wpcf7-not-valid-tip { color: #dc3232; /* Red */ font-size: 1em; font-weight: normal; display: block; } .use-floating-validation-tip .wpcf7-not-valid-tip { position: relative; top: -2ex; left: 1em; z-index: 100; border: 1px solid #dc3232; background: #fff; padding: .2em .8em; width: 24em; } .wpcf7-list-item { display: inline-block; margin: 0 0 0 1em; } .wpcf7-list-item-label::before, .wpcf7-list-item-label::after { content: " "; } .wpcf7-spinner { visibility: hidden; display: inline-block; background-color: #23282d; /* Dark Gray 800 */ opacity: 0.75; width: 24px; height: 24px; border: none; border-radius: 100%; padding: 0; margin: 0 24px; position: relative; } form.submitting .wpcf7-spinner { visibility: visible; } .wpcf7-spinner::before { content: ''; position: absolute; background-color: #fbfbfc; /* Light Gray 100 */ top: 4px; left: 4px; width: 6px; height: 6px; border: none; border-radius: 100%; transform-origin: 8px 8px; animation-name: spin; animation-duration: 1000ms; animation-timing-function: linear; animation-iteration-count: infinite; } @media (prefers-reduced-motion: reduce) { .wpcf7-spinner::before { animation-name: blink; animation-duration: 2000ms; } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes blink { from { opacity: 0; } 50% { opacity: 1; } to { opacity: 0; } } .wpcf7 [inert] { opacity: 0.5; } .wpcf7 input[type="file"] { cursor: pointer; } .wpcf7 input[type="file"]:disabled { cursor: default; } .wpcf7 .wpcf7-submit:disabled { cursor: not-allowed; } .wpcf7 input[type="url"], .wpcf7 input[type="email"], .wpcf7 input[type="tel"] { direction: ltr; } .wpcf7-reflection > output { display: list-item; list-style: none; } .wpcf7-reflection > output[hidden] { display: none; } includes/css/styles-rtl.css000060400000000230147177201300011767 0ustar00.wpcf7-not-valid-tip { direction: rtl; } .use-floating-validation-tip .wpcf7-not-valid-tip { right: 1em; } .wpcf7-list-item { margin: 0 1em 0 0; } includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png000060400000000611147177201300023137 0ustar00PNG  IHDRAgAMA a cHRMz&u0`:pQ<bKGD XtIME  "!IDATH! AblA1{VY0ixxvDK_O9 aՔ}^JaȌ0bvBA$,Q"_44=SqcyEIW o%tEXtdate:create2016-09-14T13:34:08-04:00_Dn%tEXtdate:modify2016-09-14T13:34:08-04:00.IENDB`includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png000060400000000504147177201300023002 0ustar00PNG  IHDRDgAMA a cHRMz&u0`:pQ<bKGD1tIME  "!LIDAT8cx0Fuóg ύabx+7&F&FN&oL_3|dfbXIAx<0: %tEXtdate:create2016-09-14T13:34:08-04:00_Dn%tEXtdate:modify2016-09-14T13:34:08-04:00.IENDB`includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png000060400000000606147177201300023140 0ustar00PNG  IHDRAgAMA a cHRMz&u0`:pQ<bKGD XtIME  "!IDATHϱ a\!VJ#XЋD} .f>>Pկxxqжuɚqf+6[\‡כWT4r6:]V:, (Ŵ8yG-(d H%tEXtdate:create2016-09-14T13:34:08-04:00_Dn%tEXtdate:modify2016-09-14T13:34:08-04:00.IENDB`includes/js/jquery-ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png000060400000000505147177201300025010 0ustar00PNG  IHDRd2gAMA a cHRMz&u0`:pQ<bKGD1tIME  "!MIDATӽΡ @џnjn5$@('G iD7\ƍ;Np -ʜu&%tEXtdate:create2016-09-14T13:34:08-04:00_Dn%tEXtdate:modify2016-09-14T13:34:08-04:00.IENDB`includes/js/jquery-ui/themes/smoothness/images/ui-icons_222222_256x240.png000060400000015561147177201300021743 0ustar00PNG  IHDREr@gAMA a cHRMz&u0`:pQ<bKGD"btIME %'ETIDATxm%Uy $!,h ,%&@|IEMrݱD2;f ܉A^$5Ƣj^K@U-wWD`|q"t>ν3}S~9}<>|Dg7\J{4K 3tfZޱ`7u7Yɶ~f]<4m*<%%{^`FR l8<Oh8<Ok2n6cL`>]=u$,`&+hk6J_*|K0?@lxdom]L3ݞߌ0.;TE,;4tMOmPLUA&e+`8u]577~"h8<Oh8<]C8YsZ}iA ֠)ȞsW.!m. z[#R䨚 \R{v r R ?˝#[|f`y)A-QN 4wϮ:Kr{河3ZP!0t{l\YwSnPIA.Vm-R $ysI@;eغX.vYvB n]gWcVn*ôyT=Mhpt +3 '@ px4 '@ pC`=x?.jlk]R Q.ޫ5@P,[Zj6ƵKɟڕ[ ,P/5/thzG]Yn!wk9څR+@K tťa.mKu DM篂U!LgK\At$VrX˒`LoMe/R+X.X.]L]Nq%e7w"< ּp뻴ʩ@  uǤ OO7 '@ px4 PdrvM{wQve{Ȯ]0d1w%L,vQwqyyx`]jW.!WWl/D3,v܁6]iZ<:IݯtM~9UPi!snS!QyU緯lJ Ț!$(7-/ޮB¤F[^)F#*U$`7\!OUŪ3ǐ_J:𨃏ܽX6X!|.!}t$ePROQա/P[Cmb,=XA!tho14]Zh=Oh8<#@keEٲM&IKѢ&b04(.%thtIH2>Dgͳ]ݢ@NE]hɟ|T=m5@ .#BW2wQ׿¨alrvEb)n#ය݄F/N6%t]KX" nz"t.'`[A-y-LTi rgW=)lj&˺;YeF,6CG_0l;y1|5'@ px4SLT_ʿߐ:ADV\cK !e8L}F{=.y0~w,ݭ9^n gH]Y,b}H!0 La4-Uڣ$R|crQx/a _seRmDz$V\ 3<ɔ0㗹1VD#a=5!*,6~ ^#Jt Wg{ȃsd,o9X1 ?*uuB,=`޻'1l$[Gx4 '@ DΞ-z)E}:g˖ gÁyk>fiNa~  ɏk`.73PȸҜ;+ ZpMlbinFݬLپȓ4 :a.0JN.pk8NPx\lh݅x2iǹ?OH5M@.K4p\a/>ay%^zU25O'0VOsMR4"0VܞFqyYEL0])PK~Irx /Qs*SL1fn>6U4>i#\}cJjrjo_u8n,JFgyFk6a[0y|kS\6 + )L*g EDخq|Y_'-?Z";<Wϼ= [\IL}‹7OqX 4<z7=~CP6w'ƟL~*?7ȳg%npMBC{ L^O2;C!-c%DP]y_VaX1uҗEc_t'[PP> `4B "O7ՑF3 <5ϝ|B.0#bb],ҥK{/QWܯd0~.ꏜ}eK Y@3>?_"X,u5OԘ(xsG4DI 4 '@ p4XNIMs(,ѡކ<&R=>@]ZG^ _Hk|p7rFp,/^>G-B+7(z3d-A^'qzj z_`I:L0T|aɄ܇'/CTS̤ U (.2Rr ?< aGBKsRƔ[IlcylU_ɷxO QH1NcӺ#?5f4ߣ3lgGAnjԄ&"\r'VZvD)ykCbW;I[‰k!fuiQ*tWsN_~W< g)'8}ږjHzD66Dkx3?xFy znoO+v,bcxsLwxtnGĝlNn2ھIOΐlƟw g kг=ޜlAl)l; )"W2:-.H٥aq66$\0oqnjcC[Oh8<O":F@j1Xg dbݖ3zELHWW+wx0- pxk` px4 '@ pAܣDkH2u]AzwnPExFyAum 0F0bG:1;L6|CGICHRݿ6y~˘{o}@]Q~"h8<Oh8/~B P-d׻͒£"D ;R򠫹 `d] a{ -+PS#R3@O z-̒ ¿rvJQz`W_9HGx\EA2͌r͠&~U>wS[Σ- `9'C~ C@eCٹq_ XzN%tEXtdate:create2016-09-14T13:32:39-04:00z%tEXtdate:modify2015-06-01T10:37:21-04:00(AntEXtSoftwareAdobe ImageReadyqe<IENDB`includes/js/jquery-ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png000060400000011104147177201300022172 0ustar00PNG  IHDRIJgAMA a cHRMz&u0`:pQ<,PLTE....................................................................................................):wctRNSXG|"2wfZNz@@efSFccaMhmzs}䁎]bp Ιi8*y㧁Xȓد͐ǫbKGDHtIME %'EIDATx] c޻$,'$h )$uZ7I_B"H 1iRkggdl>ٽ=Y d]زs:w/ f@e,!A$HW O|FMZ ' 1d9 vB:qџC7?xtv*ݹ8P6_dYJ7%߾A,U4IGb(W pB k.b*X&kVfvZ?k yYaRoڨ3DOHnoH6ݩ~ qc2""""""ⲢԎnFb9ͷJ yjJxsjNev'`dU۷ķT_`'yo-/jf>%p} b%gl:`O2Lj-6.`=3 `f7ֽuCl!Q8s0x vIi)C۷#W 3{=`DDDDDDg yURbE:hZ~9јfvv_촸;{%0}z {] p]$y>aW,:tXauO1X\!R&HZ%!r B hO?pjlgkJ{=` z*& -!ddeAz_q~wYp7| 0TG$! &I||@4z_v+OBTĄ1 -"bJ| RC~9`(FHDDI~rmto*ynw5yj=@%c]-+o;yAАE;US@1!;/ ?S&_o?gN$j.E~eo">'O1(C]:7``,!EDDDDlC0\98dy_ha}Aߗ||Ξҿ wnܪ sYbHdz ި4p`b!Le]cmd`I.) nt#6e/YW#]L;zsLrrZg\-TB^7 @7P@>'FꝦb1 xHETj_;S1j7T%W{ڢOPnSL!w@YE@2&|^}|rKM_%08 "1 ;XQj3SxY`aׄA|>7lcXpxH<,sɉx|28 9jPF8zKw/1*:@^&}T# `cpOgi趜L􂕜T3Ə} *(` .ŽV3 +Ifu?oc]D1kT SKzY}`}<~*}0F;l<#""":cOGNM1߽v6/z~+uW‹򉣾k ř;y6+uhUTTm4mm= Tzϼ! _GS׃'rm-R^ksw5I BFf&xc_o/t{-62̶H@^M@ND  ~:?8 =8S#VԲ,W0#Na q?`%6h+a @9`Oޱ@]? """"rEG_?>Dg7rt>'WG ?}qE?h+K$@ɊcY뷓1mBFZ| 5ǷangW2@} zfչ#}SPן $PKJWPX1j^XJ4&RF3pμ`t 7 _.G.Ky^˷#"""":!r!B2=FVn^W9xUdzܶrWZ>Ui%Gi TW:}tu wtu% >=Żá<[t{f FO?$qwzøC,` |R>3,~Q(ؾB|p"JW& <ԧo1!%H~*KNA,Z= INR@ej$it5k~\Ħc]m06tualڕJ#""""""<3{$_XA'@?zoI7L]-)n$Aׄ}>#@IuX\oZ@qr콙vj;^~lϯ]-)hϏ - T&!.%tEXtdate:create2016-09-14T13:32:39-04:00z%tEXtdate:modify2015-06-01T10:37:21-04:00(AntEXtSoftwareAdobe ImageReadyqe<IENDB`includes/js/jquery-ui/themes/smoothness/images/ui-icons_454545_256x240.png000060400000015662147177201300021764 0ustar00PNG  IHDREr@gAMA a cHRMz&u0`:pQ<bKGDE;-tIME %'EIDATxk%Gum;!^pl0[HXȹH:w8;g1s]&<Clfq؅!,"·Wu׫{vGwn>UUuN=ΩSx4g : 6!Agb3 6+JD0&s؇N_Bs&&ڏ>~= c{vj%_DYEF qܸG RSơCEہ!' NP)~tϷ=;wהmeBH{s S&S6MCP6z̐!(hnE6VjնcO6y7iʶ~fKjڬT0<26+^;4~%pxh84^/ :2n6eLh`~=uprn0sOs횶WrGh _ Cmz-=)wFi#@u-cթPO{Ss˛^|BA'm TQn`.[ܫ |Եt7^p @pxh84^sC8UkN}A 栺*s%~aJYT}-1pTVP%%?p(>~PA.E ]1^([#\ֱWRЃ>4j"mhI@I>]yҙA6E:q7n05AuPy L8Pj K9 [EZ.Ȫ.Lu֛L;Xt0Ua29@às_!_ l84^/  @7R?~¥\4F>R7F{VCl9wT.[)?}ڕk Po5othz'\CVgskۥb%@6[\ܩ۶`6YsKݞs7jAAnX2G?1R6+u W@P"[U|~mm`3` { H+"ȤN=Mϯ4U `z~S=n0o粤= ̙hJ#[4ٗv4`5@bt n0w59-̩B(X'[67i3SP@  Ĥ/7^/  @:6U.EowsXE{LsUXcau7WvR҅l~٭Nv]h;Іi;MGC'{I79J*F ͦ> B\u}A窞o<ȟVaCHP"nLum߼]݅=eMFdUf;Il;:DCߪiŪ'Ƚǐ_VL:p s/5V.~{3R[IAH]$fCT5 Pہ(Ku^([ݬN4]&E@.`C5oJ @pxh84'Җ:6lB'.D Рxw5%1\U)F:Jm^[uRdTwOtI&~|Uͩzq;j~đ TsD_S>ܵ TG4m5'W:m" VH#t|dM‚ nz: um?bGA-<[ez#S/\хyDV{+ @u6y#L<"<]5d lj&˺'Y%iFbgJ AH} P=o2O౩pxh84$Jl_ҿAwp( UNQ߆'$kLe>Wƞ%ײ:RfQkb½?.ux8LPr07jNװOfX˼I\99Tn?S#Z֙kk@ g?mbiʘ,kċr]= JOE*We~ 4 -E,dN9wuʬqw>c3e|qEwKځ3%,y ]Y$p)CǢ yR<KۿK}AHD`!@}Enevp7/ 4shVTʉXJ`ג ~\#gᅑ./T!Ij|*<^T@+]uƜO eә"O>^(/檜}cݾ~["ɯx·z&$u7@L&ir=G g jw)ZLZsܗ~M+@>7pZOI'y#GSAS^zUK! ;4Og0͂_ ]%=e`d ԣ=K?RPz12Ӎ-x9uJZ[Ԛ[@byvp#ai.\wiC#Y. ǵꚸM*R6ȩ-~fZ>Ohզ:as|3|*f0S}a?~oVJ]@l,5}c×%ESԸՙ_T !co `_Xp j9C>|"qOꁾKt͝i' t #{P&rej5hv^M8GE h&]@X֔AfaJɂH*_VnX3ug<}hr PPv!o[@ [DF- 2)oCOSP{y#\_.1C|ܼ],ҥKY단Kssͅd w2L)߰O˾e+'HL$1 ?Ѽz>!0r>:xGtb*h8.pxh846VtU9Oyw莇!+IT .ZvZF "pS΃ѯ?!p !B|5CޞH(zzi8[97Q{ z_b:LXTO>٭E {R\)|er}o+BO#/}WH6gvs!Pf^3d"#Qgh8la0`XJ&ɂ`7;a E EO8SҿLD_:Z Qz2*T55XQ{8!WfS~!a89'JHSle'@&3YE,_ɷx1O WP1E#u3jkEyg\iQbp-; ;ť\ {ǔU5e)6ti,UJ6os&X!؉N3˔A! :)OFH*V3 9g[yTΞ,FU &_C<ҫ(_?(W1p? OW p!3J8ҨoWd'`9MYa,3˳|ClSŦ.׳wU!ܟzBļ:b ؑr@jvx_ E4X3|8Wi5gqqp/+3v+s+Q7].v )gp (6G,(6G ?Xd ou'p0M:nCfF/?>mO΅ؑT^rR[M)<#5Ќݤ>;rZs[{uY0c?]yUm-~/d|d7?C e_>DѡWg>iKݑX8ƫ "Jfqvqxh8 p_]|-Yw :o\+ >%W7 :r.\+tW#*Oԃؗq!TFQu~rÁ &(_=q~}`_ƳCN%EHs hkQEϬ6\PO6/I m!ƹClg>҅ 1O 6X}G.M.W@@,TKD6k,s?ofR"vޣMt2'zlY=@'Ӥ>U?Rω;}]q?ko)\LXfӜ4X jJĽAonLٮg{SaDVf2n2tdcj˚k$ Ongyv'C46ާ~4=MI3dF9ݑW= dH!R u}8o=-p`$ ^/Oe4VF/X[II V=zd1abXC :oFE,(`p4lbZD'OWA]4RCC-yЍis'/US$C C#\r=hLݒï6^/  @Ñ[D*-> Mk_>zlIТ3,ruX(+d<dBqv%^IgPY=:-*%]~E#grboncLE8ȝ6ΰO;㚌u5>zAC &C&gIZP bsb/p.o'G+o^_n\! 噻/fvq=fJ>yOeĢHES|fD<`gizI>7p5SZت!{y{~=4@#˹5"p@yU8ZSq ?*66x{ϖ/  @Ñ <п8~o>U8/yu67s|Wٿpo.P<]ץƟ/Doz7hz ! 6*Uyjr6~`oK?B?o˿9iic.ͅ%wvms%]\7}U]7%~T_|JOvh務Ѹ[鄚{ [@+r.~ٳuĭO"2#f`Ͽ=MMv7Q}WLZnJߔ B &+$U= ;T=(r/Kj +oد~jI8&e 1Uyz;6~hoK?B?o˿)~yUY: uRXX ^fNK)Fi޲i~o8KX/pu 97:dس~o! 6^/  @*l;ݣdmxr ]1t(XnM^ j!!/6nt1P;FXQA^qƍtCTxDqۜBk 3||9/`/  @pl]h^@l!=mV$! 3hZ`꠳9 `x_ akݞ=k.|!,!ثØ~A+l[U?d0ğrB0_S<ҥI_~?CWS|3ȇɲ_>Nք(az X>E=<Y=kuo UX0%tEXtdate:create2016-09-14T13:32:39-04:00z%tEXtdate:modify2015-06-01T10:37:21-04:00(AntEXtSoftwareAdobe ImageReadyqe<IENDB`includes/js/jquery-ui/themes/smoothness/images/ui-icons_888888_256x240.png000060400000015707147177201300022011 0ustar00PNG  IHDREr@gAMA a cHRMz&u0`:pQ<bKGDI( tIME %'EIDATx{eE}?H(bX!²[R`JH!wMbݱFѨh ڥXT#D T;"baRqw}G)b}N9νsOsϯOw~8<3 @@F3 $ +\$ Ook؞0Z ""`JyQzB7iQ'.qIvCT2mk5e[7Gt ͩk!HL^?3dJ[ fZS0Ms}`T8t US˴ @1a`fekï6^/  @px{|AQ"iO=]}=\z\mc-ܷ>(DЯ'L6=;㴓l ۧ=M/>ڠ̓6(ڬ0$%GI_km+$.q W7~!pxh84^/ ƐQG8UkV}A 栺*s%~aJYT}-c*vۭ.J=C `+~P}\=. 43%4 Ph F,_\ֱWRЃ>4j"mhi@IzJҼy tsY@ee'C뱅rjm܍C&[LM%m{e^.%flNźuѶd{$*"nK9(ufc/ӯ<-!LUi{&0lWW/  @pxh8͡phxѮO)LQ.ޫU@P--[jj6ƵKǎɟ 5r 7phۊ{]Zn!w3ڹRzz[ ta.m[uD,i9ХcwnϹCzƠ Gm,o}RfNaÔ Juˁ ]oۯ-Mu`f]gJ(U@E N=Mϯ,U `z~S=n0o粤= ̙hJC,KJs /&޸咲C9Uhuav^u9&mtjc(0 H @ᗂ/  @k R]y{L*k ,CV= &*aTW;uMB-b5߮ `bp]Ӵy4ttClhbٔއA/(qW\;ȊG'+? U@낢sBd * Ȱ$=U!zӊUO{'!`5͔:KU=Œ@mRal{IB%b5}ZƀT7 셲jDe!014]Fh4^/  @1|Ef /nl&tBnȫؠ ʹwSLODHZpU]g@*y;i-JӅR޽HCt5jNާr Ls_S>ܵG]ϗ- 򩸹h_Y=^4Y kNջNc>BGA"I՚L@<4AG<!s"=;a[@ȼUw0b?X =0Hjr~zV(U&v$>R@P骁lO$H!`;pdvY$4m^U_B`ڑyP0l'z&m0Oౡpxh84$Jl_ҿAw`\qcM !OJe8|z==[K<.iǸ"0kޘW =r)0O1%^q&l ;GX)[ʝυc CUrH=Ž1eq3PRN%F./TDUC|'ȔՇx ;w1ws:?r^fOE1~6 Y\U h&( 80h'yW'w(:* yMjmv/ {pnx/ (?_iRz5^z,f\ ,OsxYM`/*6;xg2Ë %sW2ia l!ަ)9ϣՕAE~5]f"G"z ^`[[UE0C!f ,h5c5Cm:X@`IbSdshye QwB~+`$;\lc#%V]I%uB59ů9\ @LVIT5lΜoavY~/zq,b/쇗/&oMޮPH:`oaLc$1>a_~EvQ5yK wہ]V\MbL} n{7_$_f@M?g|vhЇOiT=wx96MRD?Pd3ddco/\=Zy*N֫Ig/7؜(86~bC2XSɇv>G[UBuS f%&?g.n^[$CA9D`}O&R5jQ|O c]z@hd} vnAsw$S&qNw8BHH.al/.uS?-¯[ Qߍ0~-ӗ쏌}dK@3>Lb,㺪k,OxAJL Q 4^/ yU4TtUm`:!E0ݮu\k_A>>^Ż 1y(u.pnf>NȭJǹ"o͐g(m!dz5p휝=Nن~Y/1 YP,DO>٩E {Q\)|uz}(BOU#/}WH6gvs!Pf^3dB3uBJ|ye0 ,p%dANؙ"oԧE~)_Fxq/O^_V=gOw V.+"8<g''d颹)cRDzIZXE|7F(S@;fqYw\Sc^sgqƕ-vE}ta;K3!yo`10wUMcʢ òZ]!N p⿖tz[8]L.IH⯀H1EU?~Ιl6ngs9;uW0QK|#h'_iDu5F4xVFt?@TC7Cln6p6UvE9V9rf 1k `[6"AvE'xxhQ Js998_Sq/\ALvIl_DN3t& c,{ou'p2M1>JZ˿5F-?>oʅؖT^r ZJjhFnm9zޭν:y0c ?]yUm-~C/d|l7? e_>DѡW_ִ%XZ5,./ Gt4^ _Agܣ7ˁsE!ܧW*Agޣ>p9rNٟнQ $=f?qb_fƅd &(_5q^ϒ`_ƳCNEDs @Xd6\hl^͍B,19M2 ^G -WCf[X.I!n?.3_Ppǹ@}d@'3d>U?RI:}]k<`\LXfSX Y  E㶎ho~scv=C`x+!bc;y6SiqRN, :WqUw;9~8cS_\w'^xq'c :QFf߷~,%}ϠW';[=Z6^$!E$'-vs+sU(tgMÁ,Qh<1cXIxm`pxh84^Xo26nQHAI4;F[ՒaA*jdҦa=4tX/,~RJ*o-O]UŪiS +8³*dބC)^H~M?f{lC ]GG %П֡ΨYT O BٯyXR >F/XכI,*YS/ (`}D,(KXgp4bZD'OWh+RCCMyЍYs'!nJC C#\r=hLݔï6^/  @Ñ[93\;4[C#=G=6!hMݏ^NW9:,so0Cd!8;2&s\KtŽl:-*%A$-G94?B8=:5FTcw[8͖?kxkj/~}cn"]o.0x+>`/]ޭ5.`+g("Fers"bۍ+"xxp=NKLBg [y E?Ga*J$su̟2$JLqW3[77CD0~ķx%>1 X)Ϲ G`j!gFoprpxh82PR ^[ ~F:.f~o8\#u]y K |@4dmSQ\WӣeWC|[V~[OItMt1RDU͕lw؃zwp]Wv` 鑫K~-ְ|1t40wq>PsߜIdhE%u]\1{ΘM`OpV$ /#=65ك|S~XB!~_1j])}S/G" C@4 F_&Dxv{\(rݯHj$ +oد~jIDpT@+yz;6~hoK?B?o˿)~yUY: uRD"GYNK.F޶a~os8KGY/pu}l42AHᵁ  @pxh8Deta{T O)Cץ{ C@=PSqHO3`cΗwC鑇=B_nPQ!`B*rls گMٽ=Y d]زs:w/ f@e,!A$HW O|FMZ ' 1d9 vB:qџC7?xtv*ݹ8P6_dYJ7%߾A,U4IGb(W pB k.b*X&kVfvZ?k yYaRoڨ3DOHnoH6ݩ~ qc2""""""ⲢԎnFb9ͷJ yjJxsjNev'`dU۷ķT_`'yo-/jf>%p} b%gl:`O2Lj-6.`=3 `f7ֽuCl!Q8s0x vIi)C۷#W 3{=`DDDDDDg yURbE:hZ~9јfvv_촸;{%0}z {] p]$y>aW,:tXauO1X\!R&HZ%!r B hO?pjlgkJ{=` z*& -!ddeAz_q~wYp7| 0TG$! &I||@4z_v+OBTĄ1 -"bJ| RC~9`(FHDDI~rmto*ynw5yj=@%c]-+o;yAАE;US@1!;/ ?S&_o?gN$j.E~eo">'O1(C]:7``,!EDDDDlC0\98dy_ha}Aߗ||Ξҿ wnܪ sYbHdz ި4p`b!Le]cmd`I.) nt#6e/YW#]L;zsLrrZg\-TB^7 @7P@>'FꝦb1 xHETj_;S1j7T%W{ڢOPnSL!w@YE@2&|^}|rKM_%08 "1 ;XQj3SxY`aׄA|>7lcXpxH<,sɉx|28 9jPF8zKw/1*:@^&}T# `cpOgi趜L􂕜T3Ə} *(` .ŽV3 +Ifu?oc]D1kT SKzY}`}<~*}0F;l<#""":cOGNM1߽v6/z~+uW‹򉣾k ř;y6+uhUTTm4mm= Tzϼ! _GS׃'rm-R^ksw5I BFf&xc_o/t{-62̶H@^M@ND  ~:?8 =8S#VԲ,W0#Na q?`%6h+a @9`Oޱ@]? """"rEG_?>Dg7rt>'WG ?}qE?h+K$@ɊcY뷓1mBFZ| 5ǷangW2@} zfչ#}SPן $PKJWPX1j^XJ4&RF3pμ`t 7 _.G.Ky^˷#"""":!r!B2=FVn^W9xUdzܶrWZ>Ui%Gi TW:}tu wtu% >=Żá<[t{f FO?$qwzøC,` |R>3,~Q(ؾB|p"JW& <ԧo1!%H~*KNA,Z= INR@ej$it5k~\Ħc]m06tualڕJ#""""""<3{$_XA'@?zoI7L]-)n$Aׄ}>#@IuX\oZ@qr콙vj;^~lϯ]-)hϏ - T&!.%tEXtdate:create2016-09-14T13:32:39-04:00z%tEXtdate:modify2015-06-01T10:37:21-04:00(AntEXtSoftwareAdobe ImageReadyqe<IENDB`includes/js/jquery-ui/themes/smoothness/jquery-ui.css000060400000107270147177201300017060 0ustar00/*! jQuery UI - v1.12.1 - 2016-09-14 * http://jqueryui.com * Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px * Copyright jQuery Foundation and other contributors; Licensed MIT */ /* Layout helpers ----------------------------------*/ .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; border-collapse: collapse; } .ui-helper-clearfix:after { clear: both; } .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); /* support: IE8 */ } .ui-front { z-index: 100; } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; pointer-events: none; } /* Icons ----------------------------------*/ .ui-icon { display: inline-block; vertical-align: middle; margin-top: -.25em; position: relative; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } .ui-widget-icon-block { left: 50%; margin-left: -8px; display: block; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; } .ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin: 2px 0 0 0; padding: .5em .5em .5em .7em; font-size: 100%; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; } .ui-autocomplete { position: absolute; top: 0; left: 0; cursor: default; } .ui-menu { list-style: none; padding: 0; margin: 0; display: block; outline: 0; } .ui-menu .ui-menu { position: absolute; } .ui-menu .ui-menu-item { margin: 0; cursor: pointer; /* support: IE10, see #8844 */ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); } .ui-menu .ui-menu-item-wrapper { position: relative; padding: 3px 1em 3px .4em; } .ui-menu .ui-menu-divider { margin: 5px 0; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; } .ui-menu .ui-state-focus, .ui-menu .ui-state-active { margin: -1px; } /* icon support */ .ui-menu-icons { position: relative; } .ui-menu-icons .ui-menu-item-wrapper { padding-left: 2em; } /* left-aligned */ .ui-menu .ui-icon { position: absolute; top: 0; bottom: 0; left: .2em; margin: auto 0; } /* right-aligned */ .ui-menu .ui-menu-icon { left: auto; right: 0; } .ui-button { padding: .4em 1em; display: inline-block; position: relative; line-height: normal; margin-right: .1em; cursor: pointer; vertical-align: middle; text-align: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; /* Support: IE <= 11 */ overflow: visible; } .ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; } /* to make room for the icon, a width needs to be set here */ .ui-button-icon-only { width: 2em; box-sizing: border-box; text-indent: -9999px; white-space: nowrap; } /* no icon support for input elements */ input.ui-button.ui-button-icon-only { text-indent: 0; } /* button icon element(s) */ .ui-button-icon-only .ui-icon { position: absolute; top: 50%; left: 50%; margin-top: -8px; margin-left: -8px; } .ui-button.ui-icon-notext .ui-icon { padding: 0; width: 2.1em; height: 2.1em; text-indent: -9999px; white-space: nowrap; } input.ui-button.ui-icon-notext .ui-icon { width: auto; height: auto; text-indent: 0; white-space: normal; padding: .4em 1em; } /* workarounds */ /* Support: Firefox 5 - 40 */ input.ui-button::-moz-focus-inner, button.ui-button::-moz-focus-inner { border: 0; padding: 0; } .ui-controlgroup { vertical-align: middle; display: inline-block; } .ui-controlgroup > .ui-controlgroup-item { float: left; margin-left: 0; margin-right: 0; } .ui-controlgroup > .ui-controlgroup-item:focus, .ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { z-index: 9999; } .ui-controlgroup-vertical > .ui-controlgroup-item { display: block; float: none; width: 100%; margin-top: 0; margin-bottom: 0; text-align: left; } .ui-controlgroup-vertical .ui-controlgroup-item { box-sizing: border-box; } .ui-controlgroup .ui-controlgroup-label { padding: .4em 1em; } .ui-controlgroup .ui-controlgroup-label span { font-size: 80%; } .ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { border-left: none; } .ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { border-top: none; } .ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { border-right: none; } .ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { border-bottom: none; } /* Spinner specific style fixes */ .ui-controlgroup-vertical .ui-spinner-input { /* Support: IE8 only, Android < 4.4 only */ width: 75%; width: calc( 100% - 2.4em ); } .ui-controlgroup-vertical .ui-spinner .ui-spinner-up { border-top-style: solid; } .ui-checkboxradio-label .ui-icon-background { box-shadow: inset 1px 1px 1px #ccc; border-radius: .12em; border: none; } .ui-checkboxradio-radio-label .ui-icon-background { width: 16px; height: 16px; border-radius: 1em; overflow: visible; border: none; } .ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, .ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { background-image: none; width: 8px; height: 8px; border-width: 4px; border-style: solid; } .ui-checkboxradio-disabled { pointer-events: none; } .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } .ui-datepicker .ui-datepicker-header { position: relative; padding: .2em 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position: absolute; top: 2px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } .ui-datepicker .ui-datepicker-prev { left: 2px; } .ui-datepicker .ui-datepicker-next { right: 2px; } .ui-datepicker .ui-datepicker-prev-hover { left: 1px; } .ui-datepicker .ui-datepicker-next-hover { right: 1px; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } .ui-datepicker .ui-datepicker-title select { font-size: 1em; margin: 1px 0; } .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 45%; } .ui-datepicker table { width: 100%; font-size: .9em; border-collapse: collapse; margin: 0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding: 0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width: auto; overflow: visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float: left; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width: auto; } .ui-datepicker-multi .ui-datepicker-group { float: left; } .ui-datepicker-multi .ui-datepicker-group table { width: 95%; margin: 0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width: 50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width: 33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width: 25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width: 0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear: left; } .ui-datepicker-row-break { clear: both; width: 100%; font-size: 0; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear: right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, .ui-datepicker-rtl .ui-datepicker-group { float: right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width: 0; border-left-width: 1px; } /* Icons */ .ui-datepicker .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; left: .5em; top: .3em; } .ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; outline: 0; } .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 0; white-space: nowrap; width: 90%; overflow: hidden; text-overflow: ellipsis; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 20px; margin: -10px 0 0 0; padding: 1px; height: 20px; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin-top: .5em; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-n { height: 2px; top: 0; } .ui-dialog .ui-resizable-e { width: 2px; right: 0; } .ui-dialog .ui-resizable-s { height: 2px; bottom: 0; } .ui-dialog .ui-resizable-w { width: 2px; left: 0; } .ui-dialog .ui-resizable-se, .ui-dialog .ui-resizable-sw, .ui-dialog .ui-resizable-ne, .ui-dialog .ui-resizable-nw { width: 7px; height: 7px; } .ui-dialog .ui-resizable-se { right: 0; bottom: 0; } .ui-dialog .ui-resizable-sw { left: 0; bottom: 0; } .ui-dialog .ui-resizable-ne { right: 0; top: 0; } .ui-dialog .ui-resizable-nw { left: 0; top: 0; } .ui-draggable .ui-dialog-titlebar { cursor: move; } .ui-draggable-handle { -ms-touch-action: none; touch-action: none; } .ui-resizable { position: relative; } .ui-resizable-handle { position: absolute; font-size: 0.1px; display: block; -ms-touch-action: none; touch-action: none; } .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px; } .ui-progressbar { height: 2em; text-align: left; overflow: hidden; } .ui-progressbar .ui-progressbar-value { margin: -1px; height: 100%; } .ui-progressbar .ui-progressbar-overlay { background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); height: 100%; filter: alpha(opacity=25); /* support: IE8 */ opacity: 0.25; } .ui-progressbar-indeterminate .ui-progressbar-value { background-image: none; } .ui-selectable { -ms-touch-action: none; touch-action: none; } .ui-selectable-helper { position: absolute; z-index: 100; border: 1px dotted black; } .ui-selectmenu-menu { padding: 0; margin: 0; position: absolute; top: 0; left: 0; display: none; } .ui-selectmenu-menu .ui-menu { overflow: auto; overflow-x: hidden; padding-bottom: 1px; } .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { font-size: 1em; font-weight: bold; line-height: 1.5; padding: 2px 0.4em; margin: 0.5em 0 0 0; height: auto; border: 0; } .ui-selectmenu-open { display: block; } .ui-selectmenu-text { display: block; margin-right: 20px; overflow: hidden; text-overflow: ellipsis; } .ui-selectmenu-button.ui-button { text-align: left; white-space: nowrap; width: 14em; } .ui-selectmenu-icon.ui-icon { float: right; margin-top: 0; } .ui-slider { position: relative; text-align: left; } .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; -ms-touch-action: none; touch-action: none; } .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } /* support: IE8 - See #6727 */ .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range { filter: inherit; } .ui-slider-horizontal { height: .8em; } .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: .8em; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; } .ui-sortable-handle { -ms-touch-action: none; touch-action: none; } .ui-spinner { position: relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; } .ui-spinner-input { border: none; background: none; color: inherit; padding: .222em 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 2em; } .ui-spinner-button { width: 1.6em; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; } /* more specificity required here to override default borders */ .ui-spinner a.ui-spinner-button { border-top-style: none; border-bottom-style: none; border-right-style: none; } .ui-spinner-up { top: 0; } .ui-spinner-down { bottom: 0; } .ui-tabs { position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ padding: .2em; } .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom-width: 0; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav .ui-tabs-anchor { float: left; padding: .5em 1em; text-decoration: none; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; } .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { cursor: text; } .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { cursor: pointer; } .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } .ui-tooltip { padding: 8px; position: absolute; z-index: 9999; max-width: 300px; } body .ui-tooltip { border-width: 2px; } /* Component containers ----------------------------------*/ .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } .ui-widget.ui-widget-content { border: 1px solid #d3d3d3; } .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff; color: #222222; } .ui-widget-content a { color: #222222; } .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; color: #222222; font-weight: bold; } .ui-widget-header a { color: #222222; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default, .ui-button, /* We use html here because we need a greater specificity to make sure disabled works properly when clicked or hovered */ html .ui-button.ui-state-disabled:hover, html .ui-button.ui-state-disabled:active { border: 1px solid #d3d3d3; background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #555555; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited, a.ui-button, a:link.ui-button, a:visited.ui-button, .ui-button { color: #555555; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus, .ui-button:hover, .ui-button:focus { border: 1px solid #999999; background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited, .ui-state-focus a, .ui-state-focus a:hover, .ui-state-focus a:link, .ui-state-focus a:visited, a.ui-button:hover, a.ui-button:focus { color: #212121; text-decoration: none; } .ui-visual-focus { box-shadow: 0 0 3px 1px rgb(94, 158, 214); } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active, a.ui-button:active, .ui-button:active, .ui-button.ui-state-active:hover { border: 1px solid #aaaaaa; background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-icon-background, .ui-state-active .ui-icon-background { border: #aaaaaa; background-color: #212121; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #fcefa1; background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; color: #363636; } .ui-state-checked { border: 1px solid #fcefa1; background: #fbf9ee; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border: 1px solid #cd0a0a; background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; color: #cd0a0a; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); /* support: IE8 */ font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); /* support: IE8 */ background-image: none; } .ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; } .ui-icon, .ui-widget-content .ui-icon { background-image: url("images/ui-icons_222222_256x240.png"); } .ui-widget-header .ui-icon { background-image: url("images/ui-icons_222222_256x240.png"); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon, .ui-button:hover .ui-icon, .ui-button:focus .ui-icon { background-image: url("images/ui-icons_454545_256x240.png"); } .ui-state-active .ui-icon, .ui-button:active .ui-icon { background-image: url("images/ui-icons_454545_256x240.png"); } .ui-state-highlight .ui-icon, .ui-button .ui-state-highlight.ui-icon { background-image: url("images/ui-icons_2e83ff_256x240.png"); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { background-image: url("images/ui-icons_cd0a0a_256x240.png"); } .ui-button .ui-icon { background-image: url("images/ui-icons_888888_256x240.png"); } /* positioning */ .ui-icon-blank { background-position: 16px 16px; } .ui-icon-caret-1-n { background-position: 0 0; } .ui-icon-caret-1-ne { background-position: -16px 0; } .ui-icon-caret-1-e { background-position: -32px 0; } .ui-icon-caret-1-se { background-position: -48px 0; } .ui-icon-caret-1-s { background-position: -65px 0; } .ui-icon-caret-1-sw { background-position: -80px 0; } .ui-icon-caret-1-w { background-position: -96px 0; } .ui-icon-caret-1-nw { background-position: -112px 0; } .ui-icon-caret-2-n-s { background-position: -128px 0; } .ui-icon-caret-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -65px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -65px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 1px -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-on { background-position: -96px -144px; } .ui-icon-radio-off { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { border-top-left-radius: 4px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { border-top-right-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { border-bottom-left-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { border-bottom-right-radius: 4px; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa; opacity: .3; filter: Alpha(Opacity=30); /* support: IE8 */ } .ui-widget-shadow { -webkit-box-shadow: -8px -8px 8px #aaaaaa; box-shadow: -8px -8px 8px #aaaaaa; } includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css000060400000075066147177201300017651 0ustar00/*! jQuery UI - v1.12.1 - 2016-09-14 * http://jqueryui.com * Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px * Copyright jQuery Foundation and other contributors; Licensed MIT */ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #d3d3d3}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#212121;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-icon-background,.ui-state-active .ui-icon-background{border:#aaa;background-color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-checked{border:1px solid #fcefa1;background:#fbf9ee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:-8px -8px 8px #aaa;box-shadow:-8px -8px 8px #aaa}includes/js/jquery-ui/themes/smoothness/theme.css000060400000042732147177201300016231 0ustar00/*! * jQuery UI CSS Framework 1.12.1 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/category/theming/ * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } .ui-widget.ui-widget-content { border: 1px solid #d3d3d3; } .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff; color: #222222; } .ui-widget-content a { color: #222222; } .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; color: #222222; font-weight: bold; } .ui-widget-header a { color: #222222; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default, .ui-button, /* We use html here because we need a greater specificity to make sure disabled works properly when clicked or hovered */ html .ui-button.ui-state-disabled:hover, html .ui-button.ui-state-disabled:active { border: 1px solid #d3d3d3; background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #555555; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited, a.ui-button, a:link.ui-button, a:visited.ui-button, .ui-button { color: #555555; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus, .ui-button:hover, .ui-button:focus { border: 1px solid #999999; background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited, .ui-state-focus a, .ui-state-focus a:hover, .ui-state-focus a:link, .ui-state-focus a:visited, a.ui-button:hover, a.ui-button:focus { color: #212121; text-decoration: none; } .ui-visual-focus { box-shadow: 0 0 3px 1px rgb(94, 158, 214); } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active, a.ui-button:active, .ui-button:active, .ui-button.ui-state-active:hover { border: 1px solid #aaaaaa; background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; font-weight: normal; color: #212121; } .ui-icon-background, .ui-state-active .ui-icon-background { border: #aaaaaa; background-color: #212121; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #fcefa1; background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; color: #363636; } .ui-state-checked { border: 1px solid #fcefa1; background: #fbf9ee; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border: 1px solid #cd0a0a; background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; color: #cd0a0a; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); /* support: IE8 */ font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); /* support: IE8 */ background-image: none; } .ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; } .ui-icon, .ui-widget-content .ui-icon { background-image: url("images/ui-icons_222222_256x240.png"); } .ui-widget-header .ui-icon { background-image: url("images/ui-icons_222222_256x240.png"); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon, .ui-button:hover .ui-icon, .ui-button:focus .ui-icon { background-image: url("images/ui-icons_454545_256x240.png"); } .ui-state-active .ui-icon, .ui-button:active .ui-icon { background-image: url("images/ui-icons_454545_256x240.png"); } .ui-state-highlight .ui-icon, .ui-button .ui-state-highlight.ui-icon { background-image: url("images/ui-icons_2e83ff_256x240.png"); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { background-image: url("images/ui-icons_cd0a0a_256x240.png"); } .ui-button .ui-icon { background-image: url("images/ui-icons_888888_256x240.png"); } /* positioning */ .ui-icon-blank { background-position: 16px 16px; } .ui-icon-caret-1-n { background-position: 0 0; } .ui-icon-caret-1-ne { background-position: -16px 0; } .ui-icon-caret-1-e { background-position: -32px 0; } .ui-icon-caret-1-se { background-position: -48px 0; } .ui-icon-caret-1-s { background-position: -65px 0; } .ui-icon-caret-1-sw { background-position: -80px 0; } .ui-icon-caret-1-w { background-position: -96px 0; } .ui-icon-caret-1-nw { background-position: -112px 0; } .ui-icon-caret-2-n-s { background-position: -128px 0; } .ui-icon-caret-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -65px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -65px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 1px -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background-position: -16px -144px; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-on { background-position: -96px -144px; } .ui-icon-radio-off { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { border-top-left-radius: 4px; } .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { border-top-right-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { border-bottom-left-radius: 4px; } .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { border-bottom-right-radius: 4px; } /* Overlays */ .ui-widget-overlay { background: #aaaaaa; opacity: .3; filter: Alpha(Opacity=30); /* support: IE8 */ } .ui-widget-shadow { -webkit-box-shadow: -8px -8px 8px #aaaaaa; box-shadow: -8px -8px 8px #aaaaaa; } includes/js/html5-fallback.js000060400000001203147177201300012104 0ustar00( function( $ ) { $( function() { var supportHtml5 = ( function() { var features = {}; var input = document.createElement( 'input' ); var inputTypes = [ 'date' ]; $.each( inputTypes, function( index, value ) { input.setAttribute( 'type', value ); features[ value ] = input.type !== 'text'; } ); return features; } )(); if ( ! supportHtml5.date ) { $( 'input.wpcf7-date[type="date"]' ).each( function() { $( this ).datepicker( { dateFormat: 'yy-mm-dd', minDate: new Date( $( this ).attr( 'min' ) ), maxDate: new Date( $( this ).attr( 'max' ) ) } ); } ); } } ); } )( jQuery ); includes/js/index.asset.php000060400000000140147177201300011715 0ustar00 array( 'wp-i18n', ), 'version' => WPCF7_VERSION, ); includes/js/index.js000060400000032214147177201300010433 0ustar00(()=>{"use strict";const e=window.wp.i18n,t=e=>Math.abs(parseInt(e,10)),a=(e,t,a)=>{const n=new CustomEvent(`wpcf7${t}`,{bubbles:!0,detail:a});"string"==typeof e&&(e=document.querySelector(e)),e.dispatchEvent(n)},n=(e,t)=>{const n=new Map([["init","init"],["validation_failed","invalid"],["acceptance_missing","unaccepted"],["spam","spam"],["aborted","aborted"],["mail_sent","sent"],["mail_failed","failed"],["submitting","submitting"],["resetting","resetting"],["validating","validating"],["payment_required","payment-required"]]);n.has(t)&&(t=n.get(t)),Array.from(n.values()).includes(t)||(t=`custom-${t=(t=t.replace(/[^0-9a-z]+/i," ").trim()).replace(/\s+/,"-")}`);const r=e.getAttribute("data-status");if(e.wpcf7.status=t,e.setAttribute("data-status",t),e.classList.add(t),r&&r!==t){e.classList.remove(r);const t={contactFormId:e.wpcf7.id,pluginVersion:e.wpcf7.pluginVersion,contactFormLocale:e.wpcf7.locale,unitTag:e.wpcf7.unitTag,containerPostId:e.wpcf7.containerPost,status:e.wpcf7.status,prevStatus:r};a(e,"statuschanged",t)}return t},r=e=>{const{root:t,namespace:a="contact-form-7/v1"}=wpcf7.api;return c.reduceRight(((e,t)=>a=>t(a,e)),(e=>{let n,r,{url:c,path:o,endpoint:s,headers:i,body:l,data:p,...d}=e;"string"==typeof s&&(n=a.replace(/^\/|\/$/g,""),r=s.replace(/^\//,""),o=r?n+"/"+r:n),"string"==typeof o&&(-1!==t.indexOf("?")&&(o=o.replace("?","&")),o=o.replace(/^\//,""),c=t+o),i={Accept:"application/json, */*;q=0.1",...i},delete i["X-WP-Nonce"],p&&(l=JSON.stringify(p),i["Content-Type"]="application/json");const f={code:"fetch_error",message:"You are probably offline."},u={code:"invalid_json",message:"The response is not a valid JSON response."};return window.fetch(c||o||window.location.href,{...d,headers:i,body:l}).then((e=>Promise.resolve(e).then((e=>{if(e.status>=200&&e.status<300)return e;throw e})).then((e=>{if(204===e.status)return null;if(e&&e.json)return e.json().catch((()=>{throw u}));throw u}))),(()=>{throw f}))}))(e)},c=[];function o(e,t={}){const{target:a,scope:r=e,...c}=t;if(void 0===e.wpcf7?.schema)return;const o={...e.wpcf7.schema};if(void 0!==a){if(!e.contains(a))return;if(!a.closest(".wpcf7-form-control-wrap[data-name]"))return;if(a.closest(".novalidate"))return}const p=r.querySelectorAll(".wpcf7-form-control-wrap"),d=Array.from(p).reduce(((e,t)=>(t.closest(".novalidate")||t.querySelectorAll(":where( input, textarea, select ):enabled").forEach((t=>{if(t.name)switch(t.type){case"button":case"image":case"reset":case"submit":break;case"checkbox":case"radio":t.checked&&e.append(t.name,t.value);break;case"select-multiple":for(const a of t.selectedOptions)e.append(t.name,a.value);break;case"file":for(const a of t.files)e.append(t.name,a);break;default:e.append(t.name,t.value)}})),e)),new FormData),f=e.getAttribute("data-status");Promise.resolve(n(e,"validating")).then((n=>{if(void 0!==swv){const n=swv.validate(o,d,t);for(const t of p){if(void 0===t.dataset.name)continue;const c=t.dataset.name;if(n.has(c)){const{error:t,validInputs:a}=n.get(c);i(e,c),void 0!==t&&s(e,c,t,{scope:r}),l(e,c,null!=a?a:[])}if(t.contains(a))break}}})).finally((()=>{n(e,f)}))}r.use=e=>{c.unshift(e)};const s=(e,t,a,n)=>{const{scope:r=e,...c}=null!=n?n:{},o=`${e.wpcf7?.unitTag}-ve-${t}`.replaceAll(/[^0-9a-z_-]+/gi,""),s=e.querySelector(`.wpcf7-form-control-wrap[data-name="${t}"] .wpcf7-form-control`);(()=>{const t=document.createElement("li");t.setAttribute("id",o),s&&s.id?t.insertAdjacentHTML("beforeend",`${a}`):t.insertAdjacentText("beforeend",a),e.wpcf7.parent.querySelector(".screen-reader-response ul").appendChild(t)})(),r.querySelectorAll(`.wpcf7-form-control-wrap[data-name="${t}"]`).forEach((e=>{const t=document.createElement("span");t.classList.add("wpcf7-not-valid-tip"),t.setAttribute("aria-hidden","true"),t.insertAdjacentText("beforeend",a),e.appendChild(t),e.querySelectorAll("[aria-invalid]").forEach((e=>{e.setAttribute("aria-invalid","true")})),e.querySelectorAll(".wpcf7-form-control").forEach((e=>{e.classList.add("wpcf7-not-valid"),e.setAttribute("aria-describedby",o),"function"==typeof e.setCustomValidity&&e.setCustomValidity(a),e.closest(".use-floating-validation-tip")&&(e.addEventListener("focus",(e=>{t.setAttribute("style","display: none")})),t.addEventListener("click",(e=>{t.setAttribute("style","display: none")})))}))}))},i=(e,t)=>{const a=`${e.wpcf7?.unitTag}-ve-${t}`.replaceAll(/[^0-9a-z_-]+/gi,"");e.wpcf7.parent.querySelector(`.screen-reader-response ul li#${a}`)?.remove(),e.querySelectorAll(`.wpcf7-form-control-wrap[data-name="${t}"]`).forEach((e=>{e.querySelector(".wpcf7-not-valid-tip")?.remove(),e.querySelectorAll("[aria-invalid]").forEach((e=>{e.setAttribute("aria-invalid","false")})),e.querySelectorAll(".wpcf7-form-control").forEach((e=>{e.removeAttribute("aria-describedby"),e.classList.remove("wpcf7-not-valid"),"function"==typeof e.setCustomValidity&&e.setCustomValidity("")}))}))},l=(e,t,a)=>{e.querySelectorAll(`[data-reflection-of="${t}"]`).forEach((e=>{if("output"===e.tagName.toLowerCase()){const t=e;0===a.length&&a.push(t.dataset.default),a.slice(0,1).forEach((e=>{e instanceof File&&(e=e.name),t.textContent=e}))}else e.querySelectorAll("output").forEach((e=>{e.hasAttribute("data-default")?0===a.length?e.removeAttribute("hidden"):e.setAttribute("hidden","hidden"):e.remove()})),a.forEach((a=>{a instanceof File&&(a=a.name);const n=document.createElement("output");n.setAttribute("name",t),n.textContent=a,e.appendChild(n)}))}))};function p(e,t={}){if(wpcf7.blocked)return d(e),void n(e,"submitting");const c=new FormData(e);t.submitter&&t.submitter.name&&c.append(t.submitter.name,t.submitter.value);const o={contactFormId:e.wpcf7.id,pluginVersion:e.wpcf7.pluginVersion,contactFormLocale:e.wpcf7.locale,unitTag:e.wpcf7.unitTag,containerPostId:e.wpcf7.containerPost,status:e.wpcf7.status,inputs:Array.from(c,(e=>{const t=e[0],a=e[1];return!t.match(/^_/)&&{name:t,value:a}})).filter((e=>!1!==e)),formData:c};r({endpoint:`contact-forms/${e.wpcf7.id}/feedback`,method:"POST",body:c,wpcf7:{endpoint:"feedback",form:e,detail:o}}).then((t=>{const r=n(e,t.status);return o.status=t.status,o.apiResponse=t,["invalid","unaccepted","spam","aborted"].includes(r)?a(e,r,o):["sent","failed"].includes(r)&&a(e,`mail${r}`,o),a(e,"submit",o),t})).then((t=>{t.posted_data_hash&&(e.querySelector('input[name="_wpcf7_posted_data_hash"]').value=t.posted_data_hash),"mail_sent"===t.status&&(e.reset(),e.wpcf7.resetOnMailSent=!0),t.invalid_fields&&t.invalid_fields.forEach((t=>{s(e,t.field,t.message)})),e.wpcf7.parent.querySelector('.screen-reader-response [role="status"]').insertAdjacentText("beforeend",t.message),e.querySelectorAll(".wpcf7-response-output").forEach((e=>{e.innerText=t.message}))})).catch((e=>console.error(e)))}r.use(((e,t)=>{if(e.wpcf7&&"feedback"===e.wpcf7.endpoint){const{form:t,detail:r}=e.wpcf7;d(t),a(t,"beforesubmit",r),n(t,"submitting")}return t(e)}));const d=e=>{e.querySelectorAll(".wpcf7-form-control-wrap").forEach((t=>{t.dataset.name&&i(e,t.dataset.name)})),e.wpcf7.parent.querySelector('.screen-reader-response [role="status"]').innerText="",e.querySelectorAll(".wpcf7-response-output").forEach((e=>{e.innerText=""}))};function f(e){const t=new FormData(e),c={contactFormId:e.wpcf7.id,pluginVersion:e.wpcf7.pluginVersion,contactFormLocale:e.wpcf7.locale,unitTag:e.wpcf7.unitTag,containerPostId:e.wpcf7.containerPost,status:e.wpcf7.status,inputs:Array.from(t,(e=>{const t=e[0],a=e[1];return!t.match(/^_/)&&{name:t,value:a}})).filter((e=>!1!==e)),formData:t};r({endpoint:`contact-forms/${e.wpcf7.id}/refill`,method:"GET",wpcf7:{endpoint:"refill",form:e,detail:c}}).then((t=>{e.wpcf7.resetOnMailSent?(delete e.wpcf7.resetOnMailSent,n(e,"mail_sent")):n(e,"init"),c.apiResponse=t,a(e,"reset",c)})).catch((e=>console.error(e)))}r.use(((e,t)=>{if(e.wpcf7&&"refill"===e.wpcf7.endpoint){const{form:t,detail:a}=e.wpcf7;d(t),n(t,"resetting")}return t(e)}));const u=(e,t)=>{for(const a in t){const n=t[a];e.querySelectorAll(`input[name="${a}"]`).forEach((e=>{e.value=""})),e.querySelectorAll(`img.wpcf7-captcha-${a.replaceAll(":","")}`).forEach((e=>{e.setAttribute("src",n)}));const r=/([0-9]+)\.(png|gif|jpeg)$/.exec(n);r&&e.querySelectorAll(`input[name="_wpcf7_captcha_challenge_${a}"]`).forEach((e=>{e.value=r[1]}))}},m=(e,t)=>{for(const a in t){const n=t[a][0],r=t[a][1];e.querySelectorAll(`.wpcf7-form-control-wrap[data-name="${a}"]`).forEach((e=>{e.querySelector(`input[name="${a}"]`).value="",e.querySelector(".wpcf7-quiz-label").textContent=n,e.querySelector(`input[name="_wpcf7_quiz_answer_${a}"]`).value=r}))}};function w(e){const a=new FormData(e);e.wpcf7={id:t(a.get("_wpcf7")),status:e.getAttribute("data-status"),pluginVersion:a.get("_wpcf7_version"),locale:a.get("_wpcf7_locale"),unitTag:a.get("_wpcf7_unit_tag"),containerPost:t(a.get("_wpcf7_container_post")),parent:e.closest(".wpcf7"),get schema(){return wpcf7.schemas.get(this.id)}},wpcf7.schemas.set(e.wpcf7.id,void 0),e.querySelectorAll(".has-spinner").forEach((e=>{e.insertAdjacentHTML("afterend",'')})),(e=>{e.querySelectorAll(".wpcf7-exclusive-checkbox").forEach((t=>{t.addEventListener("change",(t=>{const a=t.target.getAttribute("name");e.querySelectorAll(`input[type="checkbox"][name="${a}"]`).forEach((e=>{e!==t.target&&(e.checked=!1)}))}))}))})(e),(e=>{e.querySelectorAll(".has-free-text").forEach((t=>{const a=t.querySelector("input.wpcf7-free-text"),n=t.querySelector('input[type="checkbox"], input[type="radio"]');a.disabled=!n.checked,e.addEventListener("change",(e=>{a.disabled=!n.checked,e.target===n&&n.checked&&a.focus()}))}))})(e),(e=>{e.querySelectorAll(".wpcf7-validates-as-url").forEach((e=>{e.addEventListener("change",(t=>{let a=e.value.trim();a&&!a.match(/^[a-z][a-z0-9.+-]*:/i)&&-1!==a.indexOf(".")&&(a=a.replace(/^\/+/,""),a="http://"+a),e.value=a}))}))})(e),(e=>{if(!e.querySelector(".wpcf7-acceptance")||e.classList.contains("wpcf7-acceptance-as-validation"))return;const t=()=>{let t=!0;e.querySelectorAll(".wpcf7-acceptance").forEach((e=>{if(!t||e.classList.contains("optional"))return;const a=e.querySelector('input[type="checkbox"]');(e.classList.contains("invert")&&a.checked||!e.classList.contains("invert")&&!a.checked)&&(t=!1)})),e.querySelectorAll(".wpcf7-submit").forEach((e=>{e.disabled=!t}))};t(),e.addEventListener("change",(e=>{t()})),e.addEventListener("wpcf7reset",(e=>{t()}))})(e),(e=>{const a=(e,a)=>{const n=t(e.getAttribute("data-starting-value")),r=t(e.getAttribute("data-maximum-value")),c=t(e.getAttribute("data-minimum-value")),o=e.classList.contains("down")?n-a.value.trim().length:a.value.trim().length;e.setAttribute("data-current-value",o),e.innerText=o,r&&r{t={init:!1,...t},e.querySelectorAll(".wpcf7-character-count").forEach((n=>{const r=n.getAttribute("data-target-name"),c=e.querySelector(`[name="${r}"]`);c&&(c.value=c.defaultValue,a(n,c),t.init&&c.addEventListener("keyup",(e=>{a(n,c)})))}))};n({init:!0}),e.addEventListener("wpcf7reset",(e=>{n()}))})(e),window.addEventListener("load",(t=>{wpcf7.cached&&e.reset()})),e.addEventListener("reset",(t=>{wpcf7.reset(e)})),e.addEventListener("submit",(t=>{wpcf7.submit(e,{submitter:t.submitter}),t.preventDefault()})),e.addEventListener("wpcf7submit",(t=>{t.detail.apiResponse.captcha&&u(e,t.detail.apiResponse.captcha),t.detail.apiResponse.quiz&&m(e,t.detail.apiResponse.quiz)})),e.addEventListener("wpcf7reset",(t=>{t.detail.apiResponse.captcha&&u(e,t.detail.apiResponse.captcha),t.detail.apiResponse.quiz&&m(e,t.detail.apiResponse.quiz)})),e.addEventListener("change",(t=>{t.target.closest(".wpcf7-form-control")&&wpcf7.validate(e,{target:t.target})})),e.addEventListener("wpcf7statuschanged",(t=>{const a=t.detail.status;e.querySelectorAll(".active-on-any").forEach((e=>{e.removeAttribute("inert"),e.classList.remove("active-on-any")})),e.querySelectorAll(`.inert-on-${a}`).forEach((e=>{e.setAttribute("inert","inert"),e.classList.add("active-on-any")}))}))}document.addEventListener("DOMContentLoaded",(t=>{var a;if("undefined"!=typeof wpcf7)if(void 0!==wpcf7.api)if("function"==typeof window.fetch)if("function"==typeof window.FormData)if("function"==typeof NodeList.prototype.forEach)if("function"==typeof String.prototype.replaceAll){wpcf7={init:w,submit:p,reset:f,validate:o,schemas:new Map,...null!==(a=wpcf7)&&void 0!==a?a:{}},document.querySelectorAll("form .wpcf7[data-wpcf7-id]").forEach((t=>{const a=document.createElement("p");a.setAttribute("class","wpcf7-form-in-wrong-place");const n=document.createElement("strong");n.append((0,e.__)("Error:","contact-form-7"));const r=(0,e.__)("This contact form is placed in the wrong place.","contact-form-7");a.append(n," ",r),t.replaceWith(a)})),document.querySelectorAll(".wpcf7 > form").forEach((e=>{wpcf7.init(e),e.closest(".wpcf7").classList.replace("no-js","js")}));for(const e of wpcf7.schemas.keys())r({endpoint:`contact-forms/${e}/feedback/schema`,method:"GET"}).then((t=>{wpcf7.schemas.set(e,t)}))}else console.error("Your browser does not support String.replaceAll().");else console.error("Your browser does not support NodeList.forEach().");else console.error("Your browser does not support window.FormData().");else console.error("Your browser does not support window.fetch().");else console.error("wpcf7.api is not defined.");else console.error("wpcf7 is not defined.")}))})();includes/swv/js/index.asset.php000060400000000121147177201300012533 0ustar00 array(), 'version' => WPCF7_VERSION, ); includes/swv/js/index.js000060400000030340147177201300011250 0ustar00(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function i(t){if(this.formData={},this.tree={},!(t instanceof FormData))return this;this.formData=t;const e=()=>{const t=new Map;return t.largestIndex=0,t.set=function(e,i){""===e?e=t.largestIndex++:/^[0-9]+$/.test(e)&&(e=parseInt(e),t.largestIndex<=e&&(t.largestIndex=e+1)),Map.prototype.set.call(t,e,i)},t};this.tree=e();const i=/^(?[a-z][-a-z0-9_:]*)(?(?:\[(?:[a-z][-a-z0-9_:]*|[0-9]*)\])*)/i;for(const[t,s]of this.formData){const o=t.match(i);if(o)if(""===o.groups.array)this.tree.set(o.groups.name,s);else{const t=[...o.groups.array.matchAll(/\[([a-z][-a-z0-9_:]*|[0-9]*)\]/gi)].map((([t,e])=>e));t.unshift(o.groups.name);const i=t.pop();t.reduce(((t,i)=>{if(/^[0-9]+$/.test(i)&&(i=parseInt(i)),t.get(i)instanceof Map)return t.get(i);const s=e();return t.set(i,s),s}),this.tree).set(i,s)}}}t.r(e),t.d(e,{all:()=>D,any:()=>M,date:()=>m,dayofweek:()=>u,email:()=>r,enum:()=>h,file:()=>d,maxdate:()=>z,maxfilesize:()=>j,maxitems:()=>v,maxlength:()=>x,maxnumber:()=>y,mindate:()=>A,minfilesize:()=>$,minitems:()=>w,minlength:()=>g,minnumber:()=>b,number:()=>c,required:()=>n,requiredfile:()=>a,stepnumber:()=>I,tel:()=>l,time:()=>f,url:()=>p}),i.prototype.entries=function(){return this.tree.entries()},i.prototype.get=function(t){return this.tree.get(t)},i.prototype.getAll=function(t){if(!this.has(t))return[];const e=t=>{const i=[];if(t instanceof Map)for(const[s,o]of t)i.push(...e(o));else""!==t&&i.push(t);return i};return e(this.get(t))},i.prototype.has=function(t){return this.tree.has(t)},i.prototype.keys=function(){return this.tree.keys()},i.prototype.values=function(){return this.tree.values()};const s=i;function o({rule:t,field:e,error:i,...s}){this.rule=t,this.field=e,this.error=i,this.properties=s}const n=function(t){if(0===t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t)).length)throw new o(this)},a=function(t){if(0===t.getAll(this.field).length)throw new o(this)},r=function(t){if(!t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t)).every((t=>{if(t.length<6)return!1;if(-1===t.indexOf("@",1))return!1;if(t.indexOf("@")!==t.lastIndexOf("@"))return!1;const[e,i]=t.split("@",2);if(!/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/.test(e))return!1;if(/\.{2,}/.test(i))return!1;if(/(?:^[ \t\n\r\0\x0B.]|[ \t\n\r\0\x0B.]$)/.test(i))return!1;const s=i.split(".");if(s.length<2)return!1;for(const t of s){if(/(?:^[ \t\n\r\0\x0B-]|[ \t\n\r\0\x0B-]$)/.test(t))return!1;if(!/^[a-z0-9-]+$/i.test(t))return!1}return!0})))throw new o(this)},p=function(t){const e=t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t));if(!e.every((t=>{try{return(t=>-1!==["http","https","ftp","ftps","mailto","news","irc","irc6","ircs","gopher","nntp","feed","telnet","mms","rtsp","sms","svn","tel","fax","xmpp","webcal","urn"].indexOf(t))(new URL(t).protocol.replace(/:$/,""))}catch{return!1}})))throw new o(this)},l=function(t){if(!t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t)).every((t=>(((t=(t=t.replace(/[#*].*$/,"")).replaceAll(/[()/.*#\s-]+/g,"")).startsWith("+")||t.startsWith("00"))&&(t=`+${t.replace(/^[+0]+/,"")}`),!!/^[+]?[0-9]+$/.test(t)&&6t.trim())).filter((t=>""!==t)).every((t=>!!/^[-]?[0-9]+(?:[eE][+-]?[0-9]+)?$/.test(t)||!!/^[-]?(?:[0-9]+)?[.][0-9]+(?:[eE][+-]?[0-9]+)?$/.test(t))))throw new o(this)},m=function(t){if(!t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t)).every((t=>{if(!/^[0-9]{4,}-[0-9]{2}-[0-9]{2}$/.test(t))return!1;const e=new Date(t);return!Number.isNaN(e.valueOf())})))throw new o(this)},f=function(t){if(!t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t)).every((t=>{const e=t.match(/^([0-9]{2})\:([0-9]{2})(?:\:([0-9]{2}))?$/);if(!e)return!1;const i=parseInt(e[1]),s=parseInt(e[2]),o=e[3]?parseInt(e[3]):0;return 0<=i&&i<=23&&0<=s&&s<=59&&0<=o&&o<=59})))throw new o(this)},d=function(t){if(!t.getAll(this.field).every((t=>t instanceof File&&this.accept?.some((e=>/^\.[a-z0-9]+$/i.test(e)?t.name.toLowerCase().endsWith(e.toLowerCase()):(t=>{const e=[],i=t.match(/^(?[a-z]+)\/(?[*]|[a-z0-9.+-]+)$/i);if(i){const t=i.groups.toplevel.toLowerCase(),s=i.groups.sub.toLowerCase();for(const[o,n]of(()=>{const t=new Map;return t.set("jpg|jpeg|jpe","image/jpeg"),t.set("gif","image/gif"),t.set("png","image/png"),t.set("bmp","image/bmp"),t.set("tiff|tif","image/tiff"),t.set("webp","image/webp"),t.set("ico","image/x-icon"),t.set("heic","image/heic"),t.set("asf|asx","video/x-ms-asf"),t.set("wmv","video/x-ms-wmv"),t.set("wmx","video/x-ms-wmx"),t.set("wm","video/x-ms-wm"),t.set("avi","video/avi"),t.set("divx","video/divx"),t.set("flv","video/x-flv"),t.set("mov|qt","video/quicktime"),t.set("mpeg|mpg|mpe","video/mpeg"),t.set("mp4|m4v","video/mp4"),t.set("ogv","video/ogg"),t.set("webm","video/webm"),t.set("mkv","video/x-matroska"),t.set("3gp|3gpp","video/3gpp"),t.set("3g2|3gp2","video/3gpp2"),t.set("txt|asc|c|cc|h|srt","text/plain"),t.set("csv","text/csv"),t.set("tsv","text/tab-separated-values"),t.set("ics","text/calendar"),t.set("rtx","text/richtext"),t.set("css","text/css"),t.set("htm|html","text/html"),t.set("vtt","text/vtt"),t.set("dfxp","application/ttaf+xml"),t.set("mp3|m4a|m4b","audio/mpeg"),t.set("aac","audio/aac"),t.set("ra|ram","audio/x-realaudio"),t.set("wav","audio/wav"),t.set("ogg|oga","audio/ogg"),t.set("flac","audio/flac"),t.set("mid|midi","audio/midi"),t.set("wma","audio/x-ms-wma"),t.set("wax","audio/x-ms-wax"),t.set("mka","audio/x-matroska"),t.set("rtf","application/rtf"),t.set("js","application/javascript"),t.set("pdf","application/pdf"),t.set("swf","application/x-shockwave-flash"),t.set("class","application/java"),t.set("tar","application/x-tar"),t.set("zip","application/zip"),t.set("gz|gzip","application/x-gzip"),t.set("rar","application/rar"),t.set("7z","application/x-7z-compressed"),t.set("exe","application/x-msdownload"),t.set("psd","application/octet-stream"),t.set("xcf","application/octet-stream"),t.set("doc","application/msword"),t.set("pot|pps|ppt","application/vnd.ms-powerpoint"),t.set("wri","application/vnd.ms-write"),t.set("xla|xls|xlt|xlw","application/vnd.ms-excel"),t.set("mdb","application/vnd.ms-access"),t.set("mpp","application/vnd.ms-project"),t.set("docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"),t.set("docm","application/vnd.ms-word.document.macroEnabled.12"),t.set("dotx","application/vnd.openxmlformats-officedocument.wordprocessingml.template"),t.set("dotm","application/vnd.ms-word.template.macroEnabled.12"),t.set("xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),t.set("xlsm","application/vnd.ms-excel.sheet.macroEnabled.12"),t.set("xlsb","application/vnd.ms-excel.sheet.binary.macroEnabled.12"),t.set("xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"),t.set("xltm","application/vnd.ms-excel.template.macroEnabled.12"),t.set("xlam","application/vnd.ms-excel.addin.macroEnabled.12"),t.set("pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"),t.set("pptm","application/vnd.ms-powerpoint.presentation.macroEnabled.12"),t.set("ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow"),t.set("ppsm","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"),t.set("potx","application/vnd.openxmlformats-officedocument.presentationml.template"),t.set("potm","application/vnd.ms-powerpoint.template.macroEnabled.12"),t.set("ppam","application/vnd.ms-powerpoint.addin.macroEnabled.12"),t.set("sldx","application/vnd.openxmlformats-officedocument.presentationml.slide"),t.set("sldm","application/vnd.ms-powerpoint.slide.macroEnabled.12"),t.set("onetoc|onetoc2|onetmp|onepkg","application/onenote"),t.set("oxps","application/oxps"),t.set("xps","application/vnd.ms-xpsdocument"),t.set("odt","application/vnd.oasis.opendocument.text"),t.set("odp","application/vnd.oasis.opendocument.presentation"),t.set("ods","application/vnd.oasis.opendocument.spreadsheet"),t.set("odg","application/vnd.oasis.opendocument.graphics"),t.set("odc","application/vnd.oasis.opendocument.chart"),t.set("odb","application/vnd.oasis.opendocument.database"),t.set("odf","application/vnd.oasis.opendocument.formula"),t.set("wp|wpd","application/wordperfect"),t.set("key","application/vnd.apple.keynote"),t.set("numbers","application/vnd.apple.numbers"),t.set("pages","application/vnd.apple.pages"),t})())("*"===s&&n.startsWith(t+"/")||n===i[0])&&e.push(...o.split("|"))}return e})(e).some((e=>(e="."+e.trim(),t.name.toLowerCase().endsWith(e.toLowerCase())))))))))throw new o(this)},h=function(t){if(!t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t)).every((t=>this.accept?.some((e=>t===String(e))))))throw new o(this)},u=function(t){if(!t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t)).every((t=>{const e=0===(i=new Date(t).getDay())?7:i;var i;return this.accept?.some((t=>e===parseInt(t)))})))throw new o(this)},w=function(t){if(t.getAll(this.field).map((t=>t.trim())).filter((t=>""!==t)).lengtht.trim())).filter((t=>""!==t));if(parseInt(this.threshold)t.trim())).filter((t=>""!==t));let i=0;if(e.forEach((t=>{"string"==typeof t&&(i+=t.length)})),0!==i&&it.trim())).filter((t=>""!==t));let i=0;if(e.forEach((t=>{"string"==typeof t&&(i+=t.length)})),parseInt(this.threshold)t.trim())).filter((t=>""!==t)).every((t=>!(parseFloat(t)t.trim())).filter((t=>""!==t)).every((t=>!(parseFloat(this.threshold)t.trim())).filter((t=>""!==t)).every((t=>!(/^[0-9]{4,}-[0-9]{2}-[0-9]{2}$/.test(t)&&/^[0-9]{4,}-[0-9]{2}-[0-9]{2}$/.test(this.threshold)&&tt.trim())).filter((t=>""!==t)).every((t=>!(/^[0-9]{4,}-[0-9]{2}-[0-9]{2}$/.test(t)&&/^[0-9]{4,}-[0-9]{2}-[0-9]{2}$/.test(this.threshold)&&this.threshold{t instanceof File&&(i+=t.size)})),i{t instanceof File&&(i+=t.size)})),parseInt(this.threshold)t.trim())).filter((t=>""!==t)),i=parseFloat(this.base),s=parseFloat(this.interval);if(!(0{const e=(parseFloat(t)-i)%s;return"0.000000"===Math.abs(e).toFixed(6)||"0.000000"===Math.abs(e-s).toFixed(6)})))throw new o(this)},O=({ruleObj:t,options:i})=>{const{rule:s,...o}=t;return"function"==typeof e[s]&&("function"!=typeof e[s].matches||e[s].matches(o,i))},E=({ruleObj:t,formDataTree:i,options:s})=>{const{rule:o}=t;e[o].call(t,i,s)},k=[],F=t=>[...k].reduce(((t,e)=>i=>e(i,t)),t),D=function(t,e={}){const i=(this.rules??[]).filter((t=>O({ruleObj:t,options:e}))),s=F(E);if(!i.every((i=>{try{s({ruleObj:i,formDataTree:t,options:e})}catch(t){if(!(t instanceof o))throw t;if(void 0!==t.error)throw t;return!1}return!0})))throw new o(this)},M=function(t,e={}){const i=(this.rules??[]).filter((t=>O({ruleObj:t,options:e}))),s=F(E);if(!i.some((i=>{try{s({ruleObj:i,formDataTree:t,options:e})}catch(t){if(!(t instanceof o))throw t;return!1}return!0})))throw new o(this)};var L;window.swv={validators:e,validate:(t,e,i={})=>{const n=(t.rules??[]).filter((t=>O({ruleObj:t,options:i})));if(!n.length)return new Map;const a=F(E),r=new s(e),p=n.reduce(((t,e)=>{try{a({ruleObj:e,formDataTree:r,options:i})}catch(e){if(!(e instanceof o))throw e;if(void 0!==e.field&&!t.has(e.field)&&void 0!==e.error)return t.set(e.field,e)}return t}),new Map);for(const t of r.keys())p.has(t)||p.set(t,{validInputs:r.getAll(t)});return p},use:t=>{k.push(t)},...null!==(L=window.swv)&&void 0!==L?L:{}}})();includes/swv/php/rules/all.php000060400000001114147177201300012366 0ustar00rules() as $rule ) { if ( $rule->matches( $context ) ) { $result = $rule->validate( $context ); if ( is_wp_error( $result ) ) { if ( $result->get_error_message() ) { return $result; } else { return $this->create_error(); } } } } return true; } } includes/swv/php/rules/any.php000060400000000767147177201300012422 0ustar00rules() as $rule ) { if ( $rule->matches( $context ) ) { $result = $rule->validate( $context ); if ( ! is_wp_error( $result ) ) { return true; } } } return $this->create_error(); } } includes/swv/php/rules/date.php000060400000001154147177201300012537 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_date( $i ) ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/dayofweek.php000060400000002026147177201300013577 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $acceptable_values = (array) $this->get_property( 'accept' ); $acceptable_values = array_map( 'intval', $acceptable_values ); $acceptable_values = array_filter( $acceptable_values ); $acceptable_values = array_unique( $acceptable_values ); foreach ( $input as $i ) { if ( wpcf7_is_date( $i ) ) { $datetime = date_create_immutable( $i, wp_timezone() ); $dow = (int) $datetime->format( 'N' ); if ( ! in_array( $dow, $acceptable_values, true ) ) { return $this->create_error(); } } } return true; } } includes/swv/php/rules/email.php000060400000001157147177201300012714 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_email( $i ) ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/enum.php000060400000001671147177201300012572 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $acceptable_values = (array) $this->get_property( 'accept' ); $acceptable_values = array_map( 'strval', $acceptable_values ); $acceptable_values = array_unique( $acceptable_values ); $acceptable_values = array_filter( $acceptable_values, static function ( $val ) { return '' !== $val; } ); foreach ( $input as $i ) { if ( ! in_array( $i, $acceptable_values, true ) ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/file.php000060400000002437147177201300012546 0ustar00get_property( 'field' ); $input = $_FILES[$field]['name'] ?? ''; $input = wpcf7_array_flatten( $input ); $input = wpcf7_exclude_blank( $input ); $acceptable_filetypes = array(); foreach ( (array) $this->get_property( 'accept' ) as $accept ) { if ( preg_match( '/^\.[a-z0-9]+$/i', $accept ) ) { $acceptable_filetypes[] = strtolower( $accept ); } else { foreach ( wpcf7_convert_mime_to_ext( $accept ) as $ext ) { $acceptable_filetypes[] = sprintf( '.%s', strtolower( trim( $ext, ' .' ) ) ); } } } $acceptable_filetypes = array_unique( $acceptable_filetypes ); foreach ( $input as $i ) { $last_period_pos = strrpos( $i, '.' ); if ( false === $last_period_pos ) { // no period return $this->create_error(); } $suffix = strtolower( substr( $i, $last_period_pos ) ); if ( ! in_array( $suffix, $acceptable_filetypes, true ) ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/maxdate.php000060400000001366147177201300013252 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_date( $threshold ) ) { return true; } foreach ( $input as $i ) { if ( wpcf7_is_date( $i ) and $threshold < $i ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/maxfilesize.php000060400000001305147177201300014140 0ustar00get_property( 'field' ); $input = $_FILES[$field]['size'] ?? ''; $input = wpcf7_array_flatten( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return true; } $threshold = $this->get_property( 'threshold' ); if ( $threshold < array_sum( $input ) ) { return $this->create_error(); } return true; } } includes/swv/php/rules/maxitems.php000060400000001321147177201300013445 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_number( $threshold ) ) { return true; } if ( (int) $threshold < count( $input ) ) { return $this->create_error(); } return true; } } includes/swv/php/rules/maxlength.php000060400000001442147177201300013611 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return true; } $total = 0; foreach ( $input as $i ) { $total += wpcf7_count_code_units( $i ); } $threshold = (int) $this->get_property( 'threshold' ); if ( $total <= $threshold ) { return true; } else { return $this->create_error(); } } } includes/swv/php/rules/maxnumber.php000060400000001416147177201300013621 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_number( $threshold ) ) { return true; } foreach ( $input as $i ) { if ( wpcf7_is_number( $i ) and (float) $threshold < (float) $i ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/mindate.php000060400000001366147177201300013250 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_date( $threshold ) ) { return true; } foreach ( $input as $i ) { if ( wpcf7_is_date( $i ) and $i < $threshold ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/minfilesize.php000060400000001305147177201300014136 0ustar00get_property( 'field' ); $input = $_FILES[$field]['size'] ?? ''; $input = wpcf7_array_flatten( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return true; } $threshold = $this->get_property( 'threshold' ); if ( array_sum( $input ) < $threshold ) { return $this->create_error(); } return true; } } includes/swv/php/rules/minitems.php000060400000001321147177201300013443 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_number( $threshold ) ) { return true; } if ( count( $input ) < (int) $threshold ) { return $this->create_error(); } return true; } } includes/swv/php/rules/minlength.php000060400000001442147177201300013607 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return true; } $total = 0; foreach ( $input as $i ) { $total += wpcf7_count_code_units( $i ); } $threshold = (int) $this->get_property( 'threshold' ); if ( $threshold <= $total ) { return true; } else { return $this->create_error(); } } } includes/swv/php/rules/minnumber.php000060400000001416147177201300013617 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $threshold = $this->get_property( 'threshold' ); if ( ! wpcf7_is_number( $threshold ) ) { return true; } foreach ( $input as $i ) { if ( wpcf7_is_number( $i ) and (float) $i < (float) $threshold ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/number.php000060400000001162147177201300013111 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_number( $i ) ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/requiredfile.php000060400000001126147177201300014301 0ustar00get_property( 'field' ); $input = $_FILES[$field]['tmp_name'] ?? ''; $input = wpcf7_array_flatten( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return $this->create_error(); } return true; } } includes/swv/php/rules/required.php000060400000001112147177201300013434 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); if ( empty( $input ) ) { return $this->create_error(); } return true; } } includes/swv/php/rules/stepnumber.php000060400000001671147177201300014012 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); $base = floatval( $this->get_property( 'base' ) ); $interval = floatval( $this->get_property( 'interval' ) ); if ( ! ( 0 < $interval ) ) { return true; } foreach ( $input as $i ) { $remainder = fmod( floatval( $i ) - $base, $interval ); if ( 0.0 === round( abs( $remainder ), 6 ) or 0.0 === round( abs( $remainder - $interval ), 6 ) ) { continue; } return $this->create_error(); } return true; } } includes/swv/php/rules/tel.php000060400000001151147177201300012403 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_tel( $i ) ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/time.php000060400000001154147177201300012560 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_time( $i ) ) { return $this->create_error(); } } return true; } } includes/swv/php/rules/url.php000060400000001151147177201300012421 0ustar00get_default_input(); $input = wpcf7_array_flatten( $input ); $input = wpcf7_strip_whitespaces( $input ); $input = wpcf7_exclude_blank( $input ); foreach ( $input as $i ) { if ( ! wpcf7_is_url( $i ) ) { return $this->create_error(); } } return true; } } includes/swv/php/abstract-rules.php000060400000006407147177201300013431 0ustar00properties = wp_parse_args( $properties, array() ); } /** * Returns true if this rule matches the given context. * * @param array $context Context. */ public function matches( $context ) { $field = $this->get_property( 'field' ); if ( ! empty( $context['field'] ) ) { if ( $field and ! in_array( $field, (array) $context['field'], true ) ) { return false; } } return true; } /** * Validates with this rule's logic. * * @param array $context Context. */ public function validate( $context ) { return true; } /** * Converts the properties to an array. * * @return array Array of properties. */ public function to_array() { $properties = (array) $this->properties; if ( defined( 'static::rule_name' ) and static::rule_name ) { $properties = array( 'rule' => static::rule_name ) + $properties; } return $properties; } /** * Returns the property value specified by the given property name. * * @param string $name Property name. * @return mixed Property value. */ public function get_property( $name ) { if ( isset( $this->properties[$name] ) ) { return $this->properties[$name]; } } /** * Returns the default user input value from $_POST. * * @return mixed Default user input value. */ public function get_default_input() { $field = $this->get_property( 'field' ); if ( isset( $_POST[$field] ) ) { return wp_unslash( $_POST[$field] ); } return ''; } /** * Creates an error object. Returns false if the error property is omitted. */ protected function create_error() { $error_code = defined( 'static::rule_name' ) ? sprintf( 'swv_%s', static::rule_name ) : 'swv'; return new WP_Error( $error_code, (string) $this->get_property( 'error' ), $this ); } } /** * The base class of SWV composite rules. */ abstract class CompositeRule extends Rule { protected $rules = array(); /** * Adds a sub-rule to this composite rule. * * @param Rule $rule Sub-rule to be added. */ public function add_rule( $rule ) { if ( $rule instanceof Rule ) { $this->rules[] = $rule; } } /** * Returns an iterator of sub-rules. */ public function rules() { foreach ( $this->rules as $rule ) { yield $rule; } } /** * Returns true if this rule matches the given context. * * @param array $context Context. */ public function matches( $context ) { return true; } /** * Validates with this rule's logic. * * @param array $context Context. */ public function validate( $context ) { foreach ( $this->rules() as $rule ) { if ( $rule->matches( $context ) ) { $result = $rule->validate( $context ); if ( is_wp_error( $result ) ) { return $result; } } } return true; } /** * Converts the properties to an array. * * @return array Array of properties. */ public function to_array() { $rules_arrays = array_map( static function ( $rule ) { return $rule->to_array(); }, $this->rules ); return array_merge( parent::to_array(), array( 'rules' => $rules_arrays, ) ); } } includes/swv/schema-holder.php000060400000001726147177201300012421 0ustar00schema ) ) { return $this->schema; } $schema = new WPCF7_SWV_Schema( array( 'locale' => isset( $this->locale ) ? $this->locale : '', ) ); do_action( 'wpcf7_swv_create_schema', $schema, $this ); return $this->schema = $schema; } /** * Validates form inputs based on the schema and given context. */ public function validate_schema( $context, WPCF7_Validation $validity ) { $schema = $this->get_schema(); foreach ( $schema->validate( $context ) as $result ) { if ( is_wp_error( $result ) ) { $rule = $result->get_error_data(); $field = $rule->get_property( 'field' ); if ( isset( $field ) and $validity->is_valid( $field ) ) { $validity->invalidate( $field, $result ); } } } } } includes/swv/script-loader.php000060400000001024147177201300012445 0ustar00 array(), 'version' => WPCF7_VERSION, ) ); wp_register_script( 'swv', wpcf7_plugin_url( 'includes/swv/js/index.js' ), $assets['dependencies'], $assets['version'], array( 'in_footer' => true ) ); }, 10, 0 ); includes/swv/swv.php000060400000010224147177201300010516 0ustar00 'Contactable\SWV\RequiredRule', 'requiredfile' => 'Contactable\SWV\RequiredFileRule', 'email' => 'Contactable\SWV\EmailRule', 'url' => 'Contactable\SWV\URLRule', 'tel' => 'Contactable\SWV\TelRule', 'number' => 'Contactable\SWV\NumberRule', 'date' => 'Contactable\SWV\DateRule', 'time' => 'Contactable\SWV\TimeRule', 'file' => 'Contactable\SWV\FileRule', 'enum' => 'Contactable\SWV\EnumRule', 'dayofweek' => 'Contactable\SWV\DayofweekRule', 'minitems' => 'Contactable\SWV\MinItemsRule', 'maxitems' => 'Contactable\SWV\MaxItemsRule', 'minlength' => 'Contactable\SWV\MinLengthRule', 'maxlength' => 'Contactable\SWV\MaxLengthRule', 'minnumber' => 'Contactable\SWV\MinNumberRule', 'maxnumber' => 'Contactable\SWV\MaxNumberRule', 'mindate' => 'Contactable\SWV\MinDateRule', 'maxdate' => 'Contactable\SWV\MaxDateRule', 'minfilesize' => 'Contactable\SWV\MinFileSizeRule', 'maxfilesize' => 'Contactable\SWV\MaxFileSizeRule', 'stepnumber' => 'Contactable\SWV\StepNumberRule', 'all' => 'Contactable\SWV\AllRule', 'any' => 'Contactable\SWV\AnyRule', ); return apply_filters( 'wpcf7_swv_available_rules', $rules ); } add_action( 'wpcf7_init', 'wpcf7_swv_load_rules', 10, 0 ); /** * Loads SWV fules. */ function wpcf7_swv_load_rules() { $rules = wpcf7_swv_available_rules(); foreach ( array_keys( $rules ) as $rule ) { $file = sprintf( '%s.php', $rule ); $path = path_join( WPCF7_PLUGIN_DIR . '/includes/swv/php/rules', $file ); if ( file_exists( $path ) ) { include_once $path; } } } /** * Creates an SWV rule object. * * @param string $rule_name Rule name. * @param string|array $properties Optional. Rule properties. * @return \Contactable\SWV\Rule|null The rule object, or null if it failed. */ function wpcf7_swv_create_rule( $rule_name, $properties = '' ) { $rules = wpcf7_swv_available_rules(); if ( isset( $rules[$rule_name] ) ) { return new $rules[$rule_name]( $properties ); } } /** * Returns an associative array of JSON Schema for Contact Form 7 SWV. */ function wpcf7_swv_get_meta_schema() { return array( '$schema' => 'https://json-schema.org/draft/2020-12/schema', 'title' => 'Contact Form 7 SWV', 'description' => 'Contact Form 7 SWV meta-schema', 'type' => 'object', 'properties' => array( 'version' => array( 'type' => 'string', ), 'locale' => array( 'type' => 'string', ), 'rules' => array( 'type' => 'array', 'items' => array( 'type' => 'object', 'properties' => array( 'rule' => array( 'type' => 'string', 'enum' => array_keys( wpcf7_swv_available_rules() ), ), 'field' => array( 'type' => 'string', 'pattern' => '^[A-Za-z][-A-Za-z0-9_:]*$', ), 'error' => array( 'type' => 'string', ), 'accept' => array( 'type' => 'array', 'items' => array( 'type' => 'string', ), ), 'base' => array( 'type' => 'string', ), 'interval' => array( 'type' => 'number', 'minimum' => 0, ), 'threshold' => array( 'type' => 'string', ), ), 'required' => array( 'rule' ), ), ), ), ); } /** * The schema class as a composite rule. */ class WPCF7_SWV_Schema extends \Contactable\SWV\CompositeRule { /** * The human-readable version of the schema. */ const version = 'Contact Form 7 SWV Schema 2024-10'; /** * Constructor. */ public function __construct( $properties = '' ) { $this->properties = wp_parse_args( $properties, array( 'version' => self::version, ) ); } /** * Validates with this schema. * * @param array $context Context. */ public function validate( $context ) { foreach ( $this->rules() as $rule ) { if ( $rule->matches( $context ) ) { yield $rule->validate( $context ); } } } } includes/capabilities.php000060400000001502147177201300011510 0ustar00 WPCF7_ADMIN_READ_WRITE_CAPABILITY, 'wpcf7_edit_contact_forms' => WPCF7_ADMIN_READ_WRITE_CAPABILITY, 'wpcf7_read_contact_form' => WPCF7_ADMIN_READ_CAPABILITY, 'wpcf7_read_contact_forms' => WPCF7_ADMIN_READ_CAPABILITY, 'wpcf7_delete_contact_form' => WPCF7_ADMIN_READ_WRITE_CAPABILITY, 'wpcf7_delete_contact_forms' => WPCF7_ADMIN_READ_WRITE_CAPABILITY, 'wpcf7_manage_integration' => 'manage_options', 'wpcf7_submit' => 'read', ); $meta_caps = apply_filters( 'wpcf7_map_meta_cap', $meta_caps ); $caps = array_diff( $caps, array_keys( $meta_caps ) ); if ( isset( $meta_caps[$cap] ) ) { $caps[] = $meta_caps[$cap]; } return $caps; } includes/contact-form-functions.php000060400000024401147177201300013464 0ustar00postmeta WHERE meta_key = '_old_cf7_unit_id'" . $wpdb->prepare( " AND meta_value = %d", $old_id ); if ( $new_id = $wpdb->get_var( $q ) ) { return wpcf7_contact_form( $new_id ); } } /** * Searches for a contact form by a hash string. * * @param string $hash Part of a hash string. * @return WPCF7_ContactForm Contact form object. */ function wpcf7_get_contact_form_by_hash( $hash ) { global $wpdb; $hash = trim( $hash ); if ( strlen( $hash ) < 7 ) { return null; } $like = $wpdb->esc_like( $hash ) . '%'; $q = "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_hash'" . $wpdb->prepare( " AND meta_value LIKE %s", $like ); if ( $post_id = $wpdb->get_var( $q ) ) { return wpcf7_contact_form( $post_id ); } } /** * Searches for a contact form by title. * * @param string $title Title of contact form. * @return WPCF7_ContactForm|null Contact form object if found, null otherwise. */ function wpcf7_get_contact_form_by_title( $title ) { if ( ! is_string( $title ) or '' === $title ) { return null; } $contact_forms = WPCF7_ContactForm::find( array( 'title' => $title, 'posts_per_page' => 1, ) ); if ( $contact_forms ) { return wpcf7_contact_form( reset( $contact_forms ) ); } } /** * Wrapper function of WPCF7_ContactForm::get_current(). * * @return WPCF7_ContactForm Contact form object. */ function wpcf7_get_current_contact_form() { if ( $current = WPCF7_ContactForm::get_current() ) { return $current; } } /** * Returns true if it is in the state that a non-Ajax submission is accepted. */ function wpcf7_is_posted() { if ( ! $contact_form = wpcf7_get_current_contact_form() ) { return false; } return $contact_form->is_posted(); } /** * Retrieves the user input value through a non-Ajax submission. * * @param string $name Name of form control. * @param string $default_value Optional default value. * @return string The user input value through the form-control. */ function wpcf7_get_hangover( $name, $default_value = null ) { if ( ! wpcf7_is_posted() ) { return $default_value; } $submission = WPCF7_Submission::get_instance(); if ( ! $submission or $submission->is( 'mail_sent' ) ) { return $default_value; } return isset( $_POST[$name] ) ? wp_unslash( $_POST[$name] ) : $default_value; } /** * Retrieves an HTML snippet of validation error on the given form control. * * @param string $name Name of form control. * @return string Validation error message in a form of HTML snippet. */ function wpcf7_get_validation_error( $name ) { if ( ! $contact_form = wpcf7_get_current_contact_form() ) { return ''; } return $contact_form->validation_error( $name ); } /** * Returns a reference key to a validation error message. * * @param string $name Name of form control. * @param string $unit_tag Optional. Unit tag of the contact form. * @return string Reference key code. */ function wpcf7_get_validation_error_reference( $name, $unit_tag = '' ) { if ( '' === $unit_tag ) { $contact_form = wpcf7_get_current_contact_form(); if ( $contact_form and $contact_form->validation_error( $name ) ) { $unit_tag = $contact_form->unit_tag(); } else { return null; } } return preg_replace( '/[^0-9a-z_-]+/i', '', sprintf( '%1$s-ve-%2$s', $unit_tag, $name ) ); } /** * Retrieves a message for the given status. */ function wpcf7_get_message( $status ) { if ( ! $contact_form = wpcf7_get_current_contact_form() ) { return ''; } return $contact_form->message( $status ); } /** * Returns a class names list for a form-tag of the specified type. * * @param string $type Form-tag type. * @param string $default_classes Optional default classes. * @return string Whitespace-separated list of class names. */ function wpcf7_form_controls_class( $type, $default_classes = '' ) { $type = trim( $type ); if ( is_string( $default_classes ) ) { $default_classes = explode( ' ', $default_classes ); } $classes = array( 'wpcf7-form-control', sprintf( 'wpcf7-%s', rtrim( $type, '*' ) ), ); if ( str_ends_with( $type, '*' ) ) { $classes[] = 'wpcf7-validates-as-required'; } $classes = array_merge( $classes, $default_classes ); $classes = array_filter( array_unique( $classes ) ); return implode( ' ', $classes ); } /** * Callback function for the contact-form-7 shortcode. */ function wpcf7_contact_form_tag_func( $atts, $content = null, $code = '' ) { if ( is_feed() ) { return '[contact-form-7]'; } if ( 'contact-form-7' === $code ) { $atts = shortcode_atts( array( 'id' => '', 'title' => '', 'html_id' => '', 'html_name' => '', 'html_title' => '', 'html_class' => '', 'output' => 'form', ), $atts, 'wpcf7' ); $id = trim( $atts['id'] ); $title = trim( $atts['title'] ); $contact_form = wpcf7_get_contact_form_by_hash( $id ); if ( ! $contact_form ) { $contact_form = wpcf7_contact_form( $id ); } if ( ! $contact_form ) { $contact_form = wpcf7_get_contact_form_by_title( $title ); } } else { if ( is_string( $atts ) ) { $atts = explode( ' ', $atts, 2 ); } $id = (int) array_shift( $atts ); $contact_form = wpcf7_get_contact_form_by_old_id( $id ); } if ( ! $contact_form ) { return sprintf( '

%1$s %2$s

', esc_html( __( 'Error:', 'contact-form-7' ) ), esc_html( __( "Contact form not found.", 'contact-form-7' ) ) ); } $callback = static function ( $contact_form, $atts ) { return $contact_form->form_html( $atts ); }; $output = wpcf7_switch_locale( $contact_form->locale(), $callback, $contact_form, $atts ); do_action( 'wpcf7_shortcode_callback', $contact_form, $atts ); return $output; } /** * Saves the contact form data. */ function wpcf7_save_contact_form( $data = '', $context = 'save' ) { $data = wp_parse_args( $data, array( 'id' => -1, 'title' => null, 'locale' => null, 'form' => null, 'mail' => null, 'mail_2' => null, 'messages' => null, 'additional_settings' => null, ) ); $data = wp_unslash( $data ); $data['id'] = (int) $data['id']; if ( -1 == $data['id'] ) { $contact_form = WPCF7_ContactForm::get_template(); } else { $contact_form = wpcf7_contact_form( $data['id'] ); } if ( empty( $contact_form ) ) { return false; } if ( null !== $data['title'] ) { $contact_form->set_title( $data['title'] ); } if ( null !== $data['locale'] ) { $contact_form->set_locale( $data['locale'] ); } $properties = array(); if ( null !== $data['form'] ) { $properties['form'] = wpcf7_sanitize_form( $data['form'] ); } if ( null !== $data['mail'] ) { $properties['mail'] = wpcf7_sanitize_mail( $data['mail'] ); $properties['mail']['active'] = true; } if ( null !== $data['mail_2'] ) { $properties['mail_2'] = wpcf7_sanitize_mail( $data['mail_2'] ); } if ( null !== $data['messages'] ) { $properties['messages'] = wpcf7_sanitize_messages( $data['messages'] ); } if ( null !== $data['additional_settings'] ) { $properties['additional_settings'] = wpcf7_sanitize_additional_settings( $data['additional_settings'] ); } $contact_form->set_properties( $properties ); do_action( 'wpcf7_save_contact_form', $contact_form, $data, $context ); if ( 'save' == $context ) { $contact_form->save(); } return $contact_form; } /** * Sanitizes the form property data. */ function wpcf7_sanitize_form( $input, $default_template = '' ) { if ( null === $input ) { return $default_template; } $output = trim( $input ); if ( ! current_user_can( 'unfiltered_html' ) ) { $output = wpcf7_kses( $output, 'form' ); } return $output; } /** * Sanitizes the mail property data. */ function wpcf7_sanitize_mail( $input, $defaults = array() ) { $input = wp_parse_args( $input, array( 'active' => false, 'subject' => '', 'sender' => '', 'recipient' => '', 'body' => '', 'additional_headers' => '', 'attachments' => '', 'use_html' => false, 'exclude_blank' => false, ) ); $input = wp_parse_args( $input, $defaults ); $output = array(); $output['active'] = (bool) $input['active']; $output['subject'] = trim( $input['subject'] ); $output['sender'] = trim( $input['sender'] ); $output['recipient'] = trim( $input['recipient'] ); $output['body'] = trim( $input['body'] ); if ( ! current_user_can( 'unfiltered_html' ) ) { $output['body'] = wpcf7_kses( $output['body'], 'mail' ); } $output['additional_headers'] = ''; $headers = str_replace( "\r\n", "\n", $input['additional_headers'] ); $headers = explode( "\n", $headers ); foreach ( $headers as $header ) { $header = trim( $header ); if ( '' !== $header ) { $output['additional_headers'] .= $header . "\n"; } } $output['additional_headers'] = trim( $output['additional_headers'] ); $output['attachments'] = trim( $input['attachments'] ); $output['use_html'] = (bool) $input['use_html']; $output['exclude_blank'] = (bool) $input['exclude_blank']; return $output; } /** * Sanitizes the messages property data. */ function wpcf7_sanitize_messages( $input, $defaults = array() ) { $output = array(); foreach ( wpcf7_messages() as $key => $val ) { if ( isset( $input[$key] ) ) { $output[$key] = trim( $input[$key] ); } elseif ( isset( $defaults[$key] ) ) { $output[$key] = $defaults[$key]; } } return $output; } /** * Sanitizes the additional settings property data. */ function wpcf7_sanitize_additional_settings( $input, $default_template = '' ) { if ( null === $input ) { return $default_template; } $output = trim( $input ); return $output; } /** * Generates a random hash string for a contact form. * * @param int $post_id Post ID. * @return string SHA-1 hash. */ function wpcf7_generate_contact_form_hash( $post_id ) { return sha1( implode( '|', array( get_current_user_id(), $post_id, time(), home_url(), ) ) ); } includes/contact-form.php000060400000075126147177201300011470 0ustar00 array( 'name' => __( 'Contact Forms', 'contact-form-7' ), 'singular_name' => __( 'Contact Form', 'contact-form-7' ), ), 'rewrite' => false, 'query_var' => false, 'public' => false, 'capability_type' => 'page', 'capabilities' => array( 'edit_post' => 'wpcf7_edit_contact_form', 'read_post' => 'wpcf7_read_contact_form', 'delete_post' => 'wpcf7_delete_contact_form', 'edit_posts' => 'wpcf7_edit_contact_forms', 'edit_others_posts' => 'wpcf7_edit_contact_forms', 'publish_posts' => 'wpcf7_edit_contact_forms', 'read_private_posts' => 'wpcf7_edit_contact_forms', ), ) ); } /** * Retrieves contact form data that match given conditions. * * @param string|array $args Optional. Arguments to be passed to WP_Query. * @return array Array of WPCF7_ContactForm objects. */ public static function find( $args = '' ) { $defaults = array( 'post_status' => 'any', 'posts_per_page' => -1, 'offset' => 0, 'orderby' => 'ID', 'order' => 'ASC', ); $args = wp_parse_args( $args, $defaults ); $args['post_type'] = self::post_type; $q = new WP_Query(); $posts = $q->query( $args ); self::$found_items = $q->found_posts; $objs = array(); foreach ( (array) $posts as $post ) { $objs[] = new self( $post ); } return $objs; } /** * Returns a contact form data filled by default template contents. * * @param string|array $options Optional. Contact form options. * @return WPCF7_ContactForm A new contact form object. */ public static function get_template( $options = '' ) { $options = wp_parse_args( $options, array( 'locale' => null, 'title' => __( 'Untitled', 'contact-form-7' ), ) ); if ( ! isset( $options['locale'] ) ) { $options['locale'] = determine_locale(); } $callback = static function ( $options ) { $contact_form = new self; $contact_form->title = $options['title']; $contact_form->locale = $options['locale']; $properties = $contact_form->get_properties(); foreach ( $properties as $key => $value ) { $default_template = WPCF7_ContactFormTemplate::get_default( $key ); if ( isset( $default_template ) ) { $properties[$key] = $default_template; } } $contact_form->properties = $properties; return $contact_form; }; $contact_form = wpcf7_switch_locale( $options['locale'], $callback, $options ); self::$current = apply_filters( 'wpcf7_contact_form_default_pack', $contact_form, $options ); return self::$current; } /** * Creates a WPCF7_ContactForm object and sets it as the current instance. * * @param WPCF7_ContactForm|WP_Post|int $post Object or post ID. * @return WPCF7_ContactForm|null Contact form object. Null if unset. */ public static function get_instance( $post ) { $contact_form = null; if ( $post instanceof self ) { $contact_form = $post; } elseif ( ! empty( $post ) ) { $post = get_post( $post ); if ( isset( $post ) and self::post_type === get_post_type( $post ) ) { $contact_form = new self( $post ); } } return self::$current = $contact_form; } /** * Generates a "unit-tag" for the given contact form ID. * * @return string Unit-tag. */ private static function generate_unit_tag( $id = 0 ) { static $global_count = 0; $global_count += 1; if ( in_the_loop() ) { $unit_tag = sprintf( 'wpcf7-f%1$d-p%2$d-o%3$d', absint( $id ), get_the_ID(), $global_count ); } else { $unit_tag = sprintf( 'wpcf7-f%1$d-o%2$d', absint( $id ), $global_count ); } return $unit_tag; } /** * Constructor. */ private function __construct( $post = null ) { $post = get_post( $post ); if ( $post and self::post_type === get_post_type( $post ) ) { $this->id = $post->ID; $this->name = $post->post_name; $this->title = $post->post_title; $this->locale = get_post_meta( $post->ID, '_locale', true ); $this->hash = get_post_meta( $post->ID, '_hash', true ); $this->construct_properties( $post ); $this->upgrade(); } else { $this->construct_properties(); } do_action( 'wpcf7_contact_form', $this ); } /** * Magic method for property overloading. */ public function __get( $name ) { $message = __( '%1$s property of a WPCF7_ContactForm object is no longer accessible. Use %2$s method instead.', 'contact-form-7' ); if ( 'id' === $name ) { wp_trigger_error( '', sprintf( $message, 'id', 'id()' ), E_USER_DEPRECATED ); return $this->id; } elseif ( 'title' === $name ) { wp_trigger_error( '', sprintf( $message, 'title', 'title()' ), E_USER_DEPRECATED ); return $this->title; } elseif ( $prop = $this->prop( $name ) ) { wp_trigger_error( '', sprintf( $message, $name, 'prop(\'' . $name . '\')' ), E_USER_DEPRECATED ); return $prop; } } /** * Returns true if this contact form is not yet saved to the database. */ public function initial() { return empty( $this->id ); } /** * Constructs contact form properties. This is called only once * from the constructor. */ private function construct_properties( $post = null ) { $builtin_properties = array( 'form' => '', 'mail' => array(), 'mail_2' => array(), 'messages' => array(), 'additional_settings' => '', ); $properties = apply_filters( 'wpcf7_pre_construct_contact_form_properties', $builtin_properties, $this ); // Filtering out properties with invalid name $properties = array_filter( $properties, static function ( $key ) { $sanitized_key = sanitize_key( $key ); return $key === $sanitized_key; }, ARRAY_FILTER_USE_KEY ); foreach ( $properties as $name => $val ) { $prop = $this->retrieve_property( $name ); if ( isset( $prop ) ) { $properties[$name] = $prop; } } $this->properties = $properties; foreach ( $properties as $name => $val ) { $properties[$name] = apply_filters( "wpcf7_contact_form_property_{$name}", $val, $this ); } $this->properties = $properties; $properties = (array) apply_filters( 'wpcf7_contact_form_properties', $properties, $this ); $this->properties = $properties; } /** * Retrieves contact form property of the specified name from the database. * * @param string $name Property name. * @return array|string|null Property value. Null if property does not exist. */ private function retrieve_property( $name ) { $property = null; if ( ! $this->initial() ) { $post_id = $this->id; if ( metadata_exists( 'post', $post_id, '_' . $name ) ) { $property = get_post_meta( $post_id, '_' . $name, true ); } elseif ( metadata_exists( 'post', $post_id, $name ) ) { $property = get_post_meta( $post_id, $name, true ); } } return $property; } /** * Returns the value for the given property name. * * @param string $name Property name. * @return array|string|null Property value. Null if property does not exist. */ public function prop( $name ) { $props = $this->get_properties(); return isset( $props[$name] ) ? $props[$name] : null; } /** * Returns all the properties. * * @return array This contact form's properties. */ public function get_properties() { return (array) $this->properties; } /** * Updates properties. * * @param array $properties New properties. */ public function set_properties( $properties ) { $defaults = $this->get_properties(); $properties = wp_parse_args( $properties, $defaults ); $properties = array_intersect_key( $properties, $defaults ); $this->properties = $properties; } /** * Returns ID of this contact form. * * @return int The ID. */ public function id() { return $this->id; } /** * Returns unit-tag for this contact form. * * @return string Unit-tag. */ public function unit_tag() { return $this->unit_tag; } /** * Returns name (slug) of this contact form. * * @return string Name. */ public function name() { return $this->name; } /** * Returns title of this contact form. * * @return string Title. */ public function title() { return $this->title; } /** * Set a title for this contact form. * * @param string $title Title. */ public function set_title( $title ) { $title = strip_tags( $title ); $title = trim( $title ); if ( '' === $title ) { $title = __( 'Untitled', 'contact-form-7' ); } $this->title = $title; } /** * Returns the locale code of this contact form. * * @return string Locale code. Empty string if no valid locale is set. */ public function locale() { if ( wpcf7_is_valid_locale( $this->locale ) ) { return $this->locale; } else { return ''; } } /** * Sets a locale for this contact form. * * @param string $locale Locale code. */ public function set_locale( $locale ) { $locale = trim( $locale ); if ( wpcf7_is_valid_locale( $locale ) ) { $this->locale = $locale; } else { $this->locale = 'en_US'; } } /** * Retrieves the random hash string tied to this contact form. * * @param int $length Length of hash string. * @return string Hash string unique to this contact form. */ public function hash( $length = 7 ) { return substr( $this->hash, 0, absint( $length ) ); } /** * Returns the specified shortcode attribute value. * * @param string $name Shortcode attribute name. * @return string|null Attribute value. Null if the attribute does not exist. */ public function shortcode_attr( $name ) { if ( isset( $this->shortcode_atts[$name] ) ) { return (string) $this->shortcode_atts[$name]; } } /** * Returns true if this contact form is identical to the submitted one. */ public function is_posted() { if ( ! WPCF7_Submission::get_instance() ) { return false; } if ( empty( $_POST['_wpcf7_unit_tag'] ) ) { return false; } return $this->unit_tag() === $_POST['_wpcf7_unit_tag']; } /** * Generates HTML that represents a form. * * @param string|array $options Optional. Form options. * @return string HTML output. */ public function form_html( $options = '' ) { $options = wp_parse_args( $options, array( 'html_id' => '', 'html_name' => '', 'html_title' => '', 'html_class' => '', 'output' => 'form', ) ); $this->shortcode_atts = $options; if ( 'raw_form' == $options['output'] ) { return sprintf( '
%s
', esc_html( $this->prop( 'form' ) ) ); } if ( $this->is_true( 'subscribers_only' ) and ! current_user_can( 'wpcf7_submit', $this->id() ) ) { $notice = __( "This contact form is available only for logged in users.", 'contact-form-7' ); $notice = sprintf( '

%s

', esc_html( $notice ) ); return apply_filters( 'wpcf7_subscribers_only_notice', $notice, $this ); } $this->unit_tag = self::generate_unit_tag( $this->id ); $action_url = wpcf7_get_request_uri(); if ( $frag = strstr( $action_url, '#' ) ) { $action_url = substr( $action_url, 0, -strlen( $frag ) ); } $action_url .= '#' . $this->unit_tag(); $action_url = apply_filters( 'wpcf7_form_action_url', $action_url ); if ( str_starts_with( $action_url, '//' ) or ! str_starts_with( $action_url, '/' ) and ! str_starts_with( $action_url, home_url() ) ) { return sprintf( '

%1$s %2$s

', esc_html( __( 'Error:', 'contact-form-7' ) ), esc_html( __( "Invalid action URL is detected.", 'contact-form-7' ) ) ); } $lang_tag = str_replace( '_', '-', $this->locale ); if ( preg_match( '/^([a-z]+-[a-z]+)-/i', $lang_tag, $matches ) ) { $lang_tag = $matches[1]; } $html = "\n" . sprintf( '
', wpcf7_format_atts( array( 'class' => 'wpcf7 no-js', 'id' => $this->unit_tag(), ( get_option( 'html_type' ) == 'text/html' ) ? 'lang' : 'xml:lang' => $lang_tag, 'dir' => wpcf7_is_rtl( $this->locale ) ? 'rtl' : 'ltr', 'data-wpcf7-id' => $this->id(), ) ) ); $html .= "\n" . $this->screen_reader_response() . "\n"; $id_attr = apply_filters( 'wpcf7_form_id_attr', preg_replace( '/[^A-Za-z0-9:._-]/', '', $options['html_id'] ) ); $name_attr = apply_filters( 'wpcf7_form_name_attr', preg_replace( '/[^A-Za-z0-9:._-]/', '', $options['html_name'] ) ); $title_attr = apply_filters( 'wpcf7_form_title_attr', $options['html_title'] ); $class = 'wpcf7-form'; if ( $this->is_posted() ) { $submission = WPCF7_Submission::get_instance(); $data_status_attr = $this->form_status_class_name( $submission->get_status() ); $class .= sprintf( ' %s', $data_status_attr ); } else { $data_status_attr = 'init'; $class .= ' init'; } if ( $options['html_class'] ) { $class .= ' ' . $options['html_class']; } if ( $this->in_demo_mode() ) { $class .= ' demo'; } $class = explode( ' ', $class ); $class = array_map( 'sanitize_html_class', $class ); $class = array_filter( $class ); $class = array_unique( $class ); $class = implode( ' ', $class ); $class = apply_filters( 'wpcf7_form_class_attr', $class ); $enctype = wpcf7_enctype_value( apply_filters( 'wpcf7_form_enctype', '' ) ); $autocomplete = apply_filters( 'wpcf7_form_autocomplete', '' ); $atts = array( 'action' => esc_url( $action_url ), 'method' => 'post', 'class' => ( '' !== $class ) ? $class : null, 'id' => ( '' !== $id_attr ) ? $id_attr : null, 'name' => ( '' !== $name_attr ) ? $name_attr : null, 'aria-label' => ( '' !== $title_attr ) ? $title_attr : __( 'Contact form', 'contact-form-7' ), 'enctype' => ( '' !== $enctype ) ? $enctype : null, 'autocomplete' => ( '' !== $autocomplete ) ? $autocomplete : null, 'novalidate' => true, 'data-status' => $data_status_attr, ); $atts += (array) apply_filters( 'wpcf7_form_additional_atts', array() ); $html .= sprintf( '
', wpcf7_format_atts( $atts ) ) . "\n"; $html .= $this->form_hidden_fields(); $html .= $this->form_elements(); if ( ! $this->responses_count ) { $html .= $this->form_response_output(); } $html .= "\n" . '
'; $html .= "\n" . '
'; return $html . "\n"; } /** * Returns the class name that matches the given form status. */ private function form_status_class_name( $status ) { switch ( $status ) { case 'init': $class = 'init'; break; case 'validation_failed': $class = 'invalid'; break; case 'acceptance_missing': $class = 'unaccepted'; break; case 'spam': $class = 'spam'; break; case 'aborted': $class = 'aborted'; break; case 'mail_sent': $class = 'sent'; break; case 'mail_failed': $class = 'failed'; break; default: $class = sprintf( 'custom-%s', preg_replace( '/[^0-9a-z]+/i', '-', $status ) ); } return $class; } /** * Returns a set of hidden fields. */ private function form_hidden_fields() { $hidden_fields = array( '_wpcf7' => $this->id(), '_wpcf7_version' => WPCF7_VERSION, '_wpcf7_locale' => $this->locale(), '_wpcf7_unit_tag' => $this->unit_tag(), '_wpcf7_container_post' => 0, '_wpcf7_posted_data_hash' => '', ); if ( in_the_loop() ) { $hidden_fields['_wpcf7_container_post'] = (int) get_the_ID(); } if ( $this->nonce_is_active() and is_user_logged_in() ) { $hidden_fields['_wpnonce'] = wpcf7_create_nonce(); } $hidden_fields += (array) apply_filters( 'wpcf7_form_hidden_fields', array() ); $content = ''; foreach ( $hidden_fields as $name => $value ) { $content .= sprintf( '', esc_attr( $name ), esc_attr( $value ) ) . "\n"; } return '
' . "\n" . $content . '
' . "\n"; } /** * Returns the visible response output for a form submission. */ public function form_response_output() { $status = 'init'; $class = 'wpcf7-response-output'; $content = ''; if ( $this->is_posted() ) { // Post response output for non-AJAX $submission = WPCF7_Submission::get_instance(); $status = $submission->get_status(); $content = $submission->get_response(); } $atts = array( 'class' => trim( $class ), 'aria-hidden' => 'true', ); $output = sprintf( '
%2$s
', wpcf7_format_atts( $atts ), esc_html( $content ) ); $output = apply_filters( 'wpcf7_form_response_output', $output, $class, $content, $this, $status ); $this->responses_count += 1; return $output; } /** * Returns the response output that is only accessible from screen readers. */ public function screen_reader_response() { $primary_response = ''; $validation_errors = array(); if ( $this->is_posted() ) { // Post response output for non-AJAX $submission = WPCF7_Submission::get_instance(); $primary_response = $submission->get_response(); if ( $invalid_fields = $submission->get_invalid_fields() ) { foreach ( (array) $invalid_fields as $name => $field ) { $list_item = esc_html( $field['reason'] ); if ( $field['idref'] ) { $list_item = sprintf( '%2$s', esc_attr( $field['idref'] ), $list_item ); } $validation_error_id = wpcf7_get_validation_error_reference( $name, $this->unit_tag() ); if ( $validation_error_id ) { $list_item = sprintf( '
  • %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'] ) ) { continue; } } elseif ( ! empty( $options['exclude'] ) ) { if ( in_array( $type, $options['exclude'] ) ) { 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 ); } } includes/contact-form-template.php000060400000013302147177201300013265 0ustar00 %2$s [text* your-name autocomplete:name] [submit "%6$s"]', __( '(optional)', 'contact-form-7' ), __( 'Your name', 'contact-form-7' ), __( 'Your email', 'contact-form-7' ), __( 'Subject', 'contact-form-7' ), __( 'Your message', 'contact-form-7' ), __( 'Submit', 'contact-form-7' ) ); return trim( $template ); } public static function mail() { $template = array( 'subject' => sprintf( /* translators: 1: blog name, 2: [your-subject] */ _x( '%1$s "%2$s"', 'mail subject', 'contact-form-7' ), '[_site_title]', '[your-subject]' ), 'sender' => sprintf( '%s <%s>', '[_site_title]', self::from_email() ), 'body' => sprintf( /* translators: %s: [your-name] [your-email] */ __( 'From: %s', 'contact-form-7' ), '[your-name] [your-email]' ) . "\n" . sprintf( /* translators: %s: [your-subject] */ __( 'Subject: %s', 'contact-form-7' ), '[your-subject]' ) . "\n\n" . __( 'Message Body:', 'contact-form-7' ) . "\n" . '[your-message]' . "\n\n" . '-- ' . "\n" . sprintf( /* translators: 1: blog name, 2: blog URL */ __( 'This is a notification that a contact form was submitted on your website (%1$s %2$s).', 'contact-form-7' ), '[_site_title]', '[_site_url]' ), 'recipient' => '[_site_admin_email]', 'additional_headers' => 'Reply-To: [your-email]', 'attachments' => '', 'use_html' => 0, 'exclude_blank' => 0, ); return $template; } public static function mail_2() { $template = array( 'active' => false, 'subject' => sprintf( /* translators: 1: blog name, 2: [your-subject] */ _x( '%1$s "%2$s"', 'mail subject', 'contact-form-7' ), '[_site_title]', '[your-subject]' ), 'sender' => sprintf( '%s <%s>', '[_site_title]', self::from_email() ), 'body' => __( 'Message Body:', 'contact-form-7' ) . "\n" . '[your-message]' . "\n\n" . '-- ' . "\n" . sprintf( /* translators: 1: blog name, 2: blog URL */ __( 'This email is a receipt for your contact form submission on our website (%1$s %2$s) in which your email address was used. If that was not you, please ignore this message.', 'contact-form-7' ), '[_site_title]', '[_site_url]' ), 'recipient' => '[your-email]', 'additional_headers' => sprintf( 'Reply-To: %s', '[_site_admin_email]' ), 'attachments' => '', 'use_html' => 0, 'exclude_blank' => 0, ); return $template; } public static function from_email() { $admin_email = get_option( 'admin_email' ); if ( wpcf7_is_localhost() ) { return $admin_email; } $sitename = wp_parse_url( network_home_url(), PHP_URL_HOST ); $sitename = strtolower( $sitename ); if ( 'www.' === substr( $sitename, 0, 4 ) ) { $sitename = substr( $sitename, 4 ); } if ( strpbrk( $admin_email, '@' ) === '@' . $sitename ) { return $admin_email; } return 'wordpress@' . $sitename; } public static function messages() { $messages = array(); foreach ( wpcf7_messages() as $key => $arr ) { $messages[$key] = $arr['default']; } return $messages; } } function wpcf7_messages() { $messages = array( 'mail_sent_ok' => array( 'description' => __( "Sender's message was sent successfully", 'contact-form-7' ), 'default' => __( "Thank you for your message. It has been sent.", 'contact-form-7' ), ), 'mail_sent_ng' => array( 'description' => __( "Sender's message failed to send", 'contact-form-7' ), 'default' => __( "There was an error trying to send your message. Please try again later.", 'contact-form-7' ), ), 'validation_error' => array( 'description' => __( "Validation errors occurred", 'contact-form-7' ), 'default' => __( "One or more fields have an error. Please check and try again.", 'contact-form-7' ), ), 'spam' => array( 'description' => __( "Submission was referred to as spam", 'contact-form-7' ), 'default' => __( "There was an error trying to send your message. Please try again later.", 'contact-form-7' ), ), 'accept_terms' => array( 'description' => __( "There are terms that the sender must accept", 'contact-form-7' ), 'default' => __( "You must accept the terms and conditions before sending your message.", 'contact-form-7' ), ), 'invalid_required' => array( 'description' => __( "There is a field that the sender must fill in", 'contact-form-7' ), 'default' => __( "Please fill out this field.", 'contact-form-7' ), ), 'invalid_too_long' => array( 'description' => __( "There is a field with input that is longer than the maximum allowed length", 'contact-form-7' ), 'default' => __( "This field has a too long input.", 'contact-form-7' ), ), 'invalid_too_short' => array( 'description' => __( "There is a field with input that is shorter than the minimum allowed length", 'contact-form-7' ), 'default' => __( "This field has a too short input.", 'contact-form-7' ), ), ); return apply_filters( 'wpcf7_messages', $messages ); } includes/controller.php000060400000006305147177201300011250 0ustar00submit(); } } } /** * Registers main scripts and styles. */ add_action( 'wp_enqueue_scripts', static function () { $assets = include( wpcf7_plugin_path( 'includes/js/index.asset.php' ) ); $assets = wp_parse_args( $assets, array( 'dependencies' => array(), 'version' => WPCF7_VERSION, ) ); wp_register_script( 'contact-form-7', wpcf7_plugin_url( 'includes/js/index.js' ), array_merge( $assets['dependencies'], array( 'swv' ) ), $assets['version'], array( 'in_footer' => true ) ); wp_set_script_translations( 'contact-form-7', 'contact-form-7' ); wp_register_script( 'contact-form-7-html5-fallback', wpcf7_plugin_url( 'includes/js/html5-fallback.js' ), array( 'jquery-ui-datepicker' ), WPCF7_VERSION, array( 'in_footer' => true ) ); if ( wpcf7_load_js() ) { wpcf7_enqueue_scripts(); } wp_register_style( 'contact-form-7', wpcf7_plugin_url( 'includes/css/styles.css' ), array(), WPCF7_VERSION, 'all' ); wp_register_style( 'contact-form-7-rtl', wpcf7_plugin_url( 'includes/css/styles-rtl.css' ), array( 'contact-form-7' ), WPCF7_VERSION, 'all' ); wp_register_style( 'jquery-ui-smoothness', wpcf7_plugin_url( 'includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css' ), array(), '1.12.1', 'screen' ); if ( wpcf7_load_css() ) { wpcf7_enqueue_styles(); } }, 10, 0 ); /** * Enqueues scripts. */ function wpcf7_enqueue_scripts() { wp_enqueue_script( 'contact-form-7' ); $wpcf7_obj = array( 'api' => array( 'root' => sanitize_url( get_rest_url() ), 'namespace' => 'contact-form-7/v1', ), ); if ( defined( 'WP_CACHE' ) and WP_CACHE ) { $wpcf7_obj = array_merge( $wpcf7_obj, array( 'cached' => 1, ) ); } wp_add_inline_script( 'contact-form-7', sprintf( 'var wpcf7 = %s;', wp_json_encode( $wpcf7_obj, JSON_PRETTY_PRINT ) ), 'before' ); do_action( 'wpcf7_enqueue_scripts' ); } /** * Returns true if the main script is enqueued. */ function wpcf7_script_is() { return wp_script_is( 'contact-form-7' ); } /** * Enqueues styles. */ function wpcf7_enqueue_styles() { wp_enqueue_style( 'contact-form-7' ); if ( wpcf7_is_rtl() ) { wp_enqueue_style( 'contact-form-7-rtl' ); } do_action( 'wpcf7_enqueue_styles' ); } /** * Returns true if the main stylesheet is enqueued. */ function wpcf7_style_is() { return wp_style_is( 'contact-form-7' ); } add_action( 'wp_enqueue_scripts', 'wpcf7_html5_fallback', 20, 0 ); /** * Enqueues scripts and styles for the HTML5 fallback. */ function wpcf7_html5_fallback() { if ( ! wpcf7_support_html5_fallback() ) { return; } if ( wpcf7_script_is() ) { wp_enqueue_script( 'contact-form-7-html5-fallback' ); } if ( wpcf7_style_is() ) { wp_enqueue_style( 'jquery-ui-smoothness' ); } } includes/file.php000060400000024236147177201300010007 0ustar00 false, 'filetypes' => '', 'limit' => MB_IN_BYTES, ) ); foreach ( array( 'name', 'size', 'tmp_name', 'error' ) as $key ) { if ( ! isset( $file[$key] ) ) { $file[$key] = array(); } } $names = wpcf7_array_flatten( $file['name'] ); $sizes = wpcf7_array_flatten( $file['size'] ); $tmp_names = wpcf7_array_flatten( $file['tmp_name'] ); $errors = wpcf7_array_flatten( $file['error'] ); foreach ( $errors as $error ) { if ( ! empty( $error ) and UPLOAD_ERR_NO_FILE !== $error ) { return new WP_Error( 'wpcf7_upload_failed_php_error', wpcf7_get_message( 'upload_failed_php_error' ) ); } } if ( isset( $options['schema'] ) and isset( $options['name'] ) ) { $context = array( 'file' => true, 'field' => $options['name'], ); foreach ( $options['schema']->validate( $context ) as $result ) { if ( is_wp_error( $result ) ) { return $result; } } } // Move uploaded file to tmp dir $uploads_dir = wpcf7_upload_tmp_dir(); $uploads_dir = wpcf7_maybe_add_random_dir( $uploads_dir ); $uploaded_files = array(); foreach ( $names as $key => $name ) { $tmp_name = $tmp_names[$key]; if ( empty( $tmp_name ) or ! is_uploaded_file( $tmp_name ) ) { continue; } $filename = $name; $filename = wpcf7_canonicalize( $filename, array( 'strto' => 'as-is' ) ); $filename = wpcf7_antiscript_file_name( $filename ); $filename = apply_filters( 'wpcf7_upload_file_name', $filename, $name, $options ); $filename = wp_unique_filename( $uploads_dir, $filename ); $new_file = path_join( $uploads_dir, $filename ); if ( false === @move_uploaded_file( $tmp_name, $new_file ) ) { return new WP_Error( 'wpcf7_upload_failed', wpcf7_get_message( 'upload_failed' ) ); } // Make sure the uploaded file is only readable for the owner process chmod( $new_file, 0400 ); $uploaded_files[] = $new_file; } return $uploaded_files; } add_filter( 'wpcf7_messages', 'wpcf7_file_messages', 10, 1 ); /** * A wpcf7_messages filter callback that adds messages for * file-uploading fields. */ function wpcf7_file_messages( $messages ) { return array_merge( $messages, array( 'upload_failed' => array( 'description' => __( "Uploading a file fails for any reason", 'contact-form-7' ), 'default' => __( "There was an unknown error uploading the file.", 'contact-form-7' ), ), 'upload_file_type_invalid' => array( 'description' => __( "Uploaded file is not allowed for file type", 'contact-form-7' ), 'default' => __( "You are not allowed to upload files of this type.", 'contact-form-7' ), ), 'upload_file_too_large' => array( 'description' => __( "Uploaded file is too large", 'contact-form-7' ), 'default' => __( "The uploaded file is too large.", 'contact-form-7' ), ), 'upload_failed_php_error' => array( 'description' => __( "Uploading a file fails for PHP error", 'contact-form-7' ), 'default' => __( "There was an error uploading the file.", 'contact-form-7' ), ), ) ); } add_filter( 'wpcf7_form_enctype', 'wpcf7_file_form_enctype_filter', 10, 1 ); /** * A wpcf7_form_enctype filter callback that sets the enctype attribute * to multipart/form-data if the form has file-uploading fields. */ function wpcf7_file_form_enctype_filter( $enctype ) { $multipart = (bool) wpcf7_scan_form_tags( array( 'feature' => 'file-uploading', ) ); if ( $multipart ) { $enctype = 'multipart/form-data'; } return $enctype; } /** * Converts a MIME type string to an array of corresponding file extensions. * * @param string $mime MIME type. * Wildcard (*) is available for the subtype part. * @return array Corresponding file extensions. */ function wpcf7_convert_mime_to_ext( $mime ) { static $mime_types = array(); $mime_types = wp_get_mime_types(); $results = array(); if ( preg_match( '%^([a-z]+)/([*]|[a-z0-9.+-]+)$%i', $mime, $matches ) ) { foreach ( $mime_types as $key => $val ) { if ( '*' === $matches[2] and str_starts_with( $val, $matches[1] . '/' ) or $val === $matches[0] ) { $results = array_merge( $results, explode( '|', $key ) ); } } } $results = array_unique( $results ); $results = array_filter( $results ); $results = array_values( $results ); return $results; } /** * Returns a formatted list of acceptable filetypes. * * @param string|array $types Optional. Array of filetypes. * @param string $format Optional. Pre-defined format designator. * @return string Formatted list of acceptable filetypes. */ function wpcf7_acceptable_filetypes( $types = 'default', $format = 'regex' ) { if ( 'default' === $types or empty( $types ) ) { $types = array( 'audio/*', 'video/*', 'image/*', ); } else { $types = array_map( static function ( $type ) { if ( is_string( $type ) ) { return preg_split( '/[\s|,]+/', strtolower( $type ) ); } }, (array) $types ); $types = wpcf7_array_flatten( $types ); $types = array_filter( array_unique( $types ) ); } if ( 'attr' === $format or 'attribute' === $format ) { $types = array_map( static function ( $type ) { if ( false === strpos( $type, '/' ) ) { return sprintf( '.%s', trim( $type, '.' ) ); } elseif ( preg_match( '%^([a-z]+)/[*]$%i', $type, $matches ) ) { if ( in_array( $matches[1], array( 'audio', 'video', 'image' ) ) ) { return $type; } else { return ''; } } elseif ( wpcf7_convert_mime_to_ext( $type ) ) { return $type; } }, $types ); $types = array_filter( $types ); return implode( ',', $types ); } elseif ( 'regex' === $format ) { $types = array_map( static function ( $type ) { if ( false === strpos( $type, '/' ) ) { return preg_quote( trim( $type, '.' ) ); } elseif ( $type = wpcf7_convert_mime_to_ext( $type ) ) { return $type; } }, $types ); $types = wpcf7_array_flatten( $types ); $types = array_filter( array_unique( $types ) ); return implode( '|', $types ); } return ''; } add_action( 'wpcf7_init', 'wpcf7_init_uploads', 10, 0 ); /** * Initializes the temporary directory for uploaded files. */ function wpcf7_init_uploads() { $dir = wpcf7_upload_tmp_dir(); if ( is_dir( $dir ) and is_writable( $dir ) ) { $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; } } 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, "\n" ); fwrite( $handle, "# Apache 2.2\n" ); fwrite( $handle, "\n" ); fwrite( $handle, " Deny from all\n" ); fwrite( $handle, "\n" ); fclose( $handle ); } } } /** * Creates a child directory with a randomly generated name. * * @param string $dir The parent directory path. * @return string The child directory path if created, otherwise the parent. */ function wpcf7_maybe_add_random_dir( $dir ) { do { $rand_max = mt_getrandmax(); $rand = zeroise( mt_rand( 0, $rand_max ), strlen( $rand_max ) ); $dir_new = path_join( $dir, $rand ); } while ( file_exists( $dir_new ) ); if ( wp_mkdir_p( $dir_new ) ) { return $dir_new; } return $dir; } /** * Returns the directory path for uploaded files. * * @return string Directory path. */ function wpcf7_upload_tmp_dir() { if ( defined( 'WPCF7_UPLOADS_TMP_DIR' ) ) { $dir = path_join( WP_CONTENT_DIR, WPCF7_UPLOADS_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_uploads' ); wp_mkdir_p( $dir ); return $dir; } add_action( 'shutdown', 'wpcf7_cleanup_upload_files', 20, 0 ); /** * Cleans up files in the temporary directory for uploaded files. * * @param int $seconds Files older than this are removed. Default 60. * @param int $max Maximum number of files to be removed in a function call. * Default 100. */ function wpcf7_cleanup_upload_files( $seconds = 60, $max = 100 ) { $dir = trailingslashit( wpcf7_upload_tmp_dir() ); if ( ! is_dir( $dir ) or ! is_readable( $dir ) or ! wp_is_writable( $dir ) ) { return; } $seconds = absint( $seconds ); $max = absint( $max ); $count = 0; if ( $handle = opendir( $dir ) ) { while ( false !== ( $file = readdir( $handle ) ) ) { if ( '.' == $file or '..' == $file or '.htaccess' == $file ) { continue; } $mtime = @filemtime( path_join( $dir, $file ) ); if ( $mtime and time() < $mtime + $seconds ) { // less than $seconds old continue; } wpcf7_rmdir_p( path_join( $dir, $file ) ); $count += 1; if ( $max <= $count ) { break; } } closedir( $handle ); } } add_action( 'wpcf7_admin_warnings', 'wpcf7_file_display_warning_message', 10, 3 ); /** * Displays warning messages about file-uploading fields. */ function wpcf7_file_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( 'feature' => 'file-uploading', ) ); if ( ! $has_tags ) { return; } $uploads_dir = wpcf7_upload_tmp_dir(); if ( ! is_dir( $uploads_dir ) or ! wp_is_writable( $uploads_dir ) ) { $message = sprintf( /* translators: %s: the path of the temporary folder */ __( 'This contact form has file uploading 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 ), 'type=warning' ); } } includes/formatting.php000060400000033003147177201300011232 0ustar00/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 ) ) { 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' ) ); 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 ( (array) $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 ) 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; } includes/form-tag.php000060400000032655147177201300010610 0ustar00 $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 ( (array) $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 ( (array) $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 ( (array) $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 ( (array) $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 ) ? $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 ) { } } includes/form-tags-manager.php000060400000034354147177201300012401 0ustar00add( $tag_types, $callback, $features ); } /** * Wrapper function of WPCF7_FormTagsManager::remove(). */ function wpcf7_remove_form_tag( $tag_type ) { $manager = WPCF7_FormTagsManager::get_instance(); return $manager->remove( $tag_type ); } /** * Wrapper function of WPCF7_FormTagsManager::replace_all(). */ function wpcf7_replace_all_form_tags( $content ) { $manager = WPCF7_FormTagsManager::get_instance(); return $manager->replace_all( $content ); } /** * Wrapper function of WPCF7_ContactForm::scan_form_tags(). */ function wpcf7_scan_form_tags( $cond = null ) { $contact_form = WPCF7_ContactForm::get_current(); if ( $contact_form ) { return $contact_form->scan_form_tags( $cond ); } return array(); } /** * Wrapper function of WPCF7_FormTagsManager::tag_type_supports(). */ function wpcf7_form_tag_supports( $tag_type, $feature ) { $manager = WPCF7_FormTagsManager::get_instance(); return $manager->tag_type_supports( $tag_type, $feature ); } /** * The singleton instance of this class manages the collection of form-tags. */ class WPCF7_FormTagsManager { private static $instance; private $tag_types = array(); private $scanned_tags = null; // Tags scanned at the last time of scan() private $placeholders = array(); private function __construct() {} /** * Returns the singleton instance. * * @return WPCF7_FormTagsManager The singleton manager. */ public static function get_instance() { if ( empty( self::$instance ) ) { self::$instance = new self; } return self::$instance; } /** * Returns scanned form-tags. * * @return array Array of WPCF7_FormTag objects. */ public function get_scanned_tags() { return $this->scanned_tags; } /** * Registers form-tag types to the manager. * * @param string|array $tag_types The name of the form-tag type or * an array of the names. * @param callable $callback The callback to generates a form control HTML * for a form-tag in this type. * @param string|array $features Optional. Features a form-tag * in this type supports. */ public function add( $tag_types, $callback, $features = '' ) { if ( ! is_callable( $callback ) ) { return; } if ( true === $features ) { // for back-compat $features = array( 'name-attr' => true ); } $features = wp_parse_args( $features, array() ); $tag_types = array_filter( array_unique( (array) $tag_types ) ); foreach ( $tag_types as $tag_type ) { $tag_type = $this->sanitize_tag_type( $tag_type ); if ( ! $this->tag_type_exists( $tag_type ) ) { $this->tag_types[$tag_type] = array( 'function' => $callback, 'features' => $features, ); } } } /** * Returns true if the given tag type exists. */ public function tag_type_exists( $tag_type ) { return isset( $this->tag_types[$tag_type] ); } /** * Returns true if the tag type supports the features. * * @param string $tag_type The name of the form-tag type. * @param array|string $features The feature to check or an array of features. * @return bool True if the form-tag type supports at least one of * the given features, false otherwise. */ public function tag_type_supports( $tag_type, $features ) { $features = array_filter( (array) $features ); if ( isset( $this->tag_types[$tag_type]['features'] ) ) { return (bool) array_intersect( array_keys( array_filter( $this->tag_types[$tag_type]['features'] ) ), $features ); } return false; } /** * Returns form-tag types that support the given features. * * @param array|string $features Optional. The feature to check or * an array of features. Default empty array. * @param bool $invert Optional. If this value is true, returns form-tag * types that do not support the given features. Default false. * @return array An array of form-tag types. If the $features param is empty, * returns all form-tag types that have been registered. */ public function collect_tag_types( $features = array(), $invert = false ) { $tag_types = array_keys( $this->tag_types ); if ( empty( $features ) ) { return $tag_types; } $output = array(); foreach ( $tag_types as $tag_type ) { if ( ! $invert && $this->tag_type_supports( $tag_type, $features ) || $invert && ! $this->tag_type_supports( $tag_type, $features ) ) { $output[] = $tag_type; } } return $output; } /** * Sanitizes the form-tag type name. */ private function sanitize_tag_type( $tag_type ) { $tag_type = preg_replace( '/[^a-zA-Z0-9_*]+/', '_', $tag_type ); $tag_type = rtrim( $tag_type, '_' ); $tag_type = strtolower( $tag_type ); return $tag_type; } /** * Deregisters the form-tag type. */ public function remove( $tag_type ) { unset( $this->tag_types[$tag_type] ); } /** * Normalizes the text content that includes form-tags. */ public function normalize( $content ) { if ( empty( $this->tag_types ) ) { return $content; } $content = preg_replace_callback( '/' . $this->tag_regex() . '/s', array( $this, 'normalize_callback' ), $content ); return $content; } /** * The callback function used within normalize(). */ private function normalize_callback( $matches ) { // allow [[foo]] syntax for escaping a tag if ( $matches[1] == '[' and $matches[6] == ']' ) { return $matches[0]; } $tag = $matches[2]; $attr = trim( preg_replace( '/[\r\n\t ]+/', ' ', $matches[3] ) ); $attr = strtr( $attr, array( '<' => '<', '>' => '>' ) ); $content = trim( $matches[5] ); $content = str_replace( "\n", '', $content ); $result = $matches[1] . '[' . $tag . ( $attr ? ' ' . $attr : '' ) . ( $matches[4] ? ' ' . $matches[4] : '' ) . ']' . ( $content ? $content . '[/' . $tag . ']' : '' ) . $matches[6]; return $result; } /** * Replace all form-tags in the given text with placeholders. */ public function replace_with_placeholders( $content ) { if ( empty( $this->tag_types ) ) { return $content; } $this->placeholders = array(); $callback = function ( $matches ) { // Allow [[foo]] syntax for escaping a tag. if ( '[' === $matches[1] and ']' === $matches[6] ) { return $matches[0]; } $tag = $matches[0]; $tag_type = $matches[2]; $block_or_hidden = $this->tag_type_supports( $tag_type, array( 'display-block', 'display-hidden' ) ); if ( $block_or_hidden ) { $placeholder_tag_name = WPCF7_HTMLFormatter::placeholder_block; } else { $placeholder_tag_name = WPCF7_HTMLFormatter::placeholder_inline; } $placeholder = sprintf( '<%1$s id="%2$s" />', $placeholder_tag_name, sha1( $tag ) ); list( $placeholder ) = WPCF7_HTMLFormatter::normalize_start_tag( $placeholder ); $this->placeholders[$placeholder] = $tag; return $placeholder; }; return preg_replace_callback( '/' . $this->tag_regex() . '/s', $callback, $content ); } /** * Replace placeholders in the given text with original form-tags. */ public function restore_from_placeholders( $content ) { return str_replace( array_keys( $this->placeholders ), array_values( $this->placeholders ), $content ); } /** * Replaces all form-tags in the text content. * * @param string $content The text content including form-tags. * @return string The result of replacements. */ public function replace_all( $content ) { return $this->scan( $content, true ); } /** * Scans form-tags in the text content. * * @param string $content The text content including form-tags. * @param bool $replace Optional. Whether scanned form-tags will be * replaced. Default false. * @return array|string An array of scanned form-tags if $replace is false. * Otherwise text that scanned form-tags are replaced. */ public function scan( $content, $replace = false ) { $this->scanned_tags = array(); if ( empty( $this->tag_types ) ) { if ( $replace ) { return $content; } else { return $this->scanned_tags; } } if ( $replace ) { $content = preg_replace_callback( '/' . $this->tag_regex() . '/s', array( $this, 'replace_callback' ), $content ); return $content; } else { preg_replace_callback( '/' . $this->tag_regex() . '/s', array( $this, 'scan_callback' ), $content ); return $this->scanned_tags; } } /** * Filters form-tags based on a condition array argument. * * @param array|string $input The original form-tags collection. * If it is a string, scans form-tags from it. * @param array $cond The conditions that filtering will be based on. * @return array The filtered form-tags collection. */ public function filter( $input, $cond ) { if ( is_array( $input ) ) { $tags = $input; } elseif ( is_string( $input ) ) { $tags = $this->scan( $input ); } else { $tags = $this->scanned_tags; } $cond = wp_parse_args( $cond, array( 'type' => array(), 'basetype' => array(), 'name' => array(), 'feature' => array(), ) ); $cond = array_map( static function ( $c ) { return array_filter( array_map( 'trim', (array) $c ) ); }, $cond ); $tags = array_filter( (array) $tags, function ( $tag ) use ( $cond ) { $tag = new WPCF7_FormTag( $tag ); if ( $cond['type'] and ! in_array( $tag->type, $cond['type'], true ) ) { return false; } if ( $cond['basetype'] and ! in_array( $tag->basetype, $cond['basetype'], true ) ) { return false; } if ( $cond['name'] and ! in_array( $tag->name, $cond['name'], true ) ) { return false; } foreach ( $cond['feature'] as $feature ) { if ( '!' === substr( $feature, 0, 1 ) ) { // Negation $feature = trim( substr( $feature, 1 ) ); if ( $this->tag_type_supports( $tag->type, $feature ) ) { return false; } } else { if ( ! $this->tag_type_supports( $tag->type, $feature ) ) { return false; } } } return true; } ); return array_values( $tags ); } /** * Returns the regular expression for a form-tag. */ private function tag_regex() { $tagnames = array_keys( $this->tag_types ); $tagregexp = implode( '|', array_map( 'preg_quote', $tagnames ) ); return '(\[?)' . '\[(' . $tagregexp . ')(?:[\r\n\t ](.*?))?(?:[\r\n\t ](\/))?\]' . '(?:([^[]*?)\[\/\2\])?' . '(\]?)'; } /** * The callback function for the form-tag replacement. */ private function replace_callback( $matches ) { return $this->scan_callback( $matches, true ); } /** * The callback function for the form-tag scanning. */ private function scan_callback( $matches, $replace = false ) { // allow [[foo]] syntax for escaping a tag if ( $matches[1] == '[' and $matches[6] == ']' ) { return substr( $matches[0], 1, -1 ); } $tag_type = $matches[2]; $tag_basetype = trim( $tag_type, '*' ); $attr = $this->parse_atts( $matches[3] ); $scanned_tag = array( 'type' => $tag_type, 'basetype' => $tag_basetype, 'raw_name' => '', 'name' => '', 'options' => array(), 'raw_values' => array(), 'values' => array(), 'pipes' => null, 'labels' => array(), 'attr' => '', 'content' => '', ); if ( $this->tag_type_supports( $tag_type, 'singular' ) ) { $tags_in_same_basetype = $this->filter( $this->scanned_tags, array( 'basetype' => $tag_basetype ) ); if ( $tags_in_same_basetype ) { // Another tag in the same base type already exists. Ignore this one. return $matches[0]; } } if ( $this->tag_type_supports( $tag_type, 'name-attr' ) ) { if ( ! is_array( $attr ) ) { return $matches[0]; // Invalid form-tag. } $scanned_tag['raw_name'] = (string) array_shift( $attr['options'] ); if ( ! wpcf7_is_name( $scanned_tag['raw_name'] ) ) { return $matches[0]; // Invalid name is used. Ignore this tag. } $scanned_tag['name'] = strtr( $scanned_tag['raw_name'], '.', '_' ); } if ( is_array( $attr ) ) { $scanned_tag['options'] = (array) $attr['options']; $scanned_tag['raw_values'] = (array) $attr['values']; if ( WPCF7_USE_PIPE ) { $pipes = new WPCF7_Pipes( $scanned_tag['raw_values'] ); $scanned_tag['values'] = $pipes->collect_befores(); $scanned_tag['pipes'] = $pipes; } else { $scanned_tag['values'] = $scanned_tag['raw_values']; } $scanned_tag['labels'] = $scanned_tag['values']; } else { $scanned_tag['attr'] = $attr; } $scanned_tag['values'] = array_map( 'trim', $scanned_tag['values'] ); $scanned_tag['labels'] = array_map( 'trim', $scanned_tag['labels'] ); $content = trim( $matches[5] ); $content = preg_replace( "/$/m", '', $content ); $scanned_tag['content'] = $content; $scanned_tag = apply_filters( 'wpcf7_form_tag', $scanned_tag, $replace ); $scanned_tag = new WPCF7_FormTag( $scanned_tag ); $this->scanned_tags[] = $scanned_tag; if ( $replace ) { $callback = $this->tag_types[$tag_type]['function']; return $matches[1] . call_user_func( $callback, $scanned_tag ) . $matches[6]; } else { return $matches[0]; } } /** * Parses the attributes of a form-tag to extract the name, * options, and values. * * @param string $text Attributes of a form-tag. * @return array|string An associative array of the options and values * if the input is in the correct syntax, * otherwise the input text itself. */ private function parse_atts( $text ) { $atts = array( 'options' => array(), 'values' => array() ); $text = preg_replace( "/[\x{00a0}\x{200b}]+/u", " ", $text ); $text = trim( $text ); $pattern = '%^([-+*=0-9a-zA-Z:.!?#$&@_/|\%\r\n\t ]*?)((?:[\r\n\t ]*"[^"]*"|[\r\n\t ]*\'[^\']*\')*)$%'; if ( preg_match( $pattern, $text, $matches ) ) { if ( ! empty( $matches[1] ) ) { $atts['options'] = preg_split( '/[\r\n\t ]+/', trim( $matches[1] ) ); } if ( ! empty( $matches[2] ) ) { preg_match_all( '/"[^"]*"|\'[^\']*\'/', $matches[2], $matched_values ); $atts['values'] = wpcf7_strip_quote_deep( $matched_values[0] ); } } else { $atts = $text; } return $atts; } } includes/functions.php000060400000037051147177201300011077 0ustar00 $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 ( (array) $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 ) ) { 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' ) ); } /** * 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 ) ); } includes/html-formatter.php000060400000040511147177201300012027 0ustar00options = 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 ( $chunk['type'] === self::start_tag ) { 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 ( $chunk['type'] === self::text ) { 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 ( $chunk['type'] === self::text ) { $this->append_text( $chunk['content'] ); } if ( $chunk['type'] === self::start_tag ) { $this->start_tag( $chunk['content'] ); } if ( $chunk['type'] === self::end_tag ) { $this->end_tag( $chunk['content'] ); } if ( $chunk['type'] === self::comment ) { $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 ) ) { 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 ) or in_array( $tag_name, self::p_nonparent_elements ) ) { // 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