Plugin Directory

Changeset 3460841 for cookieadmin


Ignore:
Timestamp:
02/13/2026 02:27:50 PM (6 weeks ago)
Author:
softaculous
Message:

New version 1.1.5

Location:
cookieadmin/trunk
Files:
7 added
2 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • cookieadmin/trunk/assets/css/consent.css

    r3412297 r3460841  
    1717}
    1818
    19 /* Buttons End */
    20 
    2119/*  Consent page css */
    22 
    23 .cookieadmin-postbox-container {
    24     max-width: 92vw;
    25     float: unset;
    26     margin: 10px;
    27 }
    2820
    2921.cookieadmin_cookie_modal label, .cookieadmin_cookie_modal input {
     
    8072/* Modal animations Ends */
    8173
    82 .cookieadmin_consent-header{
    83     display: flex;
    84     background: #12625f4d;
    85     color: black;
    86     padding: 12px;
    87     box-sizing: border-box;
    88     margin: 4px;
    89     align-items: center;
    90     justify-content: space-between;
    91 }
    92 
    93 .cookieadmin_consent-contents {
    94     display: flex;
    95     margin: 0px 5px;
    96 }
    97 
    98 .cookieadmin_consent_settings {
    99     display: flex;
    100     width: 100%;
    101     flex-direction: column;
    102     background: #ffffff;
    103     /*margin-left: -3px;*/
    104 }
    105 
    106 
    107 
    108 .cookieadmin-contents {
    109     width: 100%;
    110 }
    111 
    112 .cookieadmin-setting {
    113     display: flex;
    114     padding: 6px 0px;
    115     justify-content: flex-start;
    116 }
    117 
    118 .cookieadmin-setting-head {
    119     width: 100%;
    120     padding: 5px;
    121     align-content: center;
    122 }
    123 
    124 .cookieadmin-setting-contents {
    125     align-items: baseline;
    126     padding: 5px;
    127     margin: 5px;
    128 }
    129 
    130 .cookieadmin-setting-results {
    131     align-items: baseline;
    132     padding: 5px;
    133     margin: 5px;
    134     width: 80%;
    135 }
    136 
    137 .cookieadmin-button{
    138     padding: 5px;
    139     row-gap: 5px;
    140 }
     74
    14175/* Consent page css End*/
    14276
     
    274208
    275209.cookieadmin_preference{
    276     overflow: hidden;
    277     height: 83px;
     210    overflow: auto;
    278211    font-size: 15px;
    279 }
    280 
    281 .cookieadmin_showmore{
    282     background: none;
    283     border: none;
    284     color: #1863dc;
    285     padding: 0px;
    286     cursor: pointer;
     212    height: auto;
     213    padding: 10px 0px;
    287214}
    288215
    289216.cookieadmin_details_wrapper{
    290     padding: 15px;
     217    padding: 0px 15px;
    291218    height: calc(100% - 6%);
    292219    overflow: auto;
     
    318245}
    319246
    320 .cookieadmin-nece-cookies{
     247.cookieadmin-modal-cookies-list{
    321248    display:none;
    322249    padding:1px;
     
    375302    bottom: 15px;
    376303    left: 15px;
    377     background: linear-gradient(to left, rgb(0, 51, 204) 0%, rgb(102, 102, 255) 100%);
     304    background-color: #374FD4;
    378305    height: 50px;
    379306    width: 50px;
     
    383310    z-index: 99999;
    384311    padding: 5px !important;
     312    box-shadow: -4px 5px 10px rgba(0, 0, 0, 0.4);
     313    align-items: center;
     314    justify-content: center;
    385315}
    386316
     
    441371/* Checkbox switch Start */
    442372
    443 .cookieadmin_toggle, .cookieadmin_toggle_disabled {
     373.cookieadmin_toggle {
    444374    position: relative;
    445375    display: inline-block;
     
    449379
    450380/* Hide the checkbox input */
    451 .cookieadmin_toggle input, .cookieadmin_toggle_disabled input {
     381.cookieadmin_toggle input{
    452382    display: none;
    453383}
     
    494424}
    495425
    496 input:disabled+.cookieadmin_slider {
    497     background-color: #3582c4;
    498 }
    499 input:disabled+.cookieadmin_slider:before {
    500     transform: translateX(13px);
    501 }
    502 
    503426/* Checkbox switch End */
    504427
  • cookieadmin/trunk/assets/css/cookie.css

    r3353807 r3460841  
    5353
    5454/* Buttons */
    55 .cookieadmin-btn{   
     55.cookieadmin-btn{
    5656display: inline-flex;
    5757outline: 0;
    5858text-align: center;
    5959cursor: pointer;
    60 padding: 5px 10px 6px 10px !important;
     60padding: 6px 10px;
    6161border-radius: 3px;
    6262border: 1px solid transparent;
     
    6565font-size: 13px !important;
    6666text-decoration: none;
    67 gap: 8px;
    68 align-items:center;
    69 justify-content:center;
    7067}
    7168
     
    234231}
    235232
    236 .cookieadmin_bottom{
    237     bottom:20px;
    238 }
    239 
    240 .cookieadmin_top{
    241     top: 20px;
    242 }
    243 
    244 .cookieadmin_right{
    245     right: 15px;
    246 }
    247 
    248 .cookieadmin_left{
    249     left:15px;
    250 }
    251 
    252233.cookieadmin_hide{
    253234    display:none;
     
    260241    font-size: 20px;
    261242    margin: 2px;
    262 }
    263 
    264 /* Modal animations  */
    265 @keyframes cookieadmin_slideUp {
    266     from {
    267         transform: translateY(100%);
    268         opacity: 0;
    269     }
    270     to {
    271         transform: translateY(0);
    272         opacity: 1;
    273     }
    274 }
    275 
    276 @keyframes cookieadmin_slideSide {
    277     from {
    278         transform: translateX(-100%);
    279         opacity: 0;
    280     }
    281     to {
    282         transform: translateX(0);
    283         opacity: 1;
    284     }
    285 }
    286 
    287 /* Modal animations Ends */
    288 
    289 .cookieadmin_consent-header{
    290     display: flex;
    291     background: #12625f4d;
    292     color: black;
    293     padding: 12px;
    294     box-sizing: border-box;
    295     margin: 4px;
    296     align-items: center;
    297     justify-content: space-between;
    298243}
    299244
     
    368313}
    369314
     315.cookieadmin-desc {
     316    font-size:14px;
     317    padding: 0 0 0 10px;
     318}
     319
    370320.cookieadmin-color-input{
    371321    border: 1px solid;
     
    393343
    394344.cookieadmin-collapsible-notice{
    395     padding: 9px;
    396     display: none;
     345    padding: 8px;
    397346    background-color: #ffffc6;
    398347    font-size: 14px;
     
    414363}
    415364
     365.cookieadmin-cookie-scan{
     366    display: flex;
     367    flex-direction: row;
     368}
     369
    416370.cookieadmin-setting-colors{
    417371    justify-content: space-between;
     
    440394/* Website consent box  */
    441395
    442 .cookieadmin_law_container{
    443     position: fixed;
    444     width: 25%;
    445     box-sizing: border-box;
    446     z-index: 99999;
    447     display: none;
    448 }
    449 
    450 .cookieadmin_consent_btns{
    451     align-content: center;
    452     display: flex;
    453     justify-content: space-evenly;
    454     flex-wrap: wrap;
    455 }
    456 
    457 .cookieadmin_box{
    458     /*position: fixed;*/
    459     width: 25%;
    460     box-sizing: border-box;
    461     display: none;
    462 }
    463 
    464 .cookieadmin_notice_group{
    465     display: flex;
    466     flex-direction: column;
    467     gap: 10px; /* spacing between content and buttons */
    468     align-items: flex-start;
    469 }
    470 
    471 .cookieadmin_popup{
    472     position: fixed;
    473     width: 330px;
    474     box-sizing: border-box;
    475     z-index: 9999999;
    476     display: none;
    477 }
    478 
    479 .cookieadmin_consent_inside{
    480     color: black;
    481     background-color: #FFFFFF;
    482     border: 1px solid #f4f4f4;
    483     padding:15px;
    484     border-radius: 4px;
    485     box-shadow:1px 3px 10px rgba(0, 0, 0, 0.2);
    486 }
    487 
    488 #cookieadmin_notice_title{
    489     font-weight: 601;
    490     margin: 0px;
    491     padding-left: 5px;
    492 }
    493 
    494 .cookieadmin_notice_con{
    495     font-size: initial;
    496     padding: 0px 6px;
    497     flex: 1;
    498 }
    499 
    500 .cookieadmin_cookie_modal{
    501     display: none;
    502     flex-direction: column;
    503     position: fixed;
    504     max-height: 80vh;
    505     background-color: #FFFFFF;
    506     border: 1px solid #F4F4F4;
    507     border-radius: 8px;
    508     box-shadow: 0 4px 8px rgba(0,0,0,0.2);
    509     z-index: 999999;
    510 }
    511 
    512 .cookieadmin_center{
    513     top: 10%;
    514     left: 22%;
    515     max-width: 60vw;
    516 }
    517 
    518 .cookieadmin_side{
    519     flex-direction: column;
    520     position: fixed;
    521     width: 35vw;
    522     bottom: 0px;
    523     animation: 0.5s ease-out forwards cookieadmin_slideSide;
    524     max-height: 100vh;
    525     left: 0px;
    526     top: 0px;
    527     border-radius: 0px;
    528 }
    529 
    530 .cookieadmin_down{
    531     position: fixed;
    532     max-width: 100%;
    533     max-height: 55vh;
    534     bottom: 0px;
    535     animation: 0.5s ease-out forwards cookieadmin_slideUp;
    536 }
    537 
    538 .cookieadmin_modal_overlay{
    539     display: none;
    540     position: fixed;
    541     top: 0;
    542     left: 0;
    543     width: 100%;
    544     height: 100%;
    545     background-color: rgba(0, 0, 0, 0.5);
    546     z-index: 1000;
    547 }
    548 
    549 .cookieadmin_mod_head{
    550     display: flex;
    551     justify-content: space-between;
    552 }
    553 
    554 .cookieadmin_mod_head, .cookieadmin_wrapper{
    555     padding: 15px;
    556     border-bottom: 1px solid #CCCCCC;
    557 }
    558 
    559 .cookieadmin_close_pref{
    560     background: none;
    561     border: none;
    562     align-self: baseline;
    563     color: gray;
    564     cursor: pointer;
    565     padding: 0px;
    566 }
    567 
    568 .cookieadmin_preference_title{
    569     font-size: 20px;
    570     font-weight: 801;
    571     margin: 9px;
    572 }
    573 
    574 .cookieadmin_preference_details{
    575     padding: 0px 10px;
    576 }
    577 
    578 .cookieadmin_preference{
    579     overflow: hidden;
    580     height: 83px;
    581     font-size: 15px;
    582 }
    583 
    584 .cookieadmin_showmore{
    585     background: none;
    586     border: none;
    587     color: #1863dc;
    588     padding: 0px;
    589     cursor: pointer;
    590 }
    591 
    592 .cookieadmin_details_wrapper{
    593     padding: 15px;
    594     height: calc(100% - 6%);
    595     overflow: auto;
    596     scrollbar-width: thin;
    597 }
    598 
    599 .cookieadmin_types{
    600     padding: 10px 10px;
    601     border-top: 1px solid #CCCCCC;
    602 }
    603 
    604 .cookieadmin_header{
    605     display: flex;
    606     justify-content: space-between;
    607 }
    608 
    609 .cookieadmin_header > span > label{
    610     cursor:pointer;
    611 }
    612 
    613 .cookieadmin_remark{
    614     display:none;
    615     justify-self:right;
    616 }
    617 
    618 .cookieadmin_act{
    619     display: inline;
    620     color: #1863dc;
    621 }
    622 
    623 .cookieadmin-nece-cookies{
    624     display:none;
    625     padding:1px;
    626     border-radius: 10px;
    627     margin: 0px 20px;
    628     margin-right: 4rem;
    629     font-size: smaller;
    630     font-size: 1rem;
    631     text-align: center;
    632 }
    633 
    634 .cookieadmin_desc{
    635     padding:5px 20px;
    636     font-size: 15px;
    637     padding-right: 4rem;
    638 }
    639 
    640 .cookieadmin_footer{
    641     left: 0px;
    642     padding: 15px;
    643     flex-wrap: wrap;
    644     width: 100%;
    645 }
    646 
    647 .cookieadmin_modal_footer{
    648     left: 0px;
    649     padding: 15px;
    650     flex-wrap: wrap;
    651     border-top: 1px solid #CCCCCC;
    652 }
    653 
    654 .cookieadmin_btn{
    655     background-color: transparent;
    656     border: 1px solid gray;
    657     color: #1863dc;
    658     padding: 0.4rem 0.9rem;
    659     border-radius: 4px;
    660     margin: 2px 5px;
    661     cursor: pointer;
    662 }
     396
     397
     398
     399
     400
     401
     402
    663403
    664404.cookieadmin_btn-primary {
     
    674414}
    675415
    676 .cookieadmin_btn:hover{
    677     opacity: 0.8;
    678 }
    679 
    680416.cookieadmin_btn_accept{
    681417    color: #ffffff;
     
    684420}
    685421
    686 .cookieadmin_show_pref_cookies{
    687     cursor: pointer;
    688     font-size: 18px;
    689 }
    690 
    691422.cookieadmin_pl0{
    692423    padding-left:0px;
    693424}
    694425
    695 .cookieadmin_re_consent{
    696     display: none;
    697     position: fixed;
    698     bottom: 15px;
    699     left: 15px;
    700     background: linear-gradient(to left, rgb(0, 51, 204) 0%, rgb(102, 102, 255) 100%);
    701     height: 50px;
    702     width: 50px;
    703     border-radius: 50%;
    704     cursor: pointer;
    705     border: 0px;
    706     z-index: 99999;
    707     padding: 5px;
    708 }
    709426
    710427.cookieadmin-manager-cookie-scan, .cookieadmin-manager-consent-logs, .cookieadmin-manager-cookie-categorize{
     
    739456}
    740457
    741 .cookieadmin-cookie-card {
    742     background: ghostwhite;
    743     border-radius: 10px;
    744     padding: 16px;
    745     font-family: 'Open Sans', 'Segoe UI', sans-serif;
    746     box-shadow: 0 2px 6px rgba(0,0,0,0.1);
    747     margin: 10px auto;
    748     text-align: left;
    749 }
    750 
    751 .cookieadmin-cookie-header {
    752     display: flex;
    753     justify-content: space-between;
    754     font-size: 1rem;
    755     margin-bottom: 6px;
    756 }
    757 
    758 .cookieadmin-cookie-name {
    759   font-weight: bold;
    760   color: #333;
    761 }
    762 
    763 .cookieadmin-cookie-duration {
    764   font-size: 0.85rem;
    765 }
    766 
    767 .cookieadmin-cookie-duration > b {
    768   font-weight: bold;
    769 }
    770 
    771 .cookieadmin-cookie-description {
    772   font-size: 0.9rem;
    773   margin-bottom: 12px;
    774 }
    775 
    776 .cookieadmin-cookie-tags {
    777   display: flex;
    778   gap: 8px;
    779 }
    780 
    781 .cookieadmin-tag {
    782   background: #e0e0e0;
    783   padding: 4px 10px;
    784   border-radius: 12px;
    785   font-size: 0.75rem;
    786   color: #333;
    787 }
    788458
    789459.cookieadmin-tag.active {
     
    811481
    812482
    813 
    814 /* Checkbox switch Start */
    815 
    816 .cookieadmin_toggle, .cookieadmin_toggle_disabled {
    817     position: relative;
    818     display: inline-block;
    819     width: 24px;
    820     height: 11px;
    821 }
    822 
    823 /* Hide the checkbox input */
    824 .cookieadmin_toggle input, .cookieadmin_toggle_disabled input {
    825     display: none;
    826 }
    827 
    828 /* Describe slider's look and position. */
    829 .cookieadmin_slider {
    830     position: absolute;
    831     cursor: pointer;
    832     top: 0;
    833     left: 0;
    834     right: 0;
    835     bottom: 0;
    836     height: 21px;
    837     width: 34px;
    838     background-color: gray;
    839     transition: .4s;
    840     border-radius: 34px;
    841 }
    842 
    843 /* Describe the white ball's location
    844   and appearance in the slider. */
    845 .cookieadmin_slider:before {
    846     position: absolute;
    847     content: "";
    848     height: 15px;
    849     width: 15px;
    850     left: 3.2px;
    851     bottom: 3.2px;
    852     background-color: white;
    853     transition: .2s;
    854     border-radius: 50%;
    855 }
    856 
    857 /* Modify the slider's background color to
    858   green once the checkbox has been selected. */
    859 input:checked+.cookieadmin_slider {
    860     background-color: #3582c4;
    861 }
    862 
    863 /* When the checkbox is checked, shift the
    864   white ball towards the right within the slider. */
    865 input:checked+.cookieadmin_slider:before {
    866     transform: translateX(13px);
    867 }
    868 
    869 .cookieadmin_toggle_disabled .cookieadmin_slider {
    870     background-color: #3582c4;
    871 }
    872 .cookieadmin_toggle_disabled .cookieadmin_slider:before {
    873     transform: translateX(13px);
    874 }
    875 
    876 /* Checkbox switch End */
    877 
    878 
    879483 /* --- Modal Styles Start --- */
    880484
    881 /* The Modal Overlay/Backdrop */
     485/* The Admin Edit/Add Cookie Modal Overlay/Backdrop */
    882486.cookieadmin_modal-overlay {
    883487    position: fixed;
     
    972576.cookieadmin_modal-footer {
    973577    display: flex;
    974     justify-content: flex-start;
     578    justify-content: flex-end;
    975579    padding: 16px 24px;
    976580    border-top: 1px solid #e0e0e0;
     
    1105709}
    1106710
     711/* Dialog success/failure messages */
     712
     713#cookieadmin-message{
     714    margin-right: 10px;
     715    font-weight: 500;
     716    padding: 5px;
     717}
     718
     719.cookieadmin-success-message {
     720    color: #22c55e;
     721}
     722
     723.cookieadmin-error-message {
     724    color: #dc2626;
     725}
     726
    1107727/* --- Auto Categorize Cookies End --- */
    1108728
     
    1115735/* --- Override Dashicons End --- */
    1116736
    1117 .cookieadmin-poweredby{
    1118 margin-top: 10px;
    1119 }
    1120 
    1121 .cookieadmin-poweredby a img{
    1122 height: 15px;
    1123 }
    1124 
    1125 .cookieadmin-poweredby a{
    1126 color : unset;
    1127 cursor: pointer;
    1128 display: flex;
    1129 justify-content: center;
    1130 align-items: center;
    1131 font-size: 11px;
    1132 gap: 2px;
    1133 text-decoration: none;
    1134 }
    1135 
    1136 .cookieadmin_modal_footer .cookieadmin-poweredby a{
    1137 justify-content: end;
    1138 }
    1139 
    1140 /* CSS for phones only */
    1141 @media (max-width: 767px) {
    1142 
    1143     .cookieadmin_center{
    1144         top: 10%;
    1145         left: 5%;
    1146         max-width: 90vw;
    1147     }
    1148 
    1149     .show_pref_cookies{
    1150         font-size: 14px;
    1151     }
    1152 
    1153     .cookieadmin_law_container, .cookieadmin_box{
    1154         width: 90%;
    1155     }
    1156    
    1157     .cookieadmin_side{
    1158         width: 100%;
    1159     }
    1160 }
    1161 
    1162 /* CSS for tablet */
    1163 @media (min-width: 768px) and (max-width: 991px) {
    1164 
    1165     .cookieadmin_box{
    1166         width: 45%;
    1167     }
    1168 }
    1169 
    1170 /* CSS for small laptop */
    1171 @media (min-width: 992px) and (max-width: 1199px) {
    1172 
    1173     .cookieadmin_box{
    1174         width: 35%;
    1175     }
    1176    
    1177 }
    1178 /* CSS for HD TV screens */
    1179 @media (min-width: 1200px) and (max-width: 1360px) {
    1180 
    1181     .cookieadmin_box{
    1182         width: 30%;
    1183     }
    1184 }
    1185 
    1186 /* Desktop Layout */
    1187 @media (min-width: 768px) {
    1188     .cookieadmin_notice_group {
    1189         flex-direction: row;
    1190         justify-content: space-between;
    1191         align-items: center;
    1192     }
    1193 
    1194     .cookieadmin_notice_con {
    1195         flex: 1; /* take remaining space */
    1196     }
    1197 
    1198     .cookieadmin_consent_btns {
    1199         flex-shrink: 0;
    1200     }
    1201 }
    1202 
    1203 @media (max-width:480px){
    1204     .cookieadmin_consent_inside .cookieadmin_btn {
    1205         width: 100%;
    1206         margin: 5px 0;
    1207     }
    1208    
    1209     .cookieadmin_modal_footer{
    1210         padding: 8px;
    1211     }
    1212 }
     737
     738
     739/* CookieAdmin Tooltip Start */
     740
     741.cookieadmin-tooltip {
     742    position: fixed;
     743    background: #5d5d5d;
     744    color: #fff;
     745    padding: 6px 10px;
     746    border-radius: 4px;
     747    font-size: 12px;
     748    white-space: nowrap;
     749    pointer-events: none;
     750    z-index: 999999;
     751    opacity: 0;
     752    transition: opacity 0.12s ease;
     753}
     754
     755
     756/* CookieAdmin Tooltip End */
     757
     758
     759.cookieadmin-buttons-div {
     760    display: flex;
     761    flex-direction: row;
     762}
     763
     764.cookieadmin-add-cookie-div {
     765    border-right: 1px solid #e0e0e0;
     766    padding-right: 10px;
     767}
     768
     769/* Consent Expiry */
     770#cookieadmin_consent_logs_expiry_days {
     771    width: 50px;
     772    text-align: center;
     773    margin: 0px 10px;
     774    padding: 0px;
     775    height: 30px;
     776}
     777
     778.cookieadmin-purge-consent-btn{
     779    background-color: #dc3545 !important;
     780    color: white !important;
     781    border-color: unset !important;
     782}
     783
     784.cookieadmin-setting-logs{
     785    display: flex;
     786    align-items: center;
     787}
     788
     789.cookieadmin-save-settings{
     790    border-top: 1px solid #e0e0e0;
     791    margin-bottom: 15vh;
     792}
  • cookieadmin/trunk/assets/js/consent.js

    r3412297 r3460841  
     1// This file handle the cookie banner and stuff related to that.
     2
    13var days = cookieadmin_policy.cookieadmin_days;
    24
     
    810
    911function cookieadmin_is_obj(consentObj){
    10     return (Object.keys(consentObj).length !== 0);
     12    try{
     13        return (
     14            consentObj !== null &&
     15            typeof consentObj === 'object' &&
     16            !Array.isArray(consentObj) &&
     17            Object.keys(consentObj).length > 0
     18        );
     19    }catch(e){
     20        return false;
     21    }
    1122}
    1223
    1324
    1425// function cookieadmin_cookie_interceptor(){
    15    
     26
    1627    var originalCookieDescriptor =
    1728    Object.getOwnPropertyDescriptor(Document.prototype, 'cookie') ||
     
    4253                return;
    4354            }
    44 
     55           
     56            // Set cookies which are meant to be deleted
    4557            if(val.includes('expires=Thu, 01 Jan 1970') || cookieValue.startsWith("deleted;")){
    4658                originalCookieDescriptor.set.call(document, val);
     
    5062            var cookieInfo = cookieadmin_allcookies[cookieName] || {};
    5163            var category = (cookieInfo.category || 'uncategorized').toLowerCase();
    52 
     64           
     65            // Set necessary cookies
    5366            if(category == "necessary"){
    5467                originalCookieDescriptor.set.call(document, val);
     
    5669            }
    5770
    58             if(cookieadmin_is_obj(cookieadmin_is_consent)){
     71            if(cookieadmin_is_obj(cookieadmin_is_consent) || (Array.isArray(cookieadmin_policy['preload']) && cookieadmin_policy['preload'].length > 0)){
    5972
    6073                var consentAction = cookieadmin_is_consent.action;
     74               
     75                if(!consentAction){
     76                    consentAction = cookieadmin_policy['preload'].reduce((a, val) => {a[val] = ''; return a;}, {});
     77                }
    6178
    6279                if(consentAction.accept || consentAction[category]){
     
    88105    if(!document.cookie) return false;
    89106   
    90     let coki = document.cookie.split(";") ;
     107    var coki = document.cookie.split(";") ;
    91108   
    92109    if(name == "all"){
    93110        return coki ? coki : [];
    94111    }
    95     let nam = name + "=";
    96    
    97     for(let i=0; i < coki.length; i++){
     112    var nam = name + "=";
     113   
     114    for(var i=0; i < coki.length; i++){
    98115        if(coki[i].trim().indexOf(nam) == 0){
    99116                return coki[i].trim();
     
    105122
    106123function cookieadmin_check_consent(){
    107    
    108     if(cookieadmin_cookie = cookieadmin_is_cookie("cookieadmin_consent")){
     124    var cookieadmin_cookie = cookieadmin_is_cookie("cookieadmin_consent")
     125    if(!!cookieadmin_cookie){
    109126        cookieadmin_cookie = JSON.parse(cookieadmin_cookie.split("=")[1]);
    110127        if(!!cookieadmin_cookie.consent){
     
    182199  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000); // default 1 year
    183200
    184   let cookieString = `${encodeURIComponent(name)}=${JSON.stringify(value)};`;
     201  var cookieString = `${encodeURIComponent(name)}=${JSON.stringify(value)};`;
    185202  cookieString += ` expires=${date.toUTCString()};`;
    186203  cookieString += ` path=${cookieadmin_policy.base_path};`;
     
    199216}
    200217
    201 //Populates modal with consent if selected
     218//Populates modal with consent if selected & adds found cookies
    202219function cookieadmin_populate_preference(){
    203220   
     
    223240            }
    224241        }
    225     }
    226    
    227     cookieadmin_shown = (typeof cookieadmin_shown !== "undefined") ? cookieadmin_shown : [];
     242    //Load as per preloaded categories selected by admin   
     243    }else if(cookieadmin_policy['preload'] && cookieadmin_policy['preload'].length > 0){
     244       
     245        cookieadmin_policy['preload'].forEach(function(val){
     246            if(btn_ele = document.querySelector("#cookieadmin-" + val)){
     247                btn_ele.checked = true;
     248            }
     249        });
     250    }
     251   
     252    var cookieadmin_shown = (typeof cookieadmin_shown !== "undefined") ? cookieadmin_shown : [];
    228253   
    229254    if(cookieadmin_allcookies){
    230255       
    231         cookieadmin_filtrd = Object.keys(cookieadmin_allcookies).filter(e => !cookieadmin_shown.includes(e));
     256        var cookieadmin_filtrd = Object.keys(cookieadmin_allcookies).filter(e => !cookieadmin_shown.includes(e));
    232257       
    233258        for(c_info of cookieadmin_filtrd){
    234259           
    235             if(e = document.querySelector(".cookieadmin-" + cookieadmin_allcookies[c_info].category?.toLowerCase())){
    236                 e.innerHTML = (e.innerHTML == 'None') ?  '' : e.innerHTML;
     260            var category_var = cookieadmin_allcookies[c_info].category;
     261           
     262            if(!category_var){
     263                continue;
     264            }
     265            var card_container = document.querySelector(".cookieadmin-" + category_var.toLowerCase());
     266           
     267            if(!card_container){
     268                continue;
     269            }
     270            card_container.innerHTML = (card_container.innerHTML == 'None') ?  '' : card_container.innerHTML;
     271           
     272            var cookieadmin_exp = cookieadmin_policy.lang.session;
    237273               
    238                 exp = cookieadmin_policy.lang.session;
    239                    
    240                 if(!!cookieadmin_allcookies[c_info].expires){
    241                     exp = Math.round((cookieadmin_allcookies[c_info].expires - Date.now())/86400);
    242                     if(exp < 1 && !!res['Max-Age']){
    243                         exp = res['Max-Age'];
    244                     }else{
    245                         exp = cookieadmin_policy.lang.session;
     274            if(
     275                !!cookieadmin_allcookies[c_info].expires
     276                && cookieadmin_allcookies[c_info].expires !== "0000-00-00 00:00:00"
     277            ){
     278               
     279                var expDate = new Date(cookieadmin_allcookies[c_info].expires.replace(' ', 'T'));
     280               
     281                if (!isNaN(expDate.getTime())) {
     282                    var daysLeft = Math.ceil((expDate.getTime() - Date.now()) / (1000 * 60 * 60 * 24));
     283
     284                    if (daysLeft > 0) {
     285                        cookieadmin_exp = daysLeft +' '+ cookieadmin_policy.lang.days;
    246286                    }
    247287                }
    248                
    249                 e.innerHTML += '<div class="cookieadmin-cookie-card"> <div class="cookieadmin-cookie-header"> <strong class="cookieadmin-cookie-name">'+ c_info.replace(/_+$/, "") +'</strong> <span class="cookieadmin-cookie-duration"><b>'+ cookieadmin_policy.lang.duration +':</b> '+ exp +'</span> </div> <p class="cookieadmin-cookie-description">'+ cookieadmin_allcookies[c_info].description +'</p> <div class="cookieadmin-cookie-tags"> ' + (cookieadmin_allcookies[c_info].platform ? '<span class="cookieadmin-tag">' + cookieadmin_allcookies[c_info].platform + '</span>' : "") + ' </div> </div>';
    250             }
     288            }
     289           
     290            card_container.innerHTML += '<div class="cookieadmin-cookie-card"> <div class="cookieadmin-cookie-header"> <strong class="cookieadmin-cookie-name">'+ c_info.replace(/_+$/, "") +'</strong> <span class="cookieadmin-cookie-duration"><b>'+ cookieadmin_policy.lang.duration +':</b> '+ cookieadmin_exp +'</span> </div> <p class="cookieadmin-cookie-description">'+ cookieadmin_allcookies[c_info].description +'</p> <div class="cookieadmin-cookie-tags"> ' + (cookieadmin_allcookies[c_info].platform ? '<span class="cookieadmin-tag">' + cookieadmin_allcookies[c_info].platform + '</span>' : "") + ' </div> </div>';
    251291            cookieadmin_shown.push(c_info);
    252292        }
     
    402442
    403443    //Add layout as class
    404     if(!!cookieadmin_policy.cookieadmin_position){
     444    if(!!cookieadmin_policy.cookieadmin_position && cookieadmin_policy.cookieadmin_layout !== "popup"){
    405445        cookieadmin_policy.cookieadmin_position.split("_").forEach(function(clas){
    406446            clas = "cookieadmin_" + clas;
     
    410450
    411451    // Change consent layout dynamically
    412     document.getElementsByClassName("cookieadmin_law_container")[0].classList.add("cookieadmin_" + cookieadmin_policy.cookieadmin_layout);
     452  // TODO: There is a operator called optional chaining operator ?. something like this users?.[0]?.name; wont use it now just for reference
     453    var  cookieadmin_law_container_var = document.getElementsByClassName("cookieadmin_law_container")[0];
     454    if (!!cookieadmin_law_container_var){
     455        cookieadmin_law_container_var.classList.add("cookieadmin_" + cookieadmin_policy.cookieadmin_layout);
     456    }
    413457
    414458    // Change Modal layout dynamically
     
    514558    });
    515559   
    516     //showmore modal btn
    517     document.getElementsByClassName("cookieadmin_showmore")[0]?.addEventListener("click", function(){
    518        
    519         var cur_height = document.getElementsByClassName("cookieadmin_preference")[0].style.height;
    520        
    521         if(!cur_height){
    522             document.getElementsByClassName("cookieadmin_preference")[0].style.height = "auto";
    523             this.innerHTML = cookieadmin_policy.lang.show_less;
    524         }else{
    525             document.getElementsByClassName("cookieadmin_preference")[0].style.height = "";
    526             this.innerHTML = cookieadmin_policy.lang.show_more;
    527         }
    528     });
    529 
    530 
    531560    document.querySelectorAll(".cookieadmin_show_pref_cookies").forEach(function(e){
    532561        e.addEventListener("click", function(el){
  • cookieadmin/trunk/assets/js/cookie.js

    r3412297 r3460841  
     1// This file is a part of the admin side of CookieAdmin
     2
    13jQuery(document).ready(function($){
    24   
    35    var law = '';
    46   
    5     $(".cookieadmin_showmore").on("click", function(){
    6         if($(".cookieadmin_showmore").html().includes(cookieadmin_policy.lang.show_more)){
    7             $(".cookieadmin_preference").height("auto");
    8             $(this).html(cookieadmin_policy.lang.show_less);
    9         }else{
    10             $(".cookieadmin_preference").height("");
    11             $(this).html(cookieadmin_policy.lang.show_more);
    12         }
    13     });
    14    
    15     $("#cookieadmin_layout_footer").on("change", function(){
     7    function cookieadminSelectFooterLayout(){
    168        $("input[name=cookieadmin_position]").prop("checked", false);
    179        $(".consent-position").slideDown();
     
    1911        $(".cookieadmin_box_layout").hide();
    2012        $(".consent-modal-layout").show();
    21     });
    22    
    23     $("#cookieadmin_layout_box").on("change", function(){
     13    }
     14    $("#cookieadmin_layout_footer").on("change", cookieadminSelectFooterLayout);
     15   
     16    function cookieadminSelectBoxLayout(){
    2417        $("input[name=cookieadmin_position]").prop("checked", false);
    2518        $(".consent-position").slideDown();
     
    2720        $(".cookieadmin_box_layout").fadeIn(800);
    2821        $(".consent-modal-layout").slideDown();
    29     });
    30 
    31     $("#cookieadmin_layout_popup").on("change", function(){
     22    }
     23    $("#cookieadmin_layout_box").on("change", cookieadminSelectBoxLayout);
     24
     25    function cookieadminSelectPopLayout(){
    3226        $("input[name=cookieadmin_position]").prop("checked", false);
    3327        $(".consent-position").slideUp();
    3428        $(".consent-modal-layout").slideUp();
    35     });
     29    }
     30    $("#cookieadmin_layout_popup").on("change", cookieadminSelectPopLayout);
    3631   
    3732    setTimeout( function(){
     
    3934    }, 5000);
    4035
    41     //==== Notice Section Preview
     36    //==== Notice Section Preview Live Change
    4237
    4338    $('#cookieadmin_notice_title_layout').on('input', function () {
     
    231226        $(".cookieadmin_save_btn").css('color', $("#cookieadmin_save_btn_color").val());
    232227
    233         $(".cookieadmin_showmore").css('color', law.cookieadmin_links_color);
    234228        $(".act").css('color', law.cookieadmin_links_color);
    235229
    236230        const sliders = $("#cookieadmin_wrapper .cookieadmin_slider");
    237         $(sliders[0]).css('background-color', law.cookieadmin_slider_on_bg_color);
     231        $(sliders[0]).css('background-color', law.cookieadmin_slider_off_bg_color);
    238232        $(sliders[1]).css('background-color', law.cookieadmin_slider_off_bg_color);
    239233        $(sliders[2]).css('background-color', law.cookieadmin_slider_off_bg_color);
    240         $(sliders[3]).css('background-color', law.cookieadmin_slider_off_bg_color);
    241234
    242235        //Also set layout of consents
     
    267260    }
    268261   
    269     $("#cookieadmin_show_preview").on("click", function(){
     262    function cookieadminShowPreview(){
    270263        if($("#cookieadmin_layout_popup").prop("checked")){
    271264            show_modal();
     
    273266            $(".cookieadmin_law_container").toggle();
    274267        }
    275     });
     268    }
     269    $("#cookieadmin_show_preview").on("click", cookieadminShowPreview);
    276270   
    277271    $(".cookieadmin_customize_btn").on("click", function(){
     
    283277    });
    284278   
    285     $("#cookieadmin_consent_type").on("change", function(){
     279    function cookieadminChangeLaw(){
    286280       
    287281        var law = $("#cookieadmin_consent_type").find(":selected").attr("name");
     
    363357       
    364358        law == 'cookieadmin_gdpr' ? $(".setting-prior").show() : $(".setting-prior").hide();
    365     });
    366 
    367     $("consent_page").submit(function(){
     359    }
     360    $("#cookieadmin_consent_type").on("change", cookieadminChangeLaw);
     361
     362    function cookieadminSubmitConsent(e){       
    368363        var checked = false;
    369364       
    370365        if (!$("input[name=cookieadmin_position]:checked").length && !$("#cookieadmin_layout_popup").prop("checked")) {
    371             alert('Please select one of the radio buttons.');
    372             event.preventDefault(); // Prevent form submission
    373         }
    374     });
    375    
    376     $("[id$=_preload]").on("click", function(){
    377        
    378         if(!$(".setting-prior").find("[id$=_preload]:checked").length && $(".cookieadmin-settings").find(".cookieadmin-collapsible-notice").length){
     366            alert('Please select a notice position.');
     367            e.preventDefault(); // Prevent form submission
     368        }
     369    }
     370    $("#consent_submenu").submit(cookieadminSubmitConsent);
     371   
     372    function cookieadminPreloadCookies(){
     373       
     374        if(!($(".setting-prior").find("[id$=_preload]:checked").length - 1) && $(".cookieadmin-settings").find(".cookieadmin-collapsible-notice").length){
    379375            $(".cookieadmin-settings").find(".cookieadmin-collapsible-notice").remove();
    380376            return;
     
    386382        }
    387383       
    388     });
    389    
    390     $(".cookieadmin-scan").on("click", function(){
     384    }
     385    $("[id$=_preload]").on("click", cookieadminPreloadCookies);
     386   
     387    function cookieadminScanCookies(){
    391388       
    392389        let cookieadmin_btn_val = $(this).prop('value');
    393         $(this).prop("disabled", true).prop('value', 'Scanning...');
     390        var this_btn = $(this);
     391        this_btn.prop("disabled", true).prop('value', 'Scanning...');
    394392       
    395393        $.ajax({
     
    403401            success: function(result){
    404402               
    405                 if (result.success) {
    406                                
    407                     $('.cookieadmin-cookie-categorized tbody').find("tr:gt(1)").remove();
    408                     $.each(result.data, function(index, res){
    409                        
    410                         var row = '';
    411                         exp = 'Session';
    412                        
    413                         if(!!res.expires){
    414                             exp = Math.round((res.expires - Date.now())/86400);
    415                             if(exp < 1 && !!res['Max-Age']){
    416                                 exp = res['Max-Age'] + " days";
    417                             }else{
    418                                 exp = 'Session';
    419                             }
    420                         }
    421                        
    422                         row = '<tr>';
    423                         row += '<td>' + res.cookie_name + '</td>';
    424                         row += '<td>' + res.description + '</td>';
    425                         row += '<td>' + exp + '</td>';
    426                         row += '<td> <span class="dashicons dashicons-edit cookieadmin_edit_icon" id="edit_'+res.id+'"></span> <span class="dashicons dashicons-trash cookieadmin_delete_icon" id="delete_'+res.id+'"></span> </td>';
    427                         row += '</tr>';
    428                         categorized_cookies[res.id] = res;
    429                         categorized_cookies[res.id]['expires'] = exp;
    430                        
    431                         if(!!res.category){
    432                             type = "#" + res.category.toLowerCase() + "_tbody";
    433                             $(type).find('.cookieadmin-empty-row').remove();
    434                             $(type).append(row);
    435                         }else{
    436                             $("#unknown_tbody").find('.cookieadmin-empty-row').remove();
    437                             $("#unknown_tbody").append(row);
    438                         }
    439                     });
    440                    
    441                 } else {
    442                     alert(result.data.message);
     403                if(result.success){
     404                    if(typeof cookieadmin_pro_policy === 'object'){
     405                        alert(cookieadmin_pro_policy.lang.background_scan);
     406                    }else{
     407                        alert(cookieadmin_policy.lang.scan_completed);
     408                        window.location.reload();
     409                    }
     410                }else{
     411                    alert(result.message);
    443412                }
    444413               
    445414            }, 
    446415            error: function(xhr, status, error) {
     416                console.log('CookieAdmin AJAX Error:', status, error);
     417                console.log('CookieAdmin response: ' + xhr.responseText); // Check the error message
    447418                alert("Request failed: " + error);
    448419            },
    449420            complete: function() {
    450                 $(".cookieadmin-scan").prop("disabled", false).prop("value", cookieadmin_btn_val);
     421                this_btn.prop("disabled", false).prop("value", cookieadmin_btn_val);
    451422            }
    452423        });
    453     });
    454    
    455     $("#cookieadmin_dialog_save_btn").on("click", function(){
    456        
     424    }
     425    $(".cookieadmin-scan").on("click", cookieadminScanCookies);
     426   
     427    function cookieadminSaveCookie(){
     428       
     429        $('#cookieadmin-message').removeClass().addClass('spinner is-active').text('').css('height','auto');
    457430        $(this).prop("disabled", true);
     431       
     432        //set 0 to add real id to delete
     433        cookie_id = $(this).attr("cookieadmin_cookie_id");
    458434       
    459435        let cookie_info = {
    460436            name: $("#cookieadmin-dialog-cookie-name").val(),
    461             id: $(this).attr("cookieadmin_cookie_id"),
     437            id: cookie_id,
    462438            description: $("#cookieadmin-dialog-cookie-desc").val(),
    463439            duration: $("#cookieadmin-dialog-cookie-duration").val(),
    464440            type: $("#cookieadmin-dialog-cookie-category").val()
    465441        };
     442       
     443        $.each(cookie_info, function (i, val){
     444            if(!val){
     445                cookie_info = null;
     446                return false;
     447            }
     448        });
     449   
     450        if(!cookie_info){
     451            $(this).prop("disabled", false);
     452            $('#cookieadmin-message').removeClass().addClass('cookieadmin-error-message').text('Please fill all the fields');
     453            return false;
     454        }
     455       
     456        // Used to call add cookie, in the Pro file.
     457        if(cookie_id == 0 && typeof cookieadminProSaveCookie === 'function'){
     458            cookieadminProSaveCookie(cookie_info);
     459            return;
     460        }
    466461       
    467462        $.ajax({
     
    477472               
    478473                if(result.success){
    479                        
    480                     var row = '';
    481                                        
    482                     row = '<tr>';
    483                     row += '<td>' + cookie_info.name + '</td>';
    484                     row += '<td>' + cookie_info.description + '</td>';
    485                     row += '<td>' + cookie_info.duration + '</td>';
    486                     row += '<td> <span class="dashicons dashicons-edit cookieadmin_edit_icon" id="edit_'+cookie_info.id+'"></span> <span class="dashicons dashicons-trash cookieadmin_delete_icon" id="edit_'+cookie_info.id+'"></span> </td>';
    487                     row += '</tr>';
    488                    
    489                     $("#edit_"+cookie_info.id).parents("tr").remove();
    490                     tbody = "#" + cookie_info.type.toLowerCase() + "_tbody";
    491                     $(tbody).find('.cookieadmin-empty-row').remove();
    492                     $(tbody).append(row);
    493 
    494                     categorized_cookies[cookie_info.id]['cookie_name'] = cookie_info.name;
    495                     categorized_cookies[cookie_info.id]['description'] = cookie_info.description;
    496                     categorized_cookies[cookie_info.id]['expires'] = cookie_info.duration;
    497                     categorized_cookies[cookie_info.id]['category'] = cookie_info.type;
    498                    
     474                    cookieadminAddCookieToTable(cookie_info);
     475                    $('#cookieadmin-message').removeClass().addClass('cookieadmin-success-message').text(result.message);
    499476                }else{
    500                     alert(result.data.message);
     477                    alert(result.message);
    501478                }
     479            },
     480            error: function(xhr, status, error) {
     481                console.log('CookieAdmin AJAX Error:', status, error);
     482                console.log('CookieAdmin response: ' + xhr.responseText); // Check the error message
     483                alert("Request failed: " + error);
    502484            }
    503485        });
    504486        $(this).prop("disabled", false);       
    505     });
    506    
    507 
     487    }
     488    $("#cookieadmin_dialog_save_btn").on("click", cookieadminSaveCookie);
     489   
    508490    $("input[type=color]").on("input", function(){
    509491        elemt = $(this).attr("id").replace("_box", "");
     
    512494   
    513495   
    514     $(document).on("click", ".cookieadmin_delete_icon", function(){
     496    function cookieadminDeleteCookie(){
    515497       
    516498        if(confirm("Are you sure you want to delete ?")){
    517499           
    518500            cookie_raw_id = $(this).attr("id").replace("delete_", "");
     501            var row = $(this).parents("tr")
    519502           
    520503            $.ajax({
     
    523506                data : {
    524507                    action : 'cookieadmin_ajax_handler',
    525                     cookieadmin_act : 'cookieadmin-edit-cookie',
     508                    cookieadmin_act : 'cookieadmin-delete-cookie',
    526509                    cookie_raw_id : cookie_raw_id,
    527510                    cookieadmin_security : cookieadmin_policy.cookieadmin_nonce,
    528511                },
    529512                success: function(result){
    530                    
    531513                    if (result.success) {
     514                        row.remove();
    532515                        delete categorized_cookies[cookie_raw_id];
    533516                    }else{
    534                         alert(result.data.message);
     517                        alert(result.message);
    535518                    }
     519                },
     520                error: function(xhr, status, error) {
     521                    console.log('CookieAdmin AJAX Error:', status, error);
     522                    console.log('CookieAdmin response: ' + xhr.responseText); // Check the error message
     523                    alert("Request failed: " + error);
    536524                }
    537525            });
    538            
    539             $(this).parents("tr").remove();
    540         }
    541     });
    542    
    543    
    544     $(document).on("click", ".cookieadmin_edit_icon, .cookieadmin_dialog_modal_close_btn", function(){
     526        }
     527    }
     528    $('.cookieadmin-metabox-holder').on("click", ".cookieadmin_delete_icon", cookieadminDeleteCookie);
     529   
     530    function cookieadminOpenCookieDialog(){
    545531       
    546532        const modal = document.getElementById('edit-cookie-modal');
     
    550536        }else{
    551537            modal.classList.add('active');
    552             var cookie_id = $(this).attr("id").replace("edit_", "");
    553538           
    554             $("#cookieadmin_dialog_save_btn").attr("cookieadmin_cookie_id", cookie_id);
    555             $("#cookieadmin-dialog-cookie-name").val(categorized_cookies[cookie_id]['cookie_name']);
    556             $("#cookieadmin-dialog-cookie-desc").val(categorized_cookies[cookie_id]['description']);
    557             $("#cookieadmin-dialog-cookie-duration").val(categorized_cookies[cookie_id]['expires']);
    558             if(!!categorized_cookies[cookie_id]['category']){
    559                 $("#cookieadmin-dialog-cookie-category").val(categorized_cookies[cookie_id]['category']);
     539            if($(this).hasClass('cookieadmin-add-cookie')){
     540                $("#cookieadmin_dialog_save_btn").attr("cookieadmin_cookie_id", 0);
     541                $('.cookieadmin_modal-header').children()[0].innerHTML = 'Add Cookie';
     542                $('.cookieadmin_modal-container').find('input,textarea,select').val('');
    560543            }else{
    561                 $("#cookieadmin-dialog-cookie-category").val("unknown");
     544               
     545                $('.cookieadmin_modal-header').children()[0].innerHTML = 'Edit Cookie';
     546                var cookie_id = $(this).attr("id").replace("edit_", "");
     547               
     548                $("#cookieadmin_dialog_save_btn").attr("cookieadmin_cookie_id", cookie_id);
     549                $("#cookieadmin-dialog-cookie-name").val(categorized_cookies[cookie_id]['cookie_name']);
     550                $("#cookieadmin-dialog-cookie-desc").val(categorized_cookies[cookie_id]['description']);
     551                $("#cookieadmin-dialog-cookie-duration").val(categorized_cookies[cookie_id]['expires']);
     552                if(!!categorized_cookies[cookie_id]['category']){
     553                    $("#cookieadmin-dialog-cookie-category").val(categorized_cookies[cookie_id]['category']);
     554                }else{
     555                    $("#cookieadmin-dialog-cookie-category").val("unknown");
     556                }
    562557            }
     558           
     559            $('.cookieadmin-metabox-holder').on('mousedown.cookieadmin-close-dialog2', function(e){
     560                if ( !$(".cookieadmin_modal-container").is(e.target) && $(".cookieadmin_modal-container").has(e.target).length === 0 && !$(".cookieadmin_modal-container").is(e.target) && $(".cookieadmin_modal-container").has(e.target).length === 0) {
     561                    modal.classList.remove('active');
     562                    $('#cookieadmin-message').removeClass().addClass('cookieadmin-success-message').text('');
     563                    $('.cookieadmin-metabox-holder').off('mousedown.cookieadmin-close-dialog2');
     564                }
     565            });
    563566        }       
    564     });
    565    
    566    
    567     $(document).on('click', '.cookieadmin-cookie-categorized tbody > tr:first-child', function() {
    568       var $tbody = jQuery(this).closest('tbody');
     567    }
     568    $(document).on("click", ".cookieadmin_edit_icon, .cookieadmin_dialog_modal_close_btn, .cookieadmin-add-cookie", cookieadminOpenCookieDialog);
     569   
     570   
     571    function cookieadminExpandCollapseCookiesList() {
     572      var $tbody = $(this).closest('tbody');
    569573      var $rows = $tbody.find('tr:not(:first-child)');
    570574
     
    576580        $tbody.removeClass('collapsed');
    577581      }
     582    }
     583    $('.cookieadmin-metabox-holder').on('click', '.cookieadmin-cookie-categorized tbody > tr:first-child', cookieadminExpandCollapseCookiesList);
     584   
     585    // Tooltip
     586    let cookieadminToolTip;
     587   
     588    function cookieadminCreateTooltip(){
     589        cookieadminToolTip = $('<div>', {
     590            class: 'cookieadmin-tooltip'
     591        }).appendTo('body');
     592    }
     593
     594    $('.cookieadmin-tooltip-box').on('mouseenter', function(e){
     595       
     596        if(!cookieadminToolTip){
     597            cookieadminCreateTooltip();
     598        }
     599       
     600        var tip = $(this).attr('data-tip') || '';
     601        cookieadminToolTip.text(tip).css('opacity', 1);
     602       
     603    }).on('mousemove', function(e){
     604       
     605        if(!cookieadminToolTip){
     606            return;
     607        }
     608       
     609        var offset = 12;
     610        var tooltipRect = cookieadminToolTip[0].getBoundingClientRect();
     611       
     612        var top = e.clientY - tooltipRect.height - offset;
     613        var left = e.clientX + offset;
     614       
     615        // Flip below if not enough space above
     616        if(top < 8){
     617            top = e.clientY + offset;
     618        }
     619       
     620        // Prevent right overflow
     621        if(left + tooltipRect.width > window.innerWidth - 8){
     622            left = e.clientX - tooltipRect.width - offset;
     623        }
     624       
     625        cookieadminToolTip.css({
     626            top: top + 'px',
     627            left: left + 'px'
     628        });
     629    })
     630    .on('mouseleave', function(){
     631
     632        if(!cookieadminToolTip){
     633            return;
     634        }
     635       
     636        cookieadminToolTip.css('opacity', 0);
    578637    });
    579638   
    580639   
    581640});
     641
     642function cookieadminAddCookieToTable(cookie_info){
     643
     644    var row = '';
     645
     646    categorized_cookies[cookie_info.id] = !categorized_cookies[cookie_info.id] ? {} : categorized_cookies[cookie_info.id];
     647
     648    categorized_cookies[cookie_info.id]['id'] = cookie_info.id;
     649    categorized_cookies[cookie_info.id]['cookie_name'] = cookie_info.name;
     650    categorized_cookies[cookie_info.id]['description'] = cookie_info.description;
     651    categorized_cookies[cookie_info.id]['expires'] = cookie_info.duration;
     652    categorized_cookies[cookie_info.id]['category'] = cookie_info.type;
     653   
     654    if(cookie_info.duration > 0){
     655        cookie_info.duration += ' ' + cookieadmin_policy.lang.days;
     656    }else{
     657        cookie_info.duration = cookieadmin_policy.lang.session;
     658    }
     659   
     660    row = '<tr>';
     661    row += '<td>' + cookie_info.name + '</td>';
     662    row += '<td>' + cookie_info.description + '</td>';
     663    row += '<td>' + cookie_info.duration + '</td>';
     664    row += '<td> <span class="dashicons dashicons-edit cookieadmin_edit_icon" id="edit_'+cookie_info.id+'"></span> <span class="dashicons dashicons-trash cookieadmin_delete_icon" id="edit_'+cookie_info.id+'"></span> </td>';
     665    row += '</tr>';
     666   
     667    jQuery("#edit_"+cookie_info.id).parents("tr").remove();
     668    tbody = "#" + cookie_info.type.toLowerCase() + "_tbody";
     669    jQuery(tbody).find('.cookieadmin-empty-row').remove();
     670    jQuery(tbody).append(row);
     671   
     672    if(!categorized_cookies[cookie_id]){
     673        jQuery('.cookieadmin_modal-container').find('input,textarea,select').val('');
     674    }
     675}
  • cookieadmin/trunk/assets/js/footer.js

    r3339680 r3460841  
    55
    66document.addEventListener("DOMContentLoaded", function() {
    7     if(!cookieadmin_is_pro){
     7    if(!cookieadmin_data['is_pro']){
    88        jQuery("[cookieadmin-pro-only]").each(function(index) {
    9             jQuery(this).find( "input, textarea, select" ).attr("disabled", true);
     9            jQuery(this).filter("input, textarea, select").attr("disabled", true).css('cursor', 'not-allowed');
     10            jQuery(this).find( "input, textarea, select, span" ).attr("disabled", true).css('cursor', 'not-allowed');
    1011            jQuery(this).find( "input.cookieadmin-color-input" ).css("margin-left", "0px");
     12            jQuery(this).find( "label span" ).not('.cookieadmin-tooltip-box').css("background-color", "#e8e8e8").css("color", "#9f9f9f");
    1113        });
    1214    }
  • cookieadmin/trunk/cookieadmin.php

    r3412297 r3460841  
    44Plugin URI: https://cookieadmin.net
    55Description: CookieAdmin provides easy to configure cookie consent banner with GDPR and CCPA law support.
    6 Version: 1.1.4
     6Version: 1.1.5
    77Author: Softaculous
    88Author URI: https://www.softaculous.com
     
    3838define('COOKIEADMIN_BASE', plugin_basename(COOKIEADMIN_FILE));
    3939define('COOKIEADMIN_DIR', plugin_dir_path(__FILE__));
    40 define('COOKIEADMIN_VERSION', '1.1.4');
     40define('COOKIEADMIN_VERSION', '1.1.5');
    4141define('COOKIEADMIN_URL', plugins_url('', COOKIEADMIN_FILE));
    4242define('COOKIEADMIN_PLUGIN_URL', plugin_dir_url(__FILE__));
     
    5252add_action( 'plugins_loaded', 'cookieadmin_load_textdomain', 9 );
    5353
    54 include_once(dirname(__FILE__).'/init.php');
     54//Auto-loader
     55function cookieadmin_autoloader($class){
     56   
     57    if(!preg_match('/^CookieAdmin\\\(.*)/is', $class, $m)){
     58        return;
     59    }
     60
     61    $m[1] = str_replace('\\', '/', $m[1]);
     62   
     63    if(file_exists(COOKIEADMIN_DIR.'includes/'.strtolower($m[1]).'.php')){
     64        include_once(COOKIEADMIN_DIR.'includes/'.strtolower($m[1]).'.php');
     65    }
     66}
     67
     68spl_autoload_register(__NAMESPACE__.'\cookieadmin_autoloader');
     69
     70
     71if(!class_exists('CookieAdmin')){
     72#[\AllowDynamicProperties]
     73class CookieAdmin{
     74}
     75}
     76
     77add_action('plugins_loaded', 'cookieadmin_load_plugin');
    5578
    5679// Activation & Deactivation Hooks
  • cookieadmin/trunk/includes/admin.php

    r3412297 r3460841  
    4040        //Consent Page CSS
    4141        wp_enqueue_style('cookieadmin-style', COOKIEADMIN_PLUGIN_URL . 'assets/css/cookie.css', [], COOKIEADMIN_VERSION);
     42        wp_enqueue_style('cookieadmin-user-style', COOKIEADMIN_PLUGIN_URL . 'assets/css/consent.css', [], COOKIEADMIN_VERSION);
    4243       
    4344        //WP Color picker
     
    5051           
    5152            wp_enqueue_script('cookieadmin_js', COOKIEADMIN_PLUGIN_URL . 'assets/js/cookie.js', [], COOKIEADMIN_VERSION);
     53            // wp_enqueue_script('cookieadmin_js', COOKIEADMIN_PLUGIN_URL . 'assets/js/consent.js', [], COOKIEADMIN_VERSION);
    5254       
    5355            $policy['set'] = $view;
     
    5860            $policy['lang']['show_more'] = __('Show more', 'cookieadmin');
    5961            $policy['lang']['show_less'] = __('Show less', 'cookieadmin');
     62            $policy['lang']['days'] = __('Day(s)', 'cookieadmin');
     63            $policy['lang']['session'] = __('Session', 'cookieadmin');
     64            $policy['lang']['scan_completed'] = __('Scan completed', 'cookieadmin');
    6065           
    6166            wp_localize_script('cookieadmin_js', 'cookieadmin_policy', $policy);
     
    6368       
    6469        wp_enqueue_script('cookieadmin_js_footer', COOKIEADMIN_PLUGIN_URL . 'assets/js/footer.js', [], COOKIEADMIN_VERSION);
    65         wp_localize_script('cookieadmin_js_footer', 'cookieadmin_is_pro', (int) cookieadmin_is_pro());
     70        wp_localize_script('cookieadmin_js_footer', 'cookieadmin_data', array('is_pro' => cookieadmin_is_pro()));
    6671    }
    6772   
     
    6974    static function cookieadmin_plugin_menu(){
    7075       
     76        if(!empty($_REQUEST['cookieadmin_save_settings'])){
     77       
     78            if(!empty($_REQUEST['cookieadmin_consent_type'])){
     79                \CookieAdmin\Admin\Consent::save_consent_form();
     80            }else{
     81                \CookieAdmin\Admin\Settings::save_settings();
     82            }
     83        }
     84       
    7185        $capability = 'activate_plugins';
    72        
    73         add_menu_page(__('CookieAdmin', 'cookieadmin'), __('CookieAdmin', 'cookieadmin'), $capability, 'cookieadmin', '\CookieAdmin\Admin::dashboard_page', COOKIEADMIN_PLUGIN_URL .'assets/images/cookieadmin_icon_20.svg');
    74        
    75         if (isset($_POST['cookieadmin_save_settings'])) {
    76             \CookieAdmin\Admin::cookieadmin_save_settings();
    77         }
    78        
    79         add_submenu_page('cookieadmin', __('Dashboard', 'cookieadmin'), __('Dashboard', 'cookieadmin'), $capability, 'cookieadmin', '\CookieAdmin\Admin::dashboard_page');
    80        
    81         add_submenu_page('cookieadmin', __('Consent Form', 'cookieadmin'), __('Consent Form', 'cookieadmin'), $capability, 'cookieadmin-consent', '\CookieAdmin\Admin::consent_form_page');
    82        
    83         add_submenu_page('cookieadmin', __('Settings', 'cookieadmin'), __('Settings', 'cookieadmin'), $capability, 'cookieadmin-settings', '\CookieAdmin\Admin::settings_page');
    84        
    85         add_submenu_page('cookieadmin', __('Scan Cookies', 'cookieadmin'), __('Scan Cookies', 'cookieadmin'), $capability, 'cookieadmin-scan-cookies', '\CookieAdmin\Admin::scan_cookies_page');
     86        $logo = defined('SITEPAD') ? 'cookieadmin_icon_20-black.svg' : 'cookieadmin_icon_20.svg';
     87       
     88        add_menu_page(__('CookieAdmin', 'cookieadmin'), __('CookieAdmin', 'cookieadmin'), $capability, 'cookieadmin', '\CookieAdmin\Admin\Dashboard::dashboard', COOKIEADMIN_PLUGIN_URL .'assets/images/'.$logo);
     89       
     90        add_submenu_page('cookieadmin', __('Dashboard', 'cookieadmin'), __('Dashboard', 'cookieadmin'), $capability, 'cookieadmin', '\CookieAdmin\Admin\Dashboard::dashboard');
     91       
     92        add_submenu_page('cookieadmin', __('Consent Form', 'cookieadmin'), __('Consent Form', 'cookieadmin'), $capability, 'cookieadmin-consent', '\CookieAdmin\Admin\Consent::consent_form');
     93       
     94        add_submenu_page('cookieadmin', __('Settings', 'cookieadmin'), __('Settings', 'cookieadmin'), $capability, 'cookieadmin-settings', '\CookieAdmin\Admin\Settings::settings');
     95       
     96        add_submenu_page('cookieadmin', __('Scan Cookies', 'cookieadmin'), __('Scan Cookies', 'cookieadmin'), $capability, 'cookieadmin-scan-cookies', '\CookieAdmin\Admin\Scan::show_cookies');
    8697       
    8798        if(defined('COOKIEADMIN_PREMIUM')){
     
    154165        }
    155166    }
    156    
    157     static function dashboard_page(){
    158        
    159         global $cookieadmin_lang, $cookieadmin_error, $cookieadmin_msg, $cookieadmin_settings;
    160        
    161         self::header_theme(__('Dashboard', 'cookieadmin'));
    162        
    163         $view = get_option('cookieadmin_law', 'cookieadmin_gdpr');
    164        
    165         echo '
    166         <div class="cookieadmin_consent-wrap">
    167             <div class="cookieadmin-admin-row">
    168                 <div class="cookieadmin-stats-block cookieadmin-is-block-25">
    169                     <div class="cookieadmin-stats-name">'.esc_html__('Consent Banner', 'cookieadmin').'</div>
    170                     <div class="cookieadmin-stats-number cookieadmin-green">'.esc_html__('Enabled', 'cookieadmin').'</div>
    171                 </div>
     167
     168    static function cookieadmin_table_exists($table_name) {
     169        global $wpdb;
     170       
     171        $query = $wpdb->prepare("SHOW TABLES LIKE %s", $table_name);
     172       
     173        return $wpdb->get_var($query) === $table_name;
     174    }
     175   
     176    static function scan_notice(){
     177       
     178        $cookieadmin_auto_scan = get_option('cookieadmin_scan');
     179        $current_page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : '';
     180       
     181        if(empty($cookieadmin_auto_scan['status']) || (strpos($current_page, 'cookieadmin') !== 0)){
     182            return false;
     183        }
     184           
     185        $msg = '';
     186       
     187        if($cookieadmin_auto_scan['status'] === 2){
     188           
     189            $count = !empty($cookieadmin_auto_scan['count']) ? $cookieadmin_auto_scan['count'] : 0;
     190            /* translators: %1$s is replaced with a "string" of name of plugins, and %2$s is replaced with "string" which can be "is" or "are" based on the count of the plugin */
     191            $msg = sprintf(__('<br><strong>Cookie Scan is running:</strong> %1$d Cookies found. Please wait for cookies to appear on <a href="%2$s">Scan Cookies Page</a>', 'cookieadmin'), $count, esc_url(admin_url('admin.php?page=cookieadmin-scan-cookies')));
     192        }
     193       
     194        if($cookieadmin_auto_scan['status'] === 3 && isset($cookieadmin_auto_scan['success'])){
    172195               
    173                 <div class="cookieadmin-stats-block cookieadmin-is-block-25">
    174                     <div class="cookieadmin-stats-name">'.esc_html__('Consent Type', 'cookieadmin').'&nbsp;
    175                         <div class="cookieadmin-block-link"><a href="'.esc_url(admin_url('admin.php?page=cookieadmin-consent')).'">['.esc_html__('Edit', 'cookieadmin').']</a></div>
    176                     </div>
    177                     <div class="cookieadmin-stats-number cookieadmin-uppercase">'.(!empty($view) && $view == 'cookieadmin_us' ? esc_html__('US State Laws', 'cookieadmin') : esc_html__('GDPR', 'cookieadmin')).'</div>
    178                 </div>
     196            if($cookieadmin_auto_scan['success'] === true){
     197                /* translators: %1$s is replaced with a "string" of name of plugins, and %2$s is replaced with "string" which can be "is" or "are" based on the count of the plugin */
     198                $msg = sprintf(__('<br><strong>Cookie Scan completed successfully:</strong> Please visit <a href="%1$s">Scan Cookies</a> to review scan results.', 'cookieadmin'), esc_url(admin_url('admin.php?page=cookieadmin-scan-cookies')));
     199            }
     200           
     201            if($cookieadmin_auto_scan['success'] === false){
     202                /* translators: %1$s is replaced with a "string" of name of plugins, and %2$s is replaced with "string" which can be "is" or "are" based on the count of the plugin */
     203                $msg = sprintf(__('<br><strong>Cookie Scan failed:</strong> Please <a href="%1$s">Scan Cookies</a> again for compliance. %2$s', 'cookieadmin'), esc_url(admin_url('admin.php?page=cookieadmin-scan-cookies')), esc_html(!empty($cookieadmin_auto_scan['message']) ? $cookieadmin_auto_scan['message'] : ''));
     204            }
     205        }
     206       
     207        if(empty($msg)){
     208            return;
     209        }
     210       
     211        // cookieadmin_logo_svg fn is Internal static SVG. if allowing user input or filters, escape it.
     212        echo '         
     213        <div class="notice notice-info is-dismissible" id="cookieadmin-auto-scan-notice">
     214            <p>'.cookieadmin_logo_svg().wp_kses_post($msg). '</p>
     215        </div>';
     216       
     217        wp_register_script('cookieadmin-scan-notice', '', ['jquery'], '', true);
     218        wp_enqueue_script('cookieadmin-scan-notice');
     219        wp_add_inline_script('cookieadmin-scan-notice', 'jQuery("#cookieadmin-auto-scan-notice").on("click",
     220        function(e){
     221           
     222            let target = jQuery(e.target);
     223            if(!target.hasClass("notice-dismiss")){
     224                return;
     225            }
     226           
     227            var data;
     228
     229            // Hide it
     230            jQuery("#cookieadmin-auto-scan-notice").remove();
     231
     232            // Save this preference
     233            jQuery.post("'.admin_url('admin-ajax.php?action=cookieadmin_ajax_handler&cookieadmin_act=close-notice&notice=cookieadmin-scan-notice').'&cookieadmin_security='.wp_create_nonce('cookieadmin_admin_js_nonce').'", data, function(response) {
     234            });
     235           
     236        });');
     237       
     238    }
     239    static function consent_log_purge_notice(){
     240       
     241        $cookieadmin_consent_purge = get_option('cookieadmin_consent_purge', ['status' => 0, 'count' => 0]);
    179242               
    180                 <div class="cookieadmin-stats-block cookieadmin-is-block-25">
    181                     <div class="cookieadmin-stats-name">'.esc_html__('Google Consent Mode v2', 'cookieadmin').'&nbsp;
    182                         <div class="cookieadmin-block-link"><a href="'.esc_url(admin_url('admin.php?page=cookieadmin-settings')).'">['.esc_html__('Edit', 'cookieadmin').']</a></div>
    183                     </div>
    184                     '.(!empty($cookieadmin_settings['google_consent_mode_v2']) ? '<div class="cookieadmin-stats-number cookieadmin-green">'.esc_html__('Enabled', 'cookieadmin').'</div>' : '<div class="cookieadmin-stats-number">'.esc_html__('Disabled', 'cookieadmin').'</div>').'
    185                 </div>
    186                
    187                 <div style="width:25%">
    188                    
    189                 </div>
    190             </div>
    191         </div>';
    192        
    193         self::footer_theme();
    194     }
    195 
    196     static function settings_page(){
    197 
    198         global $cookieadmin_lang, $cookieadmin_error, $cookieadmin_msg, $cookieadmin_settings;
    199        
    200         self::header_theme(__('Settings', 'cookieadmin'));
    201        
    202         $view = get_option('cookieadmin_law', 'cookieadmin_gdpr'); 
    203         $policy = cookieadmin_load_policy();
    204         $policy['set'] = $view;
    205         $policy['admin_url'] = admin_url('admin-ajax.php');
    206         $policy['cookieadmin_nonce'] = wp_create_nonce('cookieadmin_admin_js_nonce');
    207 
    208         $cookieadmin_requires_pro = self::is_feature_available(1);
    209        
    210         echo '
    211         <div class="cookieadmin_consent-wrap">
    212             <form action="" method="post" id="setting_submenu">
    213 
    214             <div class="cookieadmin_consent-contents">
    215                 <div class="cookieadmin_consent_settings">
    216                     <div class="cookieadmin-contents cookieadmin-settings">
    217                         <div class="cookieadmin-setting setting-prior">
    218                             <label class="cookieadmin-title">'.esc_html__('Load Cookies prior to consent', 'cookieadmin').'</label>
    219                             <div class="cookieadmin-setting-contents">
    220                            
    221                                 <input name="cookieadmin_preload[]" type="checkbox" id="necessary_preload" value="necessary" checked disabled>
    222                                 <label class="cookieadmin-input" for="necessary_preload">'.esc_html__('Necessary', 'cookieadmin').'</label>
    223                                
    224                                 <input name="cookieadmin_preload[]" type="checkbox" id="functional_preload" value="functional" '.(!empty($policy[$view]['preload']) && in_array("functional", $policy[$view]['preload']) ? 'checked' : '').'>
    225                                 <label class="cookieadmin-input" for="functional_preload">'.esc_html__('Functional', 'cookieadmin').'</label>
    226                                
    227                                 <input name="cookieadmin_preload[]" type="checkbox" id="analytics_preload" value="analytics" '.(!empty($policy[$view]['preload']) && in_array("analytics", $policy[$view]['preload']) ? 'checked' : '').'>
    228                                 <label class="cookieadmin-input" for="analytics_preload">'.esc_html__('Analytical', 'cookieadmin').'</label>
    229                                
    230                                 <input name="cookieadmin_preload[]" type="checkbox" id="marketing_preload" value="marketing" '.(!empty($policy[$view]['preload']) && in_array("marketing", $policy[$view]['preload']) ? 'checked' : '').'>
    231                                 <label for="marketing_preload">'.esc_html__('Advertisement', 'cookieadmin').'</label>
    232                             </div>
    233                         </div>
    234                        
    235                         <div class="cookieadmin-setting setting-reload">
    236                             <label class="cookieadmin-title" for="cookieadmin_reload_on_consent">'.esc_html__('Reload page on consent', 'cookieadmin').'</label>
    237                             <div class="cookieadmin-setting-contents">
    238                                 <label class="cookieadmin_toggle">
    239                                     <input name="cookieadmin_reload_on_consent" type="checkbox" id="cookieadmin_reload_on_consent" '.(!empty($policy[$view]['reload_on_consent']) ? 'checked' : '').'>
    240                                     <span class="cookieadmin_slider"></span>
    241                                 </label>
    242                             </div>
    243                         </div>
    244 
    245                         <div class="coookieadmin-contents cookieadmin-settings" cookieadmin-pro-only="1">
    246                             <div class="cookieadmin-setting">
    247                                 <label class="cookieadmin-title" for="cookieadmin_google_consent_mode_v2">'.esc_html__('Google Consent Mode v2', 'cookieadmin').wp_kses_post($cookieadmin_requires_pro).'</label>
    248                                 <div class="cookieadmin-setting-contents">
    249                                     <label class="cookieadmin_toggle">
    250                                         <input name="cookieadmin_google_consent_mode_v2" type="checkbox" id="cookieadmin_google_consent_mode_v2" '.(!empty($cookieadmin_settings['google_consent_mode_v2']) && cookieadmin_is_pro() ? 'checked' : '').'>
    251                                         <span class="cookieadmin_slider"></span>
    252                                     </label>
    253                                 </div>
    254                             </div>
    255 
    256                             <div class="cookieadmin-setting setting-poweredby">
    257                                 <label class="cookieadmin-title" for="cookieadmin_hide_powered_by">'.esc_html__('Hide Powered by Link', 'cookieadmin').wp_kses_post($cookieadmin_requires_pro).'</label>
    258                                 <div class="cookieadmin-setting-contents">
    259                                     <label class="cookieadmin_toggle">
    260                                         <input name="cookieadmin_hide_powered_by" type="checkbox" id="cookieadmin_hide_powered_by" '.(!empty($cookieadmin_settings['hide_powered_by']) && cookieadmin_is_pro() ? 'checked' : '').'>
    261                                         <span class="cookieadmin_slider"></span>
    262                                     </label>
    263                                 </div>
    264                             </div>
    265 
    266                             <div class="cookieadmin-setting setting-reconsent">
    267                                 <label class="cookieadmin-title" for="cookieadmin_hide_reconsent">'.esc_html__('Hide Re-consent Icon', 'cookieadmin').wp_kses_post($cookieadmin_requires_pro).'</label>
    268                                 <div class="cookieadmin-setting-contents">
    269                                     <label class="cookieadmin_toggle">
    270                                         <input name="cookieadmin_hide_reconsent" type="checkbox" id="cookieadmin_hide_reconsent" '.(!empty($cookieadmin_settings['hide_reconsent']) && cookieadmin_is_pro() ? 'checked' : '').'>
    271                                         <span class="cookieadmin_slider"></span>
    272                                     </label>
    273                                 </div>
    274                             </div>
    275                         </div>
    276 
    277                         <div class="cookieadmin-setting">
    278                             <div class="cookieadmin-setting-contents">
    279                                 <span><input type="submit" name="cookieadmin_save_settings" class="cookieadmin-btn cookieadmin-btn-primary action" value="'.esc_html__('Save Settings', 'cookieadmin').'"></span>
    280                             </div>
    281                         </div>
    282                     </div>
    283                 </div>';
    284 
    285                 wp_nonce_field('cookieadmin_admin_nonce', 'cookieadmin_security');
    286                 echo '
    287                 <br/>
    288                 <br/>
    289             </div>
    290             </form>
    291         </div>';
    292        
    293         self::footer_theme();
    294     }
    295 
    296     static function scan_cookies_page(){
    297         global $cookieadmin_lang, $cookieadmin_error, $cookieadmin_msg, $wpdb;
    298        
    299         self::header_theme(__('Scan Cookies', 'cookieadmin'));
    300        
    301         $table_name = esc_sql($wpdb->prefix . 'cookieadmin_cookies');
    302         $scanned = $wpdb->get_results("SELECT * FROM {$table_name} limit 1");
    303        
    304         $cookies_scanned = '';
    305         $categorized = [];
    306         $categorized_cookies = [];
    307        
    308         if(!empty($scanned)){
    309            
    310             $is_categorized = $wpdb->get_var("SELECT * FROM {$table_name} WHERE category IS NOT NULL LIMIT 1");
    311            
    312             $scanned_cookies = $wpdb->get_results("SELECT * FROM {$table_name}");
    313            
    314             if(empty($is_categorized)){
    315                
    316                 foreach($scanned_cookies as $row => $data){
    317                     $exp = 'Session';
    318                     $data->expires = strtotime($data->expires);
    319                     if(!empty($data->expires) && ($data->expires > 0)){
    320                         $exp = round(($data->expires - time()) / 86400);
    321                         if($exp < 1 && !empty($data->max_age)){
    322                             $exp = $data->max_age . ' '.__('days', 'cookieadmin');
    323                         }
    324                     }
    325                    
    326                     $cookies_scanned .= '<tr><td>'.esc_html($data->cookie_name).'</td><td>'.esc_html($exp).'</td><td>'.esc_html($data->path).'</td><td>'.esc_html($data->domain).'</td><td>'.( $data->secure ? 'Yes' : 'No').'</td></tr>';
    327                
    328                 }
    329             }
    330             else{
    331 
    332                 foreach($scanned_cookies as $row => $data){
    333                
    334                     $exp = 'Session';
    335                     if (!empty($data->expires) && is_string($data->expires)) {
    336                         $timestamp = strtotime($data->expires);
    337                         if ($timestamp && $timestamp > 0) {
    338                             $exp = round(($timestamp - time()) / 86400);
    339                             if ($exp < 1 && !empty($data->max_age)) {
    340                                 $exp = $data->max_age;
    341                             }
    342                             $exp .= ' '.__('days', 'cookieadmin');
    343                         }
    344                     }
    345                        
    346                     if(empty($data->category)){
    347                         $data->category = 'Unknown';
    348                     }
    349                    
    350                     if(!isset($categorized[$data->category])){
    351                         $categorized[$data->category] = '';
    352                     }
    353                    
    354                     if(empty($data->description)){
    355                         $data->description = 'Not Available';
    356                     }
    357                    
    358                     $categorized[$data->category] .= '<tr><td>'.esc_html($data->cookie_name).'</td><td>'.esc_html($data->description).'</td><td>'.esc_html($exp).'</td><td> <span class="dashicons dashicons-edit cookieadmin_edit_icon" id="edit_'.esc_attr($data->id).'"></span> <span class="dashicons dashicons-trash cookieadmin_delete_icon" id="delete_'.esc_attr($data->id).'"></span> </td></tr>';
    359 
    360                     $categorized_cookies[$data->id]['id'] = $data->id;
    361                     $categorized_cookies[$data->id]['cookie_name'] = $data->cookie_name;
    362                     $categorized_cookies[$data->id]['description'] = $data->description;
    363                     $categorized_cookies[$data->id]['category'] = $data->category;
    364                     $categorized_cookies[$data->id]['expires'] = $exp;
    365 
     243        if(empty($cookieadmin_consent_purge['status'])){
     244            return false;
     245        }
     246           
     247        $msg = '';
     248        $count = empty($cookieadmin_consent_purge['count']) ? 0 : $cookieadmin_consent_purge['count'];
     249       
     250        if($cookieadmin_consent_purge['status'] === 2){
     251            /* translators: %1$d: number of consent logs deleted */
     252            $msg =  sprintf(__('<br><strong>Consent logs are being deleted :</strong> %1$d logs deleted. Please wait for deletion process to complete.', 'cookieadmin'), $count);
     253        }
     254       
     255        if($cookieadmin_consent_purge['status'] === 3){
     256            if(isset($cookieadmin_consent_purge['success'])){
     257                if($cookieadmin_consent_purge['success'] === true){
     258                    /* translators: %1$d: number of consent logs deleted */
     259                    $msg = sprintf(__('<br><strong>Consent logs deleted successfully:</strong> %1$d logs deleted.', 'cookieadmin'), $count);
    366260                }
    367261               
    368                 $cookies_scanned .= '<tr><td colspan="5">'.esc_html__('No uncategorized cookies yet. Click on Scan Cookies button to scan for new cookies!', 'cookieadmin').'</td></tr>';
    369             }
    370         }else{
    371            
    372             $cookies_scanned .= '<tr><td colspan="5">'.esc_html__('No scanned cookies yet. Click on Scan Cookies button to scan for new cookies!', 'cookieadmin').'</td></tr>';
    373            
    374         }
    375        
    376         wp_register_script('cookieadmin_categorized_cookies', '', array('jquery'), COOKIEADMIN_VERSION, true);
    377         wp_enqueue_script('cookieadmin_categorized_cookies');
    378         wp_localize_script('cookieadmin_categorized_cookies', 'categorized_cookies', $categorized_cookies);
    379        
    380         echo '
    381         <div class="cookieadmin_consent-wrap">
    382             <form action="" method="post">
    383             <div class="cookieadmin_consent-contents">
    384                 <div class="cookieadmin_consent_settings">
    385                     <div class="cookieadmin-setting cookieadmin-manager-cookie-scan">
    386                         <label class="cookieadmin-title">'.esc_html__('Scanned Cookies', 'cookieadmin').'</label>
    387                         <div class="cookieadmin-setting-contents cookieadmin-cookie-scan">
    388                             <input type="button" class="cookieadmin-btn cookieadmin-btn-primary cookieadmin-scan" value="'.esc_html__('Scan Cookies', 'cookieadmin').'">
    389                         </div>
    390                         <div class="cookieadmin-manager-result">
    391                             <table class="cookieadmin-table cookieadmin-cookie-categorized">
    392                                 <thead>
    393                                     <tr>
    394                                         <th width="30%">'.esc_html__('Name', 'cookieadmin').'</th>
    395                                         <th width="50%">'.esc_html__('Description', 'cookieadmin').'</th>
    396                                         <th width="10%">'.esc_html__('Expiry', 'cookieadmin').'</th>
    397                                         <th width="10%">'.esc_html__('Action', 'cookieadmin').'</th>
    398                                     </tr>
    399                                 </thead>
    400                                 <tbody id="necessary_tbody">
    401                                     <tr><td colspan=4>'.esc_html__('Necessary Cookies', 'cookieadmin').'</td></tr>
    402                                     '.( !empty($categorized['Necessary']) ? wp_kses_post($categorized['Necessary']) : '<tr class="cookieadmin-empty-row"><td colspan=4>'.esc_html__('No Cookies Found!', 'cookieadmin').'</td></tr>' ).'
    403                                 </tbody>
    404                                 <tbody id="functional_tbody">
    405                                     <tr><td colspan=4>'.esc_html__('Functional Cookies', 'cookieadmin').'</td></tr>
    406                                     '.( !empty($categorized['Functional']) ? wp_kses_post($categorized['Functional']) : '<tr class="cookieadmin-empty-row"><td colspan=4>'.esc_html__('No Cookies Found!', 'cookieadmin').'</td></tr>' ).'
    407                                 </tbody>
    408                                 <tbody id="analytics_tbody">
    409                                     <tr><td colspan=4>'.esc_html__('Analytical Cookies', 'cookieadmin').'</td></tr>
    410                                     '.( !empty($categorized['Analytics']) ? wp_kses_post($categorized['Analytics']) : '<tr class="cookieadmin-empty-row"><td colspan=4>'.esc_html__('No Cookies Found!', 'cookieadmin').'</td></tr>' ).'
    411                                 </tbody>
    412                                 <tbody id="marketing_tbody">
    413                                     <tr><td colspan=4>'.esc_html__('Marketing Cookies', 'cookieadmin').'</td></tr>
    414                                     '.( !empty($categorized['Marketing']) ? wp_kses_post($categorized['Marketing']) : '<tr class="cookieadmin-empty-row"><td colspan=4>'.esc_html__('No Cookies Found!', 'cookieadmin').'</td></tr>' ).'
    415                                 </tbody>
    416                                 <tbody id="unknown_tbody">
    417                                     <tr><td colspan=4>'.esc_html__('Unknown Cookies', 'cookieadmin').'</td></tr>
    418                                     '.( !empty($categorized['Unknown']) ? wp_kses_post($categorized['Unknown']) : '<tr class="cookieadmin-empty-row"><td colspan=4>'.esc_html__('No Cookies Found!', 'cookieadmin').'</td></tr>' ).'
    419                                 </tbody>
    420                             </table>
    421                         </div>
    422                     </div>
    423                 </div>
    424             </div>';
    425            
    426             wp_nonce_field('cookieadmin_admin_nonce', 'cookieadmin_security');
    427            
    428             echo '
    429         </div>
    430         </form>
    431         <br/>';
    432        
    433         self::footer_theme();
    434        
    435         echo '
    436         <!-- Modal Overlay -->
    437         <div class="cookieadmin_modal-overlay" id="edit-cookie-modal" hidden>
    438             <div class="cookieadmin_modal-container">
    439                 <div class="cookieadmin_modal-header">
    440                     <h2>'.esc_html__('Edit Cookie', 'cookieadmin').'</h2>
    441                     <button class="cookieadmin_dialog_modal_close_btn">&times;</button>
    442                 </div>
    443 
    444                 <div class="cookieadmin_modal-body">
    445                     <div class="cookieadmin_form-group">
    446                         <label for="cookieadmin-dialog-cookie-category">'.esc_html__('Category', 'cookieadmin').'</label>
    447                         <select id="cookieadmin-dialog-cookie-category">
    448                             <option value="Unknown">'.esc_html__('Unknown', 'cookieadmin').'</option>
    449                             <option value="Necessary">'.esc_html__('Necessary', 'cookieadmin').'</option>
    450                             <option value="Functional">'.esc_html__('Functional', 'cookieadmin').'</option>
    451                             <option value="Analytics">'.esc_html__('Analytical', 'cookieadmin').'</option>
    452                             <option value="Marketing">'.esc_html__('Marketing', 'cookieadmin').'</option>
    453                         </select>
    454                     </div>
    455                    
    456                     <div class="cookieadmin_form-group">
    457                         <label for="cookie_id">'.esc_html__('Cookie Name/ID', 'cookieadmin').'</label>
    458                         <input type="text" id="cookieadmin-dialog-cookie-name" Placeholder="'.esc_html__('Enter Cookie Name or id', 'cookieadmin').'">
    459                     </div>
    460 
    461                     <div class="cookieadmin_form-group">
    462                         <label for="description">'.esc_html__('Description', 'cookieadmin').'</label>
    463                         <textarea id="cookieadmin-dialog-cookie-desc" Placeholder="'.esc_html__('Enter Cookie description here', 'cookieadmin').'"></textarea>
    464                     </div>
    465 
    466                     <div class="cookieadmin_form-group">
    467                         <label for="duration">'.esc_html__('Duration', 'cookieadmin').'</label>
    468                         <input type="text" id="cookieadmin-dialog-cookie-duration" Placeholder="'.esc_html__('30 days', 'cookieadmin').'">
    469                     </div>
    470 
    471                     <div class="cookieadmin_modal-footer" style="background-color:#ffffff;">
    472                         <button class="cookieadmin-btn cookieadmin-btn-primary" id="cookieadmin_dialog_save_btn" form="edit-cookie-form">'.esc_html__('Save', 'cookieadmin').'</button>
    473                     </div>
    474                 </div>
    475             </div>
     262                if($cookieadmin_consent_purge['success'] === false){
     263                    /* translators: %1$d: number of consent logs deleted, %2$s: error message*/
     264                    $msg = sprintf(__('<br><strong>Consent logs deletion failed:</strong> %1$d logs deleted. Error : %2$s', 'cookieadmin'), $count, esc_html($cookieadmin_consent_purge['message']));
     265                }
     266            }
     267        }
     268       
     269        if(empty($msg)){
     270            return;
     271        }
     272       
     273        // cookieadmin_logo_svg fn is Internal static SVG. if allowing user input or filters, escape it.
     274        echo '         
     275        <div class="notice notice-info is-dismissible" id="cookieadmin-consent-purge-notice">
     276            <p>'.cookieadmin_logo_svg().wp_kses_post($msg). '</p>
    476277        </div>';
    477     }
    478 
    479     static function consent_form_page(){
    480 
    481         global $cookieadmin_lang, $cookieadmin_error, $cookieadmin_msg;
    482        
    483         self::header_theme(__('Consent Form', 'cookieadmin'));
    484        
    485         $view = get_option('cookieadmin_law', 'cookieadmin_gdpr'); 
    486         $policy = cookieadmin_load_policy();
    487        
    488         $templates = implode("", cookieadmin_load_consent_template($policy[$view], $view));
    489        
    490         $policy['set'] = $view;
    491         $policy['admin_url'] = admin_url('admin-ajax.php');
    492         $policy['cookieadmin_nonce'] = wp_create_nonce('cookieadmin_admin_js_nonce');
    493        
    494         $cookieadmin_requires_pro = self::is_feature_available(1);
    495 
    496         echo '
    497         <div class="cookieadmin_consent-wrap">
    498             <form action="" method="post" id="consent_submenu">
    499            
    500             <div class="cookieadmin_consent-contents">
    501                 <div class="cookieadmin_consent_settings">
    502                     <div class="cookieadmin-contents cookieadmin_consent">
    503                    
    504                         <div class="cookieadmin-setting">
    505                             <label class="cookieadmin-title" for="cookieadmin_consent_type">'.esc_html__('Consent Type', 'cookieadmin').'</label>
    506                             <div class="cookieadmin-setting-contents">
    507                                 <select name="cookieadmin_consent_type" id="cookieadmin_consent_type">
    508                                     <option name="cookieadmin_gdpr" id="cookieadmin_gdpr" value="cookieadmin_gdpr">'.esc_html__('GDPR', 'cookieadmin').'</option>
    509                                     <option name="cookieadmin_us" id="cookieadmin_us" value="cookieadmin_us">'.esc_html__('US State Laws', 'cookieadmin').'</option>
    510                                 </select>
    511                             </div>
    512                         </div>
    513                        
    514                         <div class="cookieadmin-setting cookieadmin_consent-expiry">
    515                             <label class="cookieadmin-title" for="cookieadmin_consent_expiry">'.esc_html__('Consent Expiry', 'cookieadmin').'</label>
    516                             <div class="cookieadmin-setting-contents">
    517                                 <input type="number" name="cookieadmin_days" id="cookieadmin_consent_expiry" style="max-width:70px;" value="'.esc_attr($policy[$view]['cookieadmin_days']).'">
    518                             </div>
    519                         </div>
    520                        
    521                         <div class="cookieadmin-setting consent-layout">
    522                             <label class="cookieadmin-title">'.esc_html__('Notice Type', 'cookieadmin').'</label>
    523                             <div class="cookieadmin-setting-contents">
    524                                 <input name="cookieadmin_layout" type="radio" id="cookieadmin_layout_box" value="box">
    525                                 <label class="cookieadmin-input" for="cookieadmin_layout_box">'.esc_html__('Box', 'cookieadmin').'</label>
    526                                 <input name="cookieadmin_layout" type="radio" id="cookieadmin_layout_footer" value="footer">
    527                                 <label class="cookieadmin-input" for="cookieadmin_layout_footer">'.esc_html__('Footer', 'cookieadmin').'</label>
    528                                 <input name="cookieadmin_layout" type="radio" id="cookieadmin_layout_popup"  value="popup">
    529                                 <label for="cookieadmin_layout_popup">'.esc_html__('Popup', 'cookieadmin').'</label>
    530                             </div>
    531                         </div>
    532                        
    533                         <div class="cookieadmin-setting consent-position">
    534                             <label class="cookieadmin-title">'.esc_html__('Notice Position', 'cookieadmin').'</label>
    535                             <div class="cookieadmin-setting-contents">
    536                                 <input class="cookieadmin_box_layout" id="cookieadmin_position_bottom_left" name="cookieadmin_position" type="radio" value="bottom_left" checked>
    537                                 <label class="cookieadmin_box_layout cookieadmin-input" for="cookieadmin_position_bottom_left">'.esc_html__('Bottom Left', 'cookieadmin').'</label>
    538                                 <input class="cookieadmin_box_layout" id="cookieadmin_position_bottom_right" name="cookieadmin_position" type="radio" value="bottom_right">
    539                                 <label class="cookieadmin_box_layout cookieadmin-input" for="cookieadmin_position_bottom_right">'.esc_html__('Bottom Right', 'cookieadmin').'</label>
    540                                 <input class="cookieadmin_box_layout" id="cookieadmin_position_top_left" name="cookieadmin_position" type="radio" value="top_left">
    541                                 <label class="cookieadmin_box_layout cookieadmin-input" for="cookieadmin_position_top_left">'.esc_html__('Top Left', 'cookieadmin').'</label>
    542                                 <input class="cookieadmin_box_layout" id="cookieadmin_position_top_right" name="cookieadmin_position" type="radio" value="top_right">
    543                                 <label class="cookieadmin_box_layout cookieadmin-input" for="cookieadmin_position_top_right">'.esc_html__('Top Right', 'cookieadmin').'</label>
    544                                 <input class="cookieadmin_foter_layout" id="cookieadmin_position_top" name="cookieadmin_position" type="radio" value="top" style="display:none;">
    545                                 <label class="cookieadmin_foter_layout cookieadmin-input" for="cookieadmin_position_top" style="display:none;">'.esc_html__('Top', 'cookieadmin').'</label>
    546                                 <input class="cookieadmin_foter_layout" id="cookieadmin_position_bottom" name="cookieadmin_position" type="radio" value="bottom" style="display:none;">
    547                                 <label class="cookieadmin_foter_layout" for="cookieadmin_position_bottom" style="display:none;">'.esc_html__('Bottom', 'cookieadmin').'</label>
    548                             </div>
    549                         </div>
    550                        
    551                         <div class="cookieadmin-setting consent-modal-layout">
    552                             <label class="cookieadmin-title">'.esc_html__('Preference Position', 'cookieadmin').'</label>
    553                             <div class="cookieadmin-setting-contents">
    554                                 <input id="cookieadmin_modal_center" name="cookieadmin_modal" type="radio" value="center" checked>
    555                                 <label class="cookieadmin-input" for="cookieadmin_modal_center">'.esc_html__('Center', 'cookieadmin').'</label>
    556                                 <input id="cookieadmin_modal_side" name="cookieadmin_modal" type="radio" value="side">
    557                                 <label class="cookieadmin-input" for="cookieadmin_modal_side">'.esc_html__('Side', 'cookieadmin').'</label>
    558                                 <input id="cookieadmin_modal_down" name="cookieadmin_modal" type="radio" value="down">
    559                                 <label for="cookieadmin_modal_down">'.esc_html__('Draw down', 'cookieadmin').'</label>
    560                             </div>
    561                         </div>
    562                        
    563                         <div class="cookieadmin-setting consent-notice">
    564                             <label class="cookieadmin-title">'.esc_html__('Notice Section', 'cookieadmin').'</label>
    565                             <div class="cookieadmin-setting-contents cookieadmin-vertical">
    566                                 <label for="cookieadmin_notice_title_layout">'.esc_html__('Title', 'cookieadmin').'</label>
    567                                 <input type="text" id="cookieadmin_notice_title_layout" name="cookieadmin_notice_title" style="width: 270px;" value="'.esc_attr($policy[$view]['cookieadmin_notice_title']).'">
    568                                 <label for="cookieadmin_notice_layout" style="margin-top:20px;">'.esc_html__('Notice', 'cookieadmin').'</label>
    569                                 <textarea rows="5vh" cols="100vw" id="cookieadmin_notice_layout" name="cookieadmin_notice">'.esc_html($policy[$view]['cookieadmin_notice']).'</textarea>
    570                                 <div class="cookieadmin-setting-colors cookieadmin-setting-contents cookieadmin-horizontal">
    571                                     <div class="cookieadmin-setting-color cookieadmin-vertical" >
    572                                         <label for="cookieadmin_notice_title_color">'.esc_html__('Title', 'cookieadmin').'</label>
    573                                         <div class="cookieadmin-color-holder cookieadmin-horizontal">
    574                                             <input type="color" id="cookieadmin_notice_title_color_box" name="cookieadmin_notice_title_color_box" value="'.esc_attr($policy[$view]['cookieadmin_notice_title_color']).'">
    575                                             <input type="text" id="cookieadmin_notice_title_color" name="cookieadmin_notice_title_color" value="'.esc_attr($policy[$view]['cookieadmin_notice_title_color']).'" class="cookieadmin-color-input">
    576                                         </div>
    577                                     </div>
    578                                     <div class="cookieadmin-setting-color cookieadmin-vertical">
    579                                         <label for="cookieadmin_notice_color">'.esc_html__('Content', 'cookieadmin').'</label>
    580                                         <div class="cookieadmin-color-holder cookieadmin-horizontal">
    581                                             <input type="color" id="cookieadmin_notice_color_box" name="cookieadmin_notice_color_box" value="'.esc_attr($policy[$view]['cookieadmin_notice_color']).'">
    582                                             <input type="text" id="cookieadmin_notice_color" name="cookieadmin_notice_color" value="'.esc_attr($policy[$view]['cookieadmin_notice_color']).'" class="cookieadmin-color-input">
    583                                         </div>
    584                                     </div>
    585                                     <div class="cookieadmin-setting-color cookieadmin-vertical">
    586                                         <label for="cookieadmin_consent_inside_bg_color">'.esc_html__('Background', 'cookieadmin').'</label>
    587                                         <div class="cookieadmin-color-holder cookieadmin-horizontal">
    588                                             <input type="color" id="cookieadmin_consent_inside_bg_color_box" name="cookieadmin_consent_inside_bg_color_box" value="'.esc_attr($policy[$view]['cookieadmin_consent_inside_bg_color']).'">
    589                                             <input type="text" id="cookieadmin_consent_inside_bg_color" name="cookieadmin_consent_inside_bg_color" value="'.esc_attr($policy[$view]['cookieadmin_consent_inside_bg_color']).'" class="cookieadmin-color-input">
    590                                         </div>
    591                                     </div>
    592                                     <div class="cookieadmin-setting-color cookieadmin-vertical">
    593                                         <label for="cookieadmin_consent_inside_border_color">'.esc_html__('Border', 'cookieadmin').'</label>
    594                                         <div class="cookieadmin-color-holder cookieadmin-horizontal">
    595                                             <input type="color" id="cookieadmin_consent_inside_border_color_box" name="cookieadmin_consent_inside_border_color_box" value="'.esc_attr($policy[$view]['cookieadmin_consent_inside_border_color']).'">
    596                                             <input type="text" id="cookieadmin_consent_inside_border_color" name="cookieadmin_consent_inside_border_color" value="'.esc_attr($policy[$view]['cookieadmin_consent_inside_border_color']).'" class="cookieadmin-color-input">
    597                                         </div>
    598                                     </div>
    599                                 </div>
    600                             </div>
    601                         </div>
    602                     </div>
    603                     <div class="cookieadmin-setting">
    604                         <label class="cookieadmin-title">'.esc_html__('Buttons', 'cookieadmin').'</label>
    605                         <div class="cookieadmin-buttons cookieadmin-setting-contents cookieadmin-horizontal">
    606                             <div class="cookieadmin-button cookieadmin-vertical">
    607                                 <input id="cookieadmin_customize_btn" name="cookieadmin_customize_btn" style="max-width:130px;text-align:center;" value="'.esc_attr($policy[$view]['cookieadmin_customize_btn']).'">
    608                                 <div class="cookieadmin-color-holder cookieadmin-horizontal">
    609                                     <input type="color" id="cookieadmin_customize_btn_color_box" name="cookieadmin_customize_btn_color_box" value="'.esc_attr($policy[$view]['cookieadmin_customize_btn_color']).'">
    610                                     <input type="text" id="cookieadmin_customize_btn_color" name="cookieadmin_customize_btn_color" value="'.esc_attr($policy[$view]['cookieadmin_customize_btn_color']).'" class="cookieadmin-color-input">
    611                                 </div>
    612                                 <div class="cookieadmin-color-holder cookieadmin-horizontal">
    613                                     <input type="color" id="cookieadmin_customize_btn_bg_color_box" name="cookieadmin_customize_btn_bg_color_box" value="'.esc_attr($policy[$view]['cookieadmin_customize_btn_bg_color']).'">
    614                                     <input type="text" id="cookieadmin_customize_btn_bg_color" name="cookieadmin_customize_btn_bg_color" value="'.esc_attr($policy[$view]['cookieadmin_customize_btn_bg_color']).'" class="cookieadmin-color-input">
    615                                 </div>
    616                             </div>
    617                             <div class="cookieadmin-button cookieadmin-vertical">
    618                                 <input id="cookieadmin_reject_btn" name="cookieadmin_reject_btn" style="max-width:130px;text-align:center;" value="'.esc_attr($policy[$view]['cookieadmin_reject_btn']).'">
    619                                 <div class="cookieadmin-color-holder cookieadmin-horizontal">
    620                                     <input type="color" id="cookieadmin_reject_btn_color_box" name="cookieadmin_reject_btn_color_box" value="'.esc_attr($policy[$view]['cookieadmin_reject_btn_color']).'">
    621                                     <input type="text" id="cookieadmin_reject_btn_color" name="cookieadmin_reject_btn_color" value="'.esc_attr($policy[$view]['cookieadmin_reject_btn_color']).'" class="cookieadmin-color-input">
    622                                 </div>
    623                                 <div class="cookieadmin-color-holder cookieadmin-horizontal">
    624                                     <input type="color" id="cookieadmin_reject_btn_bg_color_box" name="cookieadmin_reject_btn_bg_color_box" value="'.esc_attr($policy[$view]['cookieadmin_reject_btn_bg_color']).'">
    625                                     <input type="text" id="cookieadmin_reject_btn_bg_color" name="cookieadmin_reject_btn_bg_color" value="'.esc_attr($policy[$view]['cookieadmin_reject_btn_bg_color']).'" class="cookieadmin-color-input">
    626                                 </div>
    627                             </div>
    628                             <div class="cookieadmin-button cookieadmin-vertical">
    629                                 <input id="cookieadmin_accept_btn" name="cookieadmin_accept_btn" style="max-width:130px;text-align:center;" value="'.esc_attr($policy[$view]['cookieadmin_accept_btn']).'">
    630                                 <div class="cookieadmin-color-holder cookieadmin-horizontal">
    631                                     <input type="color" id="cookieadmin_accept_btn_color_box" name="cookieadmin_accept_btn_color_box" value="'.esc_attr($policy[$view]['cookieadmin_accept_btn_color']).'">
    632                                     <input type="text" id="cookieadmin_accept_btn_color" name="cookieadmin_accept_btn_color" value="'.esc_attr($policy[$view]['cookieadmin_accept_btn_color']).'" class="cookieadmin-color-input">
    633                                 </div>
    634                                 <div class="cookieadmin-color-holder cookieadmin-horizontal">
    635                                     <input type="color" id="cookieadmin_accept_btn_bg_color_box" name="cookieadmin_accept_btn_bg_color_box" value="'.esc_attr($policy[$view]['cookieadmin_accept_btn_bg_color']).'">
    636                                     <input type="text" id="cookieadmin_accept_btn_bg_color" name="cookieadmin_accept_btn_bg_color" value="'.esc_attr($policy[$view]['cookieadmin_accept_btn_bg_color']).'" class="cookieadmin-color-input">
    637                                 </div>
    638                             </div>
    639                             <div class="cookieadmin-button cookieadmin-vertical">
    640                                 <input id="cookieadmin_save_btn" name="cookieadmin_save_btn" style="max-width:130px;text-align:center;" value="'.esc_attr($policy[$view]['cookieadmin_save_btn']).'">
    641                                 <div class="cookieadmin-color-holder cookieadmin-horizontal">
    642                                     <input type="color" id="cookieadmin_save_btn_color_box" name="cookieadmin_save_btn_color_box" value="'.esc_attr($policy[$view]['cookieadmin_save_btn_color']).'">
    643                                     <input type="text" id="cookieadmin_save_btn_color" name="cookieadmin_save_btn_color" value="'.esc_attr($policy[$view]['cookieadmin_save_btn_color']).'" class="cookieadmin-color-input">
    644                                 </div>
    645                                 <div class="cookieadmin-color-holder cookieadmin-horizontal">
    646                                     <input type="color" id="cookieadmin_save_btn_bg_color_box" name="cookieadmin_save_btn_bg_color_box" value="'.esc_attr($policy[$view]['cookieadmin_save_btn_bg_color']).'">
    647                                     <input type="text" id="cookieadmin_save_btn_bg_color" name="cookieadmin_save_btn_bg_color" value="'.esc_attr($policy[$view]['cookieadmin_save_btn_bg_color']).'" class="cookieadmin-color-input">
    648                                 </div>
    649                             </div>
    650                         </div>
    651                     </div>
    652                     <div class="cookieadmin-setting consent-preference">
    653                         <label class="cookieadmin-title">'.esc_html__('Preference Section', 'cookieadmin').'</label>
    654                         <div class="cookieadmin-setting-contents cookieadmin-vertical">
    655                             <label for="cookieadmin_preference_title_layout">'.esc_html__('Title', 'cookieadmin').'</label>
    656                             <input type="text" id="cookieadmin_preference_title_layout" name="cookieadmin_preference_title" style="width: 270px;" value="'.esc_html($policy[$view]['cookieadmin_preference_title']).'">
    657                             <label for="cookieadmin_preference_layout" style="margin-top:20px;">'.esc_html__('Privacy Notice', 'cookieadmin').'</label>
    658                             <textarea rows="8vh" cols="100vw" id="cookieadmin_preference_layout" name="cookieadmin_preference">'.esc_html($policy[$view]['cookieadmin_preference']).'</textarea>
    659                             <div class="cookieadmin-setting-colors cookieadmin-setting-contents cookieadmin-setting-color cookieadmin-horizontal">
    660                                 <div class="cookieadmin-setting-color cookieadmin-vertical">
    661                                     <label for="cookieadmin_preference_title_color">'.esc_html__('Title', 'cookieadmin').'</label>
    662                                     <div class="cookieadmin-color-holder cookieadmin-horizontal">
    663                                         <input type="color" id="cookieadmin_preference_title_color_box" name="cookieadmin_preference_title_color_box" value="'.esc_attr($policy[$view]['cookieadmin_preference_title_color']).'">
    664                                         <input type="text" id="cookieadmin_preference_title_color" name="cookieadmin_preference_title_color" value="'.esc_attr($policy[$view]['cookieadmin_preference_title_color']).'" class="cookieadmin-color-input">
    665                                     </div>
    666                                 </div>
    667                                 <div class="cookieadmin-setting-color cookieadmin-vertical">
    668                                     <label for="cookieadmin_details_wrapper_color">'.esc_html__('Content', 'cookieadmin').'</label>
    669                                     <div class="cookieadmin-color-holder cookieadmin-horizontal">
    670                                         <input type="color" id="cookieadmin_details_wrapper_color_box" name="cookieadmin_details_wrapper_color_box" value="'.esc_attr($policy[$view]['cookieadmin_details_wrapper_color']).'">
    671                                         <input type="text" id="cookieadmin_details_wrapper_color" name="cookieadmin_details_wrapper_color" value="'.esc_attr($policy[$view]['cookieadmin_details_wrapper_color']).'" class="cookieadmin-color-input">
    672                                     </div>
    673                                 </div>
    674                                 <div class="cookieadmin-setting-color cookieadmin-vertical">
    675                                     <label for="cookieadmin_cookie_modal_bg_color">'.esc_html__('Background', 'cookieadmin').'</label>
    676                                     <div class="cookieadmin-color-holder cookieadmin-horizontal">
    677                                         <input type="color" id="cookieadmin_cookie_modal_bg_color_box" name="cookieadmin_cookie_modal_bg_color_box" value="'.esc_attr($policy[$view]['cookieadmin_cookie_modal_bg_color']).'">
    678                                         <input type="text" id="cookieadmin_cookie_modal_bg_color" name="cookieadmin_cookie_modal_bg_color" value="'.esc_attr($policy[$view]['cookieadmin_cookie_modal_bg_color']).'" class="cookieadmin-color-input">
    679                                     </div>
    680                                 </div>
    681                                 <div class="cookieadmin-setting-color cookieadmin-vertical">
    682                                     <label for="cookieadmin_cookie_modal_border_color">'.esc_html__('Border', 'cookieadmin').'</label>
    683                                     <div class="cookieadmin-color-holder cookieadmin-horizontal">
    684                                         <input type="color" id="cookieadmin_cookie_modal_border_color_box" name="cookieadmin_cookie_modal_border_color_box" value="'.esc_attr($policy[$view]['cookieadmin_cookie_modal_border_color']).'">
    685                                         <input type="text" id="cookieadmin_cookie_modal_border_color" name="cookieadmin_cookie_modal_border_color" value="'.esc_attr($policy[$view]['cookieadmin_cookie_modal_border_color']).'" class="cookieadmin-color-input">
    686                                     </div>
    687                                 </div>
    688                             </div>
    689                            
    690                             <div class="cookieadmin-setting-colors cookieadmin-setting-contents cookieadmin-setting-color cookieadmin-horizontal" cookieadmin-pro-only="1">
    691                                 <div class="cookieadmin-setting-color cookieadmin-vertical">
    692                                     <label for="cookieadmin_links_color">'.esc_html__('Links', 'cookieadmin').wp_kses_post($cookieadmin_requires_pro).'</label>
    693                                     <div class="cookieadmin-color-holder cookieadmin-horizontal">
    694                                         <input type="color" id="cookieadmin_links_color_box" name="cookieadmin_links_color_box" value="'.esc_attr($policy[$view]['cookieadmin_links_color']).'">
    695                                         <input type="text" id="cookieadmin_links_color" name="cookieadmin_links_color" value="'.esc_attr($policy[$view]['cookieadmin_links_color']).'" class="cookieadmin-color-input">
    696                                     </div>
    697                                 </div>
    698                                 <div class="cookieadmin-setting-color cookieadmin-vertical">
    699                                     <label for="cookieadmin_slider_on_bg_color">'.esc_html__('Button Switch On', 'cookieadmin').wp_kses_post($cookieadmin_requires_pro).'</label>
    700                                     <div class="cookieadmin-color-holder cookieadmin-horizontal">
    701                                         <input type="color" id="cookieadmin_slider_on_bg_color_box" name="cookieadmin_slider_on_bg_color_box" value="'.esc_attr($policy[$view]['cookieadmin_slider_on_bg_color']).'">
    702                                         <input type="text" id="cookieadmin_slider_on_bg_color" name="cookieadmin_slider_on_bg_color" value="'.esc_attr($policy[$view]['cookieadmin_slider_on_bg_color']).'" class="cookieadmin-color-input">
    703                                     </div>
    704                                 </div>
    705                                 <div class="cookieadmin-setting-color cookieadmin-vertical">
    706                                     <label for="cookieadmin_slider_off_bg_color">'.esc_html__('Button Switch Off', 'cookieadmin').wp_kses_post($cookieadmin_requires_pro).'</label>
    707                                     <div class="cookieadmin-color-holder cookieadmin-horizontal">
    708                                         <input type="color" id="cookieadmin_slider_off_bg_color_box" name="cookieadmin_slider_off_bg_color_box" value="'.esc_attr($policy[$view]['cookieadmin_slider_off_bg_color']).'">
    709                                         <input type="text" id="cookieadmin_slider_off_bg_color" name="cookieadmin_slider_off_bg_color" value="'.esc_attr($policy[$view]['cookieadmin_slider_off_bg_color']).'" class="cookieadmin-color-input">
    710                                     </div>
    711                                 </div>
    712                             </div>
    713                            
    714                             <span style="margin-top:30px;">
    715                            
    716                             <input type="submit" name="cookieadmin_save_settings" class="cookieadmin-btn cookieadmin-btn-primary action" value="'.esc_html__('Save Settings', 'cookieadmin').'">
    717                            
    718                             <input type="button" id="cookieadmin_show_preview" name="cookieadmin_show_preview" class="cookieadmin-btn cookieadmin-btn-secondary" value="'.esc_html__('Show Preview', 'cookieadmin').'">
    719                            
    720                             </span>
    721                            
    722                         </div>
    723                     </div>
    724                 </div>
    725             </div>
    726             '; 
    727             wp_nonce_field('cookieadmin_admin_nonce', 'cookieadmin_security');
    728             echo '<br/>
    729             <br/>
    730             </form>
    731         </div>';
    732         self::footer_theme();
    733        
    734         $allowed_tags = cookieadmin_kses_allowed_html();
    735         echo wp_kses($templates, $allowed_tags);
    736     }
    737 
    738     static function cookieadmin_scan_cookies($url = ''){
    739         global $wpdb;
    740        
    741         $urls = array(get_site_url());
    742        
    743         if(cookieadmin_is_pro()){
    744             $cookieData = apply_filters('cookieadmin_pro_scan_cookies', $urls);
    745         }else{
    746             $cookieData = \CookieAdmin\Scanner::start_scan($urls);
    747         }
    748         // cookieadmin_r_print($cookieData);
    749        
    750         if(!empty($cookieData) && self::save_raw_scan_results($cookieData)){
    751             self::cookieadmin_auto_configure_cookies();
    752         }
    753        
    754         wp_send_json_error(array('message' =>__('No cookies found!', 'cookieadmin')));
    755     }
    756 
    757     static function cookieadmin_table_exists($table_name) {
    758         global $wpdb;
    759        
    760         $query = $wpdb->prepare("SHOW TABLES LIKE %s", $table_name);
    761        
    762         return $wpdb->get_var($query) === $table_name;
    763     }
    764    
    765     static function cookieadmin_save_settings(){
    766        
    767         global $cookieadmin_lang, $cookieadmin_error, $cookieadmin_msg, $cookieadmin_settings, $cookieadmin_policies;
    768    
    769         // debug_print_backtrace();die;
    770        
    771         check_admin_referer('cookieadmin_admin_nonce', 'cookieadmin_security');
    772      
    773         if(!current_user_can('administrator')){
    774             wp_send_json_error(array('message' => __('Sorry, but you do not have permissions to perform this action', 'cookieadmin')));
    775         }
    776        
    777         $policy = cookieadmin_load_policy();
    778        
    779         $cookieadmin_consent_type = isset( $_REQUEST['cookieadmin_consent_type'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['cookieadmin_consent_type'] ) ) : '';
    780 
    781         if(!empty($cookieadmin_consent_type)){
    782            
    783             $laws = array('cookieadmin_gdpr' => '', 'cookieadmin_us' => '');
    784            
    785             $law = array_key_exists($cookieadmin_consent_type, $laws) ? $cookieadmin_consent_type : 'cookieadmin_gdpr';
    786            
    787             if(empty($cookieadmin_error)){
    788                 update_option('cookieadmin_law', $law);
    789             }
    790         }
    791 
    792         if(isset($_REQUEST['page']) && $_REQUEST['page'] === 'cookieadmin-settings'){
    793            
    794             // Save cookieadmin_settings only on settings page
    795             $cookieadmin_settings['google_consent_mode_v2'] = (isset( $_REQUEST['cookieadmin_google_consent_mode_v2'] ) ? 1 : 0);
    796             $cookieadmin_settings['hide_powered_by'] = (isset( $_REQUEST['cookieadmin_hide_powered_by'] ) ? 1 : 0);
    797             $cookieadmin_settings['hide_reconsent'] = (isset( $_REQUEST['cookieadmin_hide_reconsent'] ) ? 1 : 0);
    798            
    799             if(empty($cookieadmin_error)){
    800                 update_option('cookieadmin_settings', $cookieadmin_settings);
    801             }
    802            
    803             // get the consent type from option table, if not saved then return default as 'gdpr'
    804             $law = get_option('cookieadmin_law', 'cookieadmin_gdpr');
    805 
    806             //set preload and consent field for "cookieadmin-settings" page
    807             $setting['preload'] = !empty($_REQUEST['cookieadmin_preload']) ? array_map('sanitize_text_field', wp_unslash($_REQUEST['cookieadmin_preload'])) : [];
    808             $setting['reload_on_consent'] = !empty($_REQUEST['cookieadmin_reload_on_consent']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_reload_on_consent'])) : '';
    809         }else{
    810             // set saved or default preload and consent field for for  "cookieadmin-consent" page
    811             $setting['preload'] = !empty($policy[$law]['preload']) ? $policy[$law]['preload'] : [];
    812             $setting['reload_on_consent'] = !empty($policy[$law]['reload_on_consent']) ? $policy[$law]['reload_on_consent'] : '';
    813         }
    814            
    815         $setting['cookieadmin_geo_tgt'] = (!empty($_REQUEST['cookieadmin_geo_tgt'])) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_geo_tgt'])) : 'www';
    816        
    817         $setting['cookieadmin_layout'] = (!empty($_REQUEST['cookieadmin_layout']) && in_array($_REQUEST['cookieadmin_layout'], array('box', 'footer', 'popup'))) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_layout'])) : (!empty($policy[$law]['cookieadmin_layout']) ? $policy[$law]['cookieadmin_layout'] : 'box');
    818        
    819         $setting['cookieadmin_position'] = (!empty($_REQUEST['cookieadmin_position']) && in_array($_REQUEST['cookieadmin_position'],  array('bottom_left', 'bottom_right', 'top_left', 'top_right', 'top', 'bottom'))) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_position'])) : (!empty($policy[$law]['cookieadmin_position']) ? $policy[$law]['cookieadmin_position'] : 'bottom_left');
    820 
    821         $setting['cookieadmin_modal'] = (isset($_REQUEST['cookieadmin_modal']) && in_array($_REQUEST['cookieadmin_modal'], array('center', 'side', 'down'))) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_modal'])) : (!empty($policy[$law]['cookieadmin_modal']) ? $policy[$law]['cookieadmin_modal'] : 'center');
    822        
    823         if($setting['cookieadmin_layout'] == 'popup'){
    824             $setting['cookieadmin_modal'] = 'center';
    825             unset($setting['cookieadmin_position']);
    826         }       
    827 
    828         $setting['cookieadmin_notice_title'] = !empty($_REQUEST['cookieadmin_notice_title']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_notice_title'])) : $policy[$law]['cookieadmin_notice_title'];
    829         $setting['cookieadmin_notice_title_color'] = !empty($_REQUEST['cookieadmin_notice_title_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_notice_title_color'])) : (!empty($policy[$law]['cookieadmin_notice_title_color']) ? $policy[$law]['cookieadmin_notice_title_color'] : '#000000');
    830        
    831         $setting['cookieadmin_notice'] = !empty($_REQUEST['cookieadmin_notice']) ? wp_kses(wp_unslash($_REQUEST['cookieadmin_notice']), cookieadmin_kses_allowed_html()) : $policy[$law]['cookieadmin_notice'];
    832         $setting['cookieadmin_notice_color'] = !empty($_REQUEST['cookieadmin_notice_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_notice_color'])) : (!empty($policy[$law]['cookieadmin_notice_color']) ? $policy[$law]['cookieadmin_notice_color'] : '#000000');
    833        
    834         $setting['cookieadmin_consent_inside_bg_color'] = !empty($_REQUEST['cookieadmin_consent_inside_bg_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_consent_inside_bg_color'])) : (!empty($policy[$law]['cookieadmin_consent_inside_bg_color']) ? $policy[$law]['cookieadmin_consent_inside_bg_color'] : '#ffffff');
    835         $setting['cookieadmin_consent_inside_border_color'] = !empty($_REQUEST['cookieadmin_consent_inside_border_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_consent_inside_border_color'])) : (!empty($policy[$law]['cookieadmin_consent_inside_border_color']) ? $policy[$law]['cookieadmin_consent_inside_border_color'] : '#000000');
    836        
    837         $setting['cookieadmin_customize_btn'] = !empty($_REQUEST['cookieadmin_customize_btn']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_customize_btn'])) : (!empty($policy[$law]['cookieadmin_customize_btn']) ? $policy[$law]['cookieadmin_customize_btn'] : 'Customize');
    838         $setting['cookieadmin_customize_btn_color'] = !empty($_REQUEST['cookieadmin_customize_btn_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_customize_btn_color'])) : (!empty($policy[$law]['cookieadmin_customize_btn_color']) ? $policy[$law]['cookieadmin_customize_btn_color'] : '#ffffff');
    839         $setting['cookieadmin_customize_btn_bg_color'] = !empty($_REQUEST['cookieadmin_customize_btn_bg_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_customize_btn_bg_color'])) : (!empty($policy[$law]['cookieadmin_customize_btn_bg_color']) ? $policy[$law]['cookieadmin_customize_btn_bg_color'] : '#0000ff');
    840        
    841         $setting['cookieadmin_reject_btn'] = !empty($_REQUEST['cookieadmin_reject_btn']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_reject_btn'])) : (!empty($policy[$law]['cookieadmin_reject_btn']) ? $policy[$law]['cookieadmin_reject_btn'] : 'Reject All');
    842         $setting['cookieadmin_reject_btn_color'] = !empty($_REQUEST['cookieadmin_reject_btn_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_reject_btn_color'])) : (!empty($policy[$law]['cookieadmin_reject_btn_color']) ? $policy[$law]['cookieadmin_reject_btn_color'] : '#ffffff');
    843         $setting['cookieadmin_reject_btn_bg_color'] = !empty($_REQUEST['cookieadmin_reject_btn_bg_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_reject_btn_bg_color'])) : (!empty($policy[$law]['cookieadmin_reject_btn_bg_color']) ? $policy[$law]['cookieadmin_reject_btn_bg_color'] : '#ff0000');
    844 
    845         $setting['cookieadmin_accept_btn'] = !empty($_REQUEST['cookieadmin_accept_btn']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_accept_btn'])) : (!empty($policy[$law]['cookieadmin_accept_btn']) ? $policy[$law]['cookieadmin_accept_btn'] : 'Accept All');
    846         $setting['cookieadmin_accept_btn_color'] = !empty($_REQUEST['cookieadmin_accept_btn_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_accept_btn_color'])) : (!empty($policy[$law]['cookieadmin_accept_btn']) ? $policy[$law]['cookieadmin_accept_btn_color'] : '#ffffff');
    847         $setting['cookieadmin_accept_btn_bg_color'] = !empty($_REQUEST['cookieadmin_accept_btn_bg_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_accept_btn_bg_color'])) : (!empty($policy[$law]['cookieadmin_accept_btn_bg_color']) ? $policy[$law]['cookieadmin_accept_btn_bg_color'] : '#00ff00');
    848 
    849         $setting['cookieadmin_save_btn'] = !empty($_REQUEST['cookieadmin_save_btn']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_save_btn'])) : (!empty($policy[$law]['cookieadmin_save_btn']) ? $policy[$law]['cookieadmin_save_btn'] : 'Save Preferences');
    850         $setting['cookieadmin_save_btn_color'] = !empty($_REQUEST['cookieadmin_save_btn_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_save_btn_color'])) : (!empty($policy[$law]['cookieadmin_save_btn_color']) ? $policy[$law]['cookieadmin_save_btn_color'] : '#ffffff');
    851         $setting['cookieadmin_save_btn_bg_color'] = !empty($_REQUEST['cookieadmin_save_btn_bg_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_save_btn_bg_color'])) : (!empty($policy[$law]['cookieadmin_save_btn_bg_color']) ? $policy[$law]['cookieadmin_save_btn_bg_color'] : '#183833');
    852 
    853         $setting['cookieadmin_preference_title'] = !empty($_REQUEST['cookieadmin_preference_title']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_preference_title'])) : $policy[$law]['cookieadmin_preference_title'];
    854         $setting['cookieadmin_preference_title_color'] = !empty($_REQUEST['cookieadmin_preference_title_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_preference_title_color'])) : (!empty($policy[$law]['cookieadmin_preference_title_color']) ? $policy[$law]['cookieadmin_preference_title_color'] : '#000000');
    855        
    856         $setting['cookieadmin_preference'] = !empty($_REQUEST['cookieadmin_preference']) ? wp_kses(wp_unslash($_REQUEST['cookieadmin_preference']), cookieadmin_kses_allowed_html()) : $policy[$law]['cookieadmin_preference'];
    857         $setting['cookieadmin_details_wrapper_color'] = !empty($_REQUEST['cookieadmin_details_wrapper_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_details_wrapper_color'])) : (!empty($policy[$law]['cookieadmin_details_wrapper_color']) ? $policy[$law]['cookieadmin_details_wrapper_color'] : '#000000');
    858        
    859         $setting['cookieadmin_cookie_modal_bg_color'] = !empty($_REQUEST['cookieadmin_cookie_modal_bg_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_cookie_modal_bg_color'])) : (!empty($policy[$law]['cookieadmin_cookie_modal_bg_color']) ? $policy[$law]['cookieadmin_cookie_modal_bg_color'] : '#ffffff');
    860         $setting['cookieadmin_cookie_modal_border_color'] = !empty($_REQUEST['cookieadmin_cookie_modal_border_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_cookie_modal_border_color'])) : (!empty($policy[$law]['cookieadmin_cookie_modal_border_color']) ? $policy[$law]['cookieadmin_cookie_modal_border_color'] : '#000000');
    861 
    862         $setting['cookieadmin_slider_off_bg_color'] = !empty($_REQUEST['cookieadmin_slider_off_bg_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_slider_off_bg_color'])) : (!empty($policy[$law]['cookieadmin_slider_off_bg_color']) ? $policy[$law]['cookieadmin_slider_off_bg_color'] : '#808080');
    863         $setting['cookieadmin_slider_on_bg_color'] = !empty($_REQUEST['cookieadmin_slider_on_bg_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_slider_on_bg_color'])) : (!empty($policy[$law]['cookieadmin_slider_on_bg_color']) ? $policy[$law]['cookieadmin_slider_on_bg_color'] : '#3582c4');
    864         $setting['cookieadmin_links_color'] = !empty($_REQUEST['cookieadmin_links_color']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_links_color'])) : (!empty($policy[$law]['cookieadmin_links_color']) ? $policy[$law]['cookieadmin_links_color'] : '#1863dc');
    865        
    866         $setting['cookieadmin_days'] = !empty($_REQUEST['cookieadmin_days']) ? sanitize_text_field(wp_unslash($_REQUEST['cookieadmin_days'])) : (!empty($policy[$law]['cookieadmin_days']) ? $policy[$law]['cookieadmin_days'] : '365');
    867        
    868         $policy[$law] = $setting;
    869        
    870         // Check for certain fields to be saved only if their values is not the same as default
    871         $cookieadmin_check_changes = array('cookieadmin_notice_title', 'cookieadmin_notice', 'cookieadmin_preference_title', 'cookieadmin_preference', 'reConsent_title', 'cookieadmin_customize_btn', 'cookieadmin_reject_btn', 'cookieadmin_accept_btn', 'cookieadmin_save_btn');
    872        
    873         foreach($cookieadmin_check_changes as $c_field){
    874             foreach($policy as $c_law => $c_val){
    875                 if(!empty($c_val[$c_field]) && $c_val[$c_field] == $cookieadmin_policies[$c_law][$c_field]){
    876                     unset($policy[$c_law][$c_field]);
    877                 }
    878             }
    879         }
    880        
    881         update_option('cookieadmin_consent_settings', $policy);
    882        
    883         if(empty($cookieadmin_error)){
    884             $cookieadmin_msg = __('Settings saved successfully', 'cookieadmin');
    885         }
    886     }
    887    
    888    
    889     static function cookieadmin_auto_configure_cookies(){
    890         global $wpdb;
    891        
    892         $table_name = esc_sql($wpdb->prefix . 'cookieadmin_cookies');
    893         $categorized_cookies = [];
    894         $uncategorized_cookies = [];
    895        
    896         $all_cookies = $wpdb->get_results("SELECT cookie_name, category FROM {$table_name}");
    897        
    898         foreach($all_cookies as $cookie){
    899            
    900             if(!empty($cookie->categorized)){
    901                 $categorized_cookies[] = $cookie->cookie_name;
    902             }else{
    903                 $uncategorized_cookies[] = $cookie->cookie_name;
    904             }
    905         }
    906        
    907         if(!empty($uncategorized_cookies)){
    908            
    909             $uncategorized_cookies = array_flip($uncategorized_cookies);
    910             $categorized_cookies = array_flip($categorized_cookies);
    911            
    912            
    913             $categorizd_cookies = \CookieAdmin\CookieCategorizer::categorize_cookies($uncategorized_cookies, $categorized_cookies);
    914            
    915             $remove_cookies = $categorizd_cookies['remove_cookies'];
    916             unset($categorizd_cookies['remove_cookies']);
    917             if(!empty($remove_cookies)){
    918                 $placeholders = implode(',', array_fill(0, count($remove_cookies), '%s'));
    919                 $sql = $wpdb->prepare("DELETE FROM {$table_name} WHERE raw_name IN ({$placeholders})", ...$remove_cookies);
    920                 $wpdb->query($sql);
    921             }           
    922            
    923             foreach($categorizd_cookies as $cookie_data){
    924            
    925                 $wpdb->update(
    926                     $table_name,
    927                     [ 'cookie_name' => $cookie_data['cookie_name'], 'category' =>  $cookie_data['category'], 'description' =>  $cookie_data['description'], 'edited' =>  1, 'patterns' =>  $cookie_data['patterns'] ], // Data to update
    928                     [ 'raw_name' => $cookie_data['raw_name'] ], // WHERE
    929                     [ '%s', '%s', '%s', '%d', '%s' ], // Format for the data
    930                     [ '%s' ]  // Format for the WHERE clause
    931                 );
    932                
    933             }
    934            
    935             $categorized_cookies = $wpdb->get_results("SELECT id, cookie_name, category, expires, description FROM {$table_name}");
    936            
    937             wp_send_json_success($categorized_cookies);
    938         }
    939         wp_send_json(['success' => true,
    940                     'data'    => null,
    941                     'message'   => __('No cookies to categorize!', 'cookieadmin')]);
    942     }
    943    
    944     static function cookieadmin_edit_cookies(){
    945         global $wpdb;
    946        
    947         $table_name = esc_sql($wpdb->prefix . 'cookieadmin_cookies');
    948        
    949         if(!empty($_REQUEST['cookie_info'])) {
    950            
    951             $cookie_info = wp_unslash($_REQUEST['cookie_info']);
    952            
    953             $resp = $wpdb->update(
    954                     $table_name,
    955                     [ 'cookie_name' => sanitize_text_field($cookie_info['name']), 'description' =>  sanitize_text_field($cookie_info['description']), 'expires' =>  sanitize_text_field($cookie_info['duration']), 'category' =>  sanitize_text_field($cookie_info['type']), 'edited' => 1], // Data to update
    956                     [ 'id' => sanitize_text_field($cookie_info['id']) ], // WHERE
    957                     [ '%s', '%s', '%s', '%s', '%d' ], // Format for the data
    958                     [ '%d' ]  // Format for the WHERE clause
    959                 );
    960            
    961         }elseif( !empty($_REQUEST['cookie_raw_id']) ){
    962            
    963             $cookie_id = (int) sanitize_text_field(wp_unslash($_REQUEST['cookie_raw_id']));
    964            
    965             $resp = $wpdb->delete( $table_name, ['id' => $cookie_id], [ '%s' ] );
    966         }
    967        
    968         if ($wpdb->last_error || $resp === false) {
    969             //error_log('DB Error: ' . $wpdb->last_error); // Log it
    970             wp_send_json(['success' => true,
    971                 'data'    => null,
    972                 'message'   => __('Error editing cookie, Error: ', 'cookieadmin') . esc_html($wpdb->last_error)]);
    973         }
    974        
    975         wp_send_json_success(__('Cookie updated!', 'cookieadmin'));
    976        
    977     }
    978 
    979     static function save_raw_scan_results(array $found_cookies){
    980 
    981         global $wpdb;
    982        
    983         $table_name = esc_sql($wpdb->prefix . 'cookieadmin_cookies');
    984 
    985         if (empty($found_cookies)) {
    986             return ['inserted' => 0, 'updated' => 0];
    987         }
    988 
    989         // Step 1: Fetch all existing cookie names from our database in one efficient query.
    990         $existing_cookies_in_db = $wpdb->get_col("SELECT cookie_name FROM {$table_name}");
    991         // Use array_flip for very fast 'isset' lookups instead of slow 'in_array' in a loop.
    992         $existing_cookies_lookup = !empty($existing_cookies_in_db) ? array_flip($existing_cookies_in_db) : [];
    993 
    994         $results = ['inserted' => 0, 'updated' => 0];
    995 
    996         // Step 2: Loop through each cookie found by the scanner.
    997         foreach ($found_cookies as $cookie_name => $cookie_data) {
    998 
    999             // Step 3: Check if the cookie exists in our DB.
    1000             if (isset($existing_cookies_lookup[$cookie_name])) {
    1001                
    1002                 $wpdb->update(
    1003                     $table_name,
    1004                     [ 'scan_timestamp' => time() ], // Data to update
    1005                     [ 'cookie_name' => $cookie_name ], // WHERE clause
    1006                     [ '%s' ], // Format for the data
    1007                     [ '%s' ]  // Format for the WHERE clause
    1008                 );
    1009                 $results['updated']++;
    1010 
    1011             } else {
    1012 
    1013                 // ------ INSERT a NEW cookie ------
    1014                 $data = [
    1015                     'cookie_name' => sanitize_text_field($cookie_name),
    1016                     'domain' => sanitize_text_field($cookie_data['domain']),
    1017                     'path' => sanitize_text_field($cookie_data['path']),
    1018                     'expires' => !empty($cookie_data['expires']) ? $cookie_data['expires'] : null,
    1019                     'max_age' => $cookie_data['Max-Age'] ? $cookie_data['Max-Age'] : null,
    1020                     'samesite' => !empty($cookie_data['samesite']) ? sanitize_text_field($cookie_data['samesite']) : null,
    1021                     'secure' => (int)($cookie_data['secure'] ?? 0),
    1022                     'httponly' => (int)($cookie_data['httponly'] ?? 0),
    1023                     'raw_name' => sanitize_text_field($cookie_name),
    1024                     'scan_timestamp' => time(),
    1025                 ];
    1026 
    1027                 $formats = ['%s', '%s', '%s', '%s', '%d', '%s', '%d', '%d', '%s'];
    1028 
    1029                 if ($wpdb->insert($table_name, $data, $formats)) {
    1030                     $results['inserted']++;
    1031                 } else {
    1032                     //error_log("CookieAdmin: Error inserting cookie data: " . $wpdb->last_error);
    1033                 }
    1034             }
    1035         }
    1036         return $results;
     278       
     279        wp_register_script('cookieadmin-consent-purge-notice', '', ['jquery'], '', true);
     280        wp_enqueue_script('cookieadmin-consent-purge-notice');
     281        wp_add_inline_script('cookieadmin-consent-purge-notice', 'jQuery("#cookieadmin-consent-purge-notice").on("click",
     282        function(e){
     283           
     284            let target = jQuery(e.target);
     285            if(!target.hasClass("notice-dismiss")){
     286                return;
     287            }
     288           
     289            var data;
     290
     291            // Hide it
     292            jQuery("#cookieadmin-consent-purge-notice").remove();
     293
     294            // Save this preference
     295            jQuery.post("'.admin_url('admin-ajax.php?action=cookieadmin_ajax_handler&cookieadmin_act=close-notice&notice=cookieadmin-consent-purge-notice').'&cookieadmin_security='.wp_create_nonce('cookieadmin_admin_js_nonce').'", data, function(response) {
     296            });
     297           
     298        });');
     299       
     300    }
     301   
     302    static function close_notices(){
     303       
     304        if(empty($_REQUEST['notice'])){
     305            return;
     306        }
     307       
     308        $notice = sanitize_text_field(wp_unslash($_REQUEST['notice']));
     309        $notice = str_replace('-notice', '', $notice);
     310        $notice = str_replace('-', '_', $notice);
     311       
     312        update_option($notice, array());
    1037313    }
    1038314   
     
    1106382        }
    1107383       
    1108         $msg = ' <sup style="font-size:11px;"><a href="'.COOKIEADMIN_PRO_URL.'" target="_blank" style="text-decoration:none; color:red;"><b>'.__('Pro', 'cookieadmin').'</b></a></sup>';
     384        $msg = ' <sup style="font-size:11px;"><a href="'.COOKIEADMIN_PRO_URL.'" target="_blank" style="text-decoration:none; color:red;"><b>'.esc_html__('Pro', 'cookieadmin').'</b></a></sup>';
    1109385       
    1110386        if(!empty($return)){
  • cookieadmin/trunk/includes/cookiecategorizer.php

    r3328224 r3460841  
    1515     * @return array The enriched list of cookies.
    1616     */
    17     static function categorize_cookies(array $found_cookies, array $categorized_cookies) {
     17    static function categorize_cookies($found_cookies, $categorized_cookies) {
    1818        if (empty($found_cookies)) {
    1919            return [];
     
    3636
    3737
    38     static function generate_query_prefixes(array $cookie_names): array {
     38    static function generate_query_prefixes($cookie_names){
    3939        $prefixes = [];
    4040        foreach ($cookie_names as $name) {
     
    5555
    5656
    57     static function fetch_candidates_from_db(array $prefixes): array {
     57    static function fetch_candidates_from_db($prefixes){
    5858   
    5959        if (empty($prefixes)) {
     
    7171
    7272
    73     static function match_and_enrich_cookies(array $found_cookies, array $db_candidates, array $old_categorized_cookies): array {
     73    static function match_and_enrich_cookies($found_cookies, $db_candidates, $old_categorized_cookies){
    7474        $categorized_cookies = [];
    75         $old_categorized_cookies = [];
    7675        $remove_cookies = [];
    7776
     
    103102           
    104103            if (!empty($best_match)) {
    105            
    106                 if(!empty($old_categorized_cookies) && array_key_exists($best_match['cookie_name'], $old_categorized_cookies)){
    107                     $remove_cookies[] = $scanned_name;
    108                     continue;
     104               
     105                $cookie_name = $best_match['cookie_name'];
     106               
     107                if(!empty($old_categorized_cookies) && array_key_exists($cookie_name, $old_categorized_cookies)){
     108                    $remove_cookies[] = $old_categorized_cookies[$cookie_name];
    109109                }
    110110
    111                 $cookie_name = $best_match['cookie_name'];
    112                 $categorized_cookies[$cookie_name]['cookie_name'] = $cookie_name;
    113                 $categorized_cookies[$cookie_name]['raw_name'] = $scanned_name;
     111                $categorized_cookies[$cookie_name]['cookie_name'] = $cookie_name;
     112                $categorized_cookies[$cookie_name]['raw_name'] = $scanned_name;
    114113                $categorized_cookies[$cookie_name]['category'] = $best_match['category'];
    115114                $categorized_cookies[$cookie_name]['description'] = $best_match['description'];
  • cookieadmin/trunk/includes/enduser.php

    r3384049 r3460841  
    2525            wp_enqueue_style('cookieadmin-style', COOKIEADMIN_PLUGIN_URL . 'assets/css/consent.css', [], COOKIEADMIN_VERSION);
    2626           
    27             wp_enqueue_script('cookieadmin_js', COOKIEADMIN_PLUGIN_URL . 'assets/js/consent.js', [], COOKIEADMIN_VERSION, 'async');
     27            wp_enqueue_script('cookieadmin_js', COOKIEADMIN_PLUGIN_URL . 'assets/js/consent.js', [], COOKIEADMIN_VERSION);
    2828       
    2929            $policy[$view]['ajax_url'] = admin_url('admin-ajax.php');
     
    4141            $policy[$view]['base_path'] = $base_path;
    4242           
    43             $policy[$view]['lang']['show_more'] = __('show more', 'cookieadmin');
    44             $policy[$view]['lang']['show_less'] = __('show less', 'cookieadmin');
     43            $policy[$view]['lang']['show_less'] = __('Show less', 'cookieadmin');
    4544            $policy[$view]['lang']['duration'] = __('Duration', 'cookieadmin');
    4645            $policy[$view]['lang']['session'] = __('Session', 'cookieadmin');
     46            $policy[$view]['lang']['days'] = __('Days', 'cookieadmin');
    4747           
    4848            // cookieadmin_r_print($policy);die();
     
    9595       
    9696        foreach (self::$categorized_cookies as $item) {
    97             $category = strtolower($item->category);
    98             $patterns = json_decode($item->patterns, true);
     97            $category = !empty($item->category) ? strtolower($item->category) : '';
     98            $patterns = !empty($item->patterns) ? json_decode($item->patterns, true) : '';
    9999           
    100100            if (!empty($patterns) && !empty($category)) {
  • cookieadmin/trunk/includes/functions.php

    r3383420 r3460841  
    5454    // Enduser loading
    5555    ///////////////////////////
     56   
     57    // Check if our scanner is visiting
     58    if(defined('COOKIEADMIN_SCANNER')){
     59        return false;
     60    }
    5661   
    5762    add_action('wp_enqueue_scripts', '\CookieAdmin\Enduser::enqueue_scripts');
     
    99104    }
    100105    // === Plugin Update Notice END === //
    101    
    102106}
    103107
     
    132136   
    133137    $admin_allowed_actions = array(
    134         'scan_cookies' => 'cookieadmin_scan_cookies',
    135         'cookieadmin-auto-categorize' => 'cookieadmin_auto_configure_cookies',
    136         'cookieadmin-edit-cookie' => 'cookieadmin_edit_cookies',
    137         'close-update-notice' => 'close_plugin_update_notice'
     138        'scan_cookies' => '\CookieAdmin\Admin\Scan::scan_cookies_ajax',
     139        'cookieadmin-edit-cookie' => '\CookieAdmin\Admin\Scan::edit_cookies',
     140        'cookieadmin-delete-cookie' => '\CookieAdmin\Admin\Scan::delete_cookies',
     141        'close-update-notice' => '\CookieAdmin\Admin::close_plugin_update_notice',
     142        'close-notice' => '\CookieAdmin\Admin::close_notices'
    138143    );
    139144   
     
    156161        }
    157162       
    158         call_user_func('\CookieAdmin\Admin::'.$admin_allowed_actions[$cookieadmin_fn]);
     163        // TODO: Need to test this throughly
     164        call_user_func($admin_allowed_actions[$cookieadmin_fn]);
    159165       
    160166    }elseif(array_key_exists($cookieadmin_fn, $general_actions)){
     
    207213            'plugin_url' => esc_url(COOKIEADMIN_PLUGIN_URL),
    208214            'powered_by' => __('Powered by', 'cookieadmin'),
    209             'show_more' => __('show more', 'cookieadmin'),
    210215            'reconsent' => __('Re-consent', 'cookieadmin'),
    211216            'cookie_preferences' => __('Cookie Preferences', 'cookieadmin'),
    212             'remark_standard' => __('Standard', 'cookieadmin'),
     217            'remark_standard' => __('Always Active', 'cookieadmin'),
    213218            'remark' => __('Remark', 'cookieadmin'),
    214219            'none' => __('None', 'cookieadmin'),
     
    229234function cookieadmin_load_consent_template($policy, $view){
    230235   
    231     if(!file_exists(COOKIEADMIN_DIR.'assets/cookie/template.json')){
     236    if(!file_exists(COOKIEADMIN_DIR.'assets/cookie/template.php')){
    232237        return false;
    233238    }
    234239   
    235     $content = json_decode(file_get_contents(COOKIEADMIN_DIR.'assets/cookie/template.json'), true);
     240    include_once(COOKIEADMIN_DIR.'assets/cookie/template.php');
    236241   
    237242    if(empty($content)){
     
    240245   
    241246    $template = array();
    242     $template[$view] = $content['cookieadmin_layout'][$policy['cookieadmin_layout']];
     247    $template[$view] = ($policy['cookieadmin_layout'] != 'popup') ? $content['cookieadmin_layout'][$policy['cookieadmin_layout']] : '';
    243248    $template[$view] .= $content['cookieadmin_modal'][$policy['cookieadmin_modal']];
    244249    $template[$view] .= $content['cookieadmin_reconsent'];
  • cookieadmin/trunk/readme.txt

    r3412297 r3460841  
    55Tested up to: 6.9
    66Requires PHP: 7.0
    7 Stable tag: 1.1.4
     7Stable tag: 1.1.5
    88License: LGPLv2.1
    99License URI: http://www.gnu.org/licenses/lgpl-2.1.html
     
    7676== Changelog ==
    7777
     78= 1.1.5 =
     79* [Pro Feature] Added German (Switzerland), Spanish (Argentina), Finnish and Croatian languages.
     80* [Pro Feature] Introduced monthly automatic cookie scanning across all website pages.
     81* [Pro Feature] Added automatic consent log cleanup with configurable limit.
     82* [Fix] Improved Google Consent Mode v2 compatibility for cached websites.
     83* [Fix] Improved consent saving reliability on cached websites by making frontend requests cache-safe.
     84* [UI] Adjusted Consent Preferences modal description to auto height for better readability and removed Show more button.
     85* [UI] Fixed Re-Consent icon styling issues caused by page builder CSS conflicts.
     86
    7887= 1.1.4 =
    7988* [Pro Feature] Added Canadian French and Lithuanian languages.
Note: See TracChangeset for help on using the changeset viewer.