Plugin Directory

Changeset 3374823


Ignore:
Timestamp:
10/08/2025 06:32:20 AM (4 months ago)
Author:
zealopensource
Message:

Update to version 2.9 from GitHub

Location:
abandoned-contact-form-7
Files:
31 added
42 deleted
26 edited
1 copied

Legend:

Unmodified
Added
Removed
  • abandoned-contact-form-7/tags/2.9/assets/css/admin.css

    r2383635 r3374823  
    1 .cf7af-notification-setting th{
    2     width: 230px !important;
    3 }
    4 .cf7af-tooltip {
     1@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&display=swap');
     2
     3.cfgeo-main-layout {
     4    font-family: 'Poppins', sans-serif;
     5}
     6
     7.cfgeo-main-layout .form-table th {
     8    width: 300px;
     9    align-items: center;
     10    display: flex;
     11}
     12
     13.cfgeo-main-layout .form-table tr {
     14    display: flex;
     15    align-items: center;
     16}
     17
     18.cfgeo-main-layout .form-table td {
     19    width: calc(100% - 300px);
     20}
     21.alignleft.actions .button,
     22.alignleft.actions input[type="button"],
     23.alignleft.actions input[type="submit"],
     24.cfgeo-tooltip {
     25    vertical-align: middle;
     26}
     27.cfgeo-tooltip {
    528    display: inline-block;
    629    width: 18px;
     
    1134    background-image: url(data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJpbmZvLWNpcmNsZSIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWluZm8tY2lyY2xlIGZhLXctMTYiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMjU2IDhDMTE5LjA0MyA4IDggMTE5LjA4MyA4IDI1NmMwIDEzNi45OTcgMTExLjA0MyAyNDggMjQ4IDI0OHMyNDgtMTExLjAwMyAyNDgtMjQ4QzUwNCAxMTkuMDgzIDM5Mi45NTcgOCAyNTYgOHptMCAxMTBjMjMuMTk2IDAgNDIgMTguODA0IDQyIDQycy0xOC44MDQgNDItNDIgNDItNDItMTguODA0LTQyLTQyIDE4LjgwNC00MiA0Mi00MnptNTYgMjU0YzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTg4Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDEydi02NGgtMTJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNjRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYxMDBoMTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNHoiPjwvcGF0aD48L3N2Zz4=);
    1235    background-repeat: no-repeat;
    13     background-size: cover;
    14 }
    15 
    16 .cf7af-pointer .wp-pointer-content h3:before {
    17     content: '\f348';
    18 }
    19 
    20 .cf7af-settings .postbox {
    21     box-sizing: border-box;
    22 }
    23 
    24 .cf7af-settings .left-box {
     36    background-size: cover
     37}
     38.validation-error-geo{
     39    border-color: red !important;
     40    border-width: 2px !important;
     41}
     42.cfgeo-pointer .wp-pointer-content h3:before {
     43    content: '\f348'
     44}
     45
     46.shortcode-table {
     47    width: 75%;
     48    margin-top: 15px
     49}
     50
     51.shortcode-table tr {
     52    border-radius: 3px;
     53    padding: 12px 15px;
     54    display: flex;
     55    justify-content: space-between;
     56    margin-bottom: 5px
     57}
     58
     59.shortcode-table thead tr {
     60    background-color: #95a5a6;
     61    font-size: 14px;
     62    text-transform: uppercase;
     63    letter-spacing: .03em
     64}
     65
     66.shortcode-table tbody tr {
     67    background-color: #fff;
     68    box-shadow: 0 0 9px 0 rgba(0, 0, 0, .1)
     69}
     70
     71.shortcode-table td {
     72    width: 70%
     73}
     74
     75.shortcode-table td+td {
     76    width: 30%
     77}
     78
     79.shortcode-table tfoot {
     80    background-color: #95a5a6
     81}
     82
     83.shortcode-table tfoot td {
     84    width: 100%
     85}
     86
     87.shortcode-table tfoot h3,
     88.shortcode-table tfoot p {
     89    margin: 0
     90}
     91
     92.shortcode-table input {
     93    color: 000;
     94    width: 100%;
     95    cursor: text
     96}
     97.sp-original-input-container{
     98    display: block;
     99}
     100.sp-colorize-container{
     101    border: none !important;
     102    position: absolute;
     103    top: 0;
     104    left: 1px;
     105    height: 100%;
     106    overflow: hidden;
     107}
     108.sp-colorize{
     109    height: 100%;
     110}
     111
     112/* ========================================
     113   Advanced Filter
     114   ======================================== */
     115.cfgeo-advanced-filters {
     116    margin: 10px 0;
     117    padding: 15px;
     118    background: #f9f9f9;
     119    border: 1px solid #ddd;
     120    border-radius: 4px;
     121    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
     122    position: relative;
     123    display: flex;
     124    flex-wrap: wrap;
     125    float: left;
     126}
     127.cfgeo-advanced-filters label {
     128    display: inline-block;
     129    width: 80px;
     130    font-weight: 700;
     131    color: #23282d;
     132}
     133/* .cfgeo-advanced-filters input[type="date"],
     134.cfgeo-advanced-filters input[type="text"],
     135.cfgeo-advanced-filters select {
     136    border: 1px solid #ddd;
     137    border-radius: 3px;
     138    padding: 5px 8px;
     139    font-size: 13px;
     140} */
     141.cfgeo-advanced-filters input[type="date"]:focus,
     142.cfgeo-advanced-filters input[type="text"]:focus,
     143.cfgeo-advanced-filters select:focus,
     144.cfgeo-filter-row input:focus,
     145.cfgeo-filter-row select:focus {
     146    border-color: #0073aa;
     147    box-shadow: 0 0 0 1px #0073aa;
     148    outline: 0;
     149}
     150.cfgeo-advanced-filters .button {
     151    margin-right: 10px;
     152}
     153.alignleft.actions .button:last-child,
     154.cfgeo-advanced-filters .button:last-child {
     155    margin-right: 0;
     156}
     157.cfgeo-filter-row {
     158    margin-bottom: 10px;
     159    display: flex;
     160    flex-wrap: wrap;
     161    align-items: center;
     162    width: 31%;
     163    padding-right: 15px;
     164}
     165
     166.cfgeo-filter-row .cfgeo-label {
     167    width: 100%;
     168}
     169.cfgeo-filter-row:last-child {
     170    margin-bottom: 0;
     171}
     172.cfgeo-filter-buttons {
     173    margin-top: 15px;
     174    padding-top: 15px;
     175    border-top: 1px solid #ddd;
     176    width: 100%;
     177}
     178.cfgeo-filter-count {
     179    margin-top: 10px;
     180    padding: 8px 12px;
     181    background: #e7f7ff;
     182    border: 1px solid #b3d9ff;
     183    border-radius: 3px;
     184    font-size: 12px;
     185    color: #0073aa;
     186}
     187.cfgeo-loading {
     188    display: none;
     189    position: absolute;
     190    top: 50%;
     191    left: 50%;
     192    transform: translate(-50%, -50%);
     193    z-index: 1000;
     194}
     195.cfgeo-loading .spinner {
     196    float: none;
     197    margin: 0;
     198}
     199.cfgeo-advanced-filters.loading::after {
     200    content: "";
     201    position: absolute;
     202    top: 0;
     203    left: 0;
     204    right: 0;
     205    bottom: 0;
     206    background: rgba(255, 255, 255, 0.8);
     207    z-index: 999;
     208}
     209.cfgeo-filter-row input:disabled,
     210.cfgeo-filter-row select:disabled {
     211    opacity: 0.6;
     212    cursor: not-allowed;
     213}
     214.alignleft.actions {
     215    float: left;
     216    margin: 0;
     217    padding: 0;
     218}
     219.alignleft.actions .button {
     220    margin-right: 5px;
     221}
     222
     223
     224/* ========================================
     225   WEBHOOK API STYLES
     226   ======================================== */
     227
     228.cfgeo-webhook-settings {
     229    margin: 20px 0;
     230}
     231
     232.cfgeo-webhook-settings h3 {
     233    margin-bottom: 10px;
     234    color: #23282d;
     235}
     236
     237.cfgeo-webhook-settings p {
     238    margin-bottom: 20px;
     239    color: #666;
     240}
     241
     242.cfgeo-webhook-info {
     243    background: #f9f9f9;
     244    border: 1px solid #e1e1e1;
     245    border-radius: 4px;
     246    padding: 15px;
     247    margin-bottom: 20px;
     248}
     249
     250.cfgeo-webhook-info h4 {
     251    margin-top: 0;
     252    margin-bottom: 10px;
     253    color: #23282d;
     254}
     255
     256.cfgeo-webhook-info ul {
     257    margin: 0;
     258    padding-left: 20px;
     259}
     260
     261.cfgeo-webhook-info li {
     262    margin-bottom: 5px;
     263    color: #666;
     264}
     265
     266.cfgeo-webhook-test {
     267    background: #fff;
     268    border: 1px solid #e1e1e1;
     269    border-radius: 4px;
     270    padding: 15px;
     271    margin-bottom: 20px;
     272}
     273
     274.cfgeo-webhook-test h4 {
     275    margin-top: 0;
     276    margin-bottom: 10px;
     277    color: #23282d;
     278}
     279
     280.cfgeo-webhook-test p {
     281    margin-bottom: 15px;
     282    color: #666;
     283}
     284
     285.cfgeo-webhook-logs {
     286    background: #fff;
     287    border: 1px solid #e1e1e1;
     288    border-radius: 4px;
     289    padding: 15px;
     290}
     291
     292.cfgeo-webhook-logs h4 {
     293    margin-top: 0;
     294    margin-bottom: 10px;
     295    color: #23282d;
     296}
     297
     298.cfgeo-webhook-logs p {
     299    margin-bottom: 15px;
     300    color: #666;
     301}
     302
     303.webhook-log-entry {
    25304    padding: 10px;
    26     margin-right: 2%;
     305    margin-bottom: 10px;
     306    border-radius: 3px;
     307    border-left: 4px solid #ddd;
     308}
     309
     310.webhook-log-entry.success {
     311    background: #f0f8f0;
     312    border-left-color: #46b450;
     313}
     314
     315.webhook-log-entry.error {
     316    background: #fef7f1;
     317    border-left-color: #dc3232;
     318}
     319
     320.webhook-log-entry strong {
     321    color: #23282d;
     322}
     323
     324.webhook-log-entry small {
     325    color: #666;
     326    display: block;
     327    margin-top: 5px;
     328}
     329
     330#webhook-test-result {
     331    margin-top: 10px;
     332}
     333
     334#webhook-test-result .notice {
     335    margin: 0;
     336}
     337
     338/* Clear webhook logs button */
     339#clear-webhook-logs {
     340    margin-bottom: 10px;
     341}
     342
     343#clear-webhook-logs:disabled {
     344    opacity: 0.6;
     345    cursor: not-allowed;
     346}
     347
     348/* Webhook Settings Fields */
     349.cfgeo-webhook-settings textarea {
    27350    width: 100%;
    28     margin-bottom: 20px;
    29 }
    30 
    31 @media ( min-width: 1285px ) {
    32     .cf7af-settings .left-box td {
    33         width: 70%;
    34         box-sizing: border-box;
     351    min-height: 100px;
     352    font-family: monospace;
     353}
     354
     355.cfgeo-webhook-settings input[type="text"] {
     356    width: 100%;
     357}
     358
     359.cfgeo-webhook-settings .description {
     360    font-style: italic;
     361    color: #666;
     362    margin-top: 5px;
     363}
     364
     365.cfgeo-input-text,
     366.cfgeo-input-date {
     367    padding: 10px 16px !important;
     368    border: 1px solid #C1CFDE !important;
     369    background: #FCFCFC !important;
     370    height: 48px !important;
     371    box-shadow: none !important;
     372    color: #4A494B !important;
     373    border-radius: 8px !important;
     374    font-weight: 400 !important;
     375    font-size: 16px !important;
     376    font-family: "Poppins", sans-serif !important;
     377    line-height: 1 !important;
     378    width: 100% !important;
     379    max-width: 500px !important;
     380}
     381
     382.cfgeo-main-date {
     383    display: flex;
     384    align-items: center;
     385    width: 100%;
     386}
     387
     388.cfgeo-input-text.spectrum.with-add-on {
     389    padding-left: 55px !important;
     390}
     391
     392.cfgeo-label {
     393    font-size: 16px !important;
     394    font-weight: 500 !important;
     395    font-family: "Poppins", sans-serif !important;
     396    line-height: 1.6 !important;
     397    color: #285064 !important;
     398    padding-bottom: 10px !important;
     399}
     400
     401.cfgeo-input-select {
     402    line-height: 1.3 !important;
     403    background: #FCFCFC url('../../assets/images/arrow.png') no-repeat right 7px top 55% !important;
     404    background-size: 16px 10px !important;
     405}
     406
     407.cfgeo-submit-btn {
     408    padding: 20px 24px !important;
     409    border-radius: 4px !important;
     410    border: 1px solid #0074A2 !important;
     411    background-color: #FFFFFF !important;
     412    color: #0074A2 !important;
     413    font-size: 16px !important;
     414    font-weight: 500 !important;
     415    font-family: "Poppins", sans-serif !important;
     416    line-height: 1 !important;
     417    cursor: pointer !important;
     418}
     419
     420.cfgeo-submit-btn:hover {
     421    background-color: #0074A2 !important;
     422    color: #FFFFFF !important;
     423}
     424
     425.cfgeo-checkbox {
     426    width: 16px !important;
     427    height: 16px !important;
     428    border-radius: 4px !important;
     429    border: 1px solid #cccccc !important;
     430    background: #FFFFFF !important;
     431}
     432
     433.cfgeo-textarea {
     434    padding: 10px 16px !important;
     435    border: 1px solid #C1CFDE !important;
     436    background: #FCFCFC !important;
     437    height: 200px !important;
     438    box-shadow: none !important;
     439    color: #4A494B !important;
     440    border-radius: 8px !important;
     441    font-weight: 400 !important;
     442    font-size: 16px !important;
     443    font-family: "Poppins", sans-serif !important;
     444    line-height: 1.4 !important;
     445    width: 100% !important;
     446    max-width: 500px !important;
     447}
     448
     449.cfgeo-main-layout .nav-tab-wrapper {
     450    border-bottom: 1px solid #c3c4c7 !important;
     451    margin: 0 !important;
     452    padding-top: 9px !important;
     453    padding-bottom: 0 !important;
     454    line-height: inherit !important;
     455    display: flex;
     456    flex-wrap: wrap;
     457}
     458
     459.cfgeo-main-layout .nav-tab-wrapper .nav-tab {
     460    background: none !important;
     461    box-shadow: none !important;
     462    border: none !important;
     463    color: #285064 !important;
     464    font-weight: 500 !important;
     465    font-size: 16px !important;
     466    font-family: "Poppins", sans-serif !important;
     467    padding: 5px 5px 15px 5px !important;
     468    margin-right: 12px !important;
     469    margin-left: 0 !important;
     470}
     471
     472
     473.cfgeo-main-layout .nav-tab-wrapper .nav-tab-active {
     474    border-bottom: 3px solid #11AAB4 !important;
     475}
     476
     477
     478@media (max-width: 720px) and (orientation: portrait) {
     479    .cfgeo-main-layout .nav-tab-wrapper .nav-tab {
     480        margin: 0  !important;
     481        padding: 9px !important;
     482    }
     483    .cfgeo-main-layout .form-table td,
     484    .cfgeo-main-layout .form-table th {
     485        width: 100% !important;
    35486    }
    36 }
    37 
    38 @media ( min-width: 782px ) and ( max-width: 1284px ) {
    39     .cf7af-settings .left-box td {
    40         width: 60%;
    41         box-sizing: border-box;
     487    .cfgeo-main-layout .form-table tr {
     488        flex-wrap: wrap;
    42489    }
    43 }
    44 
    45 .cf7af-settings .left-box td input {
    46     box-sizing: border-box;
    47 }
    48 
    49 #contact-form-editor .cf7af-settings .form-table th {
    50     width: auto !important;
    51 }
    52 
    53 .tooltip-table .postbox {
    54     box-sizing: border-box;
    55 }
    56 
    57 .tooltip-table .left-box {
    58     padding: 10px;
    59     margin-right: 2%;
    60     width: 100%;
    61     margin-bottom: 20px;
    62 }
    63 
    64 @media ( min-width: 1285px ) {
    65     .tooltip-table .left-box td {
    66         width: 70%;
    67         box-sizing: border-box;
     490    .cfgeo-filter-row {
     491        width: 100%;
     492        padding-right: 0;
    68493    }
    69494}
    70 
    71 @media ( min-width: 782px ) and ( max-width: 1284px ) {
    72     .tooltip-table .left-box td {
    73         width: 60%;
    74         box-sizing: border-box;
    75     }
    76 }
    77 
    78 .tooltip-table .left-box td input {
    79     box-sizing: border-box;
    80 }
    81 
    82 .tooltip-table .form-table th {
    83     width: auto !important;
    84 }
  • abandoned-contact-form-7/tags/2.9/assets/css/admin.min.css

    r2383635 r3374823  
    1 .cf7af-notification-setting th{width:230px!important}.cf7af-tooltip{display:inline-block;width:18px;height:18px;vertical-align:middle;border-radius:100%;margin-left:10px;background-image:url(data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJpbmZvLWNpcmNsZSIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWluZm8tY2lyY2xlIGZhLXctMTYiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMjU2IDhDMTE5LjA0MyA4IDggMTE5LjA4MyA4IDI1NmMwIDEzNi45OTcgMTExLjA0MyAyNDggMjQ4IDI0OHMyNDgtMTExLjAwMyAyNDgtMjQ4QzUwNCAxMTkuMDgzIDM5Mi45NTcgOCAyNTYgOHptMCAxMTBjMjMuMTk2IDAgNDIgMTguODA0IDQyIDQycy0xOC44MDQgNDItNDIgNDItNDItMTguODA0LTQyLTQyIDE4LjgwNC00MiA0Mi00MnptNTYgMjU0YzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTg4Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDEydi02NGgtMTJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNjRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYxMDBoMTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNHoiPjwvcGF0aD48L3N2Zz4=);background-repeat:no-repeat;background-size:cover}.cf7af-pointer .wp-pointer-content h3:before{content:'\f348'}.cf7af-settings .postbox{box-sizing:border-box}.cf7af-settings .left-box{padding:10px;margin-right:2%;width:100%;margin-bottom:20px}@media (min-width:1285px){.cf7af-settings .left-box td{width:70%;box-sizing:border-box}}@media (min-width:782px) and (max-width:1284px){.cf7af-settings .left-box td{width:60%;box-sizing:border-box}}.cf7af-settings .left-box td input{box-sizing:border-box}#contact-form-editor .cf7af-settings .form-table th{width:auto!important}.tooltip-table .postbox{box-sizing:border-box}.tooltip-table .left-box{padding:10px;margin-right:2%;width:100%;margin-bottom:20px}@media (min-width:1285px){.tooltip-table .left-box td{width:70%;box-sizing:border-box}}@media (min-width:782px) and (max-width:1284px){.tooltip-table .left-box td{width:60%;box-sizing:border-box}}.tooltip-table .left-box td input{box-sizing:border-box}.tooltip-table .form-table th{width:auto!important}
     1.alignleft.actions .button,.alignleft.actions input[type=button],.alignleft.actions input[type=submit],.cfgeo-tooltip{vertical-align:middle}.cfgeo-tooltip{display:inline-block;width:18px;height:18px;border-radius:100%;margin-left:10px;background-image:url(data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJpbmZvLWNpcmNsZSIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWluZm8tY2lyY2xlIGZhLXctMTYiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMjU2IDhDMTE5LjA0MyA4IDggMTE5LjA4MyA4IDI1NmMwIDEzNi45OTcgMTExLjA0MyAyNDggMjQ4IDI0OHMyNDgtMTExLjAwMyAyNDgtMjQ4QzUwNCAxMTkuMDgzIDM5Mi45NTcgOCAyNTYgOHptMCAxMTBjMjMuMTk2IDAgNDIgMTguODA0IDQyIDQycy0xOC44MDQgNDItNDIgNDItNDItMTguODA0LTQyLTQyIDE4LjgwNC00MiA0Mi00MnptNTYgMjU0YzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTg4Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDEydi02NGgtMTJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNjRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYxMDBoMTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNHoiPjwvcGF0aD48L3N2Zz4=);background-repeat:no-repeat;background-size:cover}.validation-error-geo{border-color:red!important;border-width:2px!important}.cfgeo-pointer .wp-pointer-content h3:before{content:'\f348'}.shortcode-table{width:75%;margin-top:15px}.shortcode-table tr{border-radius:3px;padding:12px 15px;display:flex;justify-content:space-between;margin-bottom:5px}.shortcode-table thead tr{background-color:#95a5a6;font-size:14px;text-transform:uppercase;letter-spacing:.03em}.shortcode-table tbody tr{background-color:#fff;box-shadow:0 0 9px 0 rgba(0,0,0,.1)}.shortcode-table td{width:70%}.shortcode-table td+td{width:30%}.shortcode-table tfoot{background-color:#95a5a6}.cfgeo-filter-row label,.shortcode-table tfoot td{width:100%}.shortcode-table tfoot h3,.shortcode-table tfoot p{margin:0}.shortcode-table input{color:000;width:100%;cursor:text}.sp-original-input-container{display:block}.sp-colorize-container{border:none!important;position:absolute;top:0;left:1px;height:100%;overflow:hidden}.sp-colorize{height:100%}.cfgeo-advanced-filters{margin:10px 0;padding:15px;background:#f9f9f9;border:1px solid #ddd;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.1);position:relative;display:flex;flex-wrap:wrap;float:left}.cfgeo-advanced-filters label{display:inline-block;width:80px;font-weight:700;color:#23282d}.cfgeo-advanced-filters input[type=date],.cfgeo-advanced-filters input[type=text],.cfgeo-advanced-filters select{border:1px solid #ddd;border-radius:3px;padding:5px 8px;font-size:13px}.cfgeo-advanced-filters input[type=date]:focus,.cfgeo-advanced-filters input[type=text]:focus,.cfgeo-advanced-filters select:focus,.cfgeo-filter-row input:focus,.cfgeo-filter-row select:focus{border-color:#0073aa;box-shadow:0 0 0 1px #0073aa;outline:0}.cfgeo-advanced-filters .button{margin-right:10px}.alignleft.actions .button:last-child,.cfgeo-advanced-filters .button:last-child{margin-right:0}.cfgeo-filter-row{margin-bottom:10px;display:flex;flex-wrap:wrap}.cfgeo-filter-row:last-child{margin-bottom:0}.cfgeo-filter-buttons{margin-top:15px;padding-top:15px;border-top:1px solid #ddd;width:100%}.cfgeo-filter-count{margin-top:10px;padding:8px 12px;background:#e7f7ff;border:1px solid #b3d9ff;border-radius:3px;font-size:12px;color:#0073aa}.cfgeo-loading{display:none;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1000}.cfgeo-loading .spinner{float:none;margin:0}.cfgeo-advanced-filters.loading::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(255,255,255,.8);z-index:999}.cfgeo-filter-row input:disabled,.cfgeo-filter-row select:disabled{opacity:.6;cursor:not-allowed}.alignleft.actions{float:left;margin:0;padding:0}.alignleft.actions .button{margin-right:5px}.cfgeo-webhook-settings{margin:20px 0}.cfgeo-webhook-settings h3{margin-bottom:10px;color:#23282d}.cfgeo-webhook-settings p{margin-bottom:20px;color:#666}.cfgeo-webhook-info{background:#f9f9f9;border:1px solid #e1e1e1;border-radius:4px;padding:15px;margin-bottom:20px}.cfgeo-webhook-info h4{margin-top:0;margin-bottom:10px;color:#23282d}.cfgeo-webhook-info ul{margin:0;padding-left:20px}.cfgeo-webhook-info li{margin-bottom:5px;color:#666}.cfgeo-webhook-test{background:#fff;border:1px solid #e1e1e1;border-radius:4px;padding:15px;margin-bottom:20px}.cfgeo-webhook-test h4{margin-top:0;margin-bottom:10px;color:#23282d}.cfgeo-webhook-test p{margin-bottom:15px;color:#666}.cfgeo-webhook-logs{background:#fff;border:1px solid #e1e1e1;border-radius:4px;padding:15px}.cfgeo-webhook-logs h4{margin-top:0;margin-bottom:10px;color:#23282d}.cfgeo-webhook-logs p{margin-bottom:15px;color:#666}.webhook-log-entry{padding:10px;margin-bottom:10px;border-radius:3px;border-left:4px solid #ddd}.webhook-log-entry.success{background:#f0f8f0;border-left-color:#46b450}.webhook-log-entry.error{background:#fef7f1;border-left-color:#dc3232}.webhook-log-entry strong{color:#23282d}.webhook-log-entry small{color:#666;display:block;margin-top:5px}#webhook-test-result{margin-top:10px}#webhook-test-result .notice{margin:0}#clear-webhook-logs{margin-bottom:10px}#clear-webhook-logs:disabled{opacity:.6;cursor:not-allowed}.cfgeo-webhook-settings textarea{width:100%;min-height:100px;font-family:monospace}.cfgeo-webhook-settings input[type="text"]{width:100%}.cfgeo-webhook-settings .description{font-style:italic;color:#666;margin-top:5px}
  • abandoned-contact-form-7/tags/2.9/assets/js/admin.js

    r2847286 r3374823  
    33
    44    jQuery(document).ready( function($) {
    5 
    6         jQuery( '#cf7af-enable-abandoned-pointer' ).on( 'hover click', function() {
    7             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    8             jQuery( '#cf7af-enable-abandoned-pointer' ).pointer({
    9                 pointerClass: 'wp-pointer cf7af-pointer',
    10                 content: translate_string_cf7af.cf7af_enable_abandoned,
    11                 position: 'left center',
    12             } ).pointer('open');
    13         });
    14 
    15         jQuery( '#cf7af-abandoned-email-pointer' ).on( 'hover click', function() {
    16             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    17             jQuery( '#cf7af-abandoned-email-pointer' ).pointer({
    18                 pointerClass: 'wp-pointer cf7af-pointer',
    19                 content: translate_string_cf7af.cf7af_abandoned_email,
    20                 position: 'left center',
    21             } ).pointer('open');
    22         });
    23 
    24         jQuery( '#cf7af-abandoned-specific-field-pointer' ).on( 'hover click', function() {
    25             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    26             jQuery( '#cf7af-abandoned-specific-field-pointer' ).pointer({
    27                 pointerClass: 'wp-pointer cf7af-pointer',
    28                 content: translate_string_cf7af.cf7af_abandoned_specific_field,
    29                 position: 'left center',
    30             } ).pointer('open');
    31         });
     5        // Debug: Check if cfgeo_ajax is available
     6        console.log('CFGEO Debug: cfgeo_ajax available:', typeof cfgeo_ajax !== 'undefined');
     7        if (typeof cfgeo_ajax !== 'undefined') {
     8            console.log('CFGEO Debug: cfgeo_ajax data:', cfgeo_ajax);
     9        } else {
     10            console.log('CFGEO Debug: cfgeo_ajax not available, some features may be limited');
     11        }
    3212       
    33         jQuery( '#cf7af-subject-pointer' ).on( 'hover click', function() {
    34             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    35             jQuery( '#cf7af-subject-pointer' ).pointer({
    36                 pointerClass: 'wp-pointer cf7af-pointer',
    37                 content: translate_string_cf7af.cf7af_subject,
    38                 position: 'left center',
    39             } ).pointer('open');
    40         });
    41 
    42         jQuery( '#cf7af-email-body-pointer' ).on( 'hover click', function() {
    43             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    44             jQuery( '#cf7af-email-body-pointer' ).pointer({
    45                 pointerClass: 'wp-pointer cf7af-pointer',
    46                 content: translate_string_cf7af.cf7af_email_body,
    47                 position: 'left center',
    48             } ).pointer('open');
    49         });
    50 
    51         jQuery( '#abandoned-email-address-pointer' ).on( 'hover click', function() {
    52             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    53             jQuery( '#abandoned-email-address-pointer' ).pointer({
    54                 pointerClass: 'wp-pointer cf7af-pointer',
    55                 content: translate_string_cf7af.abandoned_email_address,
    56                 position: 'left center',
    57             } ).pointer('open');
    58         });
    59 
    60         jQuery( '#abandoned-from-name-pointer' ).on( 'hover click', function() {
    61             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    62             jQuery( '#abandoned-from-name-pointer' ).pointer({
    63                 pointerClass: 'wp-pointer cf7af-pointer',
    64                 content: translate_string_cf7af.abandoned_from_name,
    65                 position: 'left center',
    66             } ).pointer('open');
    67         });
    68 
    69         jQuery( '#abandoned-from-email-address-pointer' ).on( 'hover click', function() {
    70             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    71             jQuery( '#abandoned-from-email-address-pointer' ).pointer({
    72                 pointerClass: 'wp-pointer cf7af-pointer',
    73                 content: translate_string_cf7af.abandoned_from_email_address,
    74                 position: 'left center',
    75             } ).pointer('open');
    76         });
    77 
    78         jQuery( '#abandoned-subject-pointer' ).on( 'hover click', function() {
    79             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    80             jQuery( '#abandoned-subject-pointer' ).pointer({
    81                 pointerClass: 'wp-pointer cf7af-pointer',
    82                 content: translate_string_cf7af.abandoned_subject,
    83                 position: 'left center',
    84             } ).pointer('open');
    85         });
    86 
    87         jQuery( '#abandoned-email-body-pointer' ).on( 'hover click', function() {
    88             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    89             jQuery( '#abandoned-email-body-pointer' ).pointer({
    90                 pointerClass: 'wp-pointer cf7af-pointer',
    91                 content: translate_string_cf7af.abandoned_email_body,
    92                 position: 'left center',
    93             } ).pointer('open');
    94         });
    95 
    96         jQuery( '#cf7af-from-email-pointer' ).on( 'hover click', function() {
    97             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    98             jQuery( '#cf7af-from-email-pointer' ).pointer({
    99                 pointerClass: 'wp-pointer cf7af-pointer',
    100                 content: translate_string_cf7af.cf7af_from_email,
    101                 position: 'left center',
    102             } ).pointer('open');
    103         });
    104 
    105         jQuery( '#cf7af-from-name-pointer' ).on( 'hover click', function() {
    106             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    107             jQuery( '#cf7af-from-name-pointer' ).pointer({
    108                 pointerClass: 'wp-pointer cf7af-pointer',
    109                 content: translate_string_cf7af.cf7af_from_name,
    110                 position: 'left center',
    111             } ).pointer('open');
    112         });
    113 
     13        // Debug: Check if we're on the CFGEO page
     14        console.log('CFGEO Debug: Advanced filters container found:', $('.cfgeo-advanced-filters').length);
     15            // Initialize spectrum color picker if available
     16    if (jQuery.fn.spectrum) {
     17        jQuery('#cfgeo_color_picker').spectrum({
     18            type: "component",
     19            showPalette: false,
     20            showSelectionPalette: true,
     21            togglePaletteOnly: true,
     22            hideAfterPaletteSelect: true,
     23            showAlpha: false,
     24            change: function(color) {
     25                if(color != null){
     26                    var col = color.toHexString();
     27                    if(col.length == 7){
     28                        jQuery(".cfgeo_color_picker").removeClass('validation-error-geo');
     29                    }
     30                }else{
     31                    jQuery(".cfgeo_color_picker").addClass('validation-error-geo');
     32                    return false;
     33                }
     34            }
     35        });
     36    } else {
     37        console.log('CFGEO Debug: Spectrum plugin not available, skipping color picker initialization');
     38    }
     39
     40        jQuery('.setting-geolocation input#submit').click( function() {
     41            // Only validate color picker if spectrum is available and color picker exists on current tab
     42            if (jQuery.fn.spectrum && jQuery(".cfgeo_color_picker").length > 0) {
     43                var color_val = jQuery(".cfgeo_color_picker").val();
     44                if(jQuery( ".cfgeo_color_picker" ).hasClass( "validation-error-geo" ) || color_val == null || color_val == ''){
     45                    jQuery(".cfgeo_color_picker").addClass('validation-error-geo');
     46                    return false;
     47                }else if(color_val.length != 7){
     48                    jQuery(".cfgeo_color_picker").addClass('validation-error-geo');
     49                    return false;
     50                }
     51            }
     52        });
     53
     54        jQuery("#form-id-graph").change(function(){
     55            window.location= translate_string_geo.form_graph_url + this.value;
     56        });
     57
     58        jQuery( '#cfgeo-ipstack' ).on( 'mouseenter click', function() {
     59
     60            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     61            jQuery( '#cfgeo-ipstack' ).pointer({
     62                pointerClass: 'wp-pointer cfgeo-pointer',
     63                content: translate_string_geo.ipstack,
     64                position: 'left center',
     65            } ).pointer('open');
     66        });
     67
     68        jQuery( '#cfgeo-google' ).on( 'mouseenter click', function() {
     69
     70            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     71            jQuery( '#cfgeo-google' ).pointer({
     72                pointerClass: 'wp-pointer cfgeo-pointer',
     73                content: translate_string_geo.google,
     74                position: 'left center',
     75            } ).pointer('open');
     76        });
     77
     78        jQuery( '#cfgeo-debug' ).on( 'mouseenter click', function() {
     79
     80            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     81            jQuery( '#cfgeo-debug' ).pointer({
     82                pointerClass: 'wp-pointer cfgeo-pointer',
     83                content: translate_string_geo.debug,
     84                position: 'left center',
     85            } ).pointer('open');
     86        });
     87
     88        jQuery( '#cfgeo-color-graph' ).on( 'mouseenter click', function() {
     89
     90            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     91            jQuery( '#cfgeo-color-graph' ).pointer({
     92                pointerClass: 'wp-pointer cfgeo-pointer',
     93                content: translate_string_geo.graphcolor,
     94                position: 'left center',
     95            } ).pointer('open');
     96        });
     97
     98        // Webhook tooltips
     99        jQuery( '#cfgeo-webhook-enabled' ).on( 'mouseenter click', function() {
     100            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     101            jQuery( '#cfgeo-webhook-enabled' ).pointer({
     102                pointerClass: 'wp-pointer cfgeo-pointer',
     103                content: translate_string_geo.webhook_enabled,
     104                position: 'left center',
     105            } ).pointer('open');
     106        });
     107
     108        jQuery( '#cfgeo-webhook-urls' ).on( 'mouseenter click', function() {
     109            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     110            jQuery( '#cfgeo-webhook-urls' ).pointer({
     111                pointerClass: 'wp-pointer cfgeo-pointer',
     112                content: translate_string_geo.webhook_urls,
     113                position: 'left center',
     114            } ).pointer('open');
     115        });
     116
     117        jQuery( '#cfgeo-webhook-secret' ).on( 'mouseenter click', function() {
     118            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     119            jQuery( '#cfgeo-webhook-secret' ).pointer({
     120                pointerClass: 'wp-pointer cfgeo-pointer',
     121                content: translate_string_geo.webhook_secret,
     122                position: 'left center',
     123            } ).pointer('open');
     124        });
     125
     126
     127
     128
     129
     130        // Advanced Filter JavaScript for CFGEO Admin Panel
     131        // Handles AJAX filtering, debouncing, pagination, and sorting
     132       
     133        var filterTimeout;
     134        var isLoading = false;
     135
     136        // Function to perform AJAX filtering
     137        function performAjaxFilter() {
     138            console.log('performAjaxFilter called');
     139            if (isLoading) {
     140                console.log('Already loading, skipping');
     141                return;
     142            }
     143           
     144            // Check if we're on the correct page
     145            if (!$('.cfgeo-advanced-filters').length) {
     146                console.log('Not on CFGEO page, skipping');
     147                return;
     148            }
     149           
     150            isLoading = true;
     151           
     152            // Show loading states
     153            $('.cfgeo-advanced-filters').addClass('loading');
     154            $('.cfgeo-loading').show();
     155            $('.cfgeo-filter-row input, .cfgeo-filter-row select').prop('disabled', true);
     156            $('.wp-list-table tbody').html('<tr><td colspan="8" style="text-align: center; padding: 20px;"><div class="spinner is-active"></div> Loading...</td></tr>');
     157           
     158            var filterData = {
     159                action: 'cfgeo_filter_submissions',
     160                nonce: cfgeo_ajax.nonce,
     161                form_id: $('#form-id').val() || 'all',
     162                country_filter: $('#country-filter').val() || '',
     163                city_filter: $('#city-filter').val() || '',
     164                date_from: $('#date-from').val() || '',
     165                date_to: $('#date-to').val() || '',
     166                search_term: $('#search-term').val() || '',
     167                orderby: $('input[name="orderby"]').val() || 'date',
     168                order: $('input[name="order"]').val() || 'DESC',
     169                paged: $('input[name="paged"]').val() || '1'
     170            };
     171
     172            console.log('Sending AJAX request with data:', filterData);
     173            $.ajax({
     174                url: ajaxurl,
     175                type: 'POST',
     176                data: filterData,
     177                success: function(response) {
     178                    if (response.success) {
     179                        // Update the table body
     180                        $('.wp-list-table tbody').html(response.data.html);
     181                       
     182                        // Update pagination
     183                        if (response.data.pagination) {
     184                            $('.tablenav-pages').html(response.data.pagination);
     185                        } else {
     186                            $('.tablenav-pages').html('');
     187                        }
     188                       
     189                        // Update filter count
     190                        $('.cfgeo-filter-count').remove();
     191                        if (response.data.total > 0) {
     192                            var filterInfo = $('<div class="cfgeo-filter-count">Showing ' + response.data.total + ' submission(s)</div>');
     193                            $('.cfgeo-advanced-filters').append(filterInfo);
     194                        } else {
     195                            var filterInfo = $('<div class="cfgeo-filter-count">No submissions found matching your criteria</div>');
     196                            $('.cfgeo-advanced-filters').append(filterInfo);
     197                        }
     198                       
     199                        // Update URL without page reload
     200                        var newUrl = new URL(window.location);
     201                        newUrl.searchParams.set('form-id', filterData.form_id);
     202                        newUrl.searchParams.set('country-filter', filterData.country_filter);
     203                        newUrl.searchParams.set('city-filter', filterData.city_filter);
     204                        newUrl.searchParams.set('date-from', filterData.date_from);
     205                        newUrl.searchParams.set('date-to', filterData.date_to);
     206                        newUrl.searchParams.set('search-term', filterData.search_term);
     207                        newUrl.searchParams.set('orderby', filterData.orderby);
     208                        newUrl.searchParams.set('order', filterData.order);
     209                        newUrl.searchParams.set('paged', filterData.paged);
     210                       
     211                        window.history.pushState({}, '', newUrl);
     212                    } else {
     213                        alert('Error: ' + response.data);
     214                    }
     215                },
     216                error: function(xhr, status, error) {
     217                    console.log('AJAX Error:', xhr.responseText);
     218                    alert(cfgeo_ajax.error_message);
     219                },
     220                complete: function() {
     221                    isLoading = false;
     222                    $('.cfgeo-advanced-filters').removeClass('loading');
     223                    $('.cfgeo-loading').hide();
     224                    $('.cfgeo-filter-row input, .cfgeo-filter-row select').prop('disabled', false);
     225                }
     226            });
     227        }
     228
     229        // Only initialize AJAX functionality if we're on the CFGEO page
     230        if ($('.cfgeo-advanced-filters').length && typeof cfgeo_ajax !== 'undefined') {
     231            console.log('CFGEO Debug: Initializing AJAX functionality');
     232           
     233            // Real-time filtering with debounce
     234            $('#form-id, #country-filter, #city-filter, #date-from, #date-to').on('change', function() {
     235                console.log('Filter changed:', $(this).attr('id'), $(this).val());
     236                clearTimeout(filterTimeout);
     237                filterTimeout = setTimeout(performAjaxFilter, 300);
     238            });
     239
     240            // Search with debounce
     241            $('#search-term').on('input', function() {
     242                console.log('Search input:', $(this).val());
     243                clearTimeout(filterTimeout);
     244                filterTimeout = setTimeout(performAjaxFilter, 500);
     245            });
     246
     247            // Search with Enter key
     248            $('#search-term').on('keypress', function(e) {
     249                if (e.which === 13) {
     250                    clearTimeout(filterTimeout);
     251                    performAjaxFilter();
     252                }
     253            });
     254
     255            // Clear filters functionality
     256            $('.cfgeo-clear-filters').on('click', function(e) {
     257                e.preventDefault();
     258               
     259                // Clear all filter values
     260                $('#form-id').val('all');
     261                $('#country-filter').val('');
     262                $('#city-filter').val('');
     263                $('#date-from').val('');
     264                $('#date-to').val('');
     265                $('#search-term').val('');
     266                $('input[name="orderby"]').val('date');
     267                $('input[name="order"]').val('DESC');
     268                $('input[name="paged"]').val('1');
     269               
     270                // Perform filter
     271                performAjaxFilter();
     272            });
     273
     274            // Date validation
     275            $('#date-from, #date-to').on('change', function() {
     276                var fromDate = $('#date-from').val();
     277                var toDate = $('#date-to').val();
     278               
     279                if (fromDate && toDate && fromDate > toDate) {
     280                    alert(cfgeo_ajax.date_error_message);
     281                    $(this).val('');
     282                }
     283            });
     284
     285            // Handle pagination clicks
     286            $(document).on('click', '.tablenav-pages a', function(e) {
     287                e.preventDefault();
     288                var paged = $(this).data('page') || '1';
     289               
     290                $('input[name="paged"]').val(paged);
     291                performAjaxFilter();
     292            });
     293
     294            // Handle sorting clicks
     295            $(document).on('click', '.wp-list-table th.sortable a, .wp-list-table th.sorted a', function(e) {
     296                e.preventDefault();
     297                var href = $(this).attr('href');
     298                var url = new URL(href);
     299                var orderby = url.searchParams.get('orderby') || 'date';
     300                var order = url.searchParams.get('order') || 'DESC';
     301               
     302                $('input[name="orderby"]').val(orderby);
     303                $('input[name="order"]').val(order);
     304                $('input[name="paged"]').val('1'); // Reset to first page when sorting
     305                performAjaxFilter();
     306            });
     307
     308            // Initial filter count display
     309            var totalPosts = $('.wp-list-table tbody tr').length;
     310            if (totalPosts > 0) {
     311                var filterInfo = $('<div class="cfgeo-filter-count">Showing ' + totalPosts + ' submission(s)</div>');
     312                $('.cfgeo-advanced-filters').append(filterInfo);
     313            }
     314        } else {
     315            console.log('CFGEO Debug: Not on CFGEO page or cfgeo_ajax not available, skipping AJAX initialization');
     316        }
     317
     318        // Webhook API functionality
     319        if ($('#test-webhook').length && typeof cfgeo_ajax !== 'undefined') {
     320            $('#test-webhook').on('click', function() {
     321                var button = $(this);
     322                var originalText = button.text();
     323               
     324                button.prop('disabled', true).text('Testing...');
     325                $('#webhook-test-result').hide();
     326               
     327                $.ajax({
     328                    url: ajaxurl,
     329                    type: 'POST',
     330                    data: {
     331                        action: 'cfgeo_test_webhook',
     332                        nonce: cfgeo_ajax.webhook_test_nonce || cfgeo_ajax.nonce
     333                    },
     334                    success: function(response) {
     335                        if (response && response.success) {
     336                            var message = response.data && response.data.message ? response.data.message : 'Test completed successfully!';
     337                            $('#webhook-test-result').html(
     338                                '<div class="notice notice-success"><p>' + message + '</p></div>'
     339                            ).show();
     340                        } else {
     341                            var message = response && response.data && response.data.message ? response.data.message : 'Test failed. Please try again.';
     342                            $('#webhook-test-result').html(
     343                                '<div class="notice notice-error"><p>' + message + '</p></div>'
     344                            ).show();
     345                        }
     346                    },
     347                    error: function() {
     348                        $('#webhook-test-result').html(
     349                            '<div class="notice notice-error"><p>An error occurred while testing the webhook.</p></div>'
     350                        ).show();
     351                    },
     352                    complete: function() {
     353                        button.prop('disabled', false).text(originalText);
     354                    }
     355                });
     356            });
     357        }
     358
     359        // Load webhook logs
     360        if ($('#webhook-logs').length && typeof cfgeo_ajax !== 'undefined') {
     361            loadWebhookLogs();
     362        }
     363
     364        // Clear webhook logs functionality
     365        if ($('#clear-webhook-logs').length && typeof cfgeo_ajax !== 'undefined') {
     366            $('#clear-webhook-logs').on('click', function() {
     367                if (confirm('Are you sure you want to clear all webhook logs? This action cannot be undone.')) {
     368                    var button = $(this);
     369                    var originalText = button.text();
     370                   
     371                    button.prop('disabled', true).text('Clearing...');
     372                   
     373                    $.ajax({
     374                        url: ajaxurl,
     375                        type: 'POST',
     376                        data: {
     377                            action: 'cfgeo_clear_webhook_logs',
     378                            nonce: cfgeo_ajax.webhook_logs_nonce || cfgeo_ajax.nonce
     379                        },
     380                        success: function(response) {
     381                            if (response && response.success) {
     382                                // Clear the logs display
     383                                $('#webhook-logs').html('<p class="description">No webhook logs available yet.</p>');
     384                               
     385                                // Disable the clear button since logs are now empty
     386                                $('#clear-webhook-logs').prop('disabled', true);
     387                               
     388                                // Show success message
     389                                var message = response.data && response.data.message ? response.data.message : 'Webhook logs cleared successfully.';
     390                                $('#webhook-logs').before(
     391                                    '<div class="notice notice-success" style="margin-bottom: 10px;"><p>' + message + '</p></div>'
     392                                );
     393                               
     394                                // Remove the notice after 3 seconds
     395                                setTimeout(function() {
     396                                    $('#webhook-logs').prev('.notice').fadeOut();
     397                                }, 3000);
     398                            } else {
     399                                var message = response && response.data && response.data.message ? response.data.message : 'Failed to clear webhook logs.';
     400                                $('#webhook-logs').before(
     401                                    '<div class="notice notice-error" style="margin-bottom: 10px;"><p>' + message + '</p></div>'
     402                                );
     403                            }
     404                        },
     405                        error: function() {
     406                            $('#webhook-logs').before(
     407                                '<div class="notice notice-error" style="margin-bottom: 10px;"><p>An error occurred while clearing webhook logs.</p></div>'
     408                            );
     409                        },
     410                        complete: function() {
     411                            button.prop('disabled', false).text(originalText);
     412                        }
     413                    });
     414                }
     415            });
     416        }
     417
     418        function loadWebhookLogs() {
     419            if (typeof cfgeo_ajax === 'undefined') {
     420                $('#webhook-logs').html('<p class="description">Unable to load webhook logs - AJAX not available.</p>');
     421                $('#clear-webhook-logs').prop('disabled', true);
     422                return;
     423            }
     424           
     425            $.ajax({
     426                url: ajaxurl,
     427                type: 'POST',
     428                data: {
     429                    action: 'cfgeo_get_webhook_logs',
     430                    nonce: cfgeo_ajax.webhook_logs_nonce || cfgeo_ajax.nonce
     431                },
     432                success: function(response) {
     433                    if (response && response.success && response.data && response.data.logs) {
     434                        var logsHtml = '';
     435                        if (response.data.logs.length > 0) {
     436                            // Enable clear button when logs exist
     437                            $('#clear-webhook-logs').prop('disabled', false);
     438                           
     439                            response.data.logs.forEach(function(log) {
     440                                var statusClass = log.success ? 'success' : 'error';
     441                                var statusText = log.success ? 'Success' : 'Failed';
     442                                logsHtml += '<div class="webhook-log-entry ' + statusClass + '">';
     443                                logsHtml += '<strong>' + statusText + '</strong> - ' + (log.timestamp || 'Unknown time') + '<br>';
     444                                logsHtml += '<small>URL: ' + (log.url || 'Unknown URL') + '</small><br>';
     445                                logsHtml += '<small>Response: ' + (log.response_code || 'Unknown') + ' - ' + (log.response_message || 'No message') + '</small>';
     446                                logsHtml += '</div>';
     447                            });
     448                        } else {
     449                            // Disable clear button when no logs exist
     450                            $('#clear-webhook-logs').prop('disabled', true);
     451                            logsHtml = '<p class="description">No webhook logs available yet.</p>';
     452                        }
     453                        $('#webhook-logs').html(logsHtml);
     454                    } else {
     455                        $('#webhook-logs').html('<p class="description">Unable to load webhook logs - invalid response format.</p>');
     456                        $('#clear-webhook-logs').prop('disabled', true);
     457                    }
     458                },
     459                error: function() {
     460                    $('#webhook-logs').html('<p class="description">Unable to load webhook logs.</p>');
     461                    $('#clear-webhook-logs').prop('disabled', true);
     462                }
     463            });
     464        }
    114465    });
    115466
  • abandoned-contact-form-7/tags/2.9/assets/js/admin.min.js

    r2847286 r3374823  
    1 !function(e){"use strict";jQuery(document).ready(function(e){jQuery("#cf7af-enable-abandoned-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-enable-abandoned-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_enable_abandoned,position:"left center"}).pointer("open")}),jQuery("#cf7af-abandoned-email-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-abandoned-email-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_abandoned_email,position:"left center"}).pointer("open")}),jQuery("#cf7af-abandoned-specific-field-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-abandoned-specific-field-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_abandoned_specific_field,position:"left center"}).pointer("open")}),jQuery("#cf7af-subject-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-subject-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_subject,position:"left center"}).pointer("open")}),jQuery("#cf7af-email-body-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-email-body-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_email_body,position:"left center"}).pointer("open")}),jQuery("#abandoned-email-address-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-email-address-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_email_address,position:"left center"}).pointer("open")}),jQuery("#abandoned-from-name-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-from-name-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_from_name,position:"left center"}).pointer("open")}),jQuery("#abandoned-from-email-address-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-from-email-address-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_from_email_address,position:"left center"}).pointer("open")}),jQuery("#abandoned-subject-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-subject-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_subject,position:"left center"}).pointer("open")}),jQuery("#abandoned-email-body-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-email-body-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_email_body,position:"left center"}).pointer("open")}),jQuery("#cf7af-from-email-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-from-email-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_from_email,position:"left center"}).pointer("open")}),jQuery("#cf7af-from-name-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-from-name-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_from_name,position:"left center"}).pointer("open")})})}(jQuery);
     1!function(e){"use strict";jQuery(document).ready((function(e){var o;console.log("CFGEO Debug: cfgeo_ajax available:","undefined"!=typeof cfgeo_ajax),"undefined"!=typeof cfgeo_ajax?console.log("CFGEO Debug: cfgeo_ajax data:",cfgeo_ajax):console.log("CFGEO Debug: cfgeo_ajax not available, some features may be limited"),console.log("CFGEO Debug: Advanced filters container found:",e(".cfgeo-advanced-filters").length),jQuery.fn.spectrum?jQuery("#cfgeo_color_picker").spectrum({type:"component",showPalette:!1,showSelectionPalette:!0,togglePaletteOnly:!0,hideAfterPaletteSelect:!0,showAlpha:!1,change:function(e){if(null==e)return jQuery(".cfgeo_color_picker").addClass("validation-error-geo"),!1;7==e.toHexString().length&&jQuery(".cfgeo_color_picker").removeClass("validation-error-geo")}}):console.log("CFGEO Debug: Spectrum plugin not available, skipping color picker initialization"),jQuery(".setting-geolocation input#submit").click((function(){if(jQuery.fn.spectrum&&jQuery(".cfgeo_color_picker").length>0){var e=jQuery(".cfgeo_color_picker").val();if(jQuery(".cfgeo_color_picker").hasClass("validation-error-geo")||null==e||""==e)return jQuery(".cfgeo_color_picker").addClass("validation-error-geo"),!1;if(7!=e.length)return jQuery(".cfgeo_color_picker").addClass("validation-error-geo"),!1}})),jQuery("#form-id-graph").change((function(){window.location=translate_string_geo.form_graph_url+this.value})),jQuery("#cfgeo-ipstack").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-ipstack").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.ipstack,position:"left center"}).pointer("open")})),jQuery("#cfgeo-google").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-google").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.google,position:"left center"}).pointer("open")})),jQuery("#cfgeo-debug").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-debug").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.debug,position:"left center"}).pointer("open")})),jQuery("#cfgeo-color-graph").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-color-graph").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.graphcolor,position:"left center"}).pointer("open")})),jQuery("#cfgeo-webhook-enabled").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-webhook-enabled").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.webhook_enabled,position:"left center"}).pointer("open")})),jQuery("#cfgeo-webhook-urls").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-webhook-urls").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.webhook_urls,position:"left center"}).pointer("open")})),jQuery("#cfgeo-webhook-secret").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-webhook-secret").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.webhook_secret,position:"left center"}).pointer("open")}));var t=!1;function a(){if(console.log("performAjaxFilter called"),t)console.log("Already loading, skipping");else if(e(".cfgeo-advanced-filters").length){t=!0,e(".cfgeo-advanced-filters").addClass("loading"),e(".cfgeo-loading").show(),e(".cfgeo-filter-row input, .cfgeo-filter-row select").prop("disabled",!0),e(".wp-list-table tbody").html('<tr><td colspan="8" style="text-align: center; padding: 20px;"><div class="spinner is-active"></div> Loading...</td></tr>');var o={action:"cfgeo_filter_submissions",nonce:cfgeo_ajax.nonce,form_id:e("#form-id").val()||"all",country_filter:e("#country-filter").val()||"",city_filter:e("#city-filter").val()||"",date_from:e("#date-from").val()||"",date_to:e("#date-to").val()||"",search_term:e("#search-term").val()||"",orderby:e('input[name="orderby"]').val()||"date",order:e('input[name="order"]').val()||"DESC",paged:e('input[name="paged"]').val()||"1"};console.log("Sending AJAX request with data:",o),e.ajax({url:ajaxurl,type:"POST",data:o,success:function(t){if(t.success){if(e(".wp-list-table tbody").html(t.data.html),t.data.pagination?e(".tablenav-pages").html(t.data.pagination):e(".tablenav-pages").html(""),e(".cfgeo-filter-count").remove(),t.data.total>0){var a=e('<div class="cfgeo-filter-count">Showing '+t.data.total+" submission(s)</div>");e(".cfgeo-advanced-filters").append(a)}else{a=e('<div class="cfgeo-filter-count">No submissions found matching your criteria</div>');e(".cfgeo-advanced-filters").append(a)}var r=new URL(window.location);r.searchParams.set("form-id",o.form_id),r.searchParams.set("country-filter",o.country_filter),r.searchParams.set("city-filter",o.city_filter),r.searchParams.set("date-from",o.date_from),r.searchParams.set("date-to",o.date_to),r.searchParams.set("search-term",o.search_term),r.searchParams.set("orderby",o.orderby),r.searchParams.set("order",o.order),r.searchParams.set("paged",o.paged),window.history.pushState({},"",r)}else alert("Error: "+t.data)},error:function(e,o,t){console.log("AJAX Error:",e.responseText),alert(cfgeo_ajax.error_message)},complete:function(){t=!1,e(".cfgeo-advanced-filters").removeClass("loading"),e(".cfgeo-loading").hide(),e(".cfgeo-filter-row input, .cfgeo-filter-row select").prop("disabled",!1)}})}else console.log("Not on CFGEO page, skipping")}if(e(".cfgeo-advanced-filters").length&&"undefined"!=typeof cfgeo_ajax){console.log("CFGEO Debug: Initializing AJAX functionality"),e("#form-id, #country-filter, #city-filter, #date-from, #date-to").on("change",(function(){console.log("Filter changed:",e(this).attr("id"),e(this).val()),clearTimeout(o),o=setTimeout(a,300)})),e("#search-term").on("input",(function(){console.log("Search input:",e(this).val()),clearTimeout(o),o=setTimeout(a,500)})),e("#search-term").on("keypress",(function(e){13===e.which&&(clearTimeout(o),a())})),e(".cfgeo-clear-filters").on("click",(function(o){o.preventDefault(),e("#form-id").val("all"),e("#country-filter").val(""),e("#city-filter").val(""),e("#date-from").val(""),e("#date-to").val(""),e("#search-term").val(""),e('input[name="orderby"]').val("date"),e('input[name="order"]').val("DESC"),e('input[name="paged"]').val("1"),a()})),e("#date-from, #date-to").on("change",(function(){var o=e("#date-from").val(),t=e("#date-to").val();o&&t&&o>t&&(alert(cfgeo_ajax.date_error_message),e(this).val(""))})),e(document).on("click",".tablenav-pages a",(function(o){o.preventDefault();var t=e(this).data("page")||"1";e('input[name="paged"]').val(t),a()})),e(document).on("click",".wp-list-table th.sortable a, .wp-list-table th.sorted a",(function(o){o.preventDefault();var t=e(this).attr("href"),r=new URL(t),n=r.searchParams.get("orderby")||"date",i=r.searchParams.get("order")||"DESC";e('input[name="orderby"]').val(n),e('input[name="order"]').val(i),e('input[name="paged"]').val("1"),a()}));var r=e(".wp-list-table tbody tr").length;if(r>0){var n=e('<div class="cfgeo-filter-count">Showing '+r+" submission(s)</div>");e(".cfgeo-advanced-filters").append(n)}}else console.log("CFGEO Debug: Not on CFGEO page or cfgeo_ajax not available, skipping AJAX initialization");e("#test-webhook").length&&"undefined"!=typeof cfgeo_ajax&&e("#test-webhook").on("click",(function(){var o=e(this),t=o.text();o.prop("disabled",!0).text("Testing..."),e("#webhook-test-result").hide(),e.ajax({url:ajaxurl,type:"POST",data:{action:"cfgeo_test_webhook",nonce:cfgeo_ajax.webhook_test_nonce||cfgeo_ajax.nonce},success:function(o){if(o&&o.success){var t=o.data&&o.data.message?o.data.message:"Test completed successfully!";e("#webhook-test-result").html('<div class="notice notice-success"><p>'+t+"</p></div>").show()}else{t=o&&o.data&&o.data.message?o.data.message:"Test failed. Please try again.";e("#webhook-test-result").html('<div class="notice notice-error"><p>'+t+"</p></div>").show()}},error:function(){e("#webhook-test-result").html('<div class="notice notice-error"><p>An error occurred while testing the webhook.</p></div>').show()},complete:function(){o.prop("disabled",!1).text(t)}})})),e("#webhook-logs").length&&"undefined"!=typeof cfgeo_ajax&&function(){if("undefined"==typeof cfgeo_ajax)return void(e("#webhook-logs").html('<p class="description">Unable to load webhook logs - AJAX not available.</p>'),e("#clear-webhook-logs").prop("disabled",!0));e.ajax({url:ajaxurl,type:"POST",data:{action:"cfgeo_get_webhook_logs",nonce:cfgeo_ajax.webhook_logs_nonce||cfgeo_ajax.nonce},success:function(o){if(o&&o.success&&o.data&&o.data.logs){var t="";o.data.logs.length>0?(e("#clear-webhook-logs").prop("disabled",!1),o.data.logs.forEach((function(e){var o=e.success?"success":"error",a=e.success?"Success":"Failed";t+='<div class="webhook-log-entry '+o+'">',t+="<strong>"+a+"</strong> - "+(e.timestamp||"Unknown time")+"<br>",t+="<small>URL: "+(e.url||"Unknown URL")+"</small><br>",t+="<small>Response: "+(e.response_code||"Unknown")+" - "+(e.response_message||"No message")+"</small>",t+="</div>"}))):(e("#clear-webhook-logs").prop("disabled",!0),t='<p class="description">No webhook logs available yet.</p>'),e("#webhook-logs").html(t)}else e("#webhook-logs").html('<p class="description">Unable to load webhook logs - invalid response format.</p>'),e("#clear-webhook-logs").prop("disabled",!0)},error:function(){e("#webhook-logs").html('<p class="description">Unable to load webhook logs.</p>'),e("#clear-webhook-logs").prop("disabled",!0)}})}(),e("#clear-webhook-logs").length&&"undefined"!=typeof cfgeo_ajax&&e("#clear-webhook-logs").on("click",(function(){if(confirm("Are you sure you want to clear all webhook logs? This action cannot be undone.")){var o=e(this),t=o.text();o.prop("disabled",!0).text("Clearing..."),e.ajax({url:ajaxurl,type:"POST",data:{action:"cfgeo_clear_webhook_logs",nonce:cfgeo_ajax.webhook_logs_nonce||cfgeo_ajax.nonce},success:function(o){if(o&&o.success){e("#webhook-logs").html('<p class="description">No webhook logs available yet.</p>'),e("#clear-webhook-logs").prop("disabled",!0);var t=o.data&&o.data.message?o.data.message:"Webhook logs cleared successfully.";e("#webhook-logs").before('<div class="notice notice-success" style="margin-bottom: 10px;"><p>'+t+"</p></div>"),setTimeout((function(){e("#webhook-logs").prev(".notice").fadeOut()}),3e3)}else{t=o&&o.data&&o.data.message?o.data.message:"Failed to clear webhook logs.";e("#webhook-logs").before('<div class="notice notice-error" style="margin-bottom: 10px;"><p>'+t+"</p></div>")}},error:function(){e("#webhook-logs").before('<div class="notice notice-error" style="margin-bottom: 10px;"><p>An error occurred while clearing webhook logs.</p></div>')},complete:function(){o.prop("disabled",!1).text(t)}})}}))}))}(jQuery);
  • abandoned-contact-form-7/tags/2.9/readme.txt

    r3299155 r3374823  
    1 === Abandoned Contact Form 7 ===
     1=== Track Geolocation Of Users Using Contact Form 7 ===
    22
    33Contributors: zealopensource
    4 Tags: abandoned, contact form 7, export, email, wpvip
    5 Requires at least: 3.5
    6 Donate link: http://www.zealousweb.com/payment/
    7 Tested up to:  6.8
    8 Stable tag: 2.0
    9 Requires PHP: 5.6
    10 CF7 requires at least: 3.0
    11 CF7 tested up to: 5.8
    12 License: GPLv3 or later License
    13 Version: 2.0
     4Donate Link: http://www.zealousweb.com/payment/
     5Tags: geolocation,track geolocation,Google Maps
     6Requires at least: 4.9 or higher
     7Tested up to: 6.8
     8Stable tag: 2.9
     9Requires PHP: 7.0
     10License: GPL-3.0-or-later
     11Version: 2.9
    1412License URI: http://www.gnu.org/licenses/gpl-3.0.html
    1513
    16 Abandoned Contact Form 7 provides an ability to track the data from Contact Form 7 even if the user does not submit the form.
     14Track Geolocation Of Users Using Contact Form 7 allows you to get geolocation information with their form submission.
    1715
    1816== Description ==
    1917
    20 Abandoned Contact Form 7 plugin provides to track the Contact Form 7 form data even if the user does not submit the form. And, sends mail notification to each Abandoned user.
     18Track Geolocation Of Users Using Contact Form 7 allows you to get geolocation information with their form submission. This will help you know better from where the visitor has submitted the form.
    2119
    22 = Features of Abandoned Contact Form 7 =
     20= Features of Track Geolocation Of Users Using Contact Form 7 =
     21* Advanced Filtering & Search - Quickly locate form submissions with filters for Country, City, and Submission Date.
     22* Custom Webhook Integrations - Automate workflows by sending geolocation data to external platforms.
     23* Multi-Language Compatibility - The plugin automatically translates data.
     24* Get Geolocation details including city,state,country,zipcode,latitude/longitude.
     25* Send all this information including a static google map image in the mail with a simple shortcode.
     26* Form Specific Visual chart to get to know from where the Visitors become more.
     27* We have used 2 Types of API here one is with access token key named ipstack and another is without access token which is free named ipapi & KeyCDN. So if you do not enter access token key in plugin setting then it will fetch data with the help of free API keys.
     28* To add latitude/longitude, country, state, city in mail - [geolocation]
     29* To add latitude/longitude, country, state, city & Google map static image in the mail   - [geolocation lat-long country state city gmap]
     30* To add only latitude/longitude in mail - [geolocation lat-long]
     31* To add only the country in the mail- [geolocation country]
     32* To add only the state in the mail - [geolocation state]
     33* To add only the city in the mail - [geolocation city]
     34* To add only Google map static image in the mail- [geolocation gmap]
    2335
    24 * Select your email ID field for Form in the form settings.
    25 * Enable/Disable Option for multiple forms where you need in Contact Form 7.
    26 * View the list of entries in the Admin side for Abandoned submission.
    27 * In the list of Abandoned forms entry in admin side you can view IP addresses and other data which are filled-up by the user upto 10 Entries.
    28 * Provision to send an email to a single user that abandoned the form.
    29 * Facility to export the list of entire abandoned users upto 10 Entries.
    30 * Also, An option to customize the mail body for Abandoned email upto 10 Entries.
    31 * Select specific field to include in tracking data
    32 * Compatibility of WordPress VIP.
     36<strong>[Demo for Track Geolocation Of Users Using Contact Form 7](https://demo.zealousweb.com/wordpress-plugins/track-geolocation-of-users-using-contact-form-7/)</strong>
    3337
    34 <strong>[Demo for Abandoned Contact Form 7](https://demo.zealousweb.com/wordpress-plugins/abandoned-contact-form-7/)</strong>
    35 
    36 = Features of Abandoned Contact Form 7 Pro =
    37 
    38 We have released the PRO version of this plugin with extra advantageous features added. PRO Version 1.0 Released.
    39 
    40 * In the list of Abandoned forms entry in admin side you can view IP addresses and other data which are filled-up by the user unlimited Entries.
    41 * Facility to export the list of entire abandoned users unlimited Entries.
    42 * You can schedule a time for sending emails to each abandoned user.
    43 * You can set the “Status” of the user to send an email so we can manage not to send the same email again to the same user.
    44 * You can easily manage the number of time emails sent to the user.
    45 * Also, An option to customize the mail body for Abandoned email unlimited Entries.
    46 * For schedule mails, we have the option of SMTP settings. Here, you can set SMTP from Plugin, no need to add another plugin for SMTP configuration.
    47 
    48 <strong>[Get more information of Pro version here](https://store.zealousweb.com/abandoned-contact-form-7-pro)</strong>
    49 <strong>[Demo for Abandoned Contact Form 7](https://demo.zealousweb.com/wordpress-plugins/abandoned-contact-form-7-pro/)</strong>
     38Note: To add Google map static image in the mail you have to enable this 2 option
     391. You have to enable Use HTML content-type in the Mail setting of Contact form 7.
     402. You have to enable Maps Static API in Google Map API.
    5041
    5142== OUR OTHER PLUGINS ==
     
    6455* <strong>[User Registration Using Contact Form 7 Pro](https://store.zealousweb.com/wordpress-plugins/user-registration-using-contact-form-7-pro)</strong>
    6556
    66 = Getting Help With Wordpress =
    67 
    68 If you have any questions about this plugin, you can post a thread in our [WordPress.org forum](https://wordpress.org/support/plugin/abandoned-contact-form-7/). Please search existing threads before opening a new one or feel free to contact us at <a href="mailto:[email protected]">[email protected]</a>
    69 
    70 We also offer custom Wordpress extension development and Wordpress theme design services to fulfill your e-commerce objectives.
    71 
    72 Our professional impassioned Wordpress experts provide profound and customer oriented development of your project within short timeframes.
    73 
    74 Thank you for choosing a Plugin developed by <strong>[ZealousWeb](https://www.zealousweb.com)</strong>!
    75 
    7657== Installation ==
    7758
     
    80611. From the dashboard of your site, navigate to Plugins --> Add New.
    81622. Select the Upload option and hit "Choose File."
    82 3. When the popup appears select the plugin-file-name.zip file from your desktop.
     633. When the popup appears select the track-geolocation-of-users-using-contact-form-7.zip file from your desktop.
    83644. Follow the on-screen instructions and wait till the upload completes.
    84655. When it's finished, activate the plugin via the prompt. A message will display confirming activation was successful.
    8566
    86 == Frequently Asked Questions ==
     67== Screenshots ==
     681. Screenshot 'screenshot-1.png' shows all the possible options available for this plugin.
     692. Screenshot 'screenshot-2.png' shows setting option to be enabled to get Google Map static image in the email.
     703. Screenshot 'screenshot-3.png' This area shows a detailed graph on the basis of submitted forms.
    8771
    88 = Can I send mail notification to every abandoned user? =
     72= Getting Help From Our Support System =
    8973
    90 Yes, you can send mail notification to either every abandoned user or a particular user.
     74If you have any difficulties while using this Plugin, please feel free to contact us at [email protected]
    9175
    92 = Can I Abandon the data of the file type input field of the form? =
     76We also offer custom Wordpress extension development and Wordpress theme design services to fulfil your e-commerce objectives.
    9377
    94 No, you can't Abandon the data of the file type input field.
     78Our professional impassioned Wordpress experts provide profound and customer-oriented development of your project within short timeframes.
    9579
    96 == Screenshots ==
    97 
    98 1. This is show list of all Abandoned users.
    99 2. This is global option of Edit message body content for Abandoned users email.
    100 3. This is option of email to sent single user entry on action button.
    101 4. Select specific field to include in tracking data
     80Thank you for choosing a Plugin developed by <strong>[ZealousWeb](https://www.zealousweb.com)</strong>!
    10281
    10382== Changelog ==
    10483
     84= 2.9 =
     85* Advanced Filtering & Search - Quickly locate form submissions with filters for Country, City, and Submission Date.
     86* Custom Webhook Integrations - Automate workflows by sending geolocation data to external platforms.
     87* Multi-Language Compatibility - The plugin automatically translates data.
     88
     89= 2.8 =
     90* Minor changes – Doc update.
     91
     92= 2.7 =
     93* Minor changes – Doc update.
     94
     95= 2.6 =
     96* Fixed PHP warnings.
     97
     98= 2.5 =
     99* Remove label in mail tags.
     100* Fixed PHP warnings.
     101
     102= 2.4 =
     103* Two Mail issues fixed.
     104
     105= 2.3 =
     106* Mail issue fixed.
     107* Document link added.
     108
     109= 2.2 =
     110* Backend issue resolved.
     111
     112= 2.1 =
     113* escaping added
     114
    105115= 2.0 =
    106 * Minor changes - Doc update
    107 
    108 = 1.9 =
    109 * Minor changes - Doc update
    110 
    111 = 1.8 =
    112 * Minor changes - Hidden
    113 
    114 = 1.7 =
    115 * Improved compatibility with WordPress VIP platform by refactoring code to adhere to VIP coding standards.
    116 
    117 = 1.6 =
    118 * Add - Here you can select specific field to include in tracking data.
    119 
    120 = 1.5 =
    121 * Fixed - Solved Javascript issue
     116* The issues on both the frontend and backend have been resolved.
    122117
    123118= 1.4 =
    124 * Test - Checking with Latest wordPress and Contact form 7, Tested and works fine.
     119* Fix Export CSV bug issue solved.
    125120
    126121= 1.3 =
    127 * Fix - Fixed Image issue in mail body of notification mail.
     122* Compatibility with new cf7 version
    128123
    129124= 1.2 =
    130 * Fix - Fixed issue of Mobile and Ipad tracking.
     125* WordPress 5.6 compatibility
    131126
    132127= 1.1 =
    133 * Fix - Fixed Email body Content issue.
     128* Fix - Document Link
    134129
    135130= 1.0 =
    136 * Initial Release
     131Initial Release
  • abandoned-contact-form-7/trunk/assets/css/admin.css

    r2383635 r3374823  
    1 .cf7af-notification-setting th{
    2     width: 230px !important;
    3 }
    4 .cf7af-tooltip {
     1@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600&display=swap');
     2
     3.cfgeo-main-layout {
     4    font-family: 'Poppins', sans-serif;
     5}
     6
     7.cfgeo-main-layout .form-table th {
     8    width: 300px;
     9    align-items: center;
     10    display: flex;
     11}
     12
     13.cfgeo-main-layout .form-table tr {
     14    display: flex;
     15    align-items: center;
     16}
     17
     18.cfgeo-main-layout .form-table td {
     19    width: calc(100% - 300px);
     20}
     21.alignleft.actions .button,
     22.alignleft.actions input[type="button"],
     23.alignleft.actions input[type="submit"],
     24.cfgeo-tooltip {
     25    vertical-align: middle;
     26}
     27.cfgeo-tooltip {
    528    display: inline-block;
    629    width: 18px;
     
    1134    background-image: url(data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJpbmZvLWNpcmNsZSIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWluZm8tY2lyY2xlIGZhLXctMTYiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMjU2IDhDMTE5LjA0MyA4IDggMTE5LjA4MyA4IDI1NmMwIDEzNi45OTcgMTExLjA0MyAyNDggMjQ4IDI0OHMyNDgtMTExLjAwMyAyNDgtMjQ4QzUwNCAxMTkuMDgzIDM5Mi45NTcgOCAyNTYgOHptMCAxMTBjMjMuMTk2IDAgNDIgMTguODA0IDQyIDQycy0xOC44MDQgNDItNDIgNDItNDItMTguODA0LTQyLTQyIDE4LjgwNC00MiA0Mi00MnptNTYgMjU0YzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTg4Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDEydi02NGgtMTJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNjRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYxMDBoMTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNHoiPjwvcGF0aD48L3N2Zz4=);
    1235    background-repeat: no-repeat;
    13     background-size: cover;
    14 }
    15 
    16 .cf7af-pointer .wp-pointer-content h3:before {
    17     content: '\f348';
    18 }
    19 
    20 .cf7af-settings .postbox {
    21     box-sizing: border-box;
    22 }
    23 
    24 .cf7af-settings .left-box {
     36    background-size: cover
     37}
     38.validation-error-geo{
     39    border-color: red !important;
     40    border-width: 2px !important;
     41}
     42.cfgeo-pointer .wp-pointer-content h3:before {
     43    content: '\f348'
     44}
     45
     46.shortcode-table {
     47    width: 75%;
     48    margin-top: 15px
     49}
     50
     51.shortcode-table tr {
     52    border-radius: 3px;
     53    padding: 12px 15px;
     54    display: flex;
     55    justify-content: space-between;
     56    margin-bottom: 5px
     57}
     58
     59.shortcode-table thead tr {
     60    background-color: #95a5a6;
     61    font-size: 14px;
     62    text-transform: uppercase;
     63    letter-spacing: .03em
     64}
     65
     66.shortcode-table tbody tr {
     67    background-color: #fff;
     68    box-shadow: 0 0 9px 0 rgba(0, 0, 0, .1)
     69}
     70
     71.shortcode-table td {
     72    width: 70%
     73}
     74
     75.shortcode-table td+td {
     76    width: 30%
     77}
     78
     79.shortcode-table tfoot {
     80    background-color: #95a5a6
     81}
     82
     83.shortcode-table tfoot td {
     84    width: 100%
     85}
     86
     87.shortcode-table tfoot h3,
     88.shortcode-table tfoot p {
     89    margin: 0
     90}
     91
     92.shortcode-table input {
     93    color: 000;
     94    width: 100%;
     95    cursor: text
     96}
     97.sp-original-input-container{
     98    display: block;
     99}
     100.sp-colorize-container{
     101    border: none !important;
     102    position: absolute;
     103    top: 0;
     104    left: 1px;
     105    height: 100%;
     106    overflow: hidden;
     107}
     108.sp-colorize{
     109    height: 100%;
     110}
     111
     112/* ========================================
     113   Advanced Filter
     114   ======================================== */
     115.cfgeo-advanced-filters {
     116    margin: 10px 0;
     117    padding: 15px;
     118    background: #f9f9f9;
     119    border: 1px solid #ddd;
     120    border-radius: 4px;
     121    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
     122    position: relative;
     123    display: flex;
     124    flex-wrap: wrap;
     125    float: left;
     126}
     127.cfgeo-advanced-filters label {
     128    display: inline-block;
     129    width: 80px;
     130    font-weight: 700;
     131    color: #23282d;
     132}
     133/* .cfgeo-advanced-filters input[type="date"],
     134.cfgeo-advanced-filters input[type="text"],
     135.cfgeo-advanced-filters select {
     136    border: 1px solid #ddd;
     137    border-radius: 3px;
     138    padding: 5px 8px;
     139    font-size: 13px;
     140} */
     141.cfgeo-advanced-filters input[type="date"]:focus,
     142.cfgeo-advanced-filters input[type="text"]:focus,
     143.cfgeo-advanced-filters select:focus,
     144.cfgeo-filter-row input:focus,
     145.cfgeo-filter-row select:focus {
     146    border-color: #0073aa;
     147    box-shadow: 0 0 0 1px #0073aa;
     148    outline: 0;
     149}
     150.cfgeo-advanced-filters .button {
     151    margin-right: 10px;
     152}
     153.alignleft.actions .button:last-child,
     154.cfgeo-advanced-filters .button:last-child {
     155    margin-right: 0;
     156}
     157.cfgeo-filter-row {
     158    margin-bottom: 10px;
     159    display: flex;
     160    flex-wrap: wrap;
     161    align-items: center;
     162    width: 31%;
     163    padding-right: 15px;
     164}
     165
     166.cfgeo-filter-row .cfgeo-label {
     167    width: 100%;
     168}
     169.cfgeo-filter-row:last-child {
     170    margin-bottom: 0;
     171}
     172.cfgeo-filter-buttons {
     173    margin-top: 15px;
     174    padding-top: 15px;
     175    border-top: 1px solid #ddd;
     176    width: 100%;
     177}
     178.cfgeo-filter-count {
     179    margin-top: 10px;
     180    padding: 8px 12px;
     181    background: #e7f7ff;
     182    border: 1px solid #b3d9ff;
     183    border-radius: 3px;
     184    font-size: 12px;
     185    color: #0073aa;
     186}
     187.cfgeo-loading {
     188    display: none;
     189    position: absolute;
     190    top: 50%;
     191    left: 50%;
     192    transform: translate(-50%, -50%);
     193    z-index: 1000;
     194}
     195.cfgeo-loading .spinner {
     196    float: none;
     197    margin: 0;
     198}
     199.cfgeo-advanced-filters.loading::after {
     200    content: "";
     201    position: absolute;
     202    top: 0;
     203    left: 0;
     204    right: 0;
     205    bottom: 0;
     206    background: rgba(255, 255, 255, 0.8);
     207    z-index: 999;
     208}
     209.cfgeo-filter-row input:disabled,
     210.cfgeo-filter-row select:disabled {
     211    opacity: 0.6;
     212    cursor: not-allowed;
     213}
     214.alignleft.actions {
     215    float: left;
     216    margin: 0;
     217    padding: 0;
     218}
     219.alignleft.actions .button {
     220    margin-right: 5px;
     221}
     222
     223
     224/* ========================================
     225   WEBHOOK API STYLES
     226   ======================================== */
     227
     228.cfgeo-webhook-settings {
     229    margin: 20px 0;
     230}
     231
     232.cfgeo-webhook-settings h3 {
     233    margin-bottom: 10px;
     234    color: #23282d;
     235}
     236
     237.cfgeo-webhook-settings p {
     238    margin-bottom: 20px;
     239    color: #666;
     240}
     241
     242.cfgeo-webhook-info {
     243    background: #f9f9f9;
     244    border: 1px solid #e1e1e1;
     245    border-radius: 4px;
     246    padding: 15px;
     247    margin-bottom: 20px;
     248}
     249
     250.cfgeo-webhook-info h4 {
     251    margin-top: 0;
     252    margin-bottom: 10px;
     253    color: #23282d;
     254}
     255
     256.cfgeo-webhook-info ul {
     257    margin: 0;
     258    padding-left: 20px;
     259}
     260
     261.cfgeo-webhook-info li {
     262    margin-bottom: 5px;
     263    color: #666;
     264}
     265
     266.cfgeo-webhook-test {
     267    background: #fff;
     268    border: 1px solid #e1e1e1;
     269    border-radius: 4px;
     270    padding: 15px;
     271    margin-bottom: 20px;
     272}
     273
     274.cfgeo-webhook-test h4 {
     275    margin-top: 0;
     276    margin-bottom: 10px;
     277    color: #23282d;
     278}
     279
     280.cfgeo-webhook-test p {
     281    margin-bottom: 15px;
     282    color: #666;
     283}
     284
     285.cfgeo-webhook-logs {
     286    background: #fff;
     287    border: 1px solid #e1e1e1;
     288    border-radius: 4px;
     289    padding: 15px;
     290}
     291
     292.cfgeo-webhook-logs h4 {
     293    margin-top: 0;
     294    margin-bottom: 10px;
     295    color: #23282d;
     296}
     297
     298.cfgeo-webhook-logs p {
     299    margin-bottom: 15px;
     300    color: #666;
     301}
     302
     303.webhook-log-entry {
    25304    padding: 10px;
    26     margin-right: 2%;
     305    margin-bottom: 10px;
     306    border-radius: 3px;
     307    border-left: 4px solid #ddd;
     308}
     309
     310.webhook-log-entry.success {
     311    background: #f0f8f0;
     312    border-left-color: #46b450;
     313}
     314
     315.webhook-log-entry.error {
     316    background: #fef7f1;
     317    border-left-color: #dc3232;
     318}
     319
     320.webhook-log-entry strong {
     321    color: #23282d;
     322}
     323
     324.webhook-log-entry small {
     325    color: #666;
     326    display: block;
     327    margin-top: 5px;
     328}
     329
     330#webhook-test-result {
     331    margin-top: 10px;
     332}
     333
     334#webhook-test-result .notice {
     335    margin: 0;
     336}
     337
     338/* Clear webhook logs button */
     339#clear-webhook-logs {
     340    margin-bottom: 10px;
     341}
     342
     343#clear-webhook-logs:disabled {
     344    opacity: 0.6;
     345    cursor: not-allowed;
     346}
     347
     348/* Webhook Settings Fields */
     349.cfgeo-webhook-settings textarea {
    27350    width: 100%;
    28     margin-bottom: 20px;
    29 }
    30 
    31 @media ( min-width: 1285px ) {
    32     .cf7af-settings .left-box td {
    33         width: 70%;
    34         box-sizing: border-box;
     351    min-height: 100px;
     352    font-family: monospace;
     353}
     354
     355.cfgeo-webhook-settings input[type="text"] {
     356    width: 100%;
     357}
     358
     359.cfgeo-webhook-settings .description {
     360    font-style: italic;
     361    color: #666;
     362    margin-top: 5px;
     363}
     364
     365.cfgeo-input-text,
     366.cfgeo-input-date {
     367    padding: 10px 16px !important;
     368    border: 1px solid #C1CFDE !important;
     369    background: #FCFCFC !important;
     370    height: 48px !important;
     371    box-shadow: none !important;
     372    color: #4A494B !important;
     373    border-radius: 8px !important;
     374    font-weight: 400 !important;
     375    font-size: 16px !important;
     376    font-family: "Poppins", sans-serif !important;
     377    line-height: 1 !important;
     378    width: 100% !important;
     379    max-width: 500px !important;
     380}
     381
     382.cfgeo-main-date {
     383    display: flex;
     384    align-items: center;
     385    width: 100%;
     386}
     387
     388.cfgeo-input-text.spectrum.with-add-on {
     389    padding-left: 55px !important;
     390}
     391
     392.cfgeo-label {
     393    font-size: 16px !important;
     394    font-weight: 500 !important;
     395    font-family: "Poppins", sans-serif !important;
     396    line-height: 1.6 !important;
     397    color: #285064 !important;
     398    padding-bottom: 10px !important;
     399}
     400
     401.cfgeo-input-select {
     402    line-height: 1.3 !important;
     403    background: #FCFCFC url('../../assets/images/arrow.png') no-repeat right 7px top 55% !important;
     404    background-size: 16px 10px !important;
     405}
     406
     407.cfgeo-submit-btn {
     408    padding: 20px 24px !important;
     409    border-radius: 4px !important;
     410    border: 1px solid #0074A2 !important;
     411    background-color: #FFFFFF !important;
     412    color: #0074A2 !important;
     413    font-size: 16px !important;
     414    font-weight: 500 !important;
     415    font-family: "Poppins", sans-serif !important;
     416    line-height: 1 !important;
     417    cursor: pointer !important;
     418}
     419
     420.cfgeo-submit-btn:hover {
     421    background-color: #0074A2 !important;
     422    color: #FFFFFF !important;
     423}
     424
     425.cfgeo-checkbox {
     426    width: 16px !important;
     427    height: 16px !important;
     428    border-radius: 4px !important;
     429    border: 1px solid #cccccc !important;
     430    background: #FFFFFF !important;
     431}
     432
     433.cfgeo-textarea {
     434    padding: 10px 16px !important;
     435    border: 1px solid #C1CFDE !important;
     436    background: #FCFCFC !important;
     437    height: 200px !important;
     438    box-shadow: none !important;
     439    color: #4A494B !important;
     440    border-radius: 8px !important;
     441    font-weight: 400 !important;
     442    font-size: 16px !important;
     443    font-family: "Poppins", sans-serif !important;
     444    line-height: 1.4 !important;
     445    width: 100% !important;
     446    max-width: 500px !important;
     447}
     448
     449.cfgeo-main-layout .nav-tab-wrapper {
     450    border-bottom: 1px solid #c3c4c7 !important;
     451    margin: 0 !important;
     452    padding-top: 9px !important;
     453    padding-bottom: 0 !important;
     454    line-height: inherit !important;
     455    display: flex;
     456    flex-wrap: wrap;
     457}
     458
     459.cfgeo-main-layout .nav-tab-wrapper .nav-tab {
     460    background: none !important;
     461    box-shadow: none !important;
     462    border: none !important;
     463    color: #285064 !important;
     464    font-weight: 500 !important;
     465    font-size: 16px !important;
     466    font-family: "Poppins", sans-serif !important;
     467    padding: 5px 5px 15px 5px !important;
     468    margin-right: 12px !important;
     469    margin-left: 0 !important;
     470}
     471
     472
     473.cfgeo-main-layout .nav-tab-wrapper .nav-tab-active {
     474    border-bottom: 3px solid #11AAB4 !important;
     475}
     476
     477
     478@media (max-width: 720px) and (orientation: portrait) {
     479    .cfgeo-main-layout .nav-tab-wrapper .nav-tab {
     480        margin: 0  !important;
     481        padding: 9px !important;
     482    }
     483    .cfgeo-main-layout .form-table td,
     484    .cfgeo-main-layout .form-table th {
     485        width: 100% !important;
    35486    }
    36 }
    37 
    38 @media ( min-width: 782px ) and ( max-width: 1284px ) {
    39     .cf7af-settings .left-box td {
    40         width: 60%;
    41         box-sizing: border-box;
     487    .cfgeo-main-layout .form-table tr {
     488        flex-wrap: wrap;
    42489    }
    43 }
    44 
    45 .cf7af-settings .left-box td input {
    46     box-sizing: border-box;
    47 }
    48 
    49 #contact-form-editor .cf7af-settings .form-table th {
    50     width: auto !important;
    51 }
    52 
    53 .tooltip-table .postbox {
    54     box-sizing: border-box;
    55 }
    56 
    57 .tooltip-table .left-box {
    58     padding: 10px;
    59     margin-right: 2%;
    60     width: 100%;
    61     margin-bottom: 20px;
    62 }
    63 
    64 @media ( min-width: 1285px ) {
    65     .tooltip-table .left-box td {
    66         width: 70%;
    67         box-sizing: border-box;
     490    .cfgeo-filter-row {
     491        width: 100%;
     492        padding-right: 0;
    68493    }
    69494}
    70 
    71 @media ( min-width: 782px ) and ( max-width: 1284px ) {
    72     .tooltip-table .left-box td {
    73         width: 60%;
    74         box-sizing: border-box;
    75     }
    76 }
    77 
    78 .tooltip-table .left-box td input {
    79     box-sizing: border-box;
    80 }
    81 
    82 .tooltip-table .form-table th {
    83     width: auto !important;
    84 }
  • abandoned-contact-form-7/trunk/assets/css/admin.min.css

    r2383635 r3374823  
    1 .cf7af-notification-setting th{width:230px!important}.cf7af-tooltip{display:inline-block;width:18px;height:18px;vertical-align:middle;border-radius:100%;margin-left:10px;background-image:url(data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJpbmZvLWNpcmNsZSIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWluZm8tY2lyY2xlIGZhLXctMTYiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMjU2IDhDMTE5LjA0MyA4IDggMTE5LjA4MyA4IDI1NmMwIDEzNi45OTcgMTExLjA0MyAyNDggMjQ4IDI0OHMyNDgtMTExLjAwMyAyNDgtMjQ4QzUwNCAxMTkuMDgzIDM5Mi45NTcgOCAyNTYgOHptMCAxMTBjMjMuMTk2IDAgNDIgMTguODA0IDQyIDQycy0xOC44MDQgNDItNDIgNDItNDItMTguODA0LTQyLTQyIDE4LjgwNC00MiA0Mi00MnptNTYgMjU0YzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTg4Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDEydi02NGgtMTJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNjRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYxMDBoMTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNHoiPjwvcGF0aD48L3N2Zz4=);background-repeat:no-repeat;background-size:cover}.cf7af-pointer .wp-pointer-content h3:before{content:'\f348'}.cf7af-settings .postbox{box-sizing:border-box}.cf7af-settings .left-box{padding:10px;margin-right:2%;width:100%;margin-bottom:20px}@media (min-width:1285px){.cf7af-settings .left-box td{width:70%;box-sizing:border-box}}@media (min-width:782px) and (max-width:1284px){.cf7af-settings .left-box td{width:60%;box-sizing:border-box}}.cf7af-settings .left-box td input{box-sizing:border-box}#contact-form-editor .cf7af-settings .form-table th{width:auto!important}.tooltip-table .postbox{box-sizing:border-box}.tooltip-table .left-box{padding:10px;margin-right:2%;width:100%;margin-bottom:20px}@media (min-width:1285px){.tooltip-table .left-box td{width:70%;box-sizing:border-box}}@media (min-width:782px) and (max-width:1284px){.tooltip-table .left-box td{width:60%;box-sizing:border-box}}.tooltip-table .left-box td input{box-sizing:border-box}.tooltip-table .form-table th{width:auto!important}
     1.alignleft.actions .button,.alignleft.actions input[type=button],.alignleft.actions input[type=submit],.cfgeo-tooltip{vertical-align:middle}.cfgeo-tooltip{display:inline-block;width:18px;height:18px;border-radius:100%;margin-left:10px;background-image:url(data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJpbmZvLWNpcmNsZSIgY2xhc3M9InN2Zy1pbmxpbmUtLWZhIGZhLWluZm8tY2lyY2xlIGZhLXctMTYiIHJvbGU9ImltZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZmlsbD0iY3VycmVudENvbG9yIiBkPSJNMjU2IDhDMTE5LjA0MyA4IDggMTE5LjA4MyA4IDI1NmMwIDEzNi45OTcgMTExLjA0MyAyNDggMjQ4IDI0OHMyNDgtMTExLjAwMyAyNDgtMjQ4QzUwNCAxMTkuMDgzIDM5Mi45NTcgOCAyNTYgOHptMCAxMTBjMjMuMTk2IDAgNDIgMTguODA0IDQyIDQycy0xOC44MDQgNDItNDIgNDItNDItMTguODA0LTQyLTQyIDE4LjgwNC00MiA0Mi00MnptNTYgMjU0YzAgNi42MjctNS4zNzMgMTItMTIgMTJoLTg4Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDEydi02NGgtMTJjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ2LTI0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoNjRjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYxMDBoMTJjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNHoiPjwvcGF0aD48L3N2Zz4=);background-repeat:no-repeat;background-size:cover}.validation-error-geo{border-color:red!important;border-width:2px!important}.cfgeo-pointer .wp-pointer-content h3:before{content:'\f348'}.shortcode-table{width:75%;margin-top:15px}.shortcode-table tr{border-radius:3px;padding:12px 15px;display:flex;justify-content:space-between;margin-bottom:5px}.shortcode-table thead tr{background-color:#95a5a6;font-size:14px;text-transform:uppercase;letter-spacing:.03em}.shortcode-table tbody tr{background-color:#fff;box-shadow:0 0 9px 0 rgba(0,0,0,.1)}.shortcode-table td{width:70%}.shortcode-table td+td{width:30%}.shortcode-table tfoot{background-color:#95a5a6}.cfgeo-filter-row label,.shortcode-table tfoot td{width:100%}.shortcode-table tfoot h3,.shortcode-table tfoot p{margin:0}.shortcode-table input{color:000;width:100%;cursor:text}.sp-original-input-container{display:block}.sp-colorize-container{border:none!important;position:absolute;top:0;left:1px;height:100%;overflow:hidden}.sp-colorize{height:100%}.cfgeo-advanced-filters{margin:10px 0;padding:15px;background:#f9f9f9;border:1px solid #ddd;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,.1);position:relative;display:flex;flex-wrap:wrap;float:left}.cfgeo-advanced-filters label{display:inline-block;width:80px;font-weight:700;color:#23282d}.cfgeo-advanced-filters input[type=date],.cfgeo-advanced-filters input[type=text],.cfgeo-advanced-filters select{border:1px solid #ddd;border-radius:3px;padding:5px 8px;font-size:13px}.cfgeo-advanced-filters input[type=date]:focus,.cfgeo-advanced-filters input[type=text]:focus,.cfgeo-advanced-filters select:focus,.cfgeo-filter-row input:focus,.cfgeo-filter-row select:focus{border-color:#0073aa;box-shadow:0 0 0 1px #0073aa;outline:0}.cfgeo-advanced-filters .button{margin-right:10px}.alignleft.actions .button:last-child,.cfgeo-advanced-filters .button:last-child{margin-right:0}.cfgeo-filter-row{margin-bottom:10px;display:flex;flex-wrap:wrap}.cfgeo-filter-row:last-child{margin-bottom:0}.cfgeo-filter-buttons{margin-top:15px;padding-top:15px;border-top:1px solid #ddd;width:100%}.cfgeo-filter-count{margin-top:10px;padding:8px 12px;background:#e7f7ff;border:1px solid #b3d9ff;border-radius:3px;font-size:12px;color:#0073aa}.cfgeo-loading{display:none;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1000}.cfgeo-loading .spinner{float:none;margin:0}.cfgeo-advanced-filters.loading::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(255,255,255,.8);z-index:999}.cfgeo-filter-row input:disabled,.cfgeo-filter-row select:disabled{opacity:.6;cursor:not-allowed}.alignleft.actions{float:left;margin:0;padding:0}.alignleft.actions .button{margin-right:5px}.cfgeo-webhook-settings{margin:20px 0}.cfgeo-webhook-settings h3{margin-bottom:10px;color:#23282d}.cfgeo-webhook-settings p{margin-bottom:20px;color:#666}.cfgeo-webhook-info{background:#f9f9f9;border:1px solid #e1e1e1;border-radius:4px;padding:15px;margin-bottom:20px}.cfgeo-webhook-info h4{margin-top:0;margin-bottom:10px;color:#23282d}.cfgeo-webhook-info ul{margin:0;padding-left:20px}.cfgeo-webhook-info li{margin-bottom:5px;color:#666}.cfgeo-webhook-test{background:#fff;border:1px solid #e1e1e1;border-radius:4px;padding:15px;margin-bottom:20px}.cfgeo-webhook-test h4{margin-top:0;margin-bottom:10px;color:#23282d}.cfgeo-webhook-test p{margin-bottom:15px;color:#666}.cfgeo-webhook-logs{background:#fff;border:1px solid #e1e1e1;border-radius:4px;padding:15px}.cfgeo-webhook-logs h4{margin-top:0;margin-bottom:10px;color:#23282d}.cfgeo-webhook-logs p{margin-bottom:15px;color:#666}.webhook-log-entry{padding:10px;margin-bottom:10px;border-radius:3px;border-left:4px solid #ddd}.webhook-log-entry.success{background:#f0f8f0;border-left-color:#46b450}.webhook-log-entry.error{background:#fef7f1;border-left-color:#dc3232}.webhook-log-entry strong{color:#23282d}.webhook-log-entry small{color:#666;display:block;margin-top:5px}#webhook-test-result{margin-top:10px}#webhook-test-result .notice{margin:0}#clear-webhook-logs{margin-bottom:10px}#clear-webhook-logs:disabled{opacity:.6;cursor:not-allowed}.cfgeo-webhook-settings textarea{width:100%;min-height:100px;font-family:monospace}.cfgeo-webhook-settings input[type="text"]{width:100%}.cfgeo-webhook-settings .description{font-style:italic;color:#666;margin-top:5px}
  • abandoned-contact-form-7/trunk/assets/js/admin.js

    r2847286 r3374823  
    33
    44    jQuery(document).ready( function($) {
    5 
    6         jQuery( '#cf7af-enable-abandoned-pointer' ).on( 'hover click', function() {
    7             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    8             jQuery( '#cf7af-enable-abandoned-pointer' ).pointer({
    9                 pointerClass: 'wp-pointer cf7af-pointer',
    10                 content: translate_string_cf7af.cf7af_enable_abandoned,
    11                 position: 'left center',
    12             } ).pointer('open');
    13         });
    14 
    15         jQuery( '#cf7af-abandoned-email-pointer' ).on( 'hover click', function() {
    16             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    17             jQuery( '#cf7af-abandoned-email-pointer' ).pointer({
    18                 pointerClass: 'wp-pointer cf7af-pointer',
    19                 content: translate_string_cf7af.cf7af_abandoned_email,
    20                 position: 'left center',
    21             } ).pointer('open');
    22         });
    23 
    24         jQuery( '#cf7af-abandoned-specific-field-pointer' ).on( 'hover click', function() {
    25             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    26             jQuery( '#cf7af-abandoned-specific-field-pointer' ).pointer({
    27                 pointerClass: 'wp-pointer cf7af-pointer',
    28                 content: translate_string_cf7af.cf7af_abandoned_specific_field,
    29                 position: 'left center',
    30             } ).pointer('open');
    31         });
     5        // Debug: Check if cfgeo_ajax is available
     6        console.log('CFGEO Debug: cfgeo_ajax available:', typeof cfgeo_ajax !== 'undefined');
     7        if (typeof cfgeo_ajax !== 'undefined') {
     8            console.log('CFGEO Debug: cfgeo_ajax data:', cfgeo_ajax);
     9        } else {
     10            console.log('CFGEO Debug: cfgeo_ajax not available, some features may be limited');
     11        }
    3212       
    33         jQuery( '#cf7af-subject-pointer' ).on( 'hover click', function() {
    34             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    35             jQuery( '#cf7af-subject-pointer' ).pointer({
    36                 pointerClass: 'wp-pointer cf7af-pointer',
    37                 content: translate_string_cf7af.cf7af_subject,
    38                 position: 'left center',
    39             } ).pointer('open');
    40         });
    41 
    42         jQuery( '#cf7af-email-body-pointer' ).on( 'hover click', function() {
    43             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    44             jQuery( '#cf7af-email-body-pointer' ).pointer({
    45                 pointerClass: 'wp-pointer cf7af-pointer',
    46                 content: translate_string_cf7af.cf7af_email_body,
    47                 position: 'left center',
    48             } ).pointer('open');
    49         });
    50 
    51         jQuery( '#abandoned-email-address-pointer' ).on( 'hover click', function() {
    52             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    53             jQuery( '#abandoned-email-address-pointer' ).pointer({
    54                 pointerClass: 'wp-pointer cf7af-pointer',
    55                 content: translate_string_cf7af.abandoned_email_address,
    56                 position: 'left center',
    57             } ).pointer('open');
    58         });
    59 
    60         jQuery( '#abandoned-from-name-pointer' ).on( 'hover click', function() {
    61             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    62             jQuery( '#abandoned-from-name-pointer' ).pointer({
    63                 pointerClass: 'wp-pointer cf7af-pointer',
    64                 content: translate_string_cf7af.abandoned_from_name,
    65                 position: 'left center',
    66             } ).pointer('open');
    67         });
    68 
    69         jQuery( '#abandoned-from-email-address-pointer' ).on( 'hover click', function() {
    70             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    71             jQuery( '#abandoned-from-email-address-pointer' ).pointer({
    72                 pointerClass: 'wp-pointer cf7af-pointer',
    73                 content: translate_string_cf7af.abandoned_from_email_address,
    74                 position: 'left center',
    75             } ).pointer('open');
    76         });
    77 
    78         jQuery( '#abandoned-subject-pointer' ).on( 'hover click', function() {
    79             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    80             jQuery( '#abandoned-subject-pointer' ).pointer({
    81                 pointerClass: 'wp-pointer cf7af-pointer',
    82                 content: translate_string_cf7af.abandoned_subject,
    83                 position: 'left center',
    84             } ).pointer('open');
    85         });
    86 
    87         jQuery( '#abandoned-email-body-pointer' ).on( 'hover click', function() {
    88             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    89             jQuery( '#abandoned-email-body-pointer' ).pointer({
    90                 pointerClass: 'wp-pointer cf7af-pointer',
    91                 content: translate_string_cf7af.abandoned_email_body,
    92                 position: 'left center',
    93             } ).pointer('open');
    94         });
    95 
    96         jQuery( '#cf7af-from-email-pointer' ).on( 'hover click', function() {
    97             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    98             jQuery( '#cf7af-from-email-pointer' ).pointer({
    99                 pointerClass: 'wp-pointer cf7af-pointer',
    100                 content: translate_string_cf7af.cf7af_from_email,
    101                 position: 'left center',
    102             } ).pointer('open');
    103         });
    104 
    105         jQuery( '#cf7af-from-name-pointer' ).on( 'hover click', function() {
    106             jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
    107             jQuery( '#cf7af-from-name-pointer' ).pointer({
    108                 pointerClass: 'wp-pointer cf7af-pointer',
    109                 content: translate_string_cf7af.cf7af_from_name,
    110                 position: 'left center',
    111             } ).pointer('open');
    112         });
    113 
     13        // Debug: Check if we're on the CFGEO page
     14        console.log('CFGEO Debug: Advanced filters container found:', $('.cfgeo-advanced-filters').length);
     15            // Initialize spectrum color picker if available
     16    if (jQuery.fn.spectrum) {
     17        jQuery('#cfgeo_color_picker').spectrum({
     18            type: "component",
     19            showPalette: false,
     20            showSelectionPalette: true,
     21            togglePaletteOnly: true,
     22            hideAfterPaletteSelect: true,
     23            showAlpha: false,
     24            change: function(color) {
     25                if(color != null){
     26                    var col = color.toHexString();
     27                    if(col.length == 7){
     28                        jQuery(".cfgeo_color_picker").removeClass('validation-error-geo');
     29                    }
     30                }else{
     31                    jQuery(".cfgeo_color_picker").addClass('validation-error-geo');
     32                    return false;
     33                }
     34            }
     35        });
     36    } else {
     37        console.log('CFGEO Debug: Spectrum plugin not available, skipping color picker initialization');
     38    }
     39
     40        jQuery('.setting-geolocation input#submit').click( function() {
     41            // Only validate color picker if spectrum is available and color picker exists on current tab
     42            if (jQuery.fn.spectrum && jQuery(".cfgeo_color_picker").length > 0) {
     43                var color_val = jQuery(".cfgeo_color_picker").val();
     44                if(jQuery( ".cfgeo_color_picker" ).hasClass( "validation-error-geo" ) || color_val == null || color_val == ''){
     45                    jQuery(".cfgeo_color_picker").addClass('validation-error-geo');
     46                    return false;
     47                }else if(color_val.length != 7){
     48                    jQuery(".cfgeo_color_picker").addClass('validation-error-geo');
     49                    return false;
     50                }
     51            }
     52        });
     53
     54        jQuery("#form-id-graph").change(function(){
     55            window.location= translate_string_geo.form_graph_url + this.value;
     56        });
     57
     58        jQuery( '#cfgeo-ipstack' ).on( 'mouseenter click', function() {
     59
     60            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     61            jQuery( '#cfgeo-ipstack' ).pointer({
     62                pointerClass: 'wp-pointer cfgeo-pointer',
     63                content: translate_string_geo.ipstack,
     64                position: 'left center',
     65            } ).pointer('open');
     66        });
     67
     68        jQuery( '#cfgeo-google' ).on( 'mouseenter click', function() {
     69
     70            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     71            jQuery( '#cfgeo-google' ).pointer({
     72                pointerClass: 'wp-pointer cfgeo-pointer',
     73                content: translate_string_geo.google,
     74                position: 'left center',
     75            } ).pointer('open');
     76        });
     77
     78        jQuery( '#cfgeo-debug' ).on( 'mouseenter click', function() {
     79
     80            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     81            jQuery( '#cfgeo-debug' ).pointer({
     82                pointerClass: 'wp-pointer cfgeo-pointer',
     83                content: translate_string_geo.debug,
     84                position: 'left center',
     85            } ).pointer('open');
     86        });
     87
     88        jQuery( '#cfgeo-color-graph' ).on( 'mouseenter click', function() {
     89
     90            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     91            jQuery( '#cfgeo-color-graph' ).pointer({
     92                pointerClass: 'wp-pointer cfgeo-pointer',
     93                content: translate_string_geo.graphcolor,
     94                position: 'left center',
     95            } ).pointer('open');
     96        });
     97
     98        // Webhook tooltips
     99        jQuery( '#cfgeo-webhook-enabled' ).on( 'mouseenter click', function() {
     100            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     101            jQuery( '#cfgeo-webhook-enabled' ).pointer({
     102                pointerClass: 'wp-pointer cfgeo-pointer',
     103                content: translate_string_geo.webhook_enabled,
     104                position: 'left center',
     105            } ).pointer('open');
     106        });
     107
     108        jQuery( '#cfgeo-webhook-urls' ).on( 'mouseenter click', function() {
     109            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     110            jQuery( '#cfgeo-webhook-urls' ).pointer({
     111                pointerClass: 'wp-pointer cfgeo-pointer',
     112                content: translate_string_geo.webhook_urls,
     113                position: 'left center',
     114            } ).pointer('open');
     115        });
     116
     117        jQuery( '#cfgeo-webhook-secret' ).on( 'mouseenter click', function() {
     118            jQuery( 'body .wp-pointer-buttons .close' ).trigger( 'click' );
     119            jQuery( '#cfgeo-webhook-secret' ).pointer({
     120                pointerClass: 'wp-pointer cfgeo-pointer',
     121                content: translate_string_geo.webhook_secret,
     122                position: 'left center',
     123            } ).pointer('open');
     124        });
     125
     126
     127
     128
     129
     130        // Advanced Filter JavaScript for CFGEO Admin Panel
     131        // Handles AJAX filtering, debouncing, pagination, and sorting
     132       
     133        var filterTimeout;
     134        var isLoading = false;
     135
     136        // Function to perform AJAX filtering
     137        function performAjaxFilter() {
     138            console.log('performAjaxFilter called');
     139            if (isLoading) {
     140                console.log('Already loading, skipping');
     141                return;
     142            }
     143           
     144            // Check if we're on the correct page
     145            if (!$('.cfgeo-advanced-filters').length) {
     146                console.log('Not on CFGEO page, skipping');
     147                return;
     148            }
     149           
     150            isLoading = true;
     151           
     152            // Show loading states
     153            $('.cfgeo-advanced-filters').addClass('loading');
     154            $('.cfgeo-loading').show();
     155            $('.cfgeo-filter-row input, .cfgeo-filter-row select').prop('disabled', true);
     156            $('.wp-list-table tbody').html('<tr><td colspan="8" style="text-align: center; padding: 20px;"><div class="spinner is-active"></div> Loading...</td></tr>');
     157           
     158            var filterData = {
     159                action: 'cfgeo_filter_submissions',
     160                nonce: cfgeo_ajax.nonce,
     161                form_id: $('#form-id').val() || 'all',
     162                country_filter: $('#country-filter').val() || '',
     163                city_filter: $('#city-filter').val() || '',
     164                date_from: $('#date-from').val() || '',
     165                date_to: $('#date-to').val() || '',
     166                search_term: $('#search-term').val() || '',
     167                orderby: $('input[name="orderby"]').val() || 'date',
     168                order: $('input[name="order"]').val() || 'DESC',
     169                paged: $('input[name="paged"]').val() || '1'
     170            };
     171
     172            console.log('Sending AJAX request with data:', filterData);
     173            $.ajax({
     174                url: ajaxurl,
     175                type: 'POST',
     176                data: filterData,
     177                success: function(response) {
     178                    if (response.success) {
     179                        // Update the table body
     180                        $('.wp-list-table tbody').html(response.data.html);
     181                       
     182                        // Update pagination
     183                        if (response.data.pagination) {
     184                            $('.tablenav-pages').html(response.data.pagination);
     185                        } else {
     186                            $('.tablenav-pages').html('');
     187                        }
     188                       
     189                        // Update filter count
     190                        $('.cfgeo-filter-count').remove();
     191                        if (response.data.total > 0) {
     192                            var filterInfo = $('<div class="cfgeo-filter-count">Showing ' + response.data.total + ' submission(s)</div>');
     193                            $('.cfgeo-advanced-filters').append(filterInfo);
     194                        } else {
     195                            var filterInfo = $('<div class="cfgeo-filter-count">No submissions found matching your criteria</div>');
     196                            $('.cfgeo-advanced-filters').append(filterInfo);
     197                        }
     198                       
     199                        // Update URL without page reload
     200                        var newUrl = new URL(window.location);
     201                        newUrl.searchParams.set('form-id', filterData.form_id);
     202                        newUrl.searchParams.set('country-filter', filterData.country_filter);
     203                        newUrl.searchParams.set('city-filter', filterData.city_filter);
     204                        newUrl.searchParams.set('date-from', filterData.date_from);
     205                        newUrl.searchParams.set('date-to', filterData.date_to);
     206                        newUrl.searchParams.set('search-term', filterData.search_term);
     207                        newUrl.searchParams.set('orderby', filterData.orderby);
     208                        newUrl.searchParams.set('order', filterData.order);
     209                        newUrl.searchParams.set('paged', filterData.paged);
     210                       
     211                        window.history.pushState({}, '', newUrl);
     212                    } else {
     213                        alert('Error: ' + response.data);
     214                    }
     215                },
     216                error: function(xhr, status, error) {
     217                    console.log('AJAX Error:', xhr.responseText);
     218                    alert(cfgeo_ajax.error_message);
     219                },
     220                complete: function() {
     221                    isLoading = false;
     222                    $('.cfgeo-advanced-filters').removeClass('loading');
     223                    $('.cfgeo-loading').hide();
     224                    $('.cfgeo-filter-row input, .cfgeo-filter-row select').prop('disabled', false);
     225                }
     226            });
     227        }
     228
     229        // Only initialize AJAX functionality if we're on the CFGEO page
     230        if ($('.cfgeo-advanced-filters').length && typeof cfgeo_ajax !== 'undefined') {
     231            console.log('CFGEO Debug: Initializing AJAX functionality');
     232           
     233            // Real-time filtering with debounce
     234            $('#form-id, #country-filter, #city-filter, #date-from, #date-to').on('change', function() {
     235                console.log('Filter changed:', $(this).attr('id'), $(this).val());
     236                clearTimeout(filterTimeout);
     237                filterTimeout = setTimeout(performAjaxFilter, 300);
     238            });
     239
     240            // Search with debounce
     241            $('#search-term').on('input', function() {
     242                console.log('Search input:', $(this).val());
     243                clearTimeout(filterTimeout);
     244                filterTimeout = setTimeout(performAjaxFilter, 500);
     245            });
     246
     247            // Search with Enter key
     248            $('#search-term').on('keypress', function(e) {
     249                if (e.which === 13) {
     250                    clearTimeout(filterTimeout);
     251                    performAjaxFilter();
     252                }
     253            });
     254
     255            // Clear filters functionality
     256            $('.cfgeo-clear-filters').on('click', function(e) {
     257                e.preventDefault();
     258               
     259                // Clear all filter values
     260                $('#form-id').val('all');
     261                $('#country-filter').val('');
     262                $('#city-filter').val('');
     263                $('#date-from').val('');
     264                $('#date-to').val('');
     265                $('#search-term').val('');
     266                $('input[name="orderby"]').val('date');
     267                $('input[name="order"]').val('DESC');
     268                $('input[name="paged"]').val('1');
     269               
     270                // Perform filter
     271                performAjaxFilter();
     272            });
     273
     274            // Date validation
     275            $('#date-from, #date-to').on('change', function() {
     276                var fromDate = $('#date-from').val();
     277                var toDate = $('#date-to').val();
     278               
     279                if (fromDate && toDate && fromDate > toDate) {
     280                    alert(cfgeo_ajax.date_error_message);
     281                    $(this).val('');
     282                }
     283            });
     284
     285            // Handle pagination clicks
     286            $(document).on('click', '.tablenav-pages a', function(e) {
     287                e.preventDefault();
     288                var paged = $(this).data('page') || '1';
     289               
     290                $('input[name="paged"]').val(paged);
     291                performAjaxFilter();
     292            });
     293
     294            // Handle sorting clicks
     295            $(document).on('click', '.wp-list-table th.sortable a, .wp-list-table th.sorted a', function(e) {
     296                e.preventDefault();
     297                var href = $(this).attr('href');
     298                var url = new URL(href);
     299                var orderby = url.searchParams.get('orderby') || 'date';
     300                var order = url.searchParams.get('order') || 'DESC';
     301               
     302                $('input[name="orderby"]').val(orderby);
     303                $('input[name="order"]').val(order);
     304                $('input[name="paged"]').val('1'); // Reset to first page when sorting
     305                performAjaxFilter();
     306            });
     307
     308            // Initial filter count display
     309            var totalPosts = $('.wp-list-table tbody tr').length;
     310            if (totalPosts > 0) {
     311                var filterInfo = $('<div class="cfgeo-filter-count">Showing ' + totalPosts + ' submission(s)</div>');
     312                $('.cfgeo-advanced-filters').append(filterInfo);
     313            }
     314        } else {
     315            console.log('CFGEO Debug: Not on CFGEO page or cfgeo_ajax not available, skipping AJAX initialization');
     316        }
     317
     318        // Webhook API functionality
     319        if ($('#test-webhook').length && typeof cfgeo_ajax !== 'undefined') {
     320            $('#test-webhook').on('click', function() {
     321                var button = $(this);
     322                var originalText = button.text();
     323               
     324                button.prop('disabled', true).text('Testing...');
     325                $('#webhook-test-result').hide();
     326               
     327                $.ajax({
     328                    url: ajaxurl,
     329                    type: 'POST',
     330                    data: {
     331                        action: 'cfgeo_test_webhook',
     332                        nonce: cfgeo_ajax.webhook_test_nonce || cfgeo_ajax.nonce
     333                    },
     334                    success: function(response) {
     335                        if (response && response.success) {
     336                            var message = response.data && response.data.message ? response.data.message : 'Test completed successfully!';
     337                            $('#webhook-test-result').html(
     338                                '<div class="notice notice-success"><p>' + message + '</p></div>'
     339                            ).show();
     340                        } else {
     341                            var message = response && response.data && response.data.message ? response.data.message : 'Test failed. Please try again.';
     342                            $('#webhook-test-result').html(
     343                                '<div class="notice notice-error"><p>' + message + '</p></div>'
     344                            ).show();
     345                        }
     346                    },
     347                    error: function() {
     348                        $('#webhook-test-result').html(
     349                            '<div class="notice notice-error"><p>An error occurred while testing the webhook.</p></div>'
     350                        ).show();
     351                    },
     352                    complete: function() {
     353                        button.prop('disabled', false).text(originalText);
     354                    }
     355                });
     356            });
     357        }
     358
     359        // Load webhook logs
     360        if ($('#webhook-logs').length && typeof cfgeo_ajax !== 'undefined') {
     361            loadWebhookLogs();
     362        }
     363
     364        // Clear webhook logs functionality
     365        if ($('#clear-webhook-logs').length && typeof cfgeo_ajax !== 'undefined') {
     366            $('#clear-webhook-logs').on('click', function() {
     367                if (confirm('Are you sure you want to clear all webhook logs? This action cannot be undone.')) {
     368                    var button = $(this);
     369                    var originalText = button.text();
     370                   
     371                    button.prop('disabled', true).text('Clearing...');
     372                   
     373                    $.ajax({
     374                        url: ajaxurl,
     375                        type: 'POST',
     376                        data: {
     377                            action: 'cfgeo_clear_webhook_logs',
     378                            nonce: cfgeo_ajax.webhook_logs_nonce || cfgeo_ajax.nonce
     379                        },
     380                        success: function(response) {
     381                            if (response && response.success) {
     382                                // Clear the logs display
     383                                $('#webhook-logs').html('<p class="description">No webhook logs available yet.</p>');
     384                               
     385                                // Disable the clear button since logs are now empty
     386                                $('#clear-webhook-logs').prop('disabled', true);
     387                               
     388                                // Show success message
     389                                var message = response.data && response.data.message ? response.data.message : 'Webhook logs cleared successfully.';
     390                                $('#webhook-logs').before(
     391                                    '<div class="notice notice-success" style="margin-bottom: 10px;"><p>' + message + '</p></div>'
     392                                );
     393                               
     394                                // Remove the notice after 3 seconds
     395                                setTimeout(function() {
     396                                    $('#webhook-logs').prev('.notice').fadeOut();
     397                                }, 3000);
     398                            } else {
     399                                var message = response && response.data && response.data.message ? response.data.message : 'Failed to clear webhook logs.';
     400                                $('#webhook-logs').before(
     401                                    '<div class="notice notice-error" style="margin-bottom: 10px;"><p>' + message + '</p></div>'
     402                                );
     403                            }
     404                        },
     405                        error: function() {
     406                            $('#webhook-logs').before(
     407                                '<div class="notice notice-error" style="margin-bottom: 10px;"><p>An error occurred while clearing webhook logs.</p></div>'
     408                            );
     409                        },
     410                        complete: function() {
     411                            button.prop('disabled', false).text(originalText);
     412                        }
     413                    });
     414                }
     415            });
     416        }
     417
     418        function loadWebhookLogs() {
     419            if (typeof cfgeo_ajax === 'undefined') {
     420                $('#webhook-logs').html('<p class="description">Unable to load webhook logs - AJAX not available.</p>');
     421                $('#clear-webhook-logs').prop('disabled', true);
     422                return;
     423            }
     424           
     425            $.ajax({
     426                url: ajaxurl,
     427                type: 'POST',
     428                data: {
     429                    action: 'cfgeo_get_webhook_logs',
     430                    nonce: cfgeo_ajax.webhook_logs_nonce || cfgeo_ajax.nonce
     431                },
     432                success: function(response) {
     433                    if (response && response.success && response.data && response.data.logs) {
     434                        var logsHtml = '';
     435                        if (response.data.logs.length > 0) {
     436                            // Enable clear button when logs exist
     437                            $('#clear-webhook-logs').prop('disabled', false);
     438                           
     439                            response.data.logs.forEach(function(log) {
     440                                var statusClass = log.success ? 'success' : 'error';
     441                                var statusText = log.success ? 'Success' : 'Failed';
     442                                logsHtml += '<div class="webhook-log-entry ' + statusClass + '">';
     443                                logsHtml += '<strong>' + statusText + '</strong> - ' + (log.timestamp || 'Unknown time') + '<br>';
     444                                logsHtml += '<small>URL: ' + (log.url || 'Unknown URL') + '</small><br>';
     445                                logsHtml += '<small>Response: ' + (log.response_code || 'Unknown') + ' - ' + (log.response_message || 'No message') + '</small>';
     446                                logsHtml += '</div>';
     447                            });
     448                        } else {
     449                            // Disable clear button when no logs exist
     450                            $('#clear-webhook-logs').prop('disabled', true);
     451                            logsHtml = '<p class="description">No webhook logs available yet.</p>';
     452                        }
     453                        $('#webhook-logs').html(logsHtml);
     454                    } else {
     455                        $('#webhook-logs').html('<p class="description">Unable to load webhook logs - invalid response format.</p>');
     456                        $('#clear-webhook-logs').prop('disabled', true);
     457                    }
     458                },
     459                error: function() {
     460                    $('#webhook-logs').html('<p class="description">Unable to load webhook logs.</p>');
     461                    $('#clear-webhook-logs').prop('disabled', true);
     462                }
     463            });
     464        }
    114465    });
    115466
  • abandoned-contact-form-7/trunk/assets/js/admin.min.js

    r2847286 r3374823  
    1 !function(e){"use strict";jQuery(document).ready(function(e){jQuery("#cf7af-enable-abandoned-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-enable-abandoned-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_enable_abandoned,position:"left center"}).pointer("open")}),jQuery("#cf7af-abandoned-email-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-abandoned-email-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_abandoned_email,position:"left center"}).pointer("open")}),jQuery("#cf7af-abandoned-specific-field-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-abandoned-specific-field-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_abandoned_specific_field,position:"left center"}).pointer("open")}),jQuery("#cf7af-subject-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-subject-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_subject,position:"left center"}).pointer("open")}),jQuery("#cf7af-email-body-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-email-body-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_email_body,position:"left center"}).pointer("open")}),jQuery("#abandoned-email-address-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-email-address-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_email_address,position:"left center"}).pointer("open")}),jQuery("#abandoned-from-name-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-from-name-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_from_name,position:"left center"}).pointer("open")}),jQuery("#abandoned-from-email-address-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-from-email-address-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_from_email_address,position:"left center"}).pointer("open")}),jQuery("#abandoned-subject-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-subject-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_subject,position:"left center"}).pointer("open")}),jQuery("#abandoned-email-body-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#abandoned-email-body-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.abandoned_email_body,position:"left center"}).pointer("open")}),jQuery("#cf7af-from-email-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-from-email-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_from_email,position:"left center"}).pointer("open")}),jQuery("#cf7af-from-name-pointer").on("hover click",function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cf7af-from-name-pointer").pointer({pointerClass:"wp-pointer cf7af-pointer",content:translate_string_cf7af.cf7af_from_name,position:"left center"}).pointer("open")})})}(jQuery);
     1!function(e){"use strict";jQuery(document).ready((function(e){var o;console.log("CFGEO Debug: cfgeo_ajax available:","undefined"!=typeof cfgeo_ajax),"undefined"!=typeof cfgeo_ajax?console.log("CFGEO Debug: cfgeo_ajax data:",cfgeo_ajax):console.log("CFGEO Debug: cfgeo_ajax not available, some features may be limited"),console.log("CFGEO Debug: Advanced filters container found:",e(".cfgeo-advanced-filters").length),jQuery.fn.spectrum?jQuery("#cfgeo_color_picker").spectrum({type:"component",showPalette:!1,showSelectionPalette:!0,togglePaletteOnly:!0,hideAfterPaletteSelect:!0,showAlpha:!1,change:function(e){if(null==e)return jQuery(".cfgeo_color_picker").addClass("validation-error-geo"),!1;7==e.toHexString().length&&jQuery(".cfgeo_color_picker").removeClass("validation-error-geo")}}):console.log("CFGEO Debug: Spectrum plugin not available, skipping color picker initialization"),jQuery(".setting-geolocation input#submit").click((function(){if(jQuery.fn.spectrum&&jQuery(".cfgeo_color_picker").length>0){var e=jQuery(".cfgeo_color_picker").val();if(jQuery(".cfgeo_color_picker").hasClass("validation-error-geo")||null==e||""==e)return jQuery(".cfgeo_color_picker").addClass("validation-error-geo"),!1;if(7!=e.length)return jQuery(".cfgeo_color_picker").addClass("validation-error-geo"),!1}})),jQuery("#form-id-graph").change((function(){window.location=translate_string_geo.form_graph_url+this.value})),jQuery("#cfgeo-ipstack").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-ipstack").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.ipstack,position:"left center"}).pointer("open")})),jQuery("#cfgeo-google").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-google").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.google,position:"left center"}).pointer("open")})),jQuery("#cfgeo-debug").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-debug").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.debug,position:"left center"}).pointer("open")})),jQuery("#cfgeo-color-graph").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-color-graph").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.graphcolor,position:"left center"}).pointer("open")})),jQuery("#cfgeo-webhook-enabled").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-webhook-enabled").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.webhook_enabled,position:"left center"}).pointer("open")})),jQuery("#cfgeo-webhook-urls").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-webhook-urls").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.webhook_urls,position:"left center"}).pointer("open")})),jQuery("#cfgeo-webhook-secret").on("mouseenter click",(function(){jQuery("body .wp-pointer-buttons .close").trigger("click"),jQuery("#cfgeo-webhook-secret").pointer({pointerClass:"wp-pointer cfgeo-pointer",content:translate_string_geo.webhook_secret,position:"left center"}).pointer("open")}));var t=!1;function a(){if(console.log("performAjaxFilter called"),t)console.log("Already loading, skipping");else if(e(".cfgeo-advanced-filters").length){t=!0,e(".cfgeo-advanced-filters").addClass("loading"),e(".cfgeo-loading").show(),e(".cfgeo-filter-row input, .cfgeo-filter-row select").prop("disabled",!0),e(".wp-list-table tbody").html('<tr><td colspan="8" style="text-align: center; padding: 20px;"><div class="spinner is-active"></div> Loading...</td></tr>');var o={action:"cfgeo_filter_submissions",nonce:cfgeo_ajax.nonce,form_id:e("#form-id").val()||"all",country_filter:e("#country-filter").val()||"",city_filter:e("#city-filter").val()||"",date_from:e("#date-from").val()||"",date_to:e("#date-to").val()||"",search_term:e("#search-term").val()||"",orderby:e('input[name="orderby"]').val()||"date",order:e('input[name="order"]').val()||"DESC",paged:e('input[name="paged"]').val()||"1"};console.log("Sending AJAX request with data:",o),e.ajax({url:ajaxurl,type:"POST",data:o,success:function(t){if(t.success){if(e(".wp-list-table tbody").html(t.data.html),t.data.pagination?e(".tablenav-pages").html(t.data.pagination):e(".tablenav-pages").html(""),e(".cfgeo-filter-count").remove(),t.data.total>0){var a=e('<div class="cfgeo-filter-count">Showing '+t.data.total+" submission(s)</div>");e(".cfgeo-advanced-filters").append(a)}else{a=e('<div class="cfgeo-filter-count">No submissions found matching your criteria</div>');e(".cfgeo-advanced-filters").append(a)}var r=new URL(window.location);r.searchParams.set("form-id",o.form_id),r.searchParams.set("country-filter",o.country_filter),r.searchParams.set("city-filter",o.city_filter),r.searchParams.set("date-from",o.date_from),r.searchParams.set("date-to",o.date_to),r.searchParams.set("search-term",o.search_term),r.searchParams.set("orderby",o.orderby),r.searchParams.set("order",o.order),r.searchParams.set("paged",o.paged),window.history.pushState({},"",r)}else alert("Error: "+t.data)},error:function(e,o,t){console.log("AJAX Error:",e.responseText),alert(cfgeo_ajax.error_message)},complete:function(){t=!1,e(".cfgeo-advanced-filters").removeClass("loading"),e(".cfgeo-loading").hide(),e(".cfgeo-filter-row input, .cfgeo-filter-row select").prop("disabled",!1)}})}else console.log("Not on CFGEO page, skipping")}if(e(".cfgeo-advanced-filters").length&&"undefined"!=typeof cfgeo_ajax){console.log("CFGEO Debug: Initializing AJAX functionality"),e("#form-id, #country-filter, #city-filter, #date-from, #date-to").on("change",(function(){console.log("Filter changed:",e(this).attr("id"),e(this).val()),clearTimeout(o),o=setTimeout(a,300)})),e("#search-term").on("input",(function(){console.log("Search input:",e(this).val()),clearTimeout(o),o=setTimeout(a,500)})),e("#search-term").on("keypress",(function(e){13===e.which&&(clearTimeout(o),a())})),e(".cfgeo-clear-filters").on("click",(function(o){o.preventDefault(),e("#form-id").val("all"),e("#country-filter").val(""),e("#city-filter").val(""),e("#date-from").val(""),e("#date-to").val(""),e("#search-term").val(""),e('input[name="orderby"]').val("date"),e('input[name="order"]').val("DESC"),e('input[name="paged"]').val("1"),a()})),e("#date-from, #date-to").on("change",(function(){var o=e("#date-from").val(),t=e("#date-to").val();o&&t&&o>t&&(alert(cfgeo_ajax.date_error_message),e(this).val(""))})),e(document).on("click",".tablenav-pages a",(function(o){o.preventDefault();var t=e(this).data("page")||"1";e('input[name="paged"]').val(t),a()})),e(document).on("click",".wp-list-table th.sortable a, .wp-list-table th.sorted a",(function(o){o.preventDefault();var t=e(this).attr("href"),r=new URL(t),n=r.searchParams.get("orderby")||"date",i=r.searchParams.get("order")||"DESC";e('input[name="orderby"]').val(n),e('input[name="order"]').val(i),e('input[name="paged"]').val("1"),a()}));var r=e(".wp-list-table tbody tr").length;if(r>0){var n=e('<div class="cfgeo-filter-count">Showing '+r+" submission(s)</div>");e(".cfgeo-advanced-filters").append(n)}}else console.log("CFGEO Debug: Not on CFGEO page or cfgeo_ajax not available, skipping AJAX initialization");e("#test-webhook").length&&"undefined"!=typeof cfgeo_ajax&&e("#test-webhook").on("click",(function(){var o=e(this),t=o.text();o.prop("disabled",!0).text("Testing..."),e("#webhook-test-result").hide(),e.ajax({url:ajaxurl,type:"POST",data:{action:"cfgeo_test_webhook",nonce:cfgeo_ajax.webhook_test_nonce||cfgeo_ajax.nonce},success:function(o){if(o&&o.success){var t=o.data&&o.data.message?o.data.message:"Test completed successfully!";e("#webhook-test-result").html('<div class="notice notice-success"><p>'+t+"</p></div>").show()}else{t=o&&o.data&&o.data.message?o.data.message:"Test failed. Please try again.";e("#webhook-test-result").html('<div class="notice notice-error"><p>'+t+"</p></div>").show()}},error:function(){e("#webhook-test-result").html('<div class="notice notice-error"><p>An error occurred while testing the webhook.</p></div>').show()},complete:function(){o.prop("disabled",!1).text(t)}})})),e("#webhook-logs").length&&"undefined"!=typeof cfgeo_ajax&&function(){if("undefined"==typeof cfgeo_ajax)return void(e("#webhook-logs").html('<p class="description">Unable to load webhook logs - AJAX not available.</p>'),e("#clear-webhook-logs").prop("disabled",!0));e.ajax({url:ajaxurl,type:"POST",data:{action:"cfgeo_get_webhook_logs",nonce:cfgeo_ajax.webhook_logs_nonce||cfgeo_ajax.nonce},success:function(o){if(o&&o.success&&o.data&&o.data.logs){var t="";o.data.logs.length>0?(e("#clear-webhook-logs").prop("disabled",!1),o.data.logs.forEach((function(e){var o=e.success?"success":"error",a=e.success?"Success":"Failed";t+='<div class="webhook-log-entry '+o+'">',t+="<strong>"+a+"</strong> - "+(e.timestamp||"Unknown time")+"<br>",t+="<small>URL: "+(e.url||"Unknown URL")+"</small><br>",t+="<small>Response: "+(e.response_code||"Unknown")+" - "+(e.response_message||"No message")+"</small>",t+="</div>"}))):(e("#clear-webhook-logs").prop("disabled",!0),t='<p class="description">No webhook logs available yet.</p>'),e("#webhook-logs").html(t)}else e("#webhook-logs").html('<p class="description">Unable to load webhook logs - invalid response format.</p>'),e("#clear-webhook-logs").prop("disabled",!0)},error:function(){e("#webhook-logs").html('<p class="description">Unable to load webhook logs.</p>'),e("#clear-webhook-logs").prop("disabled",!0)}})}(),e("#clear-webhook-logs").length&&"undefined"!=typeof cfgeo_ajax&&e("#clear-webhook-logs").on("click",(function(){if(confirm("Are you sure you want to clear all webhook logs? This action cannot be undone.")){var o=e(this),t=o.text();o.prop("disabled",!0).text("Clearing..."),e.ajax({url:ajaxurl,type:"POST",data:{action:"cfgeo_clear_webhook_logs",nonce:cfgeo_ajax.webhook_logs_nonce||cfgeo_ajax.nonce},success:function(o){if(o&&o.success){e("#webhook-logs").html('<p class="description">No webhook logs available yet.</p>'),e("#clear-webhook-logs").prop("disabled",!0);var t=o.data&&o.data.message?o.data.message:"Webhook logs cleared successfully.";e("#webhook-logs").before('<div class="notice notice-success" style="margin-bottom: 10px;"><p>'+t+"</p></div>"),setTimeout((function(){e("#webhook-logs").prev(".notice").fadeOut()}),3e3)}else{t=o&&o.data&&o.data.message?o.data.message:"Failed to clear webhook logs.";e("#webhook-logs").before('<div class="notice notice-error" style="margin-bottom: 10px;"><p>'+t+"</p></div>")}},error:function(){e("#webhook-logs").before('<div class="notice notice-error" style="margin-bottom: 10px;"><p>An error occurred while clearing webhook logs.</p></div>')},complete:function(){o.prop("disabled",!1).text(t)}})}}))}))}(jQuery);
  • abandoned-contact-form-7/trunk/readme.txt

    r3299155 r3374823  
    1 === Abandoned Contact Form 7 ===
     1=== Track Geolocation Of Users Using Contact Form 7 ===
    22
    33Contributors: zealopensource
    4 Tags: abandoned, contact form 7, export, email, wpvip
    5 Requires at least: 3.5
    6 Donate link: http://www.zealousweb.com/payment/
    7 Tested up to:  6.8
    8 Stable tag: 2.0
    9 Requires PHP: 5.6
    10 CF7 requires at least: 3.0
    11 CF7 tested up to: 5.8
    12 License: GPLv3 or later License
    13 Version: 2.0
     4Donate Link: http://www.zealousweb.com/payment/
     5Tags: geolocation,track geolocation,Google Maps
     6Requires at least: 4.9 or higher
     7Tested up to: 6.8
     8Stable tag: 2.9
     9Requires PHP: 7.0
     10License: GPL-3.0-or-later
     11Version: 2.9
    1412License URI: http://www.gnu.org/licenses/gpl-3.0.html
    1513
    16 Abandoned Contact Form 7 provides an ability to track the data from Contact Form 7 even if the user does not submit the form.
     14Track Geolocation Of Users Using Contact Form 7 allows you to get geolocation information with their form submission.
    1715
    1816== Description ==
    1917
    20 Abandoned Contact Form 7 plugin provides to track the Contact Form 7 form data even if the user does not submit the form. And, sends mail notification to each Abandoned user.
     18Track Geolocation Of Users Using Contact Form 7 allows you to get geolocation information with their form submission. This will help you know better from where the visitor has submitted the form.
    2119
    22 = Features of Abandoned Contact Form 7 =
     20= Features of Track Geolocation Of Users Using Contact Form 7 =
     21* Advanced Filtering & Search - Quickly locate form submissions with filters for Country, City, and Submission Date.
     22* Custom Webhook Integrations - Automate workflows by sending geolocation data to external platforms.
     23* Multi-Language Compatibility - The plugin automatically translates data.
     24* Get Geolocation details including city,state,country,zipcode,latitude/longitude.
     25* Send all this information including a static google map image in the mail with a simple shortcode.
     26* Form Specific Visual chart to get to know from where the Visitors become more.
     27* We have used 2 Types of API here one is with access token key named ipstack and another is without access token which is free named ipapi & KeyCDN. So if you do not enter access token key in plugin setting then it will fetch data with the help of free API keys.
     28* To add latitude/longitude, country, state, city in mail - [geolocation]
     29* To add latitude/longitude, country, state, city & Google map static image in the mail   - [geolocation lat-long country state city gmap]
     30* To add only latitude/longitude in mail - [geolocation lat-long]
     31* To add only the country in the mail- [geolocation country]
     32* To add only the state in the mail - [geolocation state]
     33* To add only the city in the mail - [geolocation city]
     34* To add only Google map static image in the mail- [geolocation gmap]
    2335
    24 * Select your email ID field for Form in the form settings.
    25 * Enable/Disable Option for multiple forms where you need in Contact Form 7.
    26 * View the list of entries in the Admin side for Abandoned submission.
    27 * In the list of Abandoned forms entry in admin side you can view IP addresses and other data which are filled-up by the user upto 10 Entries.
    28 * Provision to send an email to a single user that abandoned the form.
    29 * Facility to export the list of entire abandoned users upto 10 Entries.
    30 * Also, An option to customize the mail body for Abandoned email upto 10 Entries.
    31 * Select specific field to include in tracking data
    32 * Compatibility of WordPress VIP.
     36<strong>[Demo for Track Geolocation Of Users Using Contact Form 7](https://demo.zealousweb.com/wordpress-plugins/track-geolocation-of-users-using-contact-form-7/)</strong>
    3337
    34 <strong>[Demo for Abandoned Contact Form 7](https://demo.zealousweb.com/wordpress-plugins/abandoned-contact-form-7/)</strong>
    35 
    36 = Features of Abandoned Contact Form 7 Pro =
    37 
    38 We have released the PRO version of this plugin with extra advantageous features added. PRO Version 1.0 Released.
    39 
    40 * In the list of Abandoned forms entry in admin side you can view IP addresses and other data which are filled-up by the user unlimited Entries.
    41 * Facility to export the list of entire abandoned users unlimited Entries.
    42 * You can schedule a time for sending emails to each abandoned user.
    43 * You can set the “Status” of the user to send an email so we can manage not to send the same email again to the same user.
    44 * You can easily manage the number of time emails sent to the user.
    45 * Also, An option to customize the mail body for Abandoned email unlimited Entries.
    46 * For schedule mails, we have the option of SMTP settings. Here, you can set SMTP from Plugin, no need to add another plugin for SMTP configuration.
    47 
    48 <strong>[Get more information of Pro version here](https://store.zealousweb.com/abandoned-contact-form-7-pro)</strong>
    49 <strong>[Demo for Abandoned Contact Form 7](https://demo.zealousweb.com/wordpress-plugins/abandoned-contact-form-7-pro/)</strong>
     38Note: To add Google map static image in the mail you have to enable this 2 option
     391. You have to enable Use HTML content-type in the Mail setting of Contact form 7.
     402. You have to enable Maps Static API in Google Map API.
    5041
    5142== OUR OTHER PLUGINS ==
     
    6455* <strong>[User Registration Using Contact Form 7 Pro](https://store.zealousweb.com/wordpress-plugins/user-registration-using-contact-form-7-pro)</strong>
    6556
    66 = Getting Help With Wordpress =
    67 
    68 If you have any questions about this plugin, you can post a thread in our [WordPress.org forum](https://wordpress.org/support/plugin/abandoned-contact-form-7/). Please search existing threads before opening a new one or feel free to contact us at <a href="mailto:[email protected]">[email protected]</a>
    69 
    70 We also offer custom Wordpress extension development and Wordpress theme design services to fulfill your e-commerce objectives.
    71 
    72 Our professional impassioned Wordpress experts provide profound and customer oriented development of your project within short timeframes.
    73 
    74 Thank you for choosing a Plugin developed by <strong>[ZealousWeb](https://www.zealousweb.com)</strong>!
    75 
    7657== Installation ==
    7758
     
    80611. From the dashboard of your site, navigate to Plugins --> Add New.
    81622. Select the Upload option and hit "Choose File."
    82 3. When the popup appears select the plugin-file-name.zip file from your desktop.
     633. When the popup appears select the track-geolocation-of-users-using-contact-form-7.zip file from your desktop.
    83644. Follow the on-screen instructions and wait till the upload completes.
    84655. When it's finished, activate the plugin via the prompt. A message will display confirming activation was successful.
    8566
    86 == Frequently Asked Questions ==
     67== Screenshots ==
     681. Screenshot 'screenshot-1.png' shows all the possible options available for this plugin.
     692. Screenshot 'screenshot-2.png' shows setting option to be enabled to get Google Map static image in the email.
     703. Screenshot 'screenshot-3.png' This area shows a detailed graph on the basis of submitted forms.
    8771
    88 = Can I send mail notification to every abandoned user? =
     72= Getting Help From Our Support System =
    8973
    90 Yes, you can send mail notification to either every abandoned user or a particular user.
     74If you have any difficulties while using this Plugin, please feel free to contact us at [email protected]
    9175
    92 = Can I Abandon the data of the file type input field of the form? =
     76We also offer custom Wordpress extension development and Wordpress theme design services to fulfil your e-commerce objectives.
    9377
    94 No, you can't Abandon the data of the file type input field.
     78Our professional impassioned Wordpress experts provide profound and customer-oriented development of your project within short timeframes.
    9579
    96 == Screenshots ==
    97 
    98 1. This is show list of all Abandoned users.
    99 2. This is global option of Edit message body content for Abandoned users email.
    100 3. This is option of email to sent single user entry on action button.
    101 4. Select specific field to include in tracking data
     80Thank you for choosing a Plugin developed by <strong>[ZealousWeb](https://www.zealousweb.com)</strong>!
    10281
    10382== Changelog ==
    10483
     84= 2.9 =
     85* Advanced Filtering & Search - Quickly locate form submissions with filters for Country, City, and Submission Date.
     86* Custom Webhook Integrations - Automate workflows by sending geolocation data to external platforms.
     87* Multi-Language Compatibility - The plugin automatically translates data.
     88
     89= 2.8 =
     90* Minor changes – Doc update.
     91
     92= 2.7 =
     93* Minor changes – Doc update.
     94
     95= 2.6 =
     96* Fixed PHP warnings.
     97
     98= 2.5 =
     99* Remove label in mail tags.
     100* Fixed PHP warnings.
     101
     102= 2.4 =
     103* Two Mail issues fixed.
     104
     105= 2.3 =
     106* Mail issue fixed.
     107* Document link added.
     108
     109= 2.2 =
     110* Backend issue resolved.
     111
     112= 2.1 =
     113* escaping added
     114
    105115= 2.0 =
    106 * Minor changes - Doc update
    107 
    108 = 1.9 =
    109 * Minor changes - Doc update
    110 
    111 = 1.8 =
    112 * Minor changes - Hidden
    113 
    114 = 1.7 =
    115 * Improved compatibility with WordPress VIP platform by refactoring code to adhere to VIP coding standards.
    116 
    117 = 1.6 =
    118 * Add - Here you can select specific field to include in tracking data.
    119 
    120 = 1.5 =
    121 * Fixed - Solved Javascript issue
     116* The issues on both the frontend and backend have been resolved.
    122117
    123118= 1.4 =
    124 * Test - Checking with Latest wordPress and Contact form 7, Tested and works fine.
     119* Fix Export CSV bug issue solved.
    125120
    126121= 1.3 =
    127 * Fix - Fixed Image issue in mail body of notification mail.
     122* Compatibility with new cf7 version
    128123
    129124= 1.2 =
    130 * Fix - Fixed issue of Mobile and Ipad tracking.
     125* WordPress 5.6 compatibility
    131126
    132127= 1.1 =
    133 * Fix - Fixed Email body Content issue.
     128* Fix - Document Link
    134129
    135130= 1.0 =
    136 * Initial Release
     131Initial Release
Note: See TracChangeset for help on using the changeset viewer.