Plugin Directory

Changeset 3074718

Timestamp:
04/21/2024 08:36:54 PM (3 months ago)
Author:
nikelschubert
Message:

4.1.0

IMPORTANT The premium add on < 3.2.0 is not fully compatible anymore with this version. If you want to update the main plugin it is recommended to update the premium add-on to at least 3.2.
If you are not using the premium add-on you can ignore this hint.

  • REFACTOR: Preparations to support multiple banner.
  • REFACTOR: DataLayer init script improved.
  • FIX: Notice in db upgrader
Location:
beautiful-and-responsive-cookie-consent
Files:
60 added
16 edited

Legend:

Unmodified
Added
Removed
  • beautiful-and-responsive-cookie-consent/trunk/admin/css/nsc_bar_admin.css

    r3057846 r3074718  
    1717
    1818.nsc_bar_notice_premium_addon_hint {
    19   background: #fff;
     19  background: #fff;
    2020  border: 1px solid #c3c4c7;
    2121  border-left-width: 4px;
    2222  box-shadow: 0 1px 1px rgb(0 0 0 / 4%);
    23   margin: 5px 15px 2px;
     23  margin: px 2px;
    2424  padding: 1px 12px;
    25   border-left: 4px solid #1741db;
     25  border-left: 8px solid #0037ff;
     26}
     27
     28.nsc_bar_notice_premium_addon_hint.yellow {
     29  background: #fffefc;
     30  border-left: 8px solid #ffa913;
    2631}
    2732
     
    218223}
    219224
    220 #nsc_bar_new_banner {
    221   padding-top: 20px;
    222 }
    223 
    224225#nsc_bar_new_banner_selector-label {
    225226  position: relative;
    226227  top: 1px;
    227228}
     229
     230
     231
     232
     233
     234
     235
     236
  • beautiful-and-responsive-cookie-consent/trunk/admin/js/admin.consentmode.min.js

    r3057846 r3074718  
    1616  function addListenerForAlreadyReviewed(){var e=document.getElementById("nsc_bar_notice_reviewedAlready");e&&e.addEventListener("click",saveReviewSetting);}function saveReviewSetting(){var e=document.getElementById("nsc_bar_notice_reviewedAlready");e.disabled=!0,e.innerHTML="thank you, saving...";var n=new XMLHttpRequest;n.withCredentials=!0,n.addEventListener("readystatechange",(function(){4===this.readyState&&(document.getElementById("nsc_bar_notice_please_rate").style.display="none");})),n.open("POST","".concat(phpVars.restURL,"beautiful-and-responsive-cookie-consent/v1/admin-notices")),n.setRequestHeader("_wpnonce",phpVars.nonce),n.setRequestHeader("X-WP-Nonce",phpVars.nonce),n.send("");}
    1717
    18   function addListenerForNewBannerToggle(){var e=document.getElementById("nsc_bar_new_banner_selector");e&&e.addEventListener("change",saveBannerSelect);}function saveBannerSelect(){var e=document.getElementById("nsc_bar_new_banner_selector").value,n=["modern","classic"];if(!n.includes(e))throw new Error("allowed values are only: ".concat(JSON.stringify(n)));var a=new XMLHttpRequest;a.withCredentials=!0,a.addEventListener("readystatechange",(function(){if(4===this.readyState){var e=new URL(document.location.href);e.searchParams.set("nsc_bara_language_selector","xx"),e.searchParams.set("tab","new_banner"),window.location.href=e.toString();}})),a.open("POST","".concat(phpVars.restURL,"beautiful-and-responsive-cookie-consent/v1/banner/select/").concat(e)),a.setRequestHeader("_wpnonce",phpVars.nonce),a.setRequestHeader("X-WP-Nonce",phpVars.nonce),a.send("");}
     18  function addListenerForNewBannerToggle(){var e=document.getElementById("nsc_bar_new_banner_selector");e&&e.addEventListener("change",saveBannerSelect);}function saveBannerSelect(){var e=document.getElementById("nsc_bar_new_banner_selector").value,n=[""];if(!n.includes(e))throw new Error("allowed values are only: ".concat(JSON.stringify(n)));var a=new XMLHttpRequest;a.withCredentials=!0,a.addEventListener("readystatechange",(function(){if(4===this.readyState){var e=new URL(document.location.href);e.searchParams.set("nsc_bara_language_selector","xx"),e.searchParams.set("tab","new_banner"),window.location.href=e.toString();}})),a.open("POST","".concat(phpVars.restURL,"beautiful-and-responsive-cookie-consent/v1/banner/select/").concat(e)),a.setRequestHeader("_wpnonce",phpVars.nonce),a.setRequestHeader("X-WP-Nonce",phpVars.nonce),a.send("");}
    1919
    2020  document.addEventListener("DOMContentLoaded",addConsentModeTableToPage),document.addEventListener("DOMContentLoaded",addListenerForAlreadyReviewed),document.addEventListener("DOMContentLoaded",addListenerForNewBannerToggle);
  • beautiful-and-responsive-cookie-consent/trunk/admin/js/cookietypes.v2.js

    r3034148 r3074718  
    1 addCookieTableToPage('ff_nsc_bar_cookietypes', 'nsc_bar_cookietypes_table');
     1addCookieTableToPage('ff_nsc_bar_cookietypes', 'nsc_bar_cookietypes_table', true, 'Cookie Type');
     2addCookieTableToPage('ff_nsc_bar_banner2categories', 'nsc_bar_banner2categories_table', false, 'Category');
    23
    34document.addEventListener('DOMContentLoaded', function (event) {
     
    117118}
    118119
    119 function addCookieTableToPage(idValue, idTable) {
     120function addCookieTableToPage(idValue, idTable) {
    120121  document.addEventListener('DOMContentLoaded', function (event) {
    121122    var tableConfig = {
    122123      label: {
    123124        type: 'text',
    124         headline: 'Cookie Type Name',
     125        headline: ,
    125126        maxlength: '100',
    126127        validateRegex: '',
     
    137138      disabled: {
    138139        type: 'checkbox',
    139         headline: 'Is disabled',
     140        headline: 'abled',
    140141        validateRegex: '',
    141142        validateErrorMessage: '',
     
    161162    };
    162163
     164
     165
     166
     167
    163168    //getting values
    164169    try {
     
    308313      link.classList.add('nsc_bar_cookietypes_add_new_link');
    309314      link.id = 'nsc_bar_cookietypes_add_new_link';
    310       link.text = 'add new cookie type';
     315      link.text = ;
    311316      link.onclick = add_empty_row;
    312317      link.style.cursor = 'pointer';
  • beautiful-and-responsive-cookie-consent/trunk/admin/new-banner/index.html

    r3057846 r3074718  
    1 <!DOCTYPE html><html lang=en><head><meta charset=UTF-8><meta content="width=device-width" name=viewport><script>const queryString=window.location.search,urlParams=new URLSearchParams(queryString),url=urlParams.get("plugin_url_encoded");window.restURL=urlParams.get("rest_url_encoded"),window.nonce=urlParams.get("wp_nonce");const headfiles=[{tag:"script",attributes:[{attr:"as",value:"script"},{attr:"type",value:"module"},{attr:"src",value:`${url}admin/new-banner/_astro/hoisted.ERlLS1Ts.js`}]},{tag:"link",attributes:[{attr:"rel",value:"stylesheet"},{attr:"href",value:`${url}admin/new-banner/_astro/index.dy0xZhXG.css`}]}],bodyFiles=[{tag:"script",attributes:[{attr:"src",value:`${url}admin/js/iframeResizer/iframeResizer.contentWindow.min.js`}]}];function insertFiles(e,t){for(let r=0;r<t.length;r+=1){let a=document.getElementsByTagName(e)[0],s=document.createElement(t[r].tag);for(let e=0;e<t[r].attributes.length;e+=1)s[t[r].attributes[e].attr]=t[r].attributes[e].value;a.parentNode.insertBefore(s,a)}}insertFiles("script",headfiles)</script></head><body><script>insertFiles("body",bodyFiles)</script><header><h1 class=page-title>Banner 'modern'</h1><h2 class=page-subtitle>Configure the banner. At the moment the settings are limited for this banner. With future releases it will get more flexible. For feature request send an email to info@beautiful-cookie-banner.com.</h2><h2 class=page-subtitle>To use the this banner activate it by selecting 'modern' in the top left of the setting page.</h2><button class=nscbutton type=button id=downloadConfigBtn><span class=nscbutton__text>Save Banner Configs</span></button> <a style=padding-left:10px;cursor:pointer onclick="CookieConsent.eraseCookies(&#34;cc_cookie&#34;),CookieConsent.show(!0)">show banner again</a><h2 class=page-subtitle id=nscBarErrorMessage style=display:none;background:#d32f2f;color:#e0e0e0;padding:1em>dffd</h2></header><main><section class=categories-section><div class="grid section__body"><div class=sub-section><h4 class=categories-title>Categories</h4><p class=categories-description>Select the applicable cookie categories for your website.</p><div class="custom-inputs custom-inputs--categories"><label><input type=checkbox class="custom-input category-input" value=necessary checked=checked disabled=disabled> <span class=label>Necessary <span class=tick><svg height=16 viewBox="0 0 24 24" width=16 xmlns=http://www.w3.org/2000/svg><g fill=none stroke=#000 stroke-linecap=round stroke-linejoin=round stroke-width=2><rect height=10 rx=2 ry=2 width=16 x=4 y=11></rect><path d="M16.5 11V8h0c0-2.8-.5-5-4.5-5S7.5 5.2 7.5 8h0v3"></path></g></svg></span></span></label> <label><input type=checkbox class="custom-input category-input" value=functionality> <span class=label>Functionality <span class=tick></span></span></label> <label><input type=checkbox class="custom-input category-input" value=analytics> <span class=label>Analytics <span class=tick></span></span></label> <label><input type=checkbox class="custom-input category-input" value=marketing> <span class=label>Marketing <span class=tick></span></span></label></div></div><div class="sub-section translations" id=translations-section><h4 class=translations-title>Translations</h4><p class=translations-description>Select the translations to include in your configuration.</p><div class=custom-inputs><label><input type=checkbox name=language-code class=custom-input value=ar><span class=label>Arabic<span class=tick></span></span></label><label><input type=checkbox name=language-code class=custom-input value=de><span class=label>German<span class=tick></span></span></label><label><input type=checkbox name=language-code class=custom-input value=en><span class=label>English<span class=tick></span></span></label><label><input type=checkbox name=language-code class=custom-input value=es><span class=label>Spanish<span class=tick></span></span></label><label><input type=checkbox name=language-code class=custom-input value=fr><span class=label>French<span class=tick></span></span></label><label><input type=checkbox name=language-code class=custom-input value=it><span class=label>Italian<span class=tick></span></span></label></div><button class=styled-btn type=button id=edit-translations-btn data-a11y-dialog-show=edit-translations-dialog>Edit translations</button><div class=dialog-container id=edit-translations-dialog aria-hidden=true aria-labelledby=dialog-title><div class=dialog-overlay></div><div class=dialog-content role=document><div class=dialog-header><div class=dialog-header--left><h1 class=dialog-title id=dialog-title>Current translation</h1><label for=editor-language-codes class=select-translation><select id=editor-language-codes></select> <span class=arrow-icon></span></label></div><button class="styled-btn dialog-close-btn" type=button aria-label="Close dialog" data-a11y-dialog-hide>&times;</button></div><div class=dialog-body><div class=translations-editor id=editor-container><div class=translation-editor id=translation-editor><div class="editor editor--cm"><h4>Consent modal</h4><textarea id=consent-modal-title placeholder=Title spellcheck=false class=small-textarea></textarea> <textarea id=consent-modal-description placeholder=Description spellcheck=false></textarea> <input type=text id=close-icon-label placeholder="X/Close icon label" spellcheck=false> <input type=text id=consent-modal-accept-btn placeholder="Accept all button" spellcheck=false> <input type=text id=consent-modal-reject-btn placeholder="Reject all button" spellcheck=false> <input type=text id=consent-modal-manage-btn placeholder="Manage preferences button" spellcheck=false><div class=footer-textarea id=textarea-cm-footer><textarea id=editing placeholder=Footer spellcheck=false></textarea></div></div><div class="editor editor--pm"><h4>Preferences modal</h4><textarea id=pm-title placeholder=Title spellcheck=false class=small-textarea></textarea> <input type=text id=pm-close-icon-label placeholder="Close icon label" spellcheck=false> <input type=text id=pm-accept-btn placeholder="Accept all button" spellcheck=false> <input type=text id=pm-reject-btn placeholder="Reject all button" spellcheck=false> <input type=text id=pm-save-btn placeholder="Save preferences button" spellcheck=false> <input type=text id=pm-service-counter-label placeholder="Service counter label" spellcheck=false><div class=pm-sections><h3 class=pm-sections-title>Sections <span id=sections-counter></span></h3><ol id=pm-sections></ol><button class=styled-btn type=button id=add-section-btn>Add section</button></div></div></div></div></div><div class=dialog-footer><button class=styled-btn type=button id=save-translation-config-btn>Save & Preview</button></div></div></div></div><div class="sub-section language-more-options"><h4>Language options</h4><div class=default-language><label for=default-language class=select-label><span>Default lang.</span><span class=select-input> <select id=default-language name=default-language><option value=disabled disabled=disabled selected=selected>—</option><option value=ar>ar</option><option value=de>de</option><option value=en>en</option><option value=es>es</option><option value=fr>fr</option><option value=it>it</option></select> <span class=arrow-icon></span></span></label></div><div class=auto-language><div class=checkbox-div><input type=checkbox id=auto-language name=autoLanguage> <label for=auto-language>Auto detect language</label></div><label for=autodetect-mode class="select-label autodetect"><span>Detect from</span><span class=select-input> <select id=autodetect-mode name=autodetect disabled=disabled><option value=document>document</option><option value=browser>browser</option></select> <span class=arrow-icon></span></span></label><div class=language__details><p>Detected language: <code id=detected-language>-</code></p><p>Translation loaded: <code id=translation-found>-</code></p><p>Current language: <code id=current-active-language>-</code></p></div></div></div></div></section><section class=gui-options-section><div class=section__header><div class=section-title><h3>GUI Options</h3></div><div class=section-description></div></div><div class="grid section__body"><div class="sub-section consent-modal"><h4>Consent Modal</h4><label for=cm-layout class=select-label><span>Layout</span><span class=select-input> <select id=cm-layout name=layout><option value=box>box</option><option value="box inline">box inline</option><option value="box wide">box wide</option><option value=cloud>cloud</option><option value="cloud inline">cloud inline</option><option value=bar>bar</option><option value="bar inline">bar inline</option></select> <span class=arrow-icon></span></span></label> <label for=cm-position class=select-label><span>Position</span><span class=select-input> <select id=cm-position name=vertical></select> <span class=arrow-icon></span></span></label><div class=checkbox-group><div class="checkbox-div flip"><input type=checkbox id=cm-flip name=flip> <label for=cm-flip>Flip buttons</label></div><div class="checkbox-div weight"><input type=checkbox id=cm-weight name=weight> <label for=cm-weight>Equal weight buttons</label></div></div></div><div class="sub-section preferences-modal"><h4>Preferences Modal</h4><label for=pm-layout class=select-label><span>Layout</span><span class=select-input> <select id=pm-layout name=layout><option value=box>box</option><option value=bar>bar</option><option value="bar wide">bar wide</option></select> <span class=arrow-icon></span></span></label> <label for=pm-position class=select-label><span>Position</span><span class=select-input> <select id=pm-position name=position><option value=left data-excludedLayout=box>left</option><option value=right data-excludedLayout=box>right</option></select> <span class=arrow-icon></span></span></label><div class=checkbox-group><div class="checkbox-div flip"><input type=checkbox id=pm-flip name=flip> <label for=pm-flip>Flip buttons</label></div><div class="checkbox-div weight"><input type=checkbox id=pm-weight name=weight> <label for=pm-weight>Equal weight buttons</label></div></div><button class=styled-btn type=button data-cc=show-preferencesModal>Open Preferences Modal</button></div><div class="sub-section misc"><h4>Misc</h4><div class=checkbox-group><div class=checkbox-div><input type=checkbox id=darkmode-checkbox name=darkmode> <label for=darkmode-checkbox>Enable dark-mode</label></div><div class=checkbox-div><input type=checkbox id=disablePageInteraction-checkbox name=disablePageInteraction> <label for=disablePageInteraction-checkbox>Disable page interaction</label></div><div class=checkbox-div><input type=checkbox id=disableTransitions-checkbox name=disableTransitions> <label for=disableTransitions-checkbox>Disable transitions</label></div></div><button class=styled-btn type=button id=reset-btn>🗑️ Reset demo/config</button></div></div></section><section class=themes-section><div class=section__header><div class=section-title><h3>Themes</h3></div><div class=section-description></div></div><div class=section__body><div class="grid themes"><label for=default-light><input type=radio id=default-light name=theme checked=checked> <span class=input-label><span class=theme-type>(built-in)</span> <span class=theme-name>Light theme</span></span></label> <label for=cc--darkmode><input type=radio id=cc--darkmode name=theme> <span class=input-label><span class=theme-type>(built-in)</span> <span class=theme-name>Dark theme</span></span></label></div></div></section></main><footer data-astro-cid-scinlfmn><p data-astro-cid-scinlfmn>This is an open source banner, which was adjusted for WordPress. The original source code of the banner is brought to you by Orest Bida and many contributors and is released under the MIT License. Check out <a style=color:#bec0c2;text-decoration:underline target=_blank target=_blank data-astro-cid-scinlfmn href=https://github.com/orestbida/cookieconsent aria-label="Github repository" class="github-icon styled-link styled-link__2">github</a>. Copyright © 2020-present <a style=color:#bec0c2;text-decoration:underline target=_blank data-astro-cid-scinlfmn href=https://orestbida.com/contact>Orest Bida</a></p><p data-astro-cid-scinlfmn></p></footer></body></html>
     1<!DOCTYPE html><html lang=en><head><meta charset=UTF-8><meta content="width=device-width" name=viewport><script>const queryString=window.location.search,urlParams=new URLSearchParams(queryString),url=urlParams.get("plugin_url_encoded");window.restURL=urlParams.get("rest_url_encoded"),window.nonce=urlParams.get("wp_nonce");const headfiles=[{tag:"script",attributes:[{attr:"as",value:"script"},{attr:"type",value:"module"},{attr:"src",value:`${url}admin/new-banner/_astro/ name=theme> <span class=input-label><span class=theme-type>(built-in)</span> <span class=theme-name>Dark theme</span></span></label></div></div></section></main><footer data-astro-cid-scinlfmn><p data-astro-cid-scinlfmn>This is an open source banner, which was adjusted for WordPress. The original source code of the banner is brought to you by Orest Bida and many contributors and is released under the MIT License. Check out <a style=color:#bec0c2;text-decoration:underline target=_blank target=_blank data-astro-cid-scinlfmn href=https://github.com/orestbida/cookieconsent aria-label="Github repository" class="github-icon styled-link styled-link__2">github</a>. Copyright © 2020-present <a style=color:#bec0c2;text-decoration:underline target=_blank data-astro-cid-scinlfmn href=https://orestbida.com/contact>Orest Bida</a></p><p data-astro-cid-scinlfmn></p></footer></body></html>
  • beautiful-and-responsive-cookie-consent/trunk/admin/tpl/admin.php

    r3057846 r3074718  
    1515    "div" => array(
    1616        "class" => array(),
     17
    1718    ),
    18     "p" => array(),
    19     "br" => array(),
    20     "ul" => array(),
    21     "ol" => array(),
    22     "li" => array(),
    23     "h1" => array(),
    24     "h2" => array(),
    25     "h3" => array(),
    26     "h4" => array(),
    27     "h5" => array(),
    28     "h6" => array(),
    29     "hr" => array());
     19    "p" => array("class" => array(), "id" => array()),
     20    "br" => array("class" => array(), "id" => array()),
     21    "ul" => array("class" => array(), "id" => array()),
     22    "ol" => array("class" => array(), "id" => array()),
     23    "li" => array("class" => array(), "id" => array()),
     24    "h1" => array("class" => array(), "id" => array()),
     25    "h2" => array("class" => array(), "id" => array()),
     26    "h3" => array("class" => array(), "id" => array()),
     27    "h4" => array("class" => array(), "id" => array()),
     28    "h5" => array("class" => array(), "id" => array()),
     29    "h6" => array("class" => array(), "id" => array()),
     30    "hr" => array("class" => array(), "id" => array()),
     31);
    3032?>
    3133<div class="wrap">
    3234
    33 <script>
    34     const nscBarConsentType = `<?php echo $exposeJSConsentType ?>`; const nscBarCookieTypes =<?php echo $exposeJSCookieTypes ?>
    35 </script>
     35<script>
     36    <?php echo $exposeJSCookieTypes ?>
     37</script>
    3638
    37 <div id="nsc_bar_upper_area">
    38 <h1 id="nsc_bar_admin_title"><?php echo esc_html($objSettings->settings_page_configs->page_title) ?></h1>
    39 <p><?php echo wp_kses($objSettings->settings_page_configs->description, $allowed_html) ?></p>
    40 </div>
    41 <?php if (defined("NSC_BARA_FEATURE_ENABLE_NEW_BANNER") && NSC_BARA_FEATURE_ENABLE_NEW_BANNER === true) {?>
     39    <div id="nsc_bar_upper_area">
     40        <h1 id="nsc_bar_admin_title"><?php echo esc_html($objSettings->settings_page_configs->page_title) ?></h1>
     41        <p><?php echo wp_kses($objSettings->settings_page_configs->description, $allowed_html) ?></p>
     42    </div>
    4243    <div class="nsc-bar-selector-new-banner">
    43     <label for="nsc_bar_new_banner_selector" id="nsc_bar_new_banner_selector-label">
    44         <span class="nsc_bar_new_banner_selector-text">Banner in use is: </span>
    45     </label>
    46     <select name="nsc_bar_new_banner_selector" id="nsc_bar_new_banner_selector">
    47         <option <?php echo $newBannerEnabled === true ? '' : 'selected' ?> value="classic">Classic</option>
    48         <option <?php echo $newBannerEnabled === true ? 'selected' : '' ?> value="modern">Modern</option>
    49     </select>
     44    <label for="nsc_bar_new_banner_selector" id="nsc_bar_new_banner_selector-label">
     45        <span class="nsc_bar_new_banner_selector-text">Banner in use is: </span>
     46    </label>
     47    <select name="nsc_bar_new_banner_selector" id="nsc_bar_new_banner_selector">
     48        </option>
     49        </option>
     50    </select>
    5051    </div>
    51 <?php }?>
    5252
    53 <h2 class="nav-tab-wrapper">
    54 <?php
    55 //tabs are created
    56 foreach ($objSettings->setting_page_fields->tabs as $tab) {
    57     if ($newBannerEnabled === true && $tab->newBanner === false) {
    58         continue;
     53    <h2 class="nav-tab-wrapper">
     54        <?php
     55        //tabs are created
     56        foreach ($objSettings->setting_page_fields->tabs as $tab) {
     57            // not display if new banner is false
     58            if ($newBannerEnabled === true && isset($tab->newBanner) && $tab->newBanner === false) {
     59                continue;
     60            }
     61
     62            // not display if newBanner is true, but banner is disabled.
     63            if ($newBannerEnabled === false && isset($tab->newBanner) && $tab->newBanner === true) {
     64                continue;
     65            }
     66
     67            // here all tabs go with newBanner not set at all
     68       
     69            $activeTab = "";
     70            if ($tab->active === true) {
     71                $activeTab = 'nav-tab-active';
     72            }
     73            echo '<a href="?page=' . esc_attr($objSettings->plugin_slug) . '&tab=' . esc_attr($tab->tab_slug) . '&' . esc_attr($objSettings->additional_tab_link_parameter) . '" class="nav-tab ' . esc_attr($activeTab) . '" >' . esc_html($tab->tabname) . '</a>';
     74        }
     75        $active_tab_index = $objSettings->setting_page_fields->active_tab_index;
     76        ?>
     77    </h2>
     78    <?php
     79    if (empty($_GET["tab"]) || $_GET["tab"] !== "new_banner") {
     80        require NSC_BAR_PLUGIN_DIR . "/admin/tpl/legacy.php";
    5981    }
    6082
    61     if (defined("NSC_BARA_FEATURE_ENABLE_NEW_BANNER") === false && $tab->tab_slug === "new_banner") {
    62         continue;
     83    if (empty($_GET["tab"]) === false && $_GET["tab"] === "new_banner") {
     84        $rest_url = urlencode(get_rest_url());
     85        $nonce = wp_create_nonce('wp_rest');
     86        echo wp_kses($objSettings->setting_page_fields->tabs[$active_tab_index]->tab_description, $allowed_html);
     87        if ($premiumAddonInstalled === false) {
     88            echo '<script>localStorage.setItem("nscBaraCookieBannerState",JSON.stringify(' . $fallbackStateNewBanner . '));</script>';
     89        }
     90        echo '<script>addEventListener("load", (event) => {iFrameResize({ log: false, minHeight: 500 }, "#nsc_bar_new_banner");}); </script><iframe width="100%" id="nsc_bar_new_banner" src="' . NSC_BAR_PLUGIN_URL . 'admin/new-banner/index.html?plugin_url_encoded=' . urlencode(NSC_BAR_PLUGIN_URL) . '&rest_url_encoded=' . $rest_url . '&wp_nonce=' . $nonce . '&cb=' . NSC_BAR_VERSION . '"></iframe>';
    6391    }
    6492
    65     if (defined("NSC_BARA_FEATURE_ENABLE_NEW_BANNER") === true && NSC_BARA_FEATURE_ENABLE_NEW_BANNER === false && $tab->tab_slug === "new_banner") {
    66         continue;
    67     }
    68 
    69     $activeTab = "";
    70     if ($tab->active === true) {
    71         $activeTab = 'nav-tab-active';
    72     }
    73     echo '<a href="?page=' . esc_attr($objSettings->plugin_slug) . '&tab=' . esc_attr($tab->tab_slug) . '&' . esc_attr($objSettings->additional_tab_link_parameter) . '" class="nav-tab ' . esc_attr($activeTab) . '" >' . esc_html($tab->tabname) . '</a>';
    74 }
    75 $active_tab_index = $objSettings->setting_page_fields->active_tab_index;
    76 ?>
    77 </h2>
    78 <?php
    79 if (empty($_GET["tab"]) || $_GET["tab"] !== "new_banner") {
    80     require NSC_BAR_PLUGIN_DIR . "/admin/tpl/legacy.php";
    81 }
    82 
    83 if (empty($_GET["tab"]) === false && $_GET["tab"] === "new_banner" && defined("NSC_BARA_FEATURE_ENABLE_NEW_BANNER") && NSC_BARA_FEATURE_ENABLE_NEW_BANNER === true) {
    84     $rest_url = urlencode(get_rest_url());
    85     $nonce = wp_create_nonce('wp_rest');
    86     echo wp_kses($objSettings->setting_page_fields->tabs[$active_tab_index]->tab_description, $allowed_html);
    87     echo '<script>addEventListener("load", (event) => {iFrameResize({ log: false, minHeight: 500 }, "#nsc_bar_new_banner");}); </script><iframe width="100%" id="nsc_bar_new_banner" src="' . NSC_BAR_PLUGIN_URL . 'admin/new-banner/index.html?plugin_url_encoded=' . urlencode(NSC_BAR_PLUGIN_URL) . '&rest_url_encoded=' . $rest_url . '&wp_nonce=' . $nonce . '&cb=' . NSC_BAR_VERSION . '"></iframe>';
    88 }
    89 
    90 ?>
     93    ?>
  • beautiful-and-responsive-cookie-consent/trunk/admin/tpl/legacy.php

    r3057846 r3074718  
    11<span id="nsc_settings_content">
    2 <?php if ($displayReview === true) {?>
    3   <div id="nsc_bar_notice_please_rate" class="nsc_bar_notice_below_tabs">
    4     <table>
    5       <tr>
    6         <td>
    7           <img id="nsc_bar_notice_please_rate_image" width="150px" src="<?php echo NSC_BAR_PLUGIN_URL ?>/admin/img/rating-stars.png"/>
    8         </td>
    9         <td>
    10           <p>Hi, I noticed you use this plugin for a while now. That's awesome! Could you please do me a big favor and give it a 5-star rating on WordPress? Just to help us spread the word and boost our motivation.</p>
    11           <p target="_blank" class="nsc_bar_notice_links">
    12             <a id="nsc_bar_notice_link_one" target="_blank" class="button button-primary" href="https://wordpress.org/support/plugin/beautiful-and-responsive-cookie-consent/reviews/#new-post">Ok, you deserve it</a>
    13             <a id="nsc_bar_notice_reviewedAlready" class="nsc_bar_notice_link_two" href="#">I already did</a>
    14           </p>
    15           <p>If you think we do not deserve a 5-Star rating please contact us to give us a chance to improve, before rating.</p>
    16         </td>
    17       </tr>
     2  <?php if ($displayReview === true) { ?>
     3    <div id="nsc_bar_notice_please_rate" class="nsc_bar_notice_below_tabs">
     4      <table>
     5        <tr>
     6          <td>
     7            <img id="nsc_bar_notice_please_rate_image" width="150px"
     8              src="<?php echo NSC_BAR_PLUGIN_URL ?>/admin/img/rating-stars.png" />
     9          </td>
     10          <td>
     11            <p>Hi, I noticed you use this plugin for a while now. That's awesome! Could you please do me a big favor and
     12              give it a 5-star rating on WordPress? Just to help us spread the word and boost our motivation.</p>
     13            <p target="_blank" class="nsc_bar_notice_links">
     14              <a id="nsc_bar_notice_link_one" target="_blank" class="button button-primary"
     15                href="https://wordpress.org/support/plugin/beautiful-and-responsive-cookie-consent/reviews/#new-post">Ok,
     16                you deserve it</a>
     17              <a id="nsc_bar_notice_reviewedAlready" class="nsc_bar_notice_link_two" href="#">I already did</a>
     18            </p>
     19            <p>If you think we do not deserve a 5-Star rating please contact us to give us a chance to improve, before
     20              rating.</p>
     21          </td>
     22        </tr>
     23      </table>
     24    </div>
     25  <?php }
     26  if ($newBannerEnabled === false) {
     27    ?>
     28    <table class="form-table nsc_bar_language">
     29      <tbody>
     30        <tr id="tr_content_language_setter">
     31          <th scope="row">Language</th>
     32          <td>
     33            <fieldset>
     34              <label><?php echo $form_fields->nsc_bar_get_language_dropdown() ?></label>
     35              <p class="description"><?php echo wp_kses($objSettings->addon_lang_description, $allowed_html) ?></p>
     36            </fieldset>
     37          </td>
     38        </tr>
     39      </tbody>
    1840    </table>
    19   </div>
    20 <?php }
    21 if ($newBannerEnabled === false) {
    22     ?>
    23 <table class="form-table nsc_bar_language">
    24   <tbody>
    25     <tr id="tr_content_language_setter">
    26       <th scope="row">Language</th>
    27       <td>
    28         <fieldset>
    29           <label><?php echo $form_fields->nsc_bar_get_language_dropdown() ?></label>
    30           <p class="description"><?php echo wp_kses($objSettings->addon_lang_description, $allowed_html) ?></p>
    31         </fieldset>
    32       </td>
    33     </tr>
    34   </tbody>
    35 </table>
    36 <hr>
    37 <?php }?>
    38 <?php echo wp_kses($objSettings->setting_page_fields->tabs[$active_tab_index]->tab_description, $allowed_html) ?>
    39 <form action="" method="post">
     41    <hr>
     42  <?php } ?>
    4043
    41 <?php wp_nonce_field("save_cookie_settings_" . $objSettings->plugin_slug . "--" . $objSettings->setting_page_fields->tabs[$active_tab_index]->tab_slug, 'nsc_bar_nonce');?>
    42 <input type="hidden" name="action" value="nsc_bar_cookie_settings_save" />
    43 <input type="hidden" name="option_page" value="<?php echo $objSettings->plugin_slug . $objSettings->setting_page_fields->tabs[$active_tab_index]->tab_slug ?>" />
    44 <?php submit_button();?>
     44  <?php echo "<div class='tab_description'>" . wp_kses($objSettings->setting_page_fields->tabs[$active_tab_index]->tab_description, $allowed_html) . "  </div>" ?>
    4545
    46 <table class="form-table">
    47 <?php foreach ($objSettings->setting_page_fields->tabs[$active_tab_index]->tabfields as $field_configs) {
    48     if ($newBannerEnabled === true && isset($field_configs->newBanner) && $field_configs->newBanner === false) {
    49         continue;
    50     }
     46  <form action="" method="post">
    5147
    52     if ($newBannerEnabled === false && isset($field_configs->newBanner) && $field_configs->newBanner === true) {
    53         continue;
    54     }
    55     ?>
    56  <tr id="tr_<?php echo esc_attr($field_configs->field_slug) ?>">
    57   <th scope="row">
    58     <?php echo esc_html($field_configs->name) ?>
    59   </th>
    60   <td>
    61     <fieldset>
    62       <?php echo $form_fields->nsc_bar_return_form_field($field_configs, $objSettings->plugin_prefix); ?>
    63     <?php
    64 if (!empty($field_configs->custom_component)) {
    65         $rest_url = get_rest_url();
    66         $nonce = wp_create_nonce('wp_rest');
    67         $string = str_replace("{{REST_URL_ENCODED}}", urlencode($rest_url), $field_configs->custom_component);
    68         echo str_replace("{{WP_NONCE}}", $nonce, $string);
    69     }
    70     ?>
    71      <p class="description"><?php echo wp_kses($field_configs->helpertext, $allowed_html) ?></p>
    72     </fieldset>
    73   </td>
    74  </tr>
    75 <?php }?>
    76 </table>
    77 </form>
     48    <?php wp_nonce_field("save_cookie_settings_" . $objSettings->plugin_slug . "--" . $objSettings->setting_page_fields->tabs[$active_tab_index]->tab_slug, 'nsc_bar_nonce'); ?>
     49    <input type="hidden" name="action" value="nsc_bar_cookie_settings_save" />
     50    <input type="hidden" name="option_page"
     51      value="<?php echo $objSettings->plugin_slug . $objSettings->setting_page_fields->tabs[$active_tab_index]->tab_slug ?>" />
     52    <?php submit_button(); ?>
     53
     54    <table class="form-table">
     55      <?php foreach ($objSettings->setting_page_fields->tabs[$active_tab_index]->tabfields as $field_configs) {
     56        if ($newBannerEnabled === true && isset($field_configs->newBanner) && $field_configs->newBanner === false) {
     57          continue;
     58        }
     59
     60        if ($newBannerEnabled === false && isset($field_configs->newBanner) && $field_configs->newBanner === true) {
     61          continue;
     62        }
     63        ?>
     64        <tr id="tr_<?php echo esc_attr($field_configs->field_slug) ?>">
     65          <th scope="row">
     66            <?php echo esc_html($field_configs->name) ?>
     67          </th>
     68          <td>
     69            <fieldset>
     70              <?php echo $form_fields->nsc_bar_return_form_field($field_configs, $objSettings->plugin_prefix); ?>
     71              <?php
     72              if (!empty($field_configs->custom_component)) {
     73                $rest_url = get_rest_url();
     74                $nonce = wp_create_nonce('wp_rest');
     75                $string = str_replace("{{REST_URL_ENCODED}}", urlencode($rest_url), $field_configs->custom_component);
     76                echo str_replace("{{WP_NONCE}}", $nonce, $string);
     77              }
     78              ?>
     79              <p class="description"><?php echo wp_kses($field_configs->helpertext, $allowed_html) ?></p>
     80            </fieldset>
     81          </td>
     82        </tr>
     83      <?php } ?>
     84    </table>
     85  </form>
    7886</span>
    79 <?php require 'sidebar.php';?>
     87<?php require 'sidebar.php';?>
  • beautiful-and-responsive-cookie-consent/trunk/admin/tpl/premium_addon_desc.html

    r2985696 r3074718  
    11<div class="nsc_bar_notice_premium_addon_hint">
    22  <p>
    3     <strong>Premium Feature:</strong> To use this feature get the premium add-on from
    4     <a target="_blank" href="https://beautiful-cookie-banner.com/">beautiful-cookie-banner.com</a> and support the
    5     further development of this plugin.
     3    <strong>Unlock this premium feature and a lot more by getting the premium add-on.</strong> See here a list of all
     4    available features: <a target="_blank" href="https://beautiful-cookie-banner.com/">beautiful-cookie-banner.com</a>.
     5    By making a purchase, you're not just enhancing your experience; you're also contributing to the ongoing development
     6    of this plugin.
    67  </p>
    78</div>
  • beautiful-and-responsive-cookie-consent/trunk/class/class-nsc_bar_admin_settings.php

    r3057846 r3074718  
    3636            wp_register_script('nsc_bar_consentmode_js', NSC_BAR_PLUGIN_URL . 'admin/js/admin.consentmode.min.js', array(), NSC_BAR_VERSION);
    3737            wp_enqueue_script('nsc_bara_admin_iframeresizerjs', NSC_BAR_PLUGIN_URL . 'admin/js/iframeResizer/iframeResizer.min.js', array(), NSC_BAR_VERSION, true);
    38             wp_localize_script('nsc_bar_consentmode_js', 'phpVars', array(
    39                 'restURL' => get_rest_url(),
    40                 'nonce' => wp_create_nonce('wp_rest'),
    41             ));
     38            wp_localize_script(
     39                'nsc_bar_consentmode_js',
     40                'phpVars',
     41                array(
     42                    'restURL' => get_rest_url(),
     43                    'nonce' => wp_create_nonce('wp_rest'),
     44                )
     45            );
    4246            wp_enqueue_script('nsc_bar_consentmode_js');
    4347        }
     
    8084        $exposeJSCookieTypes = json_encode($validator->esc_array_for_js($this->plugin_configs->nsc_bar_get_option("cookietypes")), JSON_UNESCAPED_UNICODE);
    8185        $newBannerEnabled = $this->plugin_configs->nsc_bar_new_banner_enabled();
     86
     87
    8288        require NSC_BAR_PLUGIN_DIR . "/admin/tpl/admin.php";
    8389        // for testing
     
    140146        return false;
    141147    }
     148
     149
     150
     151
     152
     153
     154
     155
     156
     157
     158
     159
     160
     161
     162
     163
     164
     165
     166
     167
     168
     169
     170
     171
     172
     173
     174
     175
     176
     177
     178
     179
     180
     181
     182
     183
     184
     185
     186
     187
     188
     189
     190
     191
     192
     193
     194
     195
     196
     197
     198
     199
     200
     201
     202
     203
     204
     205
     206
     207
     208
     209
     210
     211
     212
     213
     214
     215
     216
     217
     218
     219
     220
     221
     222
     223
     224
     225
     226
     227
     228
     229
     230
     231
     232
     233
     234
     235
     236
     237
     238
     239
     240
     241
     242
     243
     244
     245
     246
     247
     248
     249
     250
     251
     252
     253
     254
     255
     256
    142257}
  • beautiful-and-responsive-cookie-consent/trunk/class/class-nsc_bar_cookie_handler.php

    r3057846 r3074718  
    1919    public function nsc_bar_set_itp_cookie()
    2020    {
    21         if ($this->plugin_configs->nsc_bar_get_option('activate_banner') == true &&
    22             $this->plugin_configs->nsc_bar_get_option('backend_cookie_conversion') == true) {
     21        if (
     22            $this->plugin_configs->nsc_bar_get_option('activate_banner') == true &&
     23            $this->plugin_configs->nsc_bar_get_option('backend_cookie_conversion') == true
     24        ) {
    2325
    2426            $expiryDate = $this->get_expiry_date($this->cookie_configs['name'], $this->cookie_configs['expirydays']);
     
    7779    public function nsc_bar_delete_cookie_for_preview()
    7880    {
    79         if ($this->plugin_configs->nsc_bar_new_banner_enabled() === false && $this->plugin_configs->nsc_bar_get_option('activate_test_banner') == true &&
    80             stripos($_SERVER["REQUEST_URI"], "page=nsc_bar-cookie-consent") !== false) {
     81        if (
     82            $this->plugin_configs->nsc_bar_new_banner_enabled() === false && $this->plugin_configs->nsc_bar_get_option('activate_test_banner') == true &&
     83            stripos($_SERVER["REQUEST_URI"], "page=nsc_bar-cookie-consent") !== false
     84        ) {
    8185            $this->nsc_bar_delete_cookie();
    8286        }
     
    150154    public function nsc_bar_delete_cookie($delete_detailed = true)
    151155    {
    152         if (isset($_COOKIE[$this->cookie_configs['name']])) {
     156
     157        if (is_string($this->cookie_configs['name']) && isset($_COOKIE[$this->cookie_configs['name']])) {
    153158            unset($_COOKIE[$this->cookie_configs['name']]);
    154159            $this->set_cookie($this->cookie_configs['name'], "emptyvalue", time() - 3600, $this->cookie_configs['path'], $this->cookie_configs['domain']);
  • beautiful-and-responsive-cookie-consent/trunk/class/class-nsc_bar_db_upgrader.php

    r2860379 r3074718  
    5959    private function do_update_from_u20($db_version)
    6060    {
    61         // if empty we know its version < 2.0. because then was the db version introduced.
    62         if (!empty($db_version)) {
     61        if (version_compare($db_version, "2.0", ">=")) {
    6362            return true;
    6463        }
     
    8483
    8584        if ($save) {
    86             return $banner_configs->nsc_bar_save_banner_settings("xx");
     85            return $banner_configs->nsc_bar_save_banner_settings();
    8786        } else {
    8887            return true;
     
    9897    private function get_database_version()
    9998    {
    100         return get_option(NSC_BAR_SLUG_DBVERSION, null);
     99        return get_option(NSC_BAR_SLUG_DBVERSION, );
    101100    }
    102101}
  • beautiful-and-responsive-cookie-consent/trunk/class/class-nsc_bar_frontend.php

    r3057846 r3074718  
    103103            $this->dataLayerName = $nsc_bar_banner_config->nsc_bar_get_cookie_setting("dataLayerName", $this->plugin_configs->nsc_bar_return_settings_field_default_value("dataLayerName"));
    104104            echo "<script id='nsc_bar_get_dataLayer_banner_init_script' nowprocket data-pagespeed-no-defer data-cfasync data-no-optimize='1' data-no-defer='1' type='text/javascript'>";
    105             echo '!function(){const e=' . json_encode($this->escape_cookies($cookies), JSON_UNESCAPED_UNICODE) . ',o="' . esc_js($this->dataLayerName) . '",n=Object.keys(e);const t={event:"beautiful_cookie_consent_initialized"};for(let o=0;o<n.length;o++)t[n[o]]=i(n[o],"' . esc_js($this->compliance_type) . '")||e[n[o]].defaultValue,"dismiss"===t[n[o]]&&(t[n[o]]="allow");function i(e,o){if("newBanner"!==o)return s(e);let n=s("' . esc_js($this->cookie_name) . '");return!!n&&(n=decodeURIComponent(n),!!n&&(n=JSON.parse(n),!!n&&(!0===n.categories.includes(e)?"allow":"deny")))}function s(e){const o=`; ${document.cookie}`.split(`; ${e}=`);if(2===o.length)return o.pop().split(";").shift()}window[o]=window[o]||[],window[o].push(t)}();';
     105            echo '!function()}();';
    106106            echo "</script>";
    107107            return;
  • beautiful-and-responsive-cookie-consent/trunk/class/class-nsc_bar_plugin_configs.php

    r3057846 r3074718  
    107107    public function getConsentCookieName()
    108108    {
     109
     110
     111
     112
     113
     114
     115
     116
    109117        $banner_configs = new nsc_bar_banner_configs;
    110118        $cookieName = $banner_configs->nsc_bar_get_cookie_setting("cookie_name", $this->nsc_bar_return_settings_field_default_value("cookie_name"));
    111 
    112         if ($this->nsc_bar_new_banner_enabled()) {
    113             $cookieName = $banner_configs->nsc_bar_get_cookie_setting("cookie_name_nb", $this->nsc_bar_return_settings_field_default_value("cookie_name_nb"));
     119        if (is_array($cookieName)) {
     120            $cookieName = $this->getLastArrayEntry($cookieName);
    114121        }
    115122        return $cookieName;
     123
     124
     125
     126
     127
     128
     129
     130
     131
     132
    116133    }
    117134
     
    171188            return "";
    172189        }
    173         if (strpos($this->settings_as_object->setting_page_fields->tabs[$tab_index]->$type, ".html") === false ||
    174             !file_exists(NSC_BAR_PLUGIN_DIR . "/admin/tpl/" . $this->settings_as_object->setting_page_fields->tabs[$tab_index]->$type)) {
     190        if (
     191            strpos($this->settings_as_object->setting_page_fields->tabs[$tab_index]->$type, ".html") === false ||
     192            !file_exists(NSC_BAR_PLUGIN_DIR . "/admin/tpl/" . $this->settings_as_object->setting_page_fields->tabs[$tab_index]->$type)
     193        ) {
    175194            return $this->settings_as_object->setting_page_fields->tabs[$tab_index]->$type;
    176195        }
     
    223242        }
    224243    }
     244
     245
     246
     247
     248
     249
     250
     251
     252
    225253}
  • beautiful-and-responsive-cookie-consent/trunk/class/class-nsc_bar_save_form_fields.php

    r3065666 r3074718  
    109109    }
    110110
     111
     112
     113
    111114    private function override_other_addon_configs($updated, $saved_language_configs)
    112115    {
  • beautiful-and-responsive-cookie-consent/trunk/nsc_bar-cookie-consent.php

    r3065666 r3074718  
    44Description: An easy way to get a beautiful GDPR Cookie Consent Banner. Customize it to match your compliance requirements and website layout. Highly customisable and responsive.
    55Author: Beautiful Cookie Banner
    6 Version: 4.0.1
     6Version: 4.
    77Author URI: https://beautiful-cookie-banner.com
    88Text Domain: bar-cookie-consent
     
    3232define("NSC_BAR_PLUGIN_VERSION", "2.2");
    3333define("NSC_BAR_SLUG_DBVERSION", "nsc_bar_db_version");
    34 define("NSC_BAR_VERSION", "4.0.1");
     34define("NSC_BAR_VERSION", "4.");
    3535
    3636require dirname(__FILE__) . "/class/class-nsc_bar_admin_error.php";
  • beautiful-and-responsive-cookie-consent/trunk/plugin-configs.json

    r3057846 r3074718  
    1919        "tab_slug": "general",
    2020        "active": false,
    21         "newBanner": true,
    2221        "tabfields": [
    2322          {
     
    9493      },
    9594      {
    96         "tabname": "Banner Settings for 'modern'",
     95        "tabname": "Banner ",
    9796        "tab_description": "premium_addon_desc.html",
    9897        "tab_tipps": "",
    9998        "tab_slug": "new_banner",
    10099        "active": false,
    101         "tabfields": [],
    102         "newBanner": true
     100        "tabfields": []
    103101      },
    104102      {
     
    628626        "tab_slug": "googleconsentmode",
    629627        "active": false,
    630         "newBanner": true,
    631628        "tabfields": [
    632629          {
     
    847844        "tab_slug": "block_services",
    848845        "active": false,
    849         "newBanner": true,
    850846        "tabfields": [
    851847          {
     
    890886        "tab_slug": "cookie_settings",
    891887        "active": false,
    892         "newBanner": true,
    893888        "tabfields": [
    894889          {
     
    914909            "name": "Cookie Name",
    915910            "newBanner": true,
    916             "save_in_db": false
     911            "save_in_db": e
    917912          },
    918913          {
     
    946941        "tab_slug": "advanced_config",
    947942        "active": false,
    948         "newBanner": true,
    949943        "tabfields": [
    950944          {
     
    979973        "tab_slug": "statistics",
    980974        "active": false,
    981         "newBanner": true,
    982975        "tabfields": [
    983976          {
     
    10631056      {
    10641057        "tabname": "Google Tag Manager",
    1065         "tab_description": "Using the free <a target='_blank' href='https://support.google.com/tagmanager/answer/6102821?hl=en'>Google Tag Manager</a> (GTM) to manage all your tracking codes has a lot of <a target='_blank' href='https://marketingplatform.google.com/intl/en/about/tag-manager/features/'>benefits</a>. It makes it easy to manage all your tracking codes and to activate/deactivate them.<br><br>The free version of this plugin supports the GTM by pushing the consent status to the dataLayer. With the premium add-on this plugin manages the injecting of the GTM on the page. When using 'blocking services', this plugin takes care of loading the GTM and when not to load it. All this <strong>without the need of a reload</strong> of the page after the user consented. And in some cases it will fix challenges with caching plugins.<br>You get the premium add-on here: <a target='_blank' href='https://beautiful-cookie-banner.com/'>https://beautiful-cookie-banner.com/</a>.<br><br><hr>",
     1058        "tab_description": ">",
    10661059        "tab_tipps": "",
    10671060        "tab_slug": "gtm",
    10681061        "active": false,
    1069         "newBanner": true,
    10701062        "tabfields": [
    10711063          {
  • beautiful-and-responsive-cookie-consent/trunk/readme.txt

    r3065675 r3074718  
    66Requires PHP: 7.0.0
    77License: GPLv3
    8 Stable tag: 4.0.1
     8Stable tag: 4.
    99
    1010Free and beautiful Cookie Consent Banner to make your website compliant. Google Consent Mode v2 support. Not loading any files from 3rd party servers.
     
    111111== Changelog ==
    112112
     113
     114
     115
     116
     117
    113118= 4.0.1 =
    114119* FIX: PHP Parse Error in class-nsc_bar_save_form_fields.php on line 75
Note: See TracChangeset for help on using the changeset viewer.