File manager - Edit - /home/nandedex/public_html/s.nandedexpress.com/better-adsmanager.zip
Back
PK ���[�~Y%� � js/bam.jsnu �[��� var Better_Ads_Manager = (function ($) { "use strict"; return { init: function () { if (Better_Ads_Manager.ads_state() == false) Better_Ads_Manager.blocked_ads_fallback(); }, // Get ad state, used to detect ad blocker state ads_state: function () { // If this is not defined, it means ad blocker disabled it! return typeof window.better_ads_adblock != "undefined"; }, // Retrieves ads fallback blocked_ads_fallback: function () { var blocked_ads = []; // Collect all ads $('.bsac-container').each(function () { // Blockers can't detect our image ad code ;) if ($(this).data('type') == 'image') return 0; blocked_ads.push({ 'element_id': $(this).attr('id'), 'ad_id': $(this).data('adid') }); }); if (blocked_ads.length < 1) return; jQuery.ajax({ url: Better_Ads_Manager_Ajax_URL, type: "POST", data: { action: 'better_ads_manager_blocked_fallback', ads: blocked_ads }, success: function (data) { var result = JSON.parse(data); $.each(result.ads, function (index, value) { $('#' + value.element_id).html(value.code); }); } }); } };// /return })(jQuery); // Load when ready jQuery(document).ready(function () { Better_Ads_Manager.init(); }); PK ���[�;��� � js/adsense-lazy.min.jsnu �[��� !function(e,n){var t="adsenseLoader";"function"==typeof define&&define.amd?define([],n()):"object"==typeof exports?module.exports=n():e[t]=n()}(this,function(e){"use strict";function n(o,r){var a,i;return function(){var e=this,n=arguments,t=+new Date;a&&t<a+o?(clearTimeout(i),i=setTimeout(function(){a=t,r.apply(e,n)},o)):(a=t,r.apply(e,n))}}function t(){if(!d.length)return!0;var i=window.pageYOffset,s=window.innerHeight;d.forEach(function(e){var n,t,o,r=[(n=e.getBoundingClientRect()).top+document.body.scrollTop,(n.left,document.body.scrollLeft)][0],a=e._adsenseLoaderData.options.laziness+1;if(s*a<r-i||0<i-r-e.offsetHeight-s*a)return!0;d=l(d,e),e._adsenseLoaderData.width=u(e),t=e.children[0],o="adsbygoogle",t.classList?t.classList.add(o):t.className+=" "+o,f.push(e),"undefined"!=typeof adsbygoogle?function(e){(adsbygoogle=window.adsbygoogle||[]).push({});var n=e._adsenseLoaderData.options.onLoad;"function"==typeof n&&e.querySelector("iframe").addEventListener("load",function(){n(e)})}(e):c.push(e)})}var o=250,r={laziness:1,onLoad:!1},d=[],f=[],c=[],u=function(e){return parseInt(window.getComputedStyle(e,":before").getPropertyValue("content").slice(1,-1)||9999)},l=function(e,n){return e.filter(function(e){return e!==n})};function a(e,o){"string"==typeof e?e=document.querySelectorAll(e):void 0===e.length&&(e=[e]),o=function(e,n){var t,o={};for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(o[t]=e[t]);for(t in n)Object.prototype.hasOwnProperty.call(n,t)&&(o[t]=n[t]);return o}(r,o),[].forEach.call(e,function(e){var n,t;t=o,(n=e)._adsenseLoaderData={originalHTML:n.innerHTML,options:t},n.adsenseLoader=function(e){"destroy"==e&&(d=l(d,n),f=l(f,n),c=l(f,n),n.innerHTML=n._adsenseLoaderData.originalHTML)},e=n,d.push(e)}),this.elements=e,t()}return window.addEventListener("scroll",n(o,t)),window.addEventListener("resize",n(o,t)),window.addEventListener("resize",n(o,function(){if(!f.length)return!0;var n=!1;f.forEach(function(e){e._adsenseLoaderData.width!=u(e)&&(n=!0,f=l(f,e),e.innerHTML=e._adsenseLoaderData.originalHTML,d.push(e))}),n&&t()})),a.prototype={destroy:function(){this.elements.forEach(function(e){e.adsenseLoader("destroy")})}},window.adsenseLoaderConfig=function(e){void 0!==e.throttle&&(o=e.throttle)},a});PK ���[SDުH H js/adsense-lazy.jsnu �[��� /* A JavaScript plugin for lazy-loading responsive Google Adsense ads. - By Osvaldas Valutis, www.osvaldas.info Available for use under the MIT License */ ;( function (root, factory) { var pluginName = 'adsenseLoader'; if (typeof define === 'function' && define.amd) define([], factory(pluginName)); else if (typeof exports === 'object') module.exports = factory(pluginName); else root[pluginName] = factory(pluginName); }(this, function (pluginName) { 'use strict'; var throttleTO = 250, defaultOpts = { laziness: 1, onLoad: false, }, extendObj = function (defaults, options) { var prop, extended = {}; for (prop in defaults) if (Object.prototype.hasOwnProperty.call(defaults, prop)) extended[prop] = defaults[prop]; for (prop in options) if (Object.prototype.hasOwnProperty.call(options, prop)) extended[prop] = options[prop]; return extended; }, addClass = function (el, className) { if (el.classList) el.classList.add(className); else el.className += ' ' + className; }, getOffset = function (el) { var rect = el.getBoundingClientRect(); return {top: rect.top + document.body.scrollTop, left: rect.left + document.body.scrollLeft}; }, loadScript = function (url, callback) { var s = document.createElement('script'); s.src = url; s.async = true; s.addEventListener('load', function () { s.parentNode.removeChild(s); if (typeof callback === 'function') callback(); }); document.body.appendChild(s); }, throttle = function (a, b) { var c, d; return function () { var e = this, f = arguments, g = +new Date; c && g < c + a ? (clearTimeout(d), d = setTimeout(function () { c = g, b.apply(e, f) }, a)) : (c = g, b.apply(e, f)) } }, adsToLoad = [], adsLoaded = [], adsPending = [], loadAd = function (ad) { ( adsbygoogle = window.adsbygoogle || []).push({}); var onLoadFn = ad._adsenseLoaderData.options.onLoad; if (typeof onLoadFn === 'function') { ad.querySelector('iframe').addEventListener('load', function () { onLoadFn(ad); }); } }, initAds = function () { if (!adsToLoad.length) return true; var winScroll = window.pageYOffset, winHeight = window.innerHeight; adsToLoad.forEach(function (ad) { var offset = getOffset(ad).top, laziness = ad._adsenseLoaderData.options.laziness + 1; // if the element is too far below || too far above if (offset - winScroll > winHeight * laziness || winScroll - offset - ad.offsetHeight - ( winHeight * laziness ) > 0) return true; adsToLoad = removeAdFromList(adsToLoad, ad); ad._adsenseLoaderData.width = getAdWidth(ad); addClass(ad.children[0], 'adsbygoogle'); adsLoaded.push(ad); if (typeof adsbygoogle !== 'undefined') loadAd(ad); else adsPending.push(ad); }); }, resizeAds = function () { if (!adsLoaded.length) return true; var anyNew = false; adsLoaded.forEach(function (ad) { if (ad._adsenseLoaderData.width != getAdWidth(ad)) { anyNew = true; adsLoaded = removeAdFromList(adsLoaded, ad); ad.innerHTML = ad._adsenseLoaderData.originalHTML; adsToLoad.push(ad); } }); if (anyNew) initAds(); }, getAdWidth = function (ad) { return parseInt(window.getComputedStyle(ad, ':before').getPropertyValue('content').slice(1, -1) || 9999); }, removeAdFromList = function (list, element) { return list.filter(function (entry) { return entry !== element; }); }, normalizeAdElement = function (ad, options) { ad._adsenseLoaderData = { originalHTML: ad.innerHTML, options: options }; ad.adsenseLoader = function (method) { if (method == 'destroy') { adsToLoad = removeAdFromList(adsToLoad, ad); adsLoaded = removeAdFromList(adsLoaded, ad); adsPending = removeAdFromList(adsLoaded, ad); ad.innerHTML = ad._adsenseLoaderData.originalHTML; } }; return ad; }; window.addEventListener('scroll', throttle(throttleTO, initAds)); window.addEventListener('resize', throttle(throttleTO, initAds)); window.addEventListener('resize', throttle(throttleTO, resizeAds)); function Plugin(elements, options) { if (typeof elements === 'string') elements = document.querySelectorAll(elements); else if (typeof elements.length === 'undefined') elements = [elements]; options = extendObj(defaultOpts, options); [].forEach.call(elements, function (entry) { entry = normalizeAdElement(entry, options); adsToLoad.push(entry); }); this.elements = elements; initAds(); } Plugin.prototype = { destroy: function () { this.elements.forEach(function (entry) { entry.adsenseLoader('destroy'); }); } }; window.adsenseLoaderConfig = function (options) { if (typeof options.throttle !== 'undefined') throttleTO = options.throttle; }; return Plugin; })); PK ���[@�٭ js/advertising.min.jsnu �[��� window.better_ads_adblock=!0;PK ���[>��<�( �( js/bam-admin.jsnu �[��� String.prototype.capitalize = function () { return this.charAt(0).toUpperCase() + this.slice(1); }; var Better_Ads_Manager_Admin = (function ($) { "use strict"; return { init: function () { Better_Ads_Manager_Admin.responsive_fields(); Better_Ads_Manager_Admin.repeater_smart_label(); Better_Ads_Manager_Admin.smart_label(); }, /** * * Responsive Fields * */ responsive_fields: function () { Better_Ads_Manager_Admin.update_responsive_fields(); $('.bf-controls-image_radio-option input[name="bf-metabox-option[better_ads_banner_options][type]"], .bf-controls-image_radio-option input[name="bf-metabox-option[better_ads_banner_options][format]"]').on('change', function () { Better_Ads_Manager_Admin.update_responsive_fields(); }); }, update_responsive_fields: function () { var type = $('.bf-controls-image_radio-option input[name="bf-metabox-option[better_ads_banner_options][type]"]:checked').attr('value'), format = $('.bf-controls-image_radio-option input[name="bf-metabox-option[better_ads_banner_options][format]"]:checked').attr('value'), $resp = $('.bf-section[data-id="responsive_options"] .better-ads-table'); if (format == 'amp') { $('.responsive-field-container').slideUp(); } else { $('.responsive-field-container').slideDown(); if (type == 'code') { $resp.addClass('show-sizes'); } else { $resp.removeClass('show-sizes') } } }, /** * * Fields Smart Label * */ smart_label: function () { $(".fields-group.better-ads-ad-group-field").on('change', 'input[name$="-active"],select[name$="_type"],select[name$="_banner"],select[name$="_campaign"]', function () { Better_Ads_Manager_Admin.update_field_label($(this).closest('.fields-group.better-ads-ad-group-field')); }).find('select[name$="_type"]').change(); }, update_field_label: function ($group_field) { var label = [], before = '<span style="color: #b1b1b1;">[ </span>', after = '<span style="color: #b1b1b1;"> ]</span>', sep = '<span style="color: #9e9e9e;"> ' + better_adsmanager_loc.arrow + ' </span>', inactive_before = '<b style="color: red;">', inactive_after = '</b>', active_before = '<b style="color: green;">', active_after = '</b>', inactive = better_adsmanager_loc.translation.inactive; // // Post type // if (typeof $group_field.find('input[name$="post_type"]').val() != "undefined") { label.push(before + $group_field.find('input[name$="post_type"]').val().capitalize() + after); } // // After x paragraph // // if (typeof $group_field.find('input[name$="[paragraph]"]').val() != "undefined") { // label.push(before + 'After ' + $group_field.find('input[name$="[paragraph]"]').val() + 'th p' + after); // } // // Type // var type = $group_field.find('select[name$="_type"] option:selected').val(), banner = $group_field.find('select[name$="_banner"] option:selected').val(), banner_label = $group_field.find('select[name$="_banner"] option:selected').text(), campaign = $group_field.find('select[name$="_campaign"] option:selected').val(), campaign_lable = $group_field.find('select[name$="_campaign"] option:selected').text(); if (type === 'banner') { label.push(before + better_adsmanager_loc.translation.banner + after); if (banner === 'none') { label.push(before + inactive_before + better_adsmanager_loc.translation.in_active_banner + inactive_after + after); } else { label.push(before + active_before + banner_label.replace('[', '(').replace(']', ')') + active_after + after); } } else if (type === 'campaign') { label.push(before + better_adsmanager_loc.translation.campaign + after); if (campaign === 'none') { label.push(before + inactive_before + better_adsmanager_loc.translation.in_active_campaign + inactive_after + after); } else { label.push(before + active_before + campaign_lable + active_after + after); } } // Only 1 (post type) was added if (label.length == 1) { label.push(before + inactive_before + inactive + inactive_after + after); } if ($group_field.find('.fields-group-title-container .fields-group-title .ad-state-indicator').length < 1) { $group_field.find('.fields-group-title-container .fields-group-title').append('<p class="ad-state-indicator"></p>'); } if (label.length > 0) { $group_field.find('.fields-group-title-container .fields-group-title .ad-state-indicator') .html(label.join(sep)); } else { $group_field.find('.fields-group-title-container .fields-group-title .ad-state-indicator') .html(before + inactive_before + inactive + inactive_after + after); } }, /** * * Repeater Field Smart Label * */ repeater_smart_label: function () { $(".bf-section.better-ads-repeater-ad-field").on('keyup', 'input[name$="[post_type]"],input[name$="[paragraph]"]', function () { Better_Ads_Manager_Admin.update_repeater_field_label($(this).closest('.bf-repeater-item')); }).on('repeater_item_added', function() { Better_Ads_Manager_Admin.update_repeater_field_label($(this).find('.bf-repeater-item:last')); }); $(".bf-section.better-ads-repeater-ad-field").on('change', 'select[name$="[type]"],select[name$="[banner]"],select[name$="[campaign]"]', function () { Better_Ads_Manager_Admin.update_repeater_field_label($(this).closest('.bf-repeater-item')); }).find('select[name$="[type]"]').change(); }, update_repeater_field_label: function ($repeater_field) { var label = [], before = '<span style="color: #b1b1b1;">[ </span>', after = '<span style="color: #b1b1b1;"> ]</span>', sep = '<span style="color: #9e9e9e;"> ' + better_adsmanager_loc.arrow + ' </span>', inactive_before = '<b style="color: red;">', inactive_after = '</b>', active_before = '<b style="color: green;">', active_after = '</b>', inactive = better_adsmanager_loc.translation.inactive; // // Post type // if (typeof $repeater_field.find('input[name$="[post_type]"]').val() != "undefined") { label.push(before + $repeater_field.find('input[name$="[post_type]"]').val().capitalize() + after); } // // After x paragraph // if (typeof $repeater_field.find('input[name$="[paragraph]"]').val() != "undefined") { var val = parseInt($repeater_field.find('input[name$="[paragraph]"]').val() || 0), idx = 3; if(val) { if(val >= 1 && val <= 3) { idx = val-1; } label.push(before + better_adsmanager_loc.translation.after_x_paragraph[idx].replace('%s', val) + after); } else { label.push(before + '-' + after); } } // // Type // var type = $repeater_field.find('select[name$="[type]"] option:selected').val(), banner = $repeater_field.find('select[name$="[banner]"] option:selected').val(), banner_label = $repeater_field.find('select[name$="[banner]"] option:selected').text(), campaign = $repeater_field.find('select[name$="[campaign]"] option:selected').val(), campaign_lable = $repeater_field.find('select[name$="[campaign]"] option:selected').text(); if (type === 'banner') { label.push(before + better_adsmanager_loc.translation.banner + after); if (banner === 'none') { label.push(before + inactive_before + better_adsmanager_loc.translation.in_active_banner + inactive_after + after); } else { label.push(before + active_before + banner_label.replace('[', '(').replace(']', ')') + active_after + after); } } else if (type === 'campaign') { label.push(before + 'Campaign' + after); if (campaign === 'none') { label.push(before + inactive_before + better_adsmanager_loc.translation.in_active_campaign + inactive_after + after); } else { label.push(before + active_before + campaign_lable + active_after + after); } } // Only 1 (post type) was added if (label.length == 1) { label.push(before + inactive_before + inactive + inactive_after + after); } if (label.length > 0) { $repeater_field.find('.bf-repeater-item-title .handle-repeater-title-label') .html(label.join(sep)); } else { $repeater_field.find('.bf-repeater-item-title .handle-repeater-title-label') .html(before + inactive_before + inactive + inactive_after + after); } } }; })(jQuery); // Load when ready jQuery(document).ready(function () { Better_Ads_Manager_Admin.init(); }); PK ���[� J�� � js/bam.min.jsnu �[��� var Better_Ads_Manager=function(t){"use strict";return{init:function(){0==Better_Ads_Manager.ads_state()&&Better_Ads_Manager.blocked_ads_fallback()},ads_state:function(){return void 0!==window.better_ads_adblock},blocked_ads_fallback:function(){var a=[];t(".bsac-container").each(function(){if("image"==t(this).data("type"))return 0;a.push({element_id:t(this).attr("id"),ad_id:t(this).data("adid")})}),a.length<1||jQuery.ajax({url:Better_Ads_Manager_Ajax_URL,type:"POST",data:{action:"better_ads_manager_blocked_fallback",ads:a},success:function(a){var e=JSON.parse(a);t.each(e.ads,function(a,e){t("#"+e.element_id).html(e.code)})}})}}}(jQuery);jQuery(document).ready(function(){Better_Ads_Manager.init()});PK ���[I�:�� � js/bam-admin.min.jsnu �[��� String.prototype.capitalize=function(){return this.charAt(0).toUpperCase()+this.slice(1)};var Better_Ads_Manager_Admin=function(n){"use strict";return{init:function(){Better_Ads_Manager_Admin.responsive_fields(),Better_Ads_Manager_Admin.repeater_smart_label(),Better_Ads_Manager_Admin.smart_label()},responsive_fields:function(){Better_Ads_Manager_Admin.update_responsive_fields(),n('.bf-controls-image_radio-option input[name="bf-metabox-option[better_ads_banner_options][type]"], .bf-controls-image_radio-option input[name="bf-metabox-option[better_ads_banner_options][format]"]').on("change",function(){Better_Ads_Manager_Admin.update_responsive_fields()})},update_responsive_fields:function(){var e=n('.bf-controls-image_radio-option input[name="bf-metabox-option[better_ads_banner_options][type]"]:checked').attr("value"),t=n('.bf-controls-image_radio-option input[name="bf-metabox-option[better_ads_banner_options][format]"]:checked').attr("value"),a=n('.bf-section[data-id="responsive_options"] .better-ads-table');"amp"==t?n(".responsive-field-container").slideUp():(n(".responsive-field-container").slideDown(),"code"==e?a.addClass("show-sizes"):a.removeClass("show-sizes"))},smart_label:function(){n(".fields-group.better-ads-ad-group-field").on("change",'input[name$="-active"],select[name$="_type"],select[name$="_banner"],select[name$="_campaign"]',function(){Better_Ads_Manager_Admin.update_field_label(n(this).closest(".fields-group.better-ads-ad-group-field"))}).find('select[name$="_type"]').change()},update_field_label:function(e){var t=[],a='<span style="color: #b1b1b1;">[ </span>',n='<span style="color: #b1b1b1;"> ]</span>',i='<span style="color: #9e9e9e;"> '+better_adsmanager_loc.arrow+" </span>",r='<b style="color: red;">',s="</b>",o='<b style="color: green;">',l="</b>",p=better_adsmanager_loc.translation.inactive;void 0!==e.find('input[name$="post_type"]').val()&&t.push(a+e.find('input[name$="post_type"]').val().capitalize()+n);var d=e.find('select[name$="_type"] option:selected').val(),_=e.find('select[name$="_banner"] option:selected').val(),c=e.find('select[name$="_banner"] option:selected').text(),m=e.find('select[name$="_campaign"] option:selected').val(),b=e.find('select[name$="_campaign"] option:selected').text();"banner"===d?(t.push(a+better_adsmanager_loc.translation.banner+n),"none"===_?t.push(a+r+better_adsmanager_loc.translation.in_active_banner+s+n):t.push(a+o+c.replace("[","(").replace("]",")")+l+n)):"campaign"===d&&(t.push(a+better_adsmanager_loc.translation.campaign+n),"none"===m?t.push(a+r+better_adsmanager_loc.translation.in_active_campaign+s+n):t.push(a+o+b+l+n)),1==t.length&&t.push(a+r+p+s+n),e.find(".fields-group-title-container .fields-group-title .ad-state-indicator").length<1&&e.find(".fields-group-title-container .fields-group-title").append('<p class="ad-state-indicator"></p>'),0<t.length?e.find(".fields-group-title-container .fields-group-title .ad-state-indicator").html(t.join(i)):e.find(".fields-group-title-container .fields-group-title .ad-state-indicator").html(a+r+p+s+n)},repeater_smart_label:function(){n(".bf-section.better-ads-repeater-ad-field").on("keyup",'input[name$="[post_type]"],input[name$="[paragraph]"]',function(){Better_Ads_Manager_Admin.update_repeater_field_label(n(this).closest(".bf-repeater-item"))}).on("repeater_item_added",function(){Better_Ads_Manager_Admin.update_repeater_field_label(n(this).find(".bf-repeater-item:last"))}),n(".bf-section.better-ads-repeater-ad-field").on("change",'select[name$="[type]"],select[name$="[banner]"],select[name$="[campaign]"]',function(){Better_Ads_Manager_Admin.update_repeater_field_label(n(this).closest(".bf-repeater-item"))}).find('select[name$="[type]"]').change()},update_repeater_field_label:function(e){var t=[],a='<span style="color: #b1b1b1;">[ </span>',n='<span style="color: #b1b1b1;"> ]</span>',i='<span style="color: #9e9e9e;"> '+better_adsmanager_loc.arrow+" </span>",r='<b style="color: red;">',s="</b>",o='<b style="color: green;">',l="</b>",p=better_adsmanager_loc.translation.inactive;if(void 0!==e.find('input[name$="[post_type]"]').val()&&t.push(a+e.find('input[name$="[post_type]"]').val().capitalize()+n),void 0!==e.find('input[name$="[paragraph]"]').val()){var d=parseInt(e.find('input[name$="[paragraph]"]').val()||0),_=3;d?(1<=d&&d<=3&&(_=d-1),t.push(a+better_adsmanager_loc.translation.after_x_paragraph[_].replace("%s",d)+n)):t.push(a+"-"+n)}var c=e.find('select[name$="[type]"] option:selected').val(),m=e.find('select[name$="[banner]"] option:selected').val(),b=e.find('select[name$="[banner]"] option:selected').text(),f=e.find('select[name$="[campaign]"] option:selected').val(),u=e.find('select[name$="[campaign]"] option:selected').text();"banner"===c?(t.push(a+better_adsmanager_loc.translation.banner+n),"none"===m?t.push(a+r+better_adsmanager_loc.translation.in_active_banner+s+n):t.push(a+o+b.replace("[","(").replace("]",")")+l+n)):"campaign"===c&&(t.push(a+"Campaign"+n),"none"===f?t.push(a+r+better_adsmanager_loc.translation.in_active_campaign+s+n):t.push(a+o+u+l+n)),1==t.length&&t.push(a+r+p+s+n),0<t.length?e.find(".bf-repeater-item-title .handle-repeater-title-label").html(t.join(i)):e.find(".bf-repeater-item-title .handle-repeater-title-label").html(a+r+p+s+n)}}}(jQuery);jQuery(document).ready(function(){Better_Ads_Manager_Admin.init()});PK ���[oJ��� � js/advertising.jsnu �[��� /* * Hack file just to test Ad Blockers. * If adblockers are activated they will most likely hide this file. * If this file is hidden we know an AD Blocker is active. */ window.better_ads_adblock = true;PK ���[ � �m� m� languages/better-studio-en_US.ponu �[��� msgid "" msgstr "" "Project-Id-Version: Better Ads Manager v1.0.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-05-02 07:05:56+0000\n" "Last-Translator: admin <tondar@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: CSL v1.x\n" "X-Poedit-Language: English\n" "X-Poedit-Country: UNITED STATES\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n" "X-Poedit-Basepath: \n" "X-Poedit-Bookmarks: \n" "X-Poedit-SearchPath-0: .\n" "X-Textdomain-Support: yes" #: better-ads-manager.php:382 #@ better-studio msgid "Post Ads" msgstr "" #: better-ads-manager.php:395 #@ better-studio msgid "Post Inline Ads" msgstr "" #: better-ads-manager.php:401 #: better-ads-manager.php:540 #: better-ads-manager.php:644 #: better-ads-manager.php:911 #: includes/widgets/class-better-ads-widget.php:23 #@ better-studio msgid "Ad Type" msgstr "" #: better-ads-manager.php:403 #: better-ads-manager.php:542 #: better-ads-manager.php:646 #@ better-studio msgid "Choose campaign or banner." msgstr "" #: better-ads-manager.php:406 #: better-ads-manager.php:412 #: better-ads-manager.php:546 #: better-ads-manager.php:561 #: better-ads-manager.php:650 #: better-ads-manager.php:665 #: better-ads-manager.php:900 #: better-ads-manager.php:1071 #: includes/widgets/class-better-ads-widget.php:29 #: includes/widgets/class-better-ads-widget.php:42 #@ better-studio msgid "Campaign" msgstr "" #: better-ads-manager.php:407 #: better-ads-manager.php:422 #: better-ads-manager.php:547 #: better-ads-manager.php:551 #: better-ads-manager.php:651 #: better-ads-manager.php:655 #: includes/widgets/class-better-ads-widget.php:30 #: includes/widgets/class-better-ads-widget.php:34 #@ better-studio msgid "Banner" msgstr "" #: better-ads-manager.php:414 #: better-ads-manager.php:563 #: better-ads-manager.php:667 #@ better-studio msgid "Choose campaign." msgstr "" #: better-ads-manager.php:416 #: better-ads-manager.php:566 #: better-ads-manager.php:670 #: better-ads-manager.php:905 #: includes/widgets/class-better-ads-widget.php:45 #@ better-studio msgid "Select Campaign" msgstr "" #: better-ads-manager.php:424 #: better-ads-manager.php:553 #: better-ads-manager.php:657 #@ better-studio msgid "Choose banner." msgstr "" #: better-ads-manager.php:426 #: better-ads-manager.php:556 #: better-ads-manager.php:660 #: includes/widgets/class-better-ads-widget.php:37 #@ better-studio msgid "Select Banner" msgstr "" #: better-ads-manager.php:432 #: better-ads-manager.php:571 #: better-ads-manager.php:675 #: includes/widgets/class-better-ads-widget.php:50 #@ better-studio msgid "Max Amount of Allowed Banners" msgstr "" #: better-ads-manager.php:434 #: better-ads-manager.php:573 #: better-ads-manager.php:677 #@ better-studio msgid "How many banners are allowed?." msgstr "" #: better-ads-manager.php:435 #: better-ads-manager.php:574 #: better-ads-manager.php:678 #: includes/widgets/class-better-ads-widget.php:51 #@ better-studio msgid "Leave empty to show all banners." msgstr "" #: better-ads-manager.php:442 #: better-ads-manager.php:581 #: better-ads-manager.php:685 #: includes/widgets/class-better-ads-widget.php:58 #@ better-studio msgid "Columns" msgstr "" #: better-ads-manager.php:444 #: better-ads-manager.php:583 #: better-ads-manager.php:687 #@ better-studio msgid "Show ads in multiple columns." msgstr "" #: better-ads-manager.php:447 #: better-ads-manager.php:586 #: better-ads-manager.php:690 #: includes/widgets/class-better-ads-widget.php:62 #@ better-studio msgid "1 Column" msgstr "" #: better-ads-manager.php:448 #: better-ads-manager.php:587 #: better-ads-manager.php:691 #: includes/widgets/class-better-ads-widget.php:63 #@ better-studio msgid "2 Column" msgstr "" #: better-ads-manager.php:449 #: better-ads-manager.php:588 #: better-ads-manager.php:692 #: includes/widgets/class-better-ads-widget.php:64 #@ better-studio msgid "3 Column" msgstr "" #: better-ads-manager.php:456 #: better-ads-manager.php:595 #: better-ads-manager.php:699 #: includes/widgets/class-better-ads-widget.php:70 #@ better-studio msgid "Order By" msgstr "" #: better-ads-manager.php:460 #: better-ads-manager.php:599 #: better-ads-manager.php:703 #: includes/widgets/class-better-ads-widget.php:75 #@ better-studio msgid "Date" msgstr "" #: better-ads-manager.php:461 #: better-ads-manager.php:600 #: better-ads-manager.php:704 #: includes/widgets/class-better-ads-widget.php:17 #: includes/widgets/class-better-ads-widget.php:76 #@ better-studio msgid "Title" msgstr "" #: better-ads-manager.php:462 #: better-ads-manager.php:601 #: better-ads-manager.php:705 #: includes/widgets/class-better-ads-widget.php:77 #@ better-studio msgid "Rand" msgstr "" #: better-ads-manager.php:469 #: better-ads-manager.php:608 #: better-ads-manager.php:712 #: includes/widgets/class-better-ads-widget.php:83 #@ better-studio msgid "Order" msgstr "" #: better-ads-manager.php:473 #: better-ads-manager.php:612 #: better-ads-manager.php:716 #: includes/widgets/class-better-ads-widget.php:88 #@ better-studio msgid "Ascending" msgstr "" #: better-ads-manager.php:474 #: better-ads-manager.php:613 #: better-ads-manager.php:717 #: includes/widgets/class-better-ads-widget.php:89 #@ better-studio msgid "Descending" msgstr "" #: better-ads-manager.php:482 #@ better-studio msgid "Position" msgstr "" #: better-ads-manager.php:484 #@ better-studio msgid "Choose position of inline ad." msgstr "" #: better-ads-manager.php:487 #@ better-studio msgid "Left Align" msgstr "" #: better-ads-manager.php:488 #@ better-studio msgid "Center Align" msgstr "" #: better-ads-manager.php:489 #@ better-studio msgid "Right Align" msgstr "" #: better-ads-manager.php:494 #@ better-studio msgid "After Paragraph" msgstr "" #: better-ads-manager.php:496 #@ better-studio msgid "Content of each post will analyzed and it will inject an ad after the selected number of paragraphs." msgstr "" #: better-ads-manager.php:497 #@ better-studio msgid "After how many paragraphs the ad will display." msgstr "" #: better-ads-manager.php:504 #@ better-studio msgid "Add inline adds inside post content. <br>You can add multiple inline adds for multiple location of post content." msgstr "" #: better-ads-manager.php:521 #@ better-studio msgid "Add New Inline Ad" msgstr "" #: better-ads-manager.php:522 #@ better-studio msgid "Delete Ad" msgstr "" #: better-ads-manager.php:523 #@ better-studio msgid "Inline Ad" msgstr "" #: better-ads-manager.php:535 #@ better-studio msgid "Post Top Ad" msgstr "" #: better-ads-manager.php:620 #: better-ads-manager.php:724 #: includes/widgets/class-better-ads-widget.php:95 #@ better-studio msgid "Align" msgstr "" #: better-ads-manager.php:621 #: better-ads-manager.php:726 #@ better-studio msgid "Choose align of ad." msgstr "" #: better-ads-manager.php:625 #: better-ads-manager.php:729 #: includes/widgets/class-better-ads-widget.php:100 #@ better-studio msgid "Left" msgstr "" #: better-ads-manager.php:626 #: better-ads-manager.php:730 #: includes/widgets/class-better-ads-widget.php:101 #@ better-studio msgid "Center" msgstr "" #: better-ads-manager.php:627 #: better-ads-manager.php:731 #: includes/widgets/class-better-ads-widget.php:102 #@ better-studio msgid "Right" msgstr "" #: better-ads-manager.php:639 #@ better-studio msgid "Post Bottom Ad" msgstr "" #: better-ads-manager.php:741 #@ better-studio msgid "Custom CSS/JS" msgstr "" #: better-ads-manager.php:748 #@ better-studio msgid "Custom CSS Code" msgstr "" #: better-ads-manager.php:752 #@ better-studio msgid "Paste your CSS code, do not include any tags or HTML in the field. Any custom CSS entered here will override the theme CSS. In some cases, the !important tag may be needed." msgstr "" #: better-ads-manager.php:753 #@ better-studio msgid "Please <strong>do not</strong> put code inside <style></style> tags." msgstr "" #: better-ads-manager.php:756 #@ better-studio msgid "HTML/JS Code before </head>" msgstr "" #: better-ads-manager.php:758 #@ better-studio msgid "Please put js code inside <script></script> tags." msgstr "" #: better-ads-manager.php:761 #@ better-studio msgid "This code will be placed before </head> tag in html. Useful if you have an external script that requires it." msgstr "" #: better-ads-manager.php:778 #: better-ads-manager.php:779 #@ better-studio msgid "Better Ads Manager" msgstr "" #: better-ads-manager.php:780 #@ better-studio msgid "Options" msgstr "" #: better-ads-manager.php:789 #, php-format #@ better-studio msgid "%s Language Options." msgstr "" #: better-ads-manager.php:790 #@ better-studio msgid "All Languages Options." msgstr "" #: better-ads-manager.php:792 #, php-format #@ better-studio msgid "Reset %s Options" msgstr "" #: better-ads-manager.php:792 #@ better-studio msgid "Reset Options" msgstr "" #: better-ads-manager.php:793 #@ better-studio msgid "Reset All Options" msgstr "" #: better-ads-manager.php:795 #, php-format #@ better-studio msgid "Are you sure to reset %s options?" msgstr "" #: better-ads-manager.php:795 #@ better-studio msgid "Are you sure to reset options?" msgstr "" #: better-ads-manager.php:796 #@ better-studio msgid "Are you sure to reset all options?" msgstr "" #: better-ads-manager.php:798 #, php-format #@ better-studio msgid "Save %s Options" msgstr "" #: better-ads-manager.php:798 #@ better-studio msgid "Save Options" msgstr "" #: better-ads-manager.php:799 #@ better-studio msgid "Save All Options" msgstr "" #: better-ads-manager.php:801 #@ better-studio msgid "Are you sure to save all options? this will override specified options per languages" msgstr "" #: better-ads-manager.php:804 #@ better-studio msgctxt "Panel title" msgid "Better Ads Manager" msgstr "" #: better-ads-manager.php:805 #@ better-studio msgid "Manage your ads in better way!" msgstr "" #: better-ads-manager.php:824 #@ better-studio msgctxt "post type general name" msgid "Campaigns" msgstr "" #: better-ads-manager.php:825 #@ better-studio msgctxt "post type singular name" msgid "Campaign" msgstr "" #: better-ads-manager.php:826 #@ better-studio msgctxt "admin menu" msgid "Campaigns" msgstr "" #: better-ads-manager.php:827 #@ better-studio msgctxt "add new on admin bar" msgid "Campaigns" msgstr "" #: better-ads-manager.php:828 #@ better-studio msgctxt "campaign" msgid "Add New Campaign" msgstr "" #: better-ads-manager.php:829 #@ better-studio msgid "Add New Campaign" msgstr "" #: better-ads-manager.php:830 #@ better-studio msgid "New Campaign" msgstr "" #: better-ads-manager.php:831 #@ better-studio msgid "Edit Campaign" msgstr "" #: better-ads-manager.php:832 #@ better-studio msgid "View Campaign" msgstr "" #: better-ads-manager.php:833 #@ better-studio msgid "Campaigns" msgstr "" #: better-ads-manager.php:834 #@ better-studio msgid "Search Campaigns" msgstr "" #: better-ads-manager.php:835 #@ better-studio msgid "No campaigns found." msgstr "" #: better-ads-manager.php:836 #@ better-studio msgid "No campaigns found in Trash." msgstr "" #: better-ads-manager.php:852 #@ better-studio msgctxt "post type general name" msgid "Banners" msgstr "" #: better-ads-manager.php:853 #@ better-studio msgctxt "post type singular name" msgid "Banner" msgstr "" #: better-ads-manager.php:854 #@ better-studio msgctxt "admin menu" msgid "Banners" msgstr "" #: better-ads-manager.php:855 #@ better-studio msgctxt "add new on admin bar" msgid "Banners" msgstr "" #: better-ads-manager.php:856 #@ better-studio msgctxt "campaign" msgid "Add New Banner" msgstr "" #: better-ads-manager.php:857 #@ better-studio msgid "Add New Banner" msgstr "" #: better-ads-manager.php:858 #@ better-studio msgid "New Banner" msgstr "" #: better-ads-manager.php:859 #@ better-studio msgid "Edit Banner" msgstr "" #: better-ads-manager.php:860 #@ better-studio msgid "View Banner" msgstr "" #: better-ads-manager.php:861 #@ better-studio msgid "Banners" msgstr "" #: better-ads-manager.php:862 #@ better-studio msgid "Search Banner" msgstr "" #: better-ads-manager.php:863 #@ better-studio msgid "No banners found." msgstr "" #: better-ads-manager.php:864 #@ better-studio msgid "No banners found in Trash." msgstr "" #: better-ads-manager.php:894 #@ better-studio msgid "Ad" msgstr "" #: better-ads-manager.php:901 #@ better-studio msgid "Choose campaign for add." msgstr "" #: better-ads-manager.php:912 #@ better-studio msgid "Choose type of ad." msgstr "" #: better-ads-manager.php:917 #: better-ads-manager.php:922 #@ better-studio msgid "Adsense/Custom Code" msgstr "" #: better-ads-manager.php:918 #: better-ads-manager.php:932 #@ better-studio msgid "Image" msgstr "" #: better-ads-manager.php:924 #: better-ads-manager.php:934 #: better-ads-manager.php:956 #@ better-studio msgid "Paste your Google Adsense or any other ad code here." msgstr "" #: better-ads-manager.php:937 #@ better-studio msgid "Select or Upload Ad Image" msgstr "" #: better-ads-manager.php:938 #@ better-studio msgid "Select Image" msgstr "" #: better-ads-manager.php:939 #@ better-studio msgid "Upload Ad Image" msgstr "" #: better-ads-manager.php:940 #@ better-studio msgid "Remove Image" msgstr "" #: better-ads-manager.php:945 #@ better-studio msgid "Caption" msgstr "" #: better-ads-manager.php:947 #@ better-studio msgid "Optional caption that will be shown after ad." msgstr "" #: better-ads-manager.php:954 #@ better-studio msgid "Link" msgstr "" #: better-ads-manager.php:963 #@ better-studio msgid "Link Target" msgstr "" #: better-ads-manager.php:964 #@ better-studio msgid "Choose where To Open The link?" msgstr "" #: better-ads-manager.php:969 #@ better-studio msgid "_blank - in new window or tab" msgstr "" #: better-ads-manager.php:970 #@ better-studio msgid "_self - in the same frame as it was clicked" msgstr "" #: better-ads-manager.php:971 #@ better-studio msgid "_parent - in the parent frame" msgstr "" #: better-ads-manager.php:972 #@ better-studio msgid "_top - in the full body of the window" msgstr "" #: better-ads-manager.php:978 #@ better-studio msgid "Link Rel No Follow" msgstr "" #: better-ads-manager.php:979 #@ better-studio msgid "Do you want to add rel nofollow to your link?" msgstr "" #: better-ads-manager.php:983 #@ better-studio msgid "Yes" msgstr "" #: better-ads-manager.php:984 #@ better-studio msgid "No" msgstr "" #: better-ads-manager.php:989 #@ better-studio msgid "Enable on Desktop" msgstr "" #: better-ads-manager.php:993 #: better-ads-manager.php:1002 #: better-ads-manager.php:1011 #: includes/libs/better-framework/core/field-generator/fields/typography.php:54 #@ better-studio msgid "Enable" msgstr "" #: better-ads-manager.php:994 #: better-ads-manager.php:1003 #: better-ads-manager.php:1012 #: includes/libs/better-framework/core/field-generator/fields/typography.php:55 #@ better-studio msgid "Disable" msgstr "" #: better-ads-manager.php:998 #@ better-studio msgid "Enable on Tablet Portrait" msgstr "" #: better-ads-manager.php:1007 #@ better-studio msgid "Enable on Phone" msgstr "" #: better-ads-manager.php:1021 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:759 #@ better-studio msgid "Advanced" msgstr "" #: better-ads-manager.php:1029 #@ better-studio msgid "Custom Class" msgstr "" #: better-ads-manager.php:1033 #@ better-studio msgid "This classes will be added to banner wrapper tag.<br>Separate classes with space." msgstr "" #: better-ads-manager.php:1037 #@ better-studio msgid "Custom ID" msgstr "" #: better-ads-manager.php:1041 #@ better-studio msgid "This id will be added to banner wrapper tag." msgstr "" #: better-ads-manager.php:1046 #@ better-studio msgid "Custom CSS" msgstr "" #: better-ads-manager.php:1050 #@ better-studio msgid "Paste your CSS code, do not include any tags or HTML in the field. Any custom CSS entered here will override the default CSS. In some cases, the !important tag may be needed." msgstr "" #: better-ads-manager.php:1055 #@ better-studio msgid "Better Banner" msgstr "" #: better-ads-manager.php:1078 #@ better-studio msgid "Campaign Note & Description" msgstr "" #: better-ads-manager.php:1086 #@ better-studio msgid "Better Campaign Options" msgstr "" #: better-ads-manager.php:1135 #@ better-studio msgid "Please select type of ad." msgstr "" #: better-ads-manager.php:1149 #@ better-studio msgid "Please select a campaign." msgstr "" #: better-ads-manager.php:1201 #@ better-studio msgid "Selected campaign have not any active ad." msgstr "" #: better-ads-manager.php:1216 #@ better-studio msgid "Please select a banner." msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:324 #@ better-studio msgid "Reset Settings" msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:325 #@ better-studio msgid "Reset All Settings" msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:328 #@ better-studio msgid "Are you sure to reset settings?" msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:329 #@ better-studio msgid "Are you sure to reset all settings?" msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:332 #@ better-studio msgid "Save Settings" msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:333 #@ better-studio msgid "Save All Settings" msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:337 #@ better-studio msgid "Are you sure to save all settings? this will override specified settings per languages" msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:411 #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:439 #@ better-studio msgid "Options saved." msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:412 #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:440 #@ better-studio msgid "Pre-defined Skin and Styles updated." msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:419 #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:447 #@ better-studio msgid "Error happened in saving option." msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:576 #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:617 #@ better-studio msgid "Options Reset to default." msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:585 #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:626 #@ better-studio msgid "An error occurred while resetting options." msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:706 #@ better-studio msgid "Imported data is not correct or was corrupted." msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:713 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:927 #@ better-studio msgid "Imported data is not for this panel." msgstr "" #: includes/libs/better-framework/admin-panel/class-bf-admin-panel.php:738 #@ better-studio msgid "Theme Options successfully imported." msgstr "" #: includes/libs/better-framework/admin-panel/templates/default/main.php:45 #@ better-studio msgid "An Error Occurred!" msgstr "" #: includes/libs/better-framework/class-better-framework.php:862 #@ better-studio msgid "Do you really wish to override your current settings?" msgstr "" #: includes/libs/better-framework/class-better-framework.php:976 #: includes/libs/better-framework/class-better-framework.php:989 #@ better-studio msgid "Security Error!" msgstr "" #: includes/libs/better-framework/class-better-framework.php:1042 #@ better-studio msgid "An error occurred while doing action." msgstr "" #: includes/libs/better-framework/core/class-bf-posts.php:112 #@ better-studio msgid "Pages:" msgstr "" #: includes/libs/better-framework/core/class-bf-posts.php:352 #@ better-studio msgid "Next Post" msgstr "" #: includes/libs/better-framework/core/class-bf-posts.php:418 #@ better-studio msgid "Previous Post" msgstr "" #: includes/libs/better-framework/core/custom-css/class-bf-front-end-css.php:295 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:102 #@ better-studio msgid "Theme Fonts" msgstr "" #: includes/libs/better-framework/core/custom-css/class-bf-front-end-css.php:302 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:82 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:567 #@ better-studio msgid "Custom Fonts" msgstr "" #: includes/libs/better-framework/core/custom-css/class-bf-front-end-css.php:424 #@ better-studio msgid "Terms Custom CSS" msgstr "" #: includes/libs/better-framework/core/custom-css/class-bf-front-end-css.php:541 #@ better-studio msgid "Menus Custom CSS" msgstr "" #: includes/libs/better-framework/core/custom-css/class-bf-front-end-css.php:633 #@ better-studio msgid "Panel Options Custom CSS" msgstr "" #: includes/libs/better-framework/core/custom-css/class-bf-front-end-css.php:759 #@ better-studio msgid "Widgets Custom CSS" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:12 #: includes/libs/better-framework/core/field-generator/fields/background_image.php:13 #: includes/libs/better-framework/core/field-generator/fields/background_image.php:26 #: includes/libs/better-framework/core/field-generator/fields/image_upload.php:15 #: includes/libs/better-framework/core/field-generator/fields/media.php:8 #: includes/libs/better-framework/core/field-generator/fields/media.php:9 #: includes/libs/better-framework/core/field-generator/fields/media_image.php:10 #: includes/libs/better-framework/core/field-generator/fields/media_image.php:11 #: includes/libs/better-framework/core/field-generator/fields/media_image.php:13 #: includes/libs/better-framework/vc-extend/fields/background_image.php:12 #: includes/libs/better-framework/vc-extend/fields/background_image.php:13 #: includes/libs/better-framework/vc-extend/fields/background_image.php:25 #@ better-studio msgid "Upload" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:37 #: includes/libs/better-framework/core/field-generator/fields/media_image.php:14 #: includes/libs/better-framework/vc-extend/fields/background_image.php:35 #@ better-studio msgid "Remove" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:61 #@ better-studio msgid "Full Background Image" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:63 #@ better-studio msgid "Full Cover" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:64 #@ better-studio msgid "Fit Cover" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:65 #@ better-studio msgid "Parallax" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:74 #@ better-studio msgid "Repeated Background Image" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:76 #: includes/libs/better-framework/vc-extend/fields/background_image.php:49 #@ better-studio msgid "Repeat Horizontal and Vertical - Pattern" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:77 #: includes/libs/better-framework/vc-extend/fields/background_image.php:51 #@ better-studio msgid "Repeat Horizontal" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:78 #: includes/libs/better-framework/vc-extend/fields/background_image.php:52 #@ better-studio msgid "Repeat Vertical" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:79 #: includes/libs/better-framework/vc-extend/fields/background_image.php:53 #@ better-studio msgid "No Repeat" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:87 #@ better-studio msgid "Static Background Image Position" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:89 #@ better-studio msgid "Top Left" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:90 #@ better-studio msgid "Top Center" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:91 #@ better-studio msgid "Top Right" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:92 #@ better-studio msgid "Left Center" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:93 #@ better-studio msgid "Center Center" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:94 #@ better-studio msgid "Right Center" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:95 #@ better-studio msgid "Bottom Left" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:96 #@ better-studio msgid "Bottom Center" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/background_image.php:97 #@ better-studio msgid "Bottom Right" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/border.php:24 #@ better-studio msgid "Top Border:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/border.php:35 #@ better-studio msgid "Right Border:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/border.php:46 #@ better-studio msgid "Bottom Border:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/border.php:57 #@ better-studio msgid "Left Border:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/export.php:19 #@ better-studio msgid "Download Backup" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/icon_select.php:14 #: includes/libs/better-framework/core/field-generator/fields/icon_select.php:24 #@ better-studio msgid "Choose an Icon" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/icon_select.php:25 #@ better-studio msgid "No Icon" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/icon_select.php:42 #@ better-studio msgid "All: " msgstr "" #: includes/libs/better-framework/core/field-generator/fields/icon_select.php:42 #@ better-studio msgid "(479)" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/icon_select.php:57 #@ better-studio msgid "Search: " msgstr "" #: includes/libs/better-framework/core/field-generator/fields/image_select.php:11 #@ better-studio msgid "chose one..." msgstr "" #: includes/libs/better-framework/core/field-generator/fields/import.php:13 #@ better-studio msgid "Import" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:10 #@ better-studio msgid "Width:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:21 #@ better-studio msgid "Dotted" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:22 #@ better-studio msgid "Dashed" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:23 #@ better-studio msgid "Solid" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:24 #@ better-studio msgid "Double" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:25 #@ better-studio msgid "Groove" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:26 #@ better-studio msgid "Ridge" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:27 #@ better-studio msgid "Inset" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/partial-border.php:28 #@ better-studio msgid "Outset" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/repeater.php:12 #@ better-studio msgid "Add" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/repeater.php:18 #@ better-studio msgid "Delete" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/repeater.php:24 #@ better-studio msgid "Item" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/switch.php:5 #: includes/libs/better-framework/vc-extend/fields/vc-switchery.php:6 #@ better-studio msgid "On" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/switch.php:11 #: includes/libs/better-framework/vc-extend/fields/vc-switchery.php:12 #@ better-studio msgid "Off" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:70 #@ better-studio msgid "Font Family:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:107 #@ better-studio msgid "Font Weight:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:118 #@ better-studio msgid "Font Character Set:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:149 #@ better-studio msgid "Text Align:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:189 #@ better-studio msgid "Text Transform:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:230 #@ better-studio msgid "Font Size:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:258 #@ better-studio msgid "Line Height:" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:260 #@ better-studio msgid "Pixel" msgstr "" #: includes/libs/better-framework/core/field-generator/fields/typography.php:286 #@ better-studio msgid "Color:" msgstr "" #: includes/libs/better-framework/core/field-generator/templates/typography.php:55 #@ better-studio msgid "ABCDEF...123" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:113 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:108 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:134 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:493 #@ better-studio msgid "Ultra-Light 100" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:114 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:109 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:135 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:494 #@ better-studio msgid "Book 300" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:115 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:110 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:136 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:495 #@ better-studio msgid "Normal 400" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:116 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:111 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:137 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:496 #@ better-studio msgid "Medium 500" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:117 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:112 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:138 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:497 #@ better-studio msgid "Bold 700" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:118 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:113 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:139 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:498 #@ better-studio msgid "Ultra-Bold 900" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:119 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:114 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:140 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:499 #@ better-studio msgid "Ultra-Light 100 Italic" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:120 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:115 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:141 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:500 #@ better-studio msgid "Book 300 Italic" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:121 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:116 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:142 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:501 #@ better-studio msgid "Normal 400 Italic" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:122 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:117 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:143 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:502 #@ better-studio msgid "Medium 500 Italic" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:123 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:118 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:144 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:503 #@ better-studio msgid "Bold 700 Italic" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:124 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:119 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:145 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:504 #@ better-studio msgid "Ultra-Bold 900 Italic" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-custom-fonts-helper.php:144 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:138 #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-theme-fonts-helper.php:164 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:506 #@ better-studio msgid "Unknown" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-font-stacks-helper.php:76 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:652 #@ better-studio msgid "Font Stacks" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fm-google-fonts-helper.php:70 #@ better-studio msgid "Google Fonts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:574 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:658 #@ better-studio msgid "Font Name" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:583 #@ better-studio msgid "Font .woff" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:584 #@ better-studio msgid "Upload the .woff font file." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:585 #@ better-studio msgid "Upload .woff" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:594 #@ better-studio msgid "Font .ttf" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:595 #@ better-studio msgid "Upload the .ttf font file." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:596 #@ better-studio msgid "Upload .ttf" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:605 #@ better-studio msgid "Font .svg" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:606 #@ better-studio msgid "Upload the .svg font file." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:607 #@ better-studio msgid "Upload .svg" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:616 #@ better-studio msgid "Font .eot" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:617 #@ better-studio msgid "Upload the .eot font file." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:618 #@ better-studio msgid "Upload .eot" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:627 #@ better-studio msgid "Upload Custom Fonts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:633 #, php-format #@ better-studio msgid "Font %i%" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:640 #@ better-studio msgid "Add New Font" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:641 #@ better-studio msgid "Delete Font" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:642 #@ better-studio msgid "Custom Font" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:667 #@ better-studio msgid "Font Stack" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:676 #@ better-studio msgid "Web Safe CSS Font Stacks" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:747 #@ better-studio msgid "Add New Font Stack" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:748 #@ better-studio msgid "Delete Font Stack" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:749 #@ better-studio msgid "CSS Font Stack" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:765 #@ better-studio msgid "Google Fonts Protocol" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:767 #@ better-studio msgid "Select protocol of fonts link for Google Fonts." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:772 #@ better-studio msgid "HTTP" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:773 #@ better-studio msgid "HTTPs" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:774 #@ better-studio msgid "Relative to Site" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:778 #@ better-studio msgid "Typography Field Preview Texts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:783 #@ better-studio msgid "Heading Text" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:785 #@ better-studio msgid "This Is a Test Title Text!" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:789 #@ better-studio msgid "Paragraph Text" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:791 #@ better-studio msgid "Grumpy wizards make toxic brew for the evil Queen and Jack. One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:795 #@ better-studio msgid "Divided Text" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:797 #@ better-studio msgid "" "a b c d e f g h i j k l m n o p q r s t u v w x y z\n" "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\n" "0123456789 (!@#$%&.,?:;)" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:809 #@ better-studio msgid "Backup & Restore" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:816 #@ better-studio msgid "Backup / Export" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:821 #@ better-studio msgid "This allows you to create a backup of your translation. Please note, it will not backup anything else." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:824 #@ better-studio msgid "Restore / Import" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:828 #@ better-studio msgid "<strong>It will override your current translation!</strong> Please make sure to select a valid translation file." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:840 #@ better-studio msgctxt "Panel title" msgid "Font Manager" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:841 #@ better-studio msgid "Upload custom fonts and add CSS font stacks." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:845 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:848 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:849 #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:851 #@ better-studio msgid "Font Manager" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:858 #, php-format #@ better-studio msgid "%s Language Fonts." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:859 #@ better-studio msgid "All Languages Fonts." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:861 #, php-format #@ better-studio msgid "Reset %s Fonts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:861 #@ better-studio msgid "Reset Fonts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:862 #@ better-studio msgid "Reset All Fonts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:864 #, php-format #@ better-studio msgid "Are you sure to reset %s fonts?" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:864 #@ better-studio msgid "Are you sure to reset fonts?" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:865 #@ better-studio msgid "Are you sure to reset all fonts?" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:867 #, php-format #@ better-studio msgid "Save %s Fonts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:867 #@ better-studio msgid "Save Fonts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:868 #@ better-studio msgid "Save All Fonts" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:870 #@ better-studio msgid "Are you sure to save all fonts? this will override specified fonts per languages" msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:898 #@ better-studio msgid "Font manager reset to default." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:900 #@ better-studio msgid "An error occurred while resetting font manager." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:925 #@ better-studio msgid "Font manager options imported successfully." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:928 #@ better-studio msgid "Imported translation is not for fonts manager." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:930 #@ better-studio msgid "An error occurred while importing font manager options." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:951 #@ better-studio msgid "Fonts saved." msgstr "" #: includes/libs/better-framework/core/fonts-manager/class-bf-fonts-manager.php:953 #@ better-studio msgid "An error occurred while saving fonts." msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:141 #@ better-studio msgid "Browse:" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:142 #@ better-studio msgid "Home" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:143 #@ better-studio msgid "404 Not Found" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:144 #@ better-studio msgid "Archives" msgstr "" #. Translators: %s is the search query. The HTML entities are opening and closing curly quotes. #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:146 #, php-format #@ better-studio msgid "Search results for “%s”" msgstr "" #. Translators: %s is the page number. #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:148 #, php-format #@ better-studio msgid "Page %s" msgstr "" #. Translators: Minute archive title. %s is the minute time format. #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:150 #, php-format #@ better-studio msgid "Minute %s" msgstr "" #. Translators: Weekly archive title. %s is the week date format. #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:152 #, php-format #@ better-studio msgid "Week %s" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:698 #@ better-studio msgctxt "minute and hour archives time format" msgid "g:i a" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:717 #@ better-studio msgctxt "minute archives time format" msgid "i" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:735 #@ better-studio msgctxt "hour archives time format" msgid "g a" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:752 #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:782 #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:810 #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:838 #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:1030 #@ better-studio msgctxt "yearly archives date format" msgid "Y" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:753 #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:811 #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:1034 #@ better-studio msgctxt "monthly archives date format" msgid "F" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:754 #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:1038 #@ better-studio msgctxt "daily archives date format" msgid "j" msgstr "" #: includes/libs/better-framework/libs/class-bf-breadcrumb.php:783 #@ better-studio msgctxt "weekly archives date format" msgid "W" msgstr "" #: includes/libs/better-framework/taxonomy/class-bf-taxonomy-front-end-generator.php:73 #: includes/libs/better-framework/user-metabox/class-bf-user-metabox-core.php:191 #@ better-studio msgid "Better Options" msgstr "" #: includes/libs/better-framework/vc-extend/fields/background_image.php:50 #@ better-studio msgid "Fully Cover Background - Photo" msgstr "" #: includes/libs/better-framework/widget/class-bf-widgets-general-fields.php:58 #@ better-studio msgid "Widget Title Color" msgstr "" #: includes/libs/better-framework/widget/class-bf-widgets-general-fields.php:67 #@ better-studio msgid "Widget Title Background Color" msgstr "" #: includes/widgets/class-better-ads-widget.php:24 #@ better-studio msgid "Choose simple banner or campaign.." msgstr "" #: includes/widgets/class-better-ads-widget.php:110 #@ better-studio msgid "Better Ads" msgstr "" #: includes/widgets/class-better-ads-widget.php:111 #@ better-studio msgid "Show campaign and banners." msgstr "" PK ���[;)z�� � gulpfile.jsnu �[��� var gulp = require('gulp'), cleanCSS = require('gulp-minify-css'), rename = require('gulp-rename'), uglify = require('gulp-uglify'); gulp.task('styles', function () { return gulp.src(['./css/*.css', '!./css/*.min.css']) .pipe(cleanCSS({ keepSpecialComments: 1, level: 2 })) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest(function (file) { return file.base; })); }); gulp.task('scripts', function () { return gulp.src(['./js/*.js', '!./js/*.min.js']) .pipe(uglify()) .pipe(rename({suffix: '.min'})) .pipe(gulp.dest(function (file) { return file.base; })); }); gulp.task('watch', function () { gulp.watch(['./css/*.css', '!./css/*.min.css'], ['styles']); gulp.watch(['./js/*.js', '!./js/*.min.js'], ['scripts']); }); gulp.task('default', gulp.series('styles', 'scripts')); PK ���[ D6, , css/bam.cssnu �[��� /* 1. =>Base & Helpers 2. =>Ads Container 3. =>Ad Container 4. =>Columns */ /** * 1. =>Base & Helpers **************************************************************/ .rtl .bsac .bsac-container { direction: ltr; } .bsac-clearfix:before, .bsac-clearfix:after { content: ""; display: table; } .bsac-clearfix:after { clear: both; } .bsac-clearfix { zoom: 1; } .bsac-caption { display: block; color: #bbbbbb; font-size: 12px; line-height: 24px; margin: 0 !important; padding: 0; } .bsac-container a { text-decoration: none !important; } .bsac-type-code br { display: none; } .bsac-type-dfp > div { display: inline-block; } .mce-content-body .bsac { margin-bottom: 0 !important; } .mce-content-body .bsac-hide-on-desktop, .mce-content-body .bsac-hide-on-tablet-portrait, .mce-content-body .bsac-hide-on-tablet-landscape, .mce-content-body .bsac-hide-on-phone { display: block !important; } @media (min-width: 992px) and (max-width: 1199px) { .bs-visible-md { display: block !important; } } @media (max-width: 991px) { .bs-visible-sm { display: block !important; } } @media (min-width: 1200px) { .bs-visible-lg { display: block !important; } } @media (max-width: 991px) { .bs-hidden-sm { display: none !important; } } @media (min-width: 992px) and (max-width: 1199px) { .bs-hidden-md { display: none !important; } } @media (max-width: 768px) { .bs-hidden-xs, .bs-hidden-sm { display: none !important; } } @media (min-width: 1200px) { .bs-hidden-lg { display: none !important; } } .better-ads-post-top { margin-bottom: 20px; } .better-ads-post-bottom { margin-top: 20px; margin-bottom: 0; } .bsac-empty-note { background: #f7f7f7; padding: 25px 20px; border: 2px dashed #d2d2d2; } .bsac-empty-note a { text-decoration: none; color: #888888; font-size: 16px; } .bsac-empty-note a:hover { color: #0080ce; text-decoration: underline; } .bsac:empty { display: none; } .widget_better-ads:empty { display: none; } /** * 2. =>Ads Container **************************************************************/ .bsac.bsac-align-center { text-align: center; } .bsac.bsac-align-right { text-align: right; } .bsac.bsac-align-left { text-align: left; } @media (min-width: 1140px) { .bsac-hide-on-desktop { display: none; } } @media (min-width: 1019px) and (max-width: 1140px) { .bsac-hide-on-tablet-landscape { display: none; } } @media (min-width: 768px) and (max-width: 1018px) { .bsac-hide-on-tablet-portrait { display: none; } } @media (max-width: 767px) { .bsac-hide-on-phone { display: none; } } .bsac.bsac-float-left { float: left; margin-right: 30px; } .bsac.bsac-float-center .bsac{ text-align: center; } .bsac.bsac-float-right { float: right; margin-left: 30px; } @media (max-width: 767px) { .bsac.bsac-float-left, .bsac.bsac-float-right { float: none; margin-left: auto; margin-right: auto; text-align: center; } } .rtl .bsac.bsac-float-right { float: right; margin-left: 20px; margin-right: auto; } .rtl .bsac.bsac-float-left { float: left; margin-right: 20px; margin-left: auto; } /** * 3. =>Ad Container **************************************************************/ .bsac .bsac-container { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; margin-bottom: 10px; } .bsac .bsac-container.bsac-type-code object, .bsac .bsac-container.bsac-type-code embed, .bsac .bsac-container.bsac-type-image img { max-width: 100%; } .bsac .bsac-container.bsac-type-image .ad-caption { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: inline-block; width: 100%; font-size: 12px; } /** * 4. =>Columns **************************************************************/ /* 2 column */ .bsac.bsac-column-2 .bsac-container { float: left; width: 50%; } .bsac.bsac-column-2 .bsac-container:nth-of-type(odd) { padding-right: 5px; clear: left; } .bsac.bsac-column-2 .bsac-container:nth-of-type(even) { padding-left: 5px; } .rtl .bsac.bsac-column-2 .bsac-container { float: right; } .rtl .bsac.bsac-column-2 .bsac-container:nth-of-type(odd) { padding-left: 5px; clear: right; padding-right: 0; } .rtl .bsac.bsac-column-2 .bsac-container:nth-of-type(even) { padding-right: 5px; padding-left: 0; } /* 3 column */ .bsac.bsac-column-3 .bsac-container { float: left; width: 33.3333%; } .bsac.bsac-column-3 .bsac-container:nth-child( 3n-1 ) { padding: 0 3px; } .bsac.bsac-column-3 .bsac-container:nth-child( 3n-2 ) { padding-right: 6px; clear: left; } .bsac.bsac-column-3 .bsac-container:nth-child( 3n+3 ) { padding-left: 6px; } .rtl .bsac.bsac-column-3 .bsac-container { float: right; } .rtl .bsac.bsac-column-3 .bsac-container:nth-child( 3n-2 ) { padding-left: 6px; clear: right; padding-right: 0; } .rtl .bsac.bsac-column-3 .bsac-container:nth-child( 3n+3 ) { padding-right: 6px; padding-left: 0; } @media only screen and (max-width: 780px) { .bsac.bsac-column-3 .bsac-container { float: left; width: 50%; } .bsac.bsac-column-3 .bsac-container:nth-of-type(odd) { padding-right: 5px; clear: left; } .bsac.bsac-column-3 .bsac-container:nth-of-type(even) { padding-left: 5px; } .rtl .bsac.bsac-column-3 .bsac-container { float: right; } .rtl .bsac.bsac-column-3 .bsac-container:nth-of-type(odd) { padding-left: 5px; clear: right; padding-right: 0; } .rtl .bsac.bsac-column-3 .bsac-container:nth-of-type(even) { padding-right: 5px; padding-left: 0; } } @media only screen and (max-width: 600px) { .bsac.bsac-column-3 .bsac-container, .bsac.bsac-column-2 .bsac-container { float: none !important; clear: none !important; width: 100% !important; padding-right: 0 !important; padding-left: 0 !important; margin-bottom: 15px !important; } .bsac.bsac-column-3 .bsac-container:last-child, .bsac.bsac-column-2 .bsac-container:last-child { margin-bottom: 0 !important; } } .bsac-ll > ins { display: flex !important; align-items: center; justify-content: center; background: #f3f3f3; text-decoration: none !important; } .bsac-ll > ins > span { max-width: 50%; } .bsac.bsac-align-center .bsac-ll > ins { float: none; margin-right: auto; margin-left: auto; } .bsac.bsac-align-right .bsac-ll > ins { float: right; } .bsac.bsac-align-left .bsac-ll > ins { float: left; } PK ���[�^If� � $ css/better-ads-manager-admin.min.cssnu �[��� .better-ads-table .td-size,.responsive-field-container .bf-heading{display:none}#adminmenu li#toplevel_page_better-studio-fonts-manager+#toplevel_page_better-studio-better-ads-manager,#adminmenu li#toplevel_page_better-studio-rebuild-thumbnails+#toplevel_page_better-studio-better-ads-manager{margin-top:-10px;margin-bottom:10px}.bf-section-repeater-option[data-id=ad_post_inline]>.bf-explain{margin-top:-15px}#better-ads .vc_element-icon,.wpb_better-ads .vc_element-icon{width:60px!important;height:44px!important;background:url(../images/vc-better-ads.png)}#better-ads{padding-left:78px}#better-ads .vc_element-icon{top:14px}.better-ads-table{width:100%;padding:0;border-collapse:collapse}.better-ads-table thead{background:#f3f3f3;border:1px solid #dedede}.better-ads-table thead th{text-align:left;padding:10px 11px 9px;border:none;border-bottom:1px solid #dedede;font-size:12px;text-transform:uppercase}.better-ads-table td{padding:10px;border-bottom:1px solid #ececec}.better-ads-table tr:last-child td{padding-bottom:0;border-bottom:none}.pre-resp{border-bottom:none!important;padding-bottom:8px!important}.bf-section-container.bf-metabox.responsive-field-container .bf-section .bf-controls{width:100%}.better-ads-table .td-device,.better-ads-table .td-show,.better-ads-table .td-size{width:50%}.better-ads-table.show-sizes .td-device,.better-ads-table.show-sizes .td-show,.better-ads-table.show-sizes .td-size{display:table-cell;width:33.333%}.bf-section-container.bf-metabox.fallback-code-field .bf-section{padding-bottom:10px;border-bottom:none}.bf-section-container .bam-image_format img{border-width:3px!important;border-radius:3px}.bf-section-container .bam-image_type img{border-width:2px!important;border-radius:3px}.wp-list-table .bsacadformat,.wp-list-table .bsacadtype{display:inline-block;padding:1px 6px;background:#828282;border-radius:3px;font-size:12px;color:#fff;margin-right:5px}.wp-list-table .bsacadformat .fa,.wp-list-table .bsacadtype .fa{min-width:14px;text-align:center}.wp-list-table .bsacadformat.bsacadformatnormal{background:#02a219}.wp-list-table .bsacadformat.bsacadformatamp{background-color:#0379C4}.wp-list-table .bsacadtype.bsacadtypeadsense{background:#e43b31}.wp-list-table .bsacadtype.bsacadtypeimage{background:#00aabf}.wp-list-table .bsacadtype.bsacadtypecode{background:#e431ca}.wp-list-table .bsacadtype.bsacadtypedfp{background:#29d656}.wp-list-table .bsacadformat:last-child,.wp-list-table .bsacadtype:last-child{margin-right:0}.rtl .wp-list-table .bsacadformat,.rtl .wp-list-table .bsacadtype{margin-right:auto;margin-left:5px}.rtl .wp-list-table .bsacadformat:last-child,.rtl .wp-list-table .bsacadtype:last-child{margin-right:auto;margin-left:0}.wp-list-table .bsacshortcodeempty{display:inline-block;padding:1px 6px;background:#ec0000;border-radius:3px;font-size:12px;color:#fff}.wp-list-table .bsacshortcodecopy{border:1px solid #cdcdcd;background:#eee;color:#333;padding:3px 6px;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;display:block;font-size:11px;border-radius:3px}.wp-list-table .bsacadcamp{display:inline-block;padding:1px 6px;background:#e3e3e3;border-radius:3px;font-size:12px;color:#303030;margin-right:5px}.fields-group .fields-group-title-container .fields-group-title .ad-state-indicator{position:absolute;right:60px;top:-1px;font-size:12px}.rtl #better-ads{padding-right:78px;padding-left:0}.rtl .better-ads-table thead th{text-align:right}.rtl .fields-group .fields-group-title-container .fields-group-title .ad-state-indicator{left:60px;right:auto}PK ���[�9�� css/better-ads-manager-admin.cssnu �[��� #adminmenu li#toplevel_page_better-studio-fonts-manager + #toplevel_page_better-studio-better-ads-manager, #adminmenu li#toplevel_page_better-studio-rebuild-thumbnails + #toplevel_page_better-studio-better-ads-manager{ margin-top: -10px; margin-bottom: 10px; } .bf-section-repeater-option[data-id=ad_post_inline] > .bf-explain{ margin-top: -15px; } #better-ads .vc_element-icon, .wpb_better-ads .vc_element-icon{ width: 60px !important; height: 44px !important; } #better-ads{ padding-left: 78px; } #better-ads .vc_element-icon{ top: 14px; } #better-ads .vc_element-icon, .wpb_better-ads .vc_element-icon { background: url("../images/vc-better-ads.png"); } .better-ads-table{ width: 100%; padding: 0; border-collapse: collapse; } .better-ads-table thead{ background: #f3f3f3; border: 1px solid #dedede; } .better-ads-table thead th{ text-align: left; padding: 10px 11px 9px; border: none; border-bottom: 1px solid #dedede; font-size: 12px; text-transform: uppercase; } .better-ads-table td{ padding: 10px; border-bottom: 1px solid #ececec; } .better-ads-table tr:last-child td{ padding-bottom: 0; border-bottom: none; } .pre-resp { border-bottom: none !important; padding-bottom: 8px !important; } .responsive-field-container .bf-heading { display: none; } .bf-section-container.bf-metabox.responsive-field-container .bf-section .bf-controls { width: 100%; } .better-ads-table .td-show, .better-ads-table .td-device, .better-ads-table .td-size{ width: 50%; } .better-ads-table .td-size{ display: none; } .better-ads-table.show-sizes .td-show, .better-ads-table.show-sizes .td-device, .better-ads-table.show-sizes .td-size{ display: table-cell; width: 33.333%; } .bf-section-container.bf-metabox.fallback-code-field .bf-section{ padding-bottom: 10px; border-bottom: none; } .bf-section-container .bam-image_format img { border-width: 3px !important; border-radius: 3px; } .bf-section-container .bam-image_type img { border-width: 2px !important; border-radius: 3px; } .wp-list-table .bsacadtype, .wp-list-table .bsacadformat{ display: inline-block; padding: 1px 6px; background: #828282; border-radius: 3px; font-size: 12px; color: #fff; margin-right: 5px; } .wp-list-table .bsacadtype .fa, .wp-list-table .bsacadformat .fa{ min-width: 14px; text-align: center; } .wp-list-table .bsacadformat.bsacadformatnormal{ background: #02a219; } .wp-list-table .bsacadformat.bsacadformatamp{ background-color: #0379C4; } .wp-list-table .bsacadtype.bsacadtypeadsense{ background: #e43b31; } .wp-list-table .bsacadtype.bsacadtypeimage{ background: #00aabf; } .wp-list-table .bsacadtype.bsacadtypecode{ background: #e431ca; } .wp-list-table .bsacadtype.bsacadtypedfp{ background: #29d656; } .wp-list-table .bsacadtype:last-child, .wp-list-table .bsacadformat:last-child{ margin-right: 0; } .rtl .wp-list-table .bsacadtype, .rtl .wp-list-table .bsacadformat{ margin-right: auto; margin-left: 5px; } .rtl .wp-list-table .bsacadtype:last-child, .rtl .wp-list-table .bsacadformat:last-child{ margin-right: auto; margin-left: 0; } .wp-list-table .bsacshortcodeempty{ display: inline-block; padding: 1px 6px; background: #ec0000; border-radius: 3px; font-size: 12px; color: #fff; } .wp-list-table .bsacshortcodecopy{ border: 1px solid #cdcdcd; background: #eee; color: #333; padding: 3px 6px; -webkit-user-select: all; -moz-user-select: all; -ms-user-select: all; user-select: all; display: block; font-size: 11px; border-radius: 3px; } .wp-list-table .bsacadcamp { display: inline-block; padding: 1px 6px; background: #e3e3e3; border-radius: 3px; font-size: 12px; color: #303030; margin-right: 5px; } /* Labels */ .fields-group .fields-group-title-container .fields-group-title .ad-state-indicator { position: absolute; right: 60px; top: -1px; font-size: 12px; } /* RTL FIX */ .rtl #better-ads { padding-right: 78px; padding-left: 0; } .rtl .better-ads-table thead th { text-align: right; } .rtl .fields-group .fields-group-title-container .fields-group-title .ad-state-indicator { left: 60px; right: auto; } PK ���[�GI�6 6 css/bam.min.cssnu �[��� .rtl .bsac .bsac-container{direction:ltr}.bsac-clearfix:after,.bsac-clearfix:before{content:"";display:table}.bsac-clearfix:after{clear:both}.bsac-clearfix{zoom:1}.bsac-caption{display:block;color:#bbb;font-size:12px;line-height:24px;margin:0!important;padding:0}.bsac-type-code br,.bsac:empty,.widget_better-ads:empty{display:none}.bsac-container a{text-decoration:none!important}.bsac-type-dfp>div{display:inline-block}.mce-content-body .bsac{margin-bottom:0!important}.mce-content-body .bsac-hide-on-desktop,.mce-content-body .bsac-hide-on-phone,.mce-content-body .bsac-hide-on-tablet-landscape,.mce-content-body .bsac-hide-on-tablet-portrait{display:block!important}@media (min-width:992px) and (max-width:1199px){.bs-visible-md{display:block!important}}@media (max-width:991px){.bs-visible-sm{display:block!important}}@media (min-width:1200px){.bs-visible-lg{display:block!important}.bs-hidden-lg{display:none!important}}@media (max-width:991px){.bs-hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.bs-hidden-md{display:none!important}}@media (max-width:768px){.bs-hidden-sm,.bs-hidden-xs{display:none!important}}.better-ads-post-top{margin-bottom:20px}.better-ads-post-bottom{margin-top:20px;margin-bottom:0}.bsac-empty-note{background:#f7f7f7;padding:25px 20px;border:2px dashed #d2d2d2}.bsac-empty-note a{text-decoration:none;color:#888;font-size:16px}.bsac-empty-note a:hover{color:#0080ce;text-decoration:underline}.bsac.bsac-align-center{text-align:center}.bsac.bsac-align-right{text-align:right}.bsac.bsac-align-left{text-align:left}@media (min-width:1140px){.bsac-hide-on-desktop{display:none}}@media (min-width:1019px) and (max-width:1140px){.bsac-hide-on-tablet-landscape{display:none}}@media (min-width:768px) and (max-width:1018px){.bsac-hide-on-tablet-portrait{display:none}}.bsac.bsac-float-left{float:left;margin-right:30px}.bsac.bsac-float-center .bsac{text-align:center}.bsac.bsac-float-right{float:right;margin-left:30px}@media (max-width:767px){.bsac-hide-on-phone{display:none}.bsac.bsac-float-left,.bsac.bsac-float-right{float:none;margin-left:auto;margin-right:auto;text-align:center}}.rtl .bsac.bsac-float-right{float:right;margin-left:20px;margin-right:auto}.rtl .bsac.bsac-float-left{float:left;margin-right:20px;margin-left:auto}.bsac .bsac-container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:10px}.bsac .bsac-container.bsac-type-code embed,.bsac .bsac-container.bsac-type-code object,.bsac .bsac-container.bsac-type-image img{max-width:100%}.bsac .bsac-container.bsac-type-image .ad-caption{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:inline-block;width:100%;font-size:12px}.bsac.bsac-column-2 .bsac-container{float:left;width:50%}.bsac.bsac-column-2 .bsac-container:nth-of-type(odd){padding-right:5px;clear:left}.bsac.bsac-column-2 .bsac-container:nth-of-type(even){padding-left:5px}.rtl .bsac.bsac-column-2 .bsac-container{float:right}.rtl .bsac.bsac-column-2 .bsac-container:nth-of-type(odd){padding-left:5px;clear:right;padding-right:0}.rtl .bsac.bsac-column-2 .bsac-container:nth-of-type(even){padding-right:5px;padding-left:0}.bsac.bsac-column-3 .bsac-container{float:left;width:33.3333%}.bsac.bsac-column-3 .bsac-container:nth-child( 3n-1 ){padding:0 3px}.bsac.bsac-column-3 .bsac-container:nth-child( 3n-2 ){padding-right:6px;clear:left}.bsac.bsac-column-3 .bsac-container:nth-child( 3n+3 ){padding-left:6px}.rtl .bsac.bsac-column-3 .bsac-container{float:right}.rtl .bsac.bsac-column-3 .bsac-container:nth-child( 3n-2 ){padding-left:6px;clear:right;padding-right:0}.rtl .bsac.bsac-column-3 .bsac-container:nth-child( 3n+3 ){padding-right:6px;padding-left:0}@media only screen and (max-width:780px){.bsac.bsac-column-3 .bsac-container{float:left;width:50%}.bsac.bsac-column-3 .bsac-container:nth-of-type(odd){padding-right:5px;clear:left}.bsac.bsac-column-3 .bsac-container:nth-of-type(even){padding-left:5px}.rtl .bsac.bsac-column-3 .bsac-container{float:right}.rtl .bsac.bsac-column-3 .bsac-container:nth-of-type(odd){padding-left:5px;clear:right;padding-right:0}.rtl .bsac.bsac-column-3 .bsac-container:nth-of-type(even){padding-right:5px;padding-left:0}}@media only screen and (max-width:600px){.bsac.bsac-column-2 .bsac-container,.bsac.bsac-column-3 .bsac-container{float:none!important;clear:none!important;width:100%!important;padding-right:0!important;padding-left:0!important;margin-bottom:15px!important}.bsac.bsac-column-2 .bsac-container:last-child,.bsac.bsac-column-3 .bsac-container:last-child{margin-bottom:0!important}}.bsac-ll>ins{display:flex!important;align-items:center;justify-content:center;background:#f3f3f3;text-decoration:none!important}.bsac-ll>ins>span{max-width:50%}.bsac.bsac-align-center .bsac-ll>ins{float:none;margin-right:auto;margin-left:auto}.bsac.bsac-align-right .bsac-ll>ins{float:right}.bsac.bsac-align-left .bsac-ll>ins{float:left}PK ���[�3�!X X css/gutenberg.min.cssnu �[��� .edit-post-visual-editor .bsac .gipu-caption{color:#bbb;font-size:12px;line-height:24px}PK ���[:�� � css/gutenberg.cssnu �[��� /* Style fixes for Better Ads Manager in the Gutenberg */ .edit-post-visual-editor .bsac .gipu-caption { color: #bbbbbb; font-size: 12px; line-height: 24px; } PK ���[̀�W�� �� functions.phpnu �[��� <?php /** * Used to get array of key->name of campaigns * * @param int $count * @param bool $empty_label * * @return array */ function better_ads_get_campaigns_option( $count = 10, $empty_label = false ) { static $cache = array(); if ( isset( $cache[ $count . $empty_label ] ) ) { return $cache[ $count . $empty_label ]; } $args = array( 'posts_per_page' => $count, ); if ( $empty_label ) { $cache[ $count . $empty_label ] = array( 'none' => __( '-- Select Campaign --', 'better-studio' ) ) + Better_Ads_Manager::get_campaigns( $args ); } else { $cache[ $count . $empty_label ] = Better_Ads_Manager::get_campaigns( $args ); } return $cache[ $count . $empty_label ]; } /** * Used to get array of key->name of banners * * @param int $count * @param bool $empty_label * @param string $format * * @param string $label_type * * @return array */ function better_ads_get_banners_option( $count = 10, $empty_label = false, $format = 'normal', $label_type = 'type' ) { static $cache = array(); if ( isset( $cache[ $count . $empty_label . $format . $label_type ] ) ) { return $cache[ $count . $empty_label . $format . $label_type ]; } $args = array( 'posts_per_page' => $count, 'label_type' => $label_type, ); if ( $format === 'normal' ) { $args['meta_query'] = array( 'relation' => 'OR', array( 'key' => 'format', 'value' => '', ), array( 'key' => 'format', 'compare' => 'NOT EXISTS', ), array( 'key' => 'format', 'value' => 'normal', ), ); } elseif ( $format === 'amp' ) { $args['meta_query'] = array( array( 'key' => 'format', 'value' => 'amp', ), ); } if ( $empty_label ) { $cache[ $count . $empty_label . $format . $label_type ] = array( 'none' => __( '-- Select Banner --', 'better-studio' ) ) + Better_Ads_Manager::get_banners( $args ); } else { $cache[ $count . $empty_label . $format . $label_type ] = Better_Ads_Manager::get_banners( $args ); } return $cache[ $count . $empty_label . $format . $label_type ]; } /** * Handy function to add Ad location fields to panel by it's prefix * * @param $fields * @param array $args */ function better_ads_inject_ad_field_to_fields( &$fields, $args = array() ) { if ( is_string( $args ) ) { $args = array( 'id_prefix' => $args, ); } $args = bf_merge_args( $args, array( 'id_prefix' => '', 'group' => true, 'group_state' => 'open', 'group_title' => __( 'Ad', 'better-ads' ), 'group_auto_close' => true, 'group_desc' => '', 'start_fields' => '', 'format' => 'normal', ) ); if ( empty( $args['id_prefix'] ) ) { return; } if ( $args['group'] ) { $fields[ $args['id_prefix'] . '-group' ] = array( 'id' => $args['id_prefix'] . '-group', 'name' => $args['group_title'], 'type' => 'group', 'state' => $args['group_state'], 'desc' => $args['group_desc'], 'container-class' => 'better-ads-ad-group-field', ); } if ( ! empty( $args['start_fields'] ) ) { foreach ( (array) $args['start_fields'] as $field_id => $field_val ) { $fields[ $field_id ] = $field_val; } } $fields[ $args['id_prefix'] . '_type' ] = array( 'name' => __( 'Ad Type', 'better-studio' ), 'id' => $args['id_prefix'] . '_type', 'desc' => __( 'Choose campaign or banner.', 'better-studio' ), 'type' => 'select', 'std' => '', 'options' => array( '' => __( '-- Select Ad type --', 'better-studio' ), 'campaign' => __( 'Campaign', 'better-studio' ), 'banner' => __( 'Banner', 'better-studio' ), ), 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); $fields[ $args['id_prefix'] . '_banner' ] = array( 'name' => __( 'Banner', 'better-studio' ), 'id' => $args['id_prefix'] . '_banner', 'desc' => __( 'Choose banner.', 'better-studio' ), 'type' => 'select', 'std' => 'none', 'deferred-options' => array( 'callback' => 'better_ads_get_banners_option', 'args' => array( - 1, true, $args['format'] ), ), 'show_on' => array( array( $args['id_prefix'] . '_type=banner' ), ), '_show_on_parent' => $args['id_prefix'] . '_type', 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); $fields[ $args['id_prefix'] . '_campaign' ] = array( 'name' => __( 'Campaign', 'better-studio' ), 'id' => $args['id_prefix'] . '_campaign', 'desc' => __( 'Choose campaign.', 'better-studio' ), 'type' => 'select', 'std' => 'none', 'deferred-options' => array( 'callback' => 'better_ads_get_campaigns_option', 'args' => array( - 1, true ), ), 'show_on' => array( array( $args['id_prefix'] . '_type=campaign' ), ), '_show_on_parent' => $args['id_prefix'] . '_type', 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); $fields[ $args['id_prefix'] . '_count' ] = array( 'name' => __( 'Max Amount of Allowed Banners', 'better-studio' ), 'id' => $args['id_prefix'] . '_count', 'desc' => __( 'How many banners are allowed?.', 'better-studio' ), 'input-desc' => __( 'Leave empty to show all banners.', 'better-studio' ), 'type' => 'text', 'std' => 1, 'show_on' => array( array( $args['id_prefix'] . '_type=campaign' ), ), '_show_on_parent' => $args['id_prefix'] . '_type', 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); $fields[ $args['id_prefix'] . '_columns' ] = array( 'name' => __( 'Columns', 'better-studio' ), 'id' => $args['id_prefix'] . '_columns', 'desc' => __( 'Show ads in multiple columns.', 'better-studio' ), 'type' => 'select', "options" => array( 1 => __( '1 Column', 'better-studio' ), 2 => __( '2 Column', 'better-studio' ), 3 => __( '3 Column', 'better-studio' ), ), 'std' => 1, 'show_on' => array( array( $args['id_prefix'] . '_type=campaign' ), ), '_show_on_parent' => $args['id_prefix'] . '_type', 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); $fields[ $args['id_prefix'] . '_orderby' ] = array( 'name' => __( 'Order By', 'better-studio' ), 'id' => $args['id_prefix'] . '_orderby', 'type' => 'select', "options" => array( 'date' => __( 'Date', 'better-studio' ), 'title' => __( 'Title', 'better-studio' ), 'rand' => __( 'Random (Rotate)', 'better-studio' ), ), 'std' => 'rand', 'show_on' => array( array( $args['id_prefix'] . '_type=campaign' ), ), '_show_on_parent' => $args['id_prefix'] . '_type', 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); $fields[ $args['id_prefix'] . '_order' ] = array( 'name' => __( 'Order', 'better-studio' ), 'id' => $args['id_prefix'] . '_order', 'type' => 'select', "options" => array( 'ASC' => __( 'Ascending', 'better-studio' ), 'DESC' => __( 'Descending', 'better-studio' ), ), 'std' => 'ASC', 'show_on' => array( array( $args['id_prefix'] . '_type=campaign' ), ), '_show_on_parent' => $args['id_prefix'] . '_type', 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); $fields[ $args['id_prefix'] . '_align' ] = array( 'name' => __( 'Align', 'better-studio' ), 'desc' => __( 'Choose align of ad.', 'better-studio' ), 'id' => $args['id_prefix'] . '_align', 'type' => 'select', "options" => array( 'left' => __( 'Left', 'better-studio' ), 'center' => __( 'Center', 'better-studio' ), 'right' => __( 'Right', 'better-studio' ), ), 'std' => 'center', 'show_on' => array( array( $args['id_prefix'] . '_type=banner', ), array( $args['id_prefix'] . '_type=campaign', ), ), '_show_on_parent' => $args['id_prefix'] . '_type', 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); $fields[ $args['id_prefix'] . '_lazy-load' ] = array( 'name' => __( 'Lazy Load Ad?', 'better-studio' ), 'desc' => __( 'Chose the behaviour of lazy loading.', 'better-studio' ), 'id' => $args['id_prefix'] . '_lazy-load', 'type' => 'select', "options" => array( '' => __( '-- Inherit from panel --', 'better-studio' ), 'enable' => __( 'Yes, Lazy load this ad', 'better-studio' ), 'disable' => __( 'No, Load this Ad as normal', 'better-studio' ), ), 'std' => 'center', 'show_on' => array( array( $args['id_prefix'] . '_type=banner', ), array( $args['id_prefix'] . '_type=campaign', ), ), '_show_on_parent' => $args['id_prefix'] . '_type', 'ad-id' => $args['id_prefix'], 'section_class' => 'better-ads-ad-field', ); if ( ! empty( $args['end_fields'] ) ) { foreach ( (array) $args['end_fields'] as $field_id => $field_val ) { $fields[ $field_id ] = $field_val; } } if ( $args['group'] && $args['group_auto_close'] ) { $fields[] = array( 'type' => 'group_close', ); } } /** * Handy function to add Ad location reperator ad field to panel by it's prefix * * @param $fields * @param array $args */ function better_ads_inject_ad_repeater_field_to_fields( &$fields, $args = array() ) { if ( is_string( $args ) ) { $args = array( 'id_prefix' => $args, ); } $args = bf_merge_args( $args, array( 'id_prefix' => '', 'group' => true, 'group_state' => 'close', 'group_title' => __( 'Ad', 'better-studio' ), 'group_auto_close' => true, 'group_desc' => '', 'field_title' => '', 'field_desc' => '', 'field_add_label' => '<i class="fa fa-plus"></i> ' . __( 'New Ad', 'better-studio' ), 'field_delete_label' => __( 'Delete Ad', 'better-studio' ), 'field_item_title' => __( 'Ad', 'better-studio' ), 'field_item_smart_title' => true, 'start_fields' => '', 'format' => 'normal', ) ); if ( empty( $args['id_prefix'] ) ) { return; } if ( $args['group'] ) { $fields[] = array( 'name' => $args['group_title'], 'type' => 'group', 'state' => $args['group_state'], 'desc' => $args['group_desc'], ); } if ( ! empty( $args['start_fields'] ) ) { foreach ( (array) $args['start_fields'] as $field_id => $field_val ) { $fields[ $field_id ] = $field_val; } } $repeater_items = array(); if ( ! empty( $args['field_start_fields'] ) ) { foreach ( (array) $args['field_start_fields'] as $field_id => $field_val ) { $repeater_items[ $field_id ] = $field_val; } } $repeater_items['type'] = array( 'name' => __( 'Ad Type', 'better-studio' ), 'id' => 'type', 'desc' => __( 'Choose campaign or banner.', 'better-studio' ), 'type' => 'select', 'options' => array( '' => __( '-- Select Ad Type --', 'better-studio' ), 'campaign' => __( 'Campaign', 'better-studio' ), 'banner' => __( 'Banner', 'better-studio' ), ), 'repeater_item' => true, 'ad-id' => $args['id_prefix'], ); $repeater_items['campaign'] = array( 'name' => __( 'Campaign', 'better-studio' ), 'id' => 'campaign', 'desc' => __( 'Choose campaign.', 'better-studio' ), 'type' => 'select', 'deferred-options' => array( 'callback' => 'better_ads_get_campaigns_option', 'args' => array( - 1, true, $args['format'] ), ), 'show_on' => array( array( 'type=campaign' ), ), 'repeater_item' => true, 'ad-id' => $args['id_prefix'], ); $repeater_items['banner'] = array( 'name' => __( 'Banner', 'better-studio' ), 'id' => 'banner', 'desc' => __( 'Choose banner.', 'better-studio' ), 'type' => 'select', 'deferred-options' => array( 'callback' => 'better_ads_get_banners_option', 'args' => array( - 1, true, $args['format'] ), ), 'show_on' => array( array( 'type=banner' ), ), 'repeater_item' => true, 'ad-id' => $args['id_prefix'], ); $repeater_items['count'] = array( 'name' => __( 'Max Amount of Allowed Banners', 'better-studio' ), 'id' => 'count', 'desc' => __( 'How many banners are allowed?.', 'better-studio' ), 'input-desc' => __( 'Leave empty to show all banners.', 'better-studio' ), 'type' => 'text', 'show_on' => array( array( 'type=campaign' ), ), 'repeater_item' => true, 'ad-id' => $args['id_prefix'], ); $repeater_items['columns'] = array( 'name' => __( 'Columns', 'better-studio' ), 'id' => 'columns', 'desc' => __( 'Show ads in multiple columns.', 'better-studio' ), 'type' => 'select', "options" => array( 1 => __( '1 Column', 'better-studio' ), 2 => __( '2 Column', 'better-studio' ), 3 => __( '3 Column', 'better-studio' ), ), 'show_on' => array( array( 'type=campaign' ), ), 'repeater_item' => true, 'ad-id' => $args['id_prefix'], ); $repeater_items['orderby'] = array( 'name' => __( 'Order By', 'better-studio' ), 'id' => 'orderby', 'type' => 'select', "options" => array( 'date' => __( 'Date', 'better-studio' ), 'title' => __( 'Title', 'better-studio' ), 'rand' => __( 'Rand', 'better-studio' ), ), 'show_on' => array( array( 'type=campaign' ), ), 'repeater_item' => true, 'ad-id' => $args['id_prefix'], ); $repeater_items['order'] = array( 'name' => __( 'Order', 'better-studio' ), 'id' => 'order', 'type' => 'select', "options" => array( 'ASC' => __( 'Ascending', 'better-studio' ), 'DESC' => __( 'Descending', 'better-studio' ), ), 'show_on' => array( array( 'type=campaign' ), ), 'repeater_item' => true, 'ad-id' => $args['id_prefix'], ); $repeater_items['align'] = array( 'name' => __( 'Align', 'better-studio' ), 'id' => 'align', 'desc' => __( 'Choose align of ad.', 'better-studio' ), 'type' => 'select', 'options' => array( 'left' => __( 'Left Align', 'better-studio' ), 'center' => __( 'Center Align', 'better-studio' ), 'right' => __( 'Right Align', 'better-studio' ), ), 'show_on' => array( array( 'type=banner', ), array( 'type=campaign', ), ), 'repeater_item' => true, 'ad-id' => $args['id_prefix'], ); $repeater_items['lazy-load'] = array( 'name' => __( 'Lazy Load Ad?', 'better-studio' ), 'desc' => __( 'Chose the behaviour of lazy loading.', 'better-studio' ), 'id' => 'lazy-load', 'type' => 'select', "options" => array( '' => __( '-- Inherit from panel --', 'better-studio' ), 'enable' => __( 'Yes, Lazy load this ad', 'better-studio' ), 'disable' => __( 'No, Load this Ad as normal', 'better-studio' ), ), 'std' => 'center', 'show_on' => array( array( 'type=banner', ), array( 'type=campaign', ), ), 'ad-id' => $args['id_prefix'], 'repeater_item' => true, ); if ( ! empty( $args['field_end_fields'] ) ) { foreach ( (array) $args['field_end_fields'] as $field_id => $field_val ) { $repeater_items[ $field_id ] = $field_val; } } $fields[ $args['id_prefix'] ] = array( 'name' => $args['field_title'], 'desc' => $args['field_desc'], 'id' => $args['id_prefix'], 'type' => 'repeater', 'save-std' => true, 'default' => array( array( 'type' => '', 'campaign' => 'none', 'banner' => 'none', 'paragraph' => 3, 'count' => 3, 'columns' => 3, 'orderby' => 'rand', 'order' => 'ASC', 'align' => 'center', 'lazy-load' => '', 'post_type' => '', ), ), 'add_label' => $args['field_add_label'], 'delete_label' => $args['field_delete_label'], 'item_title' => $args['field_item_title'], 'section_class' => 'full-with-both' . ( $args['field_item_smart_title'] ? ' better-ads-repeater-ad-field' : '' ), 'options' => $repeater_items, 'ad-id' => $args['id_prefix'], ); if ( ! empty( $args['end_fields'] ) ) { foreach ( (array) $args['end_fields'] as $field_id => $field_val ) { $fields[ $field_id ] = $field_val; } } if ( $args['group'] && $args['group_auto_close'] ) { $fields[] = array( 'type' => 'group_close', ); } } /** * Shows ad location code by its panel prefix or data * * @param string $panel_ad_prefix * @param null $ad_data * @param array $args */ function better_ads_show_ad_location( $panel_ad_prefix = '', $ad_data = null, $args = array() ) { if ( empty( $panel_ad_prefix ) ) { return; } if ( is_null( $ad_data ) || ! is_array( $ad_data ) ) { $ad_data = better_ads_get_ad_location_data( $panel_ad_prefix ); } if ( ! empty( $args['container-class'] ) ) { if ( ! empty( $ad_data['container-class'] ) ) { $ad_data['container-class'] .= ' ' . $args['container-class'] . ' better-ads-loc-' . $panel_ad_prefix; } else { $ad_data['container-class'] = $args['container-class'] . ' better-ads-loc-' . $panel_ad_prefix; } } else { $ad_data['container-class'] = 'better-ads-loc-' . $panel_ad_prefix; } echo Better_Ads_Manager()->show_ads( $ad_data ); } /** * Returns full list of Ad location data from it's prefix inside panel * * @param string $panel_ad_prefix * @param bool $multiple * @param array|null $extra_fields Extra fields related to this ad location * * @return array */ function better_ads_get_ad_location_data( $panel_ad_prefix = '', $multiple = false, $extra_fields = null ) { // Disabled for this item -> not matters for all or not if ( ! better_ads_ad_can_be_shown( 'ad-location' ) ) { return better_ads_get_ad_data_default( $extra_fields ); } return better_ads_get_ad_data( $panel_ad_prefix, $multiple, $extra_fields ); } /** * Checks the ad can be shown on page based on the location and the disable feature * . * * @param string $type * * @return bool */ function better_ads_ad_can_be_shown( $type = '' ) { $func = ''; $object = ''; $object_id = null; $disable_all = ''; $disable_item = ''; if ( is_singular() ) { $func = 'bf_get_post_meta'; $object = get_post_type(); } elseif ( is_archive() ) { $queried_object = get_queried_object(); if ( ! empty( $queried_object->taxonomy ) ) { $func = 'bf_get_term_meta'; $object = $queried_object->taxonomy; } elseif ( is_date() ) { $object = 'date'; } // WooCommerce shop page is a exception because the page ID is not the same as the value of get_the_ID() elseif ( function_exists( 'is_woocommerce' ) && is_woocommerce() && is_shop() ) { $func = 'bf_get_post_meta'; $object = 'page'; $object_id = get_option( 'woocommerce_shop_page_id' ); } } elseif ( is_search() ) { $object = 'search'; } elseif ( is_404() ) { $object = '404'; } elseif ( is_home() ) { $object = 'home'; } // // Disabled for all items // if ( ! empty( $object ) ) { $disable_all = Better_Ads_Manager::get_option( $object . '_disable_all' ); } // // Disabled for this item // if ( ! empty( $func ) ) { $disable_loc = ''; if ( $type == 'ad-location' ) { $disable_loc = call_user_func( $func, 'bam_disable_locations', $object_id ); } elseif ( $type == 'widget' ) { $disable_loc = call_user_func( $func, 'bam_disable_widgets', $object_id ); } elseif ( $type == 'shortcode' ) { $disable_loc = call_user_func( $func, 'bam_disable_post_content', $object_id ); } $disable_item = $disable_loc; // not 'show' or '1' // mean it show for location -> highest priority if ( $disable_loc == '' ) { $disable_item = call_user_func( $func, 'bam_disable_all', $object_id ); } // '1' means hide // '' and 'show' mean Show if ( $disable_item == 1 ) { $disable_item = 'hide'; } // // $disable_item == '' -> show -> panel have priority // $disable_item == '1' -> hide -> hide it, more priority than panel // $disable_item == 'show' -> show -> show it, more priority than panel // } // Disabled for this item -> not matters for all or not if ( $disable_item == 'hide' ) { return false; } // Disabled for all items but this item made it enable! elseif ( $disable_all && $disable_item != 'show' ) { return false; } return true; } if ( ! function_exists( 'better_ads_get_ad_data_default' ) ) { /** * returns base data for ad banner! * * @param array|null $extra_fields Extra fields related to this ad location * * @return array */ function better_ads_get_ad_data_default( $extra_fields = null ) { $fields = array( 'type' => '', 'banner' => '', 'campaign' => '', 'count' => '', 'columns' => '', 'orderby' => '', 'order' => '', 'align' => '', 'lazy-load' => '', 'active_location' => false, ); if ( ! is_null( $extra_fields ) ) { $fields = bf_merge_args( $fields, $extra_fields ); } return $fields; } } if ( ! function_exists( 'better_ads_get_ad_data_override' ) ) { /** * Returns data for ad location (even overidded data) * * @param string $panel_ad_prefix * @param bool $multiple * @param string $type * @param null $extra_fields Extra fields for current ad location * * @return array */ function better_ads_get_ad_data_override( $panel_ad_prefix = '', $multiple = false, $type = 'ad-location', $extra_fields = null ) { $data_ids = better_ads_get_ad_data_default( $extra_fields ); $object_id = 0; $object_type = ''; $override_id = false; $data = array(); $data_filled = false; // // Find override ID for current page // if ( is_home() && is_front_page() ) { $override_id = 'home'; $object_type = 'home'; } elseif ( is_front_page() ) { global $wp_query; if ( 'page' == get_option( 'show_on_front' ) && get_option( 'page_on_front' ) && $wp_query->is_page( get_option( 'page_on_front' ) ) ) { $override_id = get_post_type(); $object_id = get_queried_object_id(); $object_type = 'post'; } else { $queried_object = get_queried_object(); if ( ! empty( $queried_object->name ) ) { $override_id = $queried_object->name; } } } elseif ( is_singular() ) { if ( get_post_type() ) { $override_id = get_post_type(); $object_id = get_queried_object_id(); $object_type = 'post'; } } elseif ( is_post_type_archive() ) { $queried_object = get_queried_object(); if ( ! empty( $queried_object->name ) ) { $override_id = $queried_object->name; } } elseif ( is_archive() ) { $queried_object = get_queried_object(); if ( ! empty( $queried_object->taxonomy ) ) { $override_id = $queried_object->taxonomy; $object_id = $queried_object->term_id; $object_type = 'taxonomy'; } elseif ( is_date() ) { $override_id = 'date'; $object_type = 'date'; } } elseif ( is_search() ) { $override_id = 'search'; $object_type = 'search'; } elseif ( is_404() ) { $override_id = '404'; $object_type = '404'; } /** * TODO: Refactor, DRY! */ if ( $multiple ) { if ( $override_id && $object_type === 'post' && bf_get_post_meta( 'ovr_' . $override_id . '-' . $panel_ad_prefix . '-active', $object_id ) ) { $data = bf_get_post_meta( 'ovr_' . $override_id . '-' . $panel_ad_prefix, $object_id ); } elseif ( $override_id && $object_type === 'taxonomy' && bf_get_term_meta( 'ovr_' . $override_id . '-' . $panel_ad_prefix . '-active', $object_id ) ) { $data = bf_get_term_meta( 'ovr_' . $override_id . '-' . $panel_ad_prefix, $object_id ); } elseif ( $override_id && Better_Ads_Manager::get_option( 'ovr_' . $override_id . '-' . $panel_ad_prefix . '-active' ) ) { $data = Better_Ads_Manager::get_option( 'ovr_' . $override_id . '-' . $panel_ad_prefix ); } else { $data = Better_Ads_Manager::get_option( $panel_ad_prefix ); } } else { if ( $type == 'ad-location' ) { $ad_active_id = 'ovr_' . $override_id . '-' . $panel_ad_prefix . '-active'; if ( $override_id && $object_type === 'post' ) { // // The post itself overridden the ad // if ( bf_get_post_meta( $ad_active_id, $object_id ) ) { foreach ( $data_ids as $id => $value ) { $data[ $id ] = bf_get_post_meta( 'ovr_' . $override_id . '-' . $panel_ad_prefix . '_' . $id, $object_id ); } $data_filled = true; } else { // // iterate all taxonomies of current post to find first term that overridden the ad // foreach ( get_post_taxonomies( $object_id ) as $taxonomy ) { // data filled in prev taxonomy if ( $data_filled ) { break; } // Exceptions { $_check = array( 'post_format' => '', 'post_tag' => '', ); if ( isset( $_check[ $taxonomy ] ) ) { continue; } } $terms = wp_get_post_terms( $object_id, $taxonomy ); // todo add default category support // issue in terms if ( is_wp_error( $terms ) ) { continue; } foreach ( $terms as $term ) { // not override in this term if ( ! bf_get_term_meta( 'ovr_' . $taxonomy . '-' . $panel_ad_prefix . '-active', $term->term_id ) ) { continue; } // collects data of overridden ad from term foreach ( $data_ids as $id => $value ) { $data[ $id ] = bf_get_term_meta( 'ovr_' . $taxonomy . '-' . $panel_ad_prefix . '_' . $id, $term->term_id ); } $data_filled = true; break; } } } } // // Taxonomy // if ( ! $data_filled && $override_id && $object_type === 'taxonomy' && bf_get_term_meta( $ad_active_id, $object_id ) ) { foreach ( $data_ids as $id => $value ) { $data[ $id ] = bf_get_term_meta( 'ovr_' . $override_id . '-' . $panel_ad_prefix . '_' . $id, $object_id ); } $data_filled = true; } // // Option ad location // if ( ! $data_filled && $override_id && Better_Ads_Manager::get_option( $ad_active_id ) ) { foreach ( $data_ids as $id => $value ) { $data[ $id ] = Better_Ads_Manager::get_option( 'ovr_' . $override_id . '-' . $panel_ad_prefix . '_' . $id ); } $data_filled = true; } // // exact option // if ( ! $data_filled ) { foreach ( $data_ids as $id => $value ) { $data[ $id ] = Better_Ads_Manager::get_option( $panel_ad_prefix . '_' . $id ); } } } elseif ( $type === 'option' ) { $data = '___default___'; if ( $override_id && $object_type === 'post' ) { $data = bf_get_post_meta( 'ovr_' . $override_id . '-' . $panel_ad_prefix, $object_id, $data ); } elseif ( $override_id && $object_type === 'taxonomy' ) { $data = bf_get_term_meta( 'ovr_' . $override_id . '-' . $panel_ad_prefix, $object_id, $data ); } if ( $data === '___default___' || is_null( $data ) ) { $data = Better_Ads_Manager::get_option( $panel_ad_prefix ); } } } return $data; } // better_ads_get_ad_data_override } /** * Returns full list of Ad location data from it's prefix inside panel * * @param string $panel_ad_prefix * @param bool $multiple * @param null $extra_fields Extra fields related to current ad location * * @return array */ function better_ads_get_ad_data( $panel_ad_prefix = '', $multiple = false, $extra_fields = null ) { $data_ids = better_ads_get_ad_data_default( $extra_fields ); if ( empty( $panel_ad_prefix ) ) { return $multiple ? array( $data_ids ) : $data_ids; } $final_ads = array(); $data = better_ads_get_ad_data_override( $panel_ad_prefix, $multiple, 'ad-location', $extra_fields ); if ( ! $multiple ) { $data = array( $data ); } foreach ( $data as $ad_item ) { // Type not selected if ( empty( $ad_item['type'] ) || $ad_item['type'] === 'none' ) { continue; } // Banner not selected if ( $ad_item['type'] === 'banner' && ( empty( $ad_item['banner'] ) || $ad_item['banner'] === 'none' ) ) { continue; } // Campaign not selected elseif ( $ad_item['type'] === 'campaign' && ( empty( $ad_item['campaign'] ) || $ad_item['campaign'] == 'none' ) ) { continue; } // Post type is not valid if ( ! empty( $ad_item['post_type'] ) ) { foreach ( explode( ',', $ad_item['post_type'] ) as $post_type ) { if ( ! is_singular( $post_type ) ) { continue; } } } $ad_item['active_location'] = true; if ( empty( $ad_item['align'] ) ) { $ad_item['align'] = 'center'; } if ( bf_is_doing_ajax() ) { $ad_item['lazy-load'] = 'disable'; } elseif ( empty( $ad_item['lazy-load'] ) ) { $ad_item['lazy-load'] = Better_Ads_Manager::get_option( 'lazy_loading_ads' ); } $final_ads[] = $ad_item; } // return default ID's if ( empty( $final_ads ) ) { return $multiple ? array( $data_ids ) : $data_ids; } if ( $multiple ) { return $final_ads; } return current( $final_ads ); } if ( ! function_exists( 'better_ads_extract_google_ad_code_data' ) ) { /** * Handy function to fetching data from Google Adsense code. * * @param $code * * @return array */ function better_ads_extract_google_ad_code_data( $code ) { $data = array( 'ad-client' => '', 'ad-layout' => '', 'ad-slot' => '', 'ad-format' => '', 'ad-layout-key' => '', 'style' => '', 'full-width-responsive' => '', ); $code = strtolower( $code ); /** * * data-ad-client * * Format 1: <ins class="adsbygoogle" data-ad-client="*" ></ins> * * Format 2: <script> google_ad_client = "*"; </script> * */ { // Format 1 { preg_match( '/data-ad-client="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['ad-client'] = $matches[1]; } } // Other format: google_ad_client = "*"; if ( empty( $data['ad-client'] ) ) { preg_match( '/google_ad_client\s*=\s*"\s*(.*)\s*"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['ad-client'] = $matches[1]; } } } /** * * data-ad-slot * * Format 1: <ins class="adsbygoogle" data-ad-slot="*" ></ins> * * Format 2: <script> google_ad_slot = "*"; </script> * */ { // Format 1 { preg_match( '/data-ad-slot="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['ad-slot'] = $matches[1]; } } // Format 2 if ( empty( $data['ad-slot'] ) ) { preg_match( '/google_ad_slot\s*=\s*"\s*(.*)\s*"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['ad-slot'] = $matches[1]; } } } /** * * data-ad-layout-key * */ preg_match( '/data-ad-layout-key="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['ad-layout-key'] = $matches[1]; } /** * * data-layout * */ preg_match( '/data-ad-layout="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['ad-layout'] = $matches[1]; } /** * * data-ad-format * */ preg_match( '/data-ad-format="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['ad-format'] = $matches[1]; } $_check = array( 'vertical' => '', 'horizontal' => '', 'rectangle' => '', 'fluid' => '', 'autorelaxed' => '', 'auto' => '', ); if ( empty( $data['ad-format'] ) || ! isset( $_check[ $data['ad-format'] ] ) ) { $data['ad-format'] = 'auto'; } /** * * data-full-width-responsive * */ preg_match( '/data-full-width-responsive="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['full-width-responsive'] = $matches[1]; } $_check = array( 'false' => '', 'true' => '', '' => '', ); if ( ! isset( $_check[ $data['full-width-responsive'] ] ) ) { $data['full-width-responsive'] = ''; } /** * * style * */ preg_match( '/style="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['style'] = $matches[1]; } /** * * Matched Content Customization Attrs * */ { /** * matched-content-ui-type */ { preg_match( '/data-matched-content-ui-type="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['matched-content-ui-type'] = $matches[1]; } } /** * matched-content-rows-num */ { preg_match( '/data-matched-content-rows-num="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['matched-content-rows-num'] = $matches[1]; } } /** * matched-content-columns-num */ { preg_match( '/data-matched-content-columns-num="(.*)"/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['matched-content-columns-num'] = $matches[1]; } } } /** * * Style width * * Format 1: <ins class="adsbygoogle" style="width:728px" ></ins> * * Format 2: <script> google_ad_width = 728; </script> * */ if ( empty( $data['width'] ) ) { // Format 1 { preg_match( '/[^-]width[: ]+([0-9]+)[px]/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['width'] = $matches[1]; } } // Format 2 if ( empty( $data['width'] ) ) { preg_match( '/google_ad_width\s*=\s*(\d*)\s*;/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['width'] = $matches[1]; } } } /** * * Style height * * Format 1: <ins class="adsbygoogle" style="height:90px" ></ins> * * Format 2: <script> google_ad_height = 90; </script> * */ if ( empty( $data['height'] ) ) { // Format 1 { preg_match( '/[^-]height[: ]+([0-9]+)[px]/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['height'] = $matches[1]; } } // Format 2 if ( empty( $data['height'] ) ) { preg_match( '/google_ad_height\s*=\s*(\d*)\s*;/', $code, $matches ); if ( ! empty( $matches[1] ) ) { $data['height'] = $matches[1]; } } } return $data; } // better_ads_extract_google_ad_code_data } if ( ! function_exists( 'bam_deferred_dfp_spot_options' ) ) { /** * Callback for banner options. Extracts spots from list and shows them to user for easy to use. * * @param array $args * * @return array */ function bam_deferred_dfp_spot_options( $args = array() ) { $options = array( '' => __( '-- Select Spot --', 'better-studio' ), 'custom' => __( 'Custom Code', 'better-studio' ), ); $dfp_code = Better_Ads_Manager::get_option( 'dfp_code' ); if ( ! empty( $dfp_code ) ) { preg_match_all( '#defineSlot\((.*)\).addService#', $dfp_code, $dfp_spots ); } else { $dfp_spots = array(); } $group = array( 'label' => __( 'Auto detected DFP spots', 'better-studio' ), 'options' => array() ); if ( ! empty( $dfp_spots[1] ) ) { foreach ( $dfp_spots[1] as $_spot ) { $group['options'][ str_replace( ',', '--', $_spot ) ] = $_spot; } } if ( empty( $group['options'] ) ) { $group['options']['not-detected'] = array( 'label' => __( 'Please enter DFP code into Better Ads Manager panle', 'better-studio' ), 'disabled' => true, ); } $options[] = $group; return $options; } } if ( ! function_exists( 'better_ads_get_override_sections_list' ) ) { /** * Returns list of items that can be overridden * * @return array */ function better_ads_get_override_sections_list() { static $sections; if ( $sections ) { return $sections; } $sections = array( 'post_type' => array( 'label' => 'Post Types', 'items' => array(), ), 'taxonomy' => array( 'label' => 'Taxonomies', 'items' => array(), ), 'general_pages' => array( 'label' => 'General Pages', 'items' => array(), ), ); // // CPT's // { $post_types = array_diff_key( get_post_types( array( 'public' => true, ) ), array( 'attachment' => 0, ) ); foreach ( $post_types as $cpt_id ) { $post_type = get_post_type_object( $cpt_id ); $sections['post_type']['items'][ $cpt_id ] = array( 'id' => $cpt_id, 'label' => $post_type->labels->singular_name, 'label_plural' => $post_type->labels->name, ); } ksort( $sections['post_type']['items'] ); } // // Taxonomy // { $taxonomies = array_diff_key( get_taxonomies( array( 'public' => true, ) ), array( 'nav_menu' => 0, 'link_category' => 0, 'post_format' => 0, 'product_shipping_class' => 0, 'product_type' => 0, ) ); foreach ( $taxonomies as $tax_id ) { $tax = get_taxonomy( $tax_id ); $sections['taxonomy']['items'][ $tax_id ] = array( 'id' => $tax_id, 'label' => $tax->labels->singular_name, 'label_plural' => $tax->labels->name, ); } ksort( $sections['taxonomy']['items'] ); } // // General Pages // { // Non-static Homepage $sections['general_pages']['items']['home'] = array( 'id' => 'home', 'label' => 'Non-Static Homepage', 'label_plural' => 'Non-Static Homepage', ); // Search page $sections['general_pages']['items']['search'] = array( 'id' => 'search', 'label' => 'Search Page', 'label_plural' => 'Search Pages', ); // Date archive pages $sections['general_pages']['items']['date'] = array( 'id' => 'date', 'label' => 'Date Archive Page', 'label_plural' => 'Date Archive Pages', ); // 404 page $sections['general_pages']['items']['404'] = array( 'id' => '404', 'label' => '404 Page', 'label_plural' => '404 Pages', ); } return $sections; } // better_ads_get_override_sections_list } if ( ! function_exists( 'better_ads_get_override_fields_list' ) ) { /** * Creates fields list of a overriden section * * @param array $fields * @param array $args * * @return array */ function better_ads_get_override_fields_list( $fields = array(), $args = array() ) { $section_fields = array(); // // Loads fields from filter // if ( empty( $fields ) ) { $fields = apply_filters( 'better-framework/panel/better_ads_manager/fields', array() ); } // // Remove extra field or not! // if ( isset( $args['type'] ) ) { $exclude_extra_fields_type = $args['type']; $exclude_extra_fields = true; } elseif ( bf_is_doing_ajax() && isset( $_REQUEST['type'] ) ) { $exclude_extra_fields_type = $_REQUEST['type']; $exclude_extra_fields = true; } else { $exclude_extra_fields_type = false; $exclude_extra_fields = false; } $exclude_to_next_tab = false; // Converts tabs and groups to be nested fields foreach ( $fields as $field_id => $field ) { // from start to DFP or AMP ads if ( ! empty( $field['id'] ) && ( $field['id'] === 'dfp_settings' || $field['id'] === 'amp_ads' || $field['id'] === 'override_settings' ) ) { break; } // // Remove extra and unneeded override fields. // For example post ads in taxonomy does not sense! // if ( $exclude_extra_fields ) { // Note: Commented because we added override tax ads inside their posts and because of that // the posts ads needed to be overridden. // // Taxonomy and Inside Post Ads //if ( $exclude_extra_fields_type === 'taxonomy' && ! empty( $field['id'] ) && $field['id'] === 'post_ads_tab' ) { // $exclude_to_next_tab = TRUE; // continue; //} // Metabox and After X Post Ads (archive ads) if ( ( $exclude_extra_fields_type === 'metabox' || $exclude_extra_fields_type === 'post_type' ) && ! empty( $field['id'] ) && $field['id'] === 'after_x_post_ad_tab' ) { $exclude_to_next_tab = true; continue; } // Exclude all field to the next tab field. if ( $exclude_to_next_tab ) { if ( ! isset( $field['type'] ) || $field['type'] !== 'tab' ) { continue; } else { $exclude_to_next_tab = false; } } } // exclude specific fields if ( isset( $field['exclude-in-override'] ) && $field['exclude-in-override'] ) { continue; } if ( ! empty( $field['type'] ) ) { if ( $field['type'] === 'tab' ) { $field['type'] = 'group'; $field['level'] = 2; $field['state'] = 'close'; unset( $field['ajax-tab'] ); } elseif ( $field['type'] === 'group' ) { $field['level'] = 4; $field['type'] = 'group'; $field['state'] = 'close'; } elseif ( $field['type'] === 'heading' ) { $field['type'] = 'group'; $field['level'] = 3; $field['state'] = 'close'; } } $field['ajax-tab-field'] = 'override_settings'; $section_fields[ $field_id ] = $field; } return $section_fields; } // better_ads_get_override_fields_list } if ( ! function_exists( 'better_ads_inject_override_ad_section_fields' ) ) { /** * Creates overridable fields for a section * * @param array $args * * @return array */ function better_ads_inject_override_ad_section_fields( $args = array() ) { $args = bf_merge_args( $args, array( 'id' => '', 'name' => '', 'fields' => array(), 'ajax-section-field' => '', 'type' => '', ) ); $action = ''; $condition_field_id = ''; $override_fields = array(); $closed = true; foreach ( $args['fields'] as $field_k => $field ) { // create new ID if ( ! empty( $field['id'] ) ) { $id = 'ovr_' . $args['id'] . '-' . $field['id']; } else { $id = $field_k; } if ( ! isset( $override_fields[ $args['id'] . '_disable_all' ] ) ) { $override_fields[ $args['id'] . '_disable_all' ] = array( 'name' => sprintf( __( 'Hide all Ads in "%s"', 'better-studio' ), $args['name'] ), 'desc' => sprintf( __( 'by enabling this all ads inside "%s" will be disabled and not showing.', 'better-studio' ), $args['name'] ), 'id' => $args['id'] . '_disable_all', 'type' => 'switch', 'std' => 0, 'ajax-tab-field' => $args['ajax-section-field'], ); } // // Add condition field for group fields // if ( $action == 'add condition' ) { if ( isset( $field['ad-id'] ) ) { $condition_field_id = 'ovr_' . $args['id'] . '-' . $field['ad-id'] . '-active'; } else { $condition_field_id = $id . '-active'; } $override_fields[ $condition_field_id ] = array( 'name' => __( 'Override this ad?', 'better-studio' ), 'desc' => sprintf( __( 'You can override this ad location for "%s" with enabling this option', 'better-studio' ), $args['name'] ), 'id' => $condition_field_id, 'type' => 'switch', 'std' => 0, 'ajax-tab-field' => $args['ajax-section-field'], ); // // Adds an override ads in the post of taxonomy field to the ad override fields // if ( $args['type'] === 'taxonomy' ) { if ( isset( $field['ad-id'] ) ) { $override_child_field_id = 'ovr_' . $args['id'] . '-' . $field['ad-id'] . '-override-in-child'; } else { $override_child_field_id = $id . '-override-in-child'; } $override_fields[ $override_child_field_id ] = array( 'name' => __( 'Override inside the Child Posts?', 'better-studio' ), 'desc' => sprintf( __( 'By enabling this option the overridden ad will be shows for all posts of this "%s".', 'better-studio' ), $args['name'] ), 'id' => $override_child_field_id, 'type' => 'switch', 'std' => 0, 'ajax-tab-field' => $args['ajax-section-field'], 'show_on' => array( array( $condition_field_id . '=1' ) ) ); } $action = 'add filter'; } // // Add filter for group fields (show_on) // if ( $action == 'add filter' && $field['type'] !== 'group' ) { // // Update old show_on value // if ( isset( $field['show_on'] ) ) { $new_show_on = array(); if ( ! empty( $field['_show_on_parent'] ) ) { $type_id = $field['_show_on_parent']; $rep_id = 'ovr_' . $args['id'] . '-' . $field['_show_on_parent']; } else { // // remove text after last _ to detect the parent field id for replacement // We suggest to add "_show_on_parent" to parent. // $type_id = explode( '_', $field['id'] ); if ( bf_count( $type_id ) > 1 ) { array_pop( $type_id ); } $type_id = implode( '_', $type_id ); $rep_id = 'ovr_' . $args['id'] . '-' . $type_id; } // renames old ID's to new id foreach ( $field['show_on'] as $show_l1 ) { $_show_l1 = array(); foreach ( $show_l1 as $show_l2 ) { $_show_l1[] = str_replace( $type_id, $rep_id, $show_l2 ); } $new_show_on[] = $_show_l1; } // add new filter to show on foreach ( $new_show_on as $idx => $_ ) { $new_show_on[ $idx ][] = $condition_field_id . '=1'; } $field['show_on'] = $new_show_on; } else { $field['show_on'] = array( array( $condition_field_id . '=1' ) ); } } if ( $field['type'] === 'group' && $field['level'] == 2 ) { $override_fields[ $id . '-close' ] = array( 'type' => 'group_close', 'ajax-tab-field' => $args['ajax-section-field'], 'level' => 'all', ); } if ( $field['type'] !== 'group_close' ) { $field['id'] = $id; $field['ajax-tab-field'] = $args['ajax-section-field']; $override_fields[ $id ] = $field; } // // auto close for old group // if ( $field['type'] === 'group' && $field['level'] == 4 && ! $closed ) { $override_fields[ $id . '-close' ] = array( 'type' => 'group_close', 'ajax-tab-field' => $args['ajax-section-field'], ); $closed = true; } // // group start -> condition field should be added // if ( $field['type'] === 'group' && $field['level'] == 4 ) { $action = 'add condition'; } // // End of group -> clear // elseif ( $field['type'] === 'group_close' ) { $action = ''; $condition_field_id = ''; $closed = true; } } return $override_fields; } // better_ads_inject_override_ad_section_fields } if ( ! function_exists( 'better_ads_section_override_fields_list' ) ) { /** * Prepares fields to opened group in ajax action of panel * * @param $args * * @return array */ function better_ads_section_override_fields_list( $args ) { $section_fields_list = better_ads_get_override_fields_list( array(), $args ); if ( empty( $args['ajax-section-field'] ) ) { $args['ajax-section-field'] = 'ajax-section-field'; } $section_fields = better_ads_inject_override_ad_section_fields( array( 'id' => $args['section'], 'name' => $args['section-name'], 'fields' => $section_fields_list, 'ajax-section-field' => $args['ajax-section-field'], 'type' => ! empty( $args['type'] ) ? $args['type'] : '', ) ); return $section_fields; } } if ( ! function_exists( 'better_ads_section_disable_fields_list' ) ) { /** * Prepares fields to opened group in ajax action of panel * * @param array $fields * @param array $args * * @return array */ function better_ads_section_disable_fields_list( $fields = array(), $args = array() ) { $args = bf_merge_args( $args, array( 'type' => 'post', ) ); $fields['bam_disable_all'] = array( 'name' => __( 'Disable All Ads?', 'better-studio' ), 'id' => 'bam_disable_all', 'type' => 'select', 'options' => array( '' => __( '-- Inherit From Ads Manager Panel --', 'better-studio' ), '1' => __( 'Disable All Ads', 'better-studio' ), 'show' => __( 'Show All Ads', 'better-studio' ), ), 'desc' => __( 'Hides all ads.', 'better-studio' ), ); $fields['bam_disable_locations'] = array( 'name' => __( 'Disable All Ad Locations?', 'better-studio' ), 'id' => 'bam_disable_locations', 'type' => 'select', 'options' => array( '' => __( '-- Inherit From Ads Manager Panel --', 'better-studio' ), '1' => __( 'Disable All Ads', 'better-studio' ), 'show' => __( 'Show All Ads', 'better-studio' ), ), 'desc' => __( 'Hides only ad locations.', 'better-studio' ), ); $fields['bam_disable_widgets'] = array( 'name' => __( 'Disable All Widgets?', 'better-studio' ), 'id' => 'bam_disable_widgets', 'type' => 'select', 'options' => array( '' => __( '-- Inherit From Ads Manager Panel --', 'better-studio' ), '1' => __( 'Disable All Ads', 'better-studio' ), 'show' => __( 'Show All Ads', 'better-studio' ), ), 'desc' => __( 'Hides ad widgets.', 'better-studio' ), ); if ( $args['type'] === 'post' ) { $fields['bam_disable_post_content'] = array( 'name' => __( 'Disable All Content Ads?', 'better-studio' ), 'id' => 'bam_disable_post_content', 'type' => 'select', 'options' => array( '' => __( '-- Inherit From Ads Manager Panel --', 'better-studio' ), '1' => __( 'Disable All Ads', 'better-studio' ), 'show' => __( 'Show All Ads', 'better-studio' ), ), 'desc' => __( 'Hides post content ads.', 'better-studio' ), ); } return $fields; } } PK ���[sͧ\� � better-adsmanager.phpnu �[��� <?php /* Plugin Name: Better Ads Manager Plugin URI: http://betterstudio.com Description: Manage your ads in better way! Version: 1.19.3 Author: BetterStudio Author URI: http://betterstudio.com License: */ /** * Better_Ads_Manager class wrapper for make changes safe in future * * @return Better_Ads_Manager */ function Better_Ads_Manager() { return Better_Ads_Manager::self(); } // Initialize Better Ads Manager Better_Ads_Manager(); /** * Class Better_Ads_Manager */ class Better_Ads_Manager { /** * Contains plugin version number that used for assets for preventing cache mechanism * * @var string */ private static $version = '1.19.3'; /** * Contains plugin option panel ID * * @var string */ public static $panel_id = 'better_ads_manager'; /** * Inner array of instances * * @var array */ protected static $instances = array(); /** * Flag to detect Adsense js file was printed or not * * @var bool */ private $is_google_adsence_printed = false; /** * Flag to detect Adsense js file was printed or not * * @var bool */ private $wp_head_finished = false; /** * Flag to detect Adsense lazy loading js file was printed or not * * @var bool */ private $is_google_adsence_lazy_printed = false; /** * Used to cache the ad data while saving post * * @var string */ private $meta_cache_id = 'ad-data-cache'; /** * Plugin initialize */ function __construct() { // Defines constant to enable BetterAMP for adding ads if ( ! defined( 'BETTER_ADS_MANAGER_AMP' ) ) { define( 'BETTER_ADS_MANAGER_AMP', true ); } // Defines constant to prevent ad blockers to detect the Better Ads Manager classes! // Other plugins and themes can use this for generating custom css codes if ( ! defined( 'BAM_PREFIX' ) ) { define( 'BAM_PREFIX', $this->get_unique_id() ); } // Register included BF add_filter( 'better-framework/loader', array( $this, 'better_framework_loader' ) ); // Enable needed sections add_filter( 'better-framework/sections', array( $this, 'setup_bf_features' ), 100 ); // Includes general functions include $this->dir_path( 'functions.php' ); // Add option panel include $this->dir_path( 'includes/options/panel.php' ); // Add metabox include $this->dir_path( 'includes/options/metabox.php' ); // Add taxonomy metabox include $this->dir_path( 'includes/options/taxonomy.php' ); // Add FIA support include $this->dir_path( 'includes/fia/bam-fia.php' ); // Activate and add new shortcodes add_filter( 'better-framework/shortcodes', array( $this, 'setup_shortcodes' ), 100 ); // Initialize after bf init add_action( 'better-framework/after_setup', array( $this, 'bf_init' ) ); // Do some stuff after WP init add_action( 'init', array( $this, 'init' ) ); // Includes BF loader if not included before require_once $this->dir_path( '/includes/libs/better-framework/init.php' ); // Ads plugin textdomain add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) ); // Ajax callback for rebuilding image from front end add_action( 'wp_ajax_nopriv_better_ads_manager_blocked_fallback', array( $this, 'callback_blocked_ads' ) ); add_action( 'wp_ajax_better_ads_manager_blocked_fallback', array( $this, 'callback_blocked_ads' ) ); add_filter( 'better-framework/oculus/logger/turn-off', array( $this, 'oculus_logger' ), 22, 3 ); // Add custom items to editor shortcodes menu add_filter( 'better-framework/editor-shortcodes/shortcodes-array', array( $this, 'register_shortcode_to_editor' ), 15 ); // Configs "BF Editor Shortcodes" library add_filter( 'better-framework/editor-shortcodes/config', array( $this, 'editor_shortcodes_config' ) ); // Reset unique ID when the BAM panel saved. add_filter( 'better-framework/panel/save/result', array( $this, 'callback_panel_save_result' ), 10, 2 ); // Change the .bsac in the BetterAMP Style files add_filter( 'better-amp/style-files/css/ads.css', array( $this, 'make_prefix_undetectable' ), 10 ); add_filter( 'better-amp/style-files/css/ads.min.css', array( $this, 'make_prefix_undetectable' ), 10 ); add_filter( 'better-amp/style-files/css/ads.rtl.css', array( $this, 'make_prefix_undetectable' ), 10 ); add_filter( 'better-amp/style-files/css/ads.rtl.min.css', array( $this, 'make_prefix_undetectable' ), 10 ); // Change the widget output for ads add_filter( 'dynamic_sidebar_params', array( $this, 'dynamic_sidebar_params' ) ); // Clear BF CSS cache to make sure BAM auto css will be added register_activation_hook( __FILE__, array( 'Better_Ads_Manager', 'plugin_activation_hook' ) ); // used to collect and finalize ads data for performance improvement. add_action( 'save_post', array( $this, 'save_ads_post' ), 10, 3 ); // Detect the WP_Head was finished or not add_action( 'wp_head', array( $this, 'wp_head' ), 1000 ); add_action( 'better-amp/template/head', array( $this, 'wp_head' ), 1000 ); } /** * Load plugin textdomain. * * @since 1.0.0 */ function load_textdomain() { // Register text domain load_plugin_textdomain( 'better-studio', false, 'better-ads-manager/languages' ); } /** * Used for accessing plugin directory URL * * @param string $address * * @return string */ public static function dir_url( $address = '' ) { return plugin_dir_url( __FILE__ ) . $address; } /** * Used for accessing plugin directory Path * * @param string $address * * @return string */ public static function dir_path( $address = '' ) { return plugin_dir_path( __FILE__ ) . $address; } /** * Returns plugin current Version * * @return string */ public static function get_version() { return self::$version; } /** * Build the required object instance * * @param string $object * @param bool $fresh * @param bool $just_include * * @return Better_Ads_Manager|null */ public static function factory( $object = 'self', $fresh = false, $just_include = false ) { if ( isset( self::$instances[ $object ] ) && ! $fresh ) { return self::$instances[ $object ]; } switch ( $object ) { /** * Main Better_Ads_Manager Class */ case 'self': $class = 'Better_Ads_Manager'; break; default: return null; } // Just prepare/includes files if ( $just_include ) { return; } // don't cache fresh objects if ( $fresh ) { return new $class; } self::$instances[ $object ] = new $class; return self::$instances[ $object ]; } /** * Used for accessing alive instance of plugin * * @since 1.0 * * @return Better_Ads_Manager */ public static function self() { return self::factory(); } /** * Used for retrieving options simply and safely for next versions * * @param $option_key * * @return mixed|null */ public static function get_option( $option_key ) { return bf_get_option( $option_key, self::$panel_id ); } /** * Callback: Adds included BetterFramework to BF loader * * Filter: better-framework/loader * * @param $frameworks * * @return array */ function better_framework_loader( $frameworks ) { $frameworks[] = array( 'version' => '3.10.17', 'path' => $this->dir_path( 'includes/libs/better-framework/' ), 'uri' => $this->dir_url( 'includes/libs/better-framework/' ), ); return $frameworks; } /** * Setups features of BetterFramework * * @param $features * * @return array */ function setup_bf_features( $features ) { $features['admin_panel'] = true; $features['meta_box'] = true; $features['taxonomy_meta_box'] = true; $features['minify'] = true; $features['content-injector'] = true; $features['editor-shortcodes'] = true; $features['booster'] = true; return $features; } /** * Init the plugin */ function bf_init() { // Enqueue assets add_action( 'wp_footer', array( $this, 'enqueue_scripts' ), 99 ); // Enqueue admin assets add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) ); // Post ads add_action( 'the_content', array( $this, 'setup_post_content_ads' ), 5 ); // Adds custom columns for banners if ( is_admin() && ! bf_is_doing_ajax() ) { add_filter( 'manage_edit-better-banner_columns', array( $this, 'banner_columns' ) ); add_action( 'manage_better-banner_posts_custom_column', array( $this, 'banner_columns_content' ), 10, 2 ); add_action( 'admin_head', array( $this, 'admin_styles' ) ); } // print header codes (FTP...) add_action( 'wp_head', array( $this, 'print_wp_head' ) ); // print css codes for Gutenberg add_action( 'admin_head', array( $this, 'print_admin_head' ) ); // Handles save for override fields add_filter( 'better-framework/panel/save', 'Better_Ads_Manager::handle_ads_manager_override_save', 1 ); // add more codes to BF custom generated CSS add_filter( 'better-framework/css/final', array( $this, 'bf_final_front_end_css' ) ); } /** * Appends dynamic css codes to the final generated CSS code of BF. * * @param $css * * @return mixed */ function bf_final_front_end_css( $css ) { /** * This css codes will be printed dynamically at the header of site. */ { ob_start(); include bf_append_suffix( self::dir_path( 'css/bam' ), '.css' ); $code = ob_get_clean(); $code = $this->make_prefix_undetectable( $code ); if ( ! empty( $css['css'] ) ) { $css['css'] .= $code; } } return $css; } /** * Callback: Used for registering scripts and styles * * Action: enqueue_scripts */ function enqueue_scripts() { // Dynamic JS codes. // We are making it undetectable so the AdBlockers can not find a pattern to detect it. { ob_start(); include bf_append_suffix( self::dir_path( 'js/bam' ), '.js' ); $code = ob_get_clean(); $code = $this->make_prefix_undetectable( $code ); bf_add_js( $code, true, true ); } } /** * Adds advertising.js to page */ function enqueue_adblocker_detector() { static $printed; if ( ! is_null( $printed ) ) { return; } wp_enqueue_script( 'better-advertising', bf_append_suffix( self::dir_url() . 'js/advertising', '.js' ), array(), Better_Ads_Manager::$version, false ); $printed = true; } /** * Callback: Used for adding JS and CSS files to page * * Action: admin_enqueue_scripts */ function admin_enqueue_scripts() { $dir_url = self::dir_url(); $dir_path = self::dir_path(); bf_enqueue_style( 'better-adsmanager', bf_append_suffix( $dir_url . 'css/better-ads-manager-admin', '.css' ), array(), bf_append_suffix( $dir_path . 'css/better-ads-manager-admin', '.css' ), Better_Ads_Manager::$version ); bf_enqueue_script( 'better-adsmanager', bf_append_suffix( $dir_url . 'js/bam-admin', '.js' ), array(), bf_append_suffix( $dir_path . 'js/bam-admin', '.js' ), Better_Ads_Manager::$version ); bf_localize_script( 'better-adsmanager', 'better_adsmanager_loc', array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'arrow' => is_rtl() ? '←' : '→', 'translation' => array( 'inactive' => __( 'Inactive Ad', 'better-studio' ), 'banner' => __( 'Banner', 'better-studio' ), 'in_active_banner' => __( 'Banner', 'better-studio' ), 'campaign' => __( 'Campaign', 'better-studio' ), 'in_active_campaign' => __( 'Inactive Campaign', 'better-studio' ), 'after_x_paragraph' => array( __( 'After 1st p', 'better-studio' ), __( 'After 2nd p', 'better-studio' ), __( 'After 3rd p', 'better-studio' ), __( 'After %sth p', 'better-studio' ), ), ), ) ); } /** * Get Campaigns * * @param array $extra Extra Options. * * @since 1.0 * @return array */ public static function get_campaigns( $extra = array() ) { /* Extra Usage: array( 'posts_per_page' => 5, 'offset' => 0, 'category' => '', 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' => '', 'post_type' => 'post', 'post_mime_type' => '', 'post_parent' => '', 'post_status' => 'publish', 'suppress_filters' => true ) */ $extra = wp_parse_args( $extra, array( 'post_type' => array( 'better-campaign' ), 'posts_per_page' => 400, ) ); $output = array(); $query = get_posts( $extra ); foreach ( $query as $post ) { $output[ $post->ID ] = $post->post_title; } return $output; } /** * Get Banners * * @param array $extra Extra Options. * * @since 1.0 * @return array */ public static function get_banners( $extra = array() ) { /* Extra Usage: array( 'posts_per_page' => 5, 'offset' => 0, 'category' => '', 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' => '', 'post_type' => 'post', 'post_mime_type' => '', 'post_parent' => '', 'post_status' => 'publish', 'suppress_filters' => true ) */ $label_type = ''; if ( isset( $extra['label_type'] ) ) { $label_type = $extra['label_type']; unset( $extra['label_type'] ); } $extra = bf_merge_args( $extra, array( 'post_type' => array( 'better-banner' ), 'posts_per_page' => - 1, ) ); $output = array(); $query = get_posts( $extra ); foreach ( $query as $post ) { $desc = array(); if ( ! empty( $label_type ) ) { if ( $label_type === 'both' || $label_type === 'format' ) { $format = get_post_meta( $post->ID, 'format', true ); if ( $format === 'normal' || empty( $format ) ) { $desc[] = 'Normal'; } elseif ( $format === 'amp' ) { $desc[] = 'AMP'; } } if ( $label_type === 'both' || $label_type === 'type' ) { $type = get_post_meta( $post->ID, 'type', true ); if ( $type === 'code' ) { $desc[] = 'Adsense'; } elseif ( $type === 'image' ) { $desc[] = 'Image'; } elseif ( $type === 'custom_code' ) { $desc[] = 'HTML'; } elseif ( $type === 'dfp' ) { $desc[] = 'DFP'; } } } $output[ $post->ID ] = $post->post_title . ( ! empty( $desc ) ? ' [' . implode( ' - ', $desc ) . ']' : '' ); } return $output; } /** * Callback: Used to register post types * * Action: init */ function init() { // // Campaigns post type // $labels = array( 'name' => _x( 'Campaigns', 'post type general name', 'better-studio' ), 'singular_name' => _x( 'Campaign', 'post type singular name', 'better-studio' ), 'menu_name' => _x( 'Campaigns', 'admin menu', 'better-studio' ), 'name_admin_bar' => _x( 'Campaigns', 'add new on admin bar', 'better-studio' ), 'add_new' => _x( 'Add New Campaign', 'campaign', 'better-studio' ), 'add_new_item' => __( 'Add New Campaign', 'better-studio' ), 'new_item' => __( 'New Campaign', 'better-studio' ), 'edit_item' => __( 'Edit Campaign', 'better-studio' ), 'view_item' => __( 'View Campaign', 'better-studio' ), 'all_items' => __( 'Campaigns', 'better-studio' ), 'search_items' => __( 'Search Campaigns', 'better-studio' ), 'not_found' => __( 'No campaigns found.', 'better-studio' ), 'not_found_in_trash' => __( 'No campaigns found in Trash.', 'better-studio' ) ); $args = array( 'public' => false, 'labels' => $labels, 'show_in_menu' => 'better-studio/better-ads-manager', 'show_ui' => current_user_can( 'manage_options' ), 'supports' => array( 'title' ), 'exclude_from_search' => true, 'publicly_queryable' => false, 'show_in_nav_menus' => false, 'show_in_admin_bar' => false, ); register_post_type( 'better-campaign', $args ); // // Banners post type // $labels = array( 'name' => _x( 'Banners', 'post type general name', 'better-studio' ), 'singular_name' => _x( 'Banner', 'post type singular name', 'better-studio' ), 'menu_name' => _x( 'Banners', 'admin menu', 'better-studio' ), 'name_admin_bar' => _x( 'Banners', 'add new on admin bar', 'better-studio' ), 'add_new' => _x( 'Add New Banner', 'campaign', 'better-studio' ), 'add_new_item' => __( 'Add New Banner', 'better-studio' ), 'new_item' => __( 'New Banner', 'better-studio' ), 'edit_item' => __( 'Edit Banner', 'better-studio' ), 'view_item' => __( 'View Banner', 'better-studio' ), 'all_items' => __( 'Banners', 'better-studio' ), 'search_items' => __( 'Search Banner', 'better-studio' ), 'not_found' => __( 'No banners found.', 'better-studio' ), 'not_found_in_trash' => __( 'No banners found in Trash.', 'better-studio' ) ); $args = array( 'public' => false, 'labels' => $labels, 'show_in_menu' => 'better-studio/better-ads-manager', 'show_ui' => current_user_can( 'manage_options' ), 'supports' => array( 'title' ), 'exclude_from_search' => true, 'publicly_queryable' => false, 'show_in_nav_menus' => false, 'show_in_admin_bar' => false, ); register_post_type( 'better-banner', $args ); } /** * Setups Shortcodes * * 6. => Setup Shortcodes * * @param $shortcodes * * @return mixed */ function setup_shortcodes( $shortcodes ) { require_once $this->dir_path( 'includes/shortcodes/class-better-ads-shortcode.php' ); require_once $this->dir_path( 'includes/widgets/class-better-ads-widget.php' ); $shortcodes['better-ads'] = array( 'shortcode_class' => 'Better_Ads_Shortcode', 'widget_class' => 'Better_Ads_Widget', ); return $shortcodes; } /** * Used for showing add * * @param $ad_data * * @return string */ function show_ads( $ad_data ) { if ( ! $this->wp_head_finished && ! bf_is_doing_ajax() && empty( $_GET['ajax_related_post'] ) ) { return ''; } $output = ''; if ( ! empty( $ad_data['title'] ) && bf_get_current_sidebar() === '' ) { $title = apply_filters( 'better-framework/shortcodes/title', $ad_data ); if ( is_string( $title ) ) { $output .= $title; } } // ads css class, it comes from VC design option if ( ( $css_class = bf_shortcode_custom_css_class( $ad_data ) ) != '' ) { if ( ! empty( $ad_data['container-class'] ) ) { $ad_data['container-class'] .= ' ' . $css_class; } else { $ad_data['container-class'] = $css_class; } } if ( ! isset( $ad_data['type'] ) ) { if ( is_user_logged_in() ) { return $this->make_prefix_undetectable( $this->show_ads_container( $ad_data, '<div class="bsac-empty-note">' . __( 'Please select type of ad.', 'better-studio' ) . '</div>' ) ); } else { return $this->make_prefix_undetectable( $this->show_ads_container( $ad_data, '' ) ); } } // args of ads banners $args = array( 'show-caption' => isset( $ad_data['show-caption'] ) ? $ad_data['show-caption'] : true, 'lazy-load' => ! empty( $ad_data['lazy-load'] ) ? $ad_data['lazy-load'] : Better_Ads_Manager::get_option( 'lazy_loading_ads' ), ); if ( bf_is_doing_ajax() ) { $ad_item['lazy-load'] = 'disable'; } // // Custom args for ads from outside if ( isset( $ad_data['banner-custom-config'] ) ) { $args = array_merge( $args, $ad_data['banner-custom-config'] ); } switch ( $ad_data['type'] ) { case 'campaign': if ( ! isset( $ad_data['campaign'] ) || $ad_data['campaign'] == 'none' ) { return $this->make_prefix_undetectable( $this->show_ads_empty_note( $ad_data ) ); } if ( empty( $ad_data['count'] ) || intval( $ad_data['count'] ) <= 0 ) { $ad_data['count'] = 1; } $c_query = new WP_Query( array( 'post_type' => 'better-banner', 'order' => $ad_data['order'], 'orderby' => $ad_data['orderby'], 'posts_per_page' => $ad_data['count'], 'meta_query' => array( array( 'key' => 'campaign', 'value' => $ad_data['campaign'], 'compare' => 'LIKE', ), ), ) ); if ( $c_query->have_posts() ) { if ( isset( $ad_data['count'] ) && intval( $ad_data['count'] ) > 0 ) { // count of adds $count = $ad_data['count']; if ( $count > bf_count( $c_query->posts ) ) { $count = bf_count( $c_query->posts ); } $counter = 1; foreach ( $c_query->posts as $post ) { if ( $counter > $count ) { break; } $output .= $this->show_ad_banner( $post->ID, $args ); $counter ++; } } else { foreach ( $c_query->posts as $post ) { $output .= $this->show_ad_banner( $post->ID, $args ); } } return $this->make_prefix_undetectable( $this->show_ads_container( $ad_data, $output ) ); } else { return $this->make_prefix_undetectable( $this->show_ads_empty_note( $ad_data ) ); } break; // /campaign case 'banner': $ad_data['columns'] = 1; if ( ! isset( $ad_data['banner'] ) || $ad_data['banner'] === 'none' ) { return $this->show_ads_empty_note( $ad_data ); } $ad_code = $this->show_ad_banner( $ad_data['banner'], $args ); // // Hack: The layout=responsive (data-full-width-responsive="true") needs a class in AMP to make it // Full width (out of wrapper) by CSS // if ( stripos( $ad_code, 'layout=responsive' ) ) { if ( empty( $ad_data['container-class'] ) ) { $ad_data['container-class'] = 'bsac-full-width'; } else { $ad_data['container-class'] .= ' bsac-full-width'; } } return $this->make_prefix_undetectable( $this->show_ads_container( $ad_data, $ad_code ) ); break; // /banner default: return $this->make_prefix_undetectable( $this->show_ads_empty_note( $ad_data ) ); break; } } /** * Handy function used to show empty message * * @param $ad_data * @param string $message * @param string $link * * @return string */ private function show_ads_empty_note( $ad_data, $message = '', $link = '' ) { if ( ! is_user_logged_in() ) { return $this->show_ads_container( $ad_data, '' ); } if ( empty( $message ) ) { switch ( $ad_data['type'] ) { case 'banner': $message = __( 'Please select an ad banner.', 'better-studio' ); if ( empty( $link ) ) { if ( bf_get_current_sidebar() ) { $link = admin_url( 'widgets.php' ); } elseif ( is_page() ) { if ( current_user_can( 'edit_posts' ) ) { $link = get_edit_post_link( get_the_ID() ); } } else { $link = admin_url( 'admin.php?page=better-studio/better-ads-manager' ); } } break; case 'campaign': if ( $ad_data['campaign'] !== 'none' ) { if ( empty( $link ) ) { $link = admin_url( 'edit.php?post_type=better-banner' ); } $message = sprintf( __( 'Selected campaign have not any active ad, Select an ad for "%s" campaign.', 'better-studio' ), get_the_title( $ad_data['campaign'] ) ); } else { if ( empty( $link ) ) { if ( bf_get_current_sidebar() ) { $link = admin_url( 'widgets.php' ); } elseif ( is_page() ) { if ( current_user_can( 'edit_posts' ) ) { $link = get_edit_post_link( get_the_ID() ); } } else { $link = admin_url( 'admin.php?page=better-studio/better-ads-manager' ); } } $message = __( 'Selected a campaign fo this ad banner.', 'better-studio' ); } break; default: if ( empty( $link ) ) { if ( bf_get_current_sidebar() ) { $link = admin_url( 'widgets.php' ); } elseif ( is_page() ) { if ( current_user_can( 'edit_posts' ) ) { $link = get_edit_post_link( get_the_ID() ); } } else { $link = admin_url( 'admin.php?page=better-studio/better-ads-manager' ); } } $message = __( 'Please select an ad banner or campaign.', 'better-studio' ); break; } } if ( $this->get_current_format() === 'amp' ) { better_amp_enqueue_ad( 'image' ); } if ( empty( $link ) ) { return $this->show_ads_container( $ad_data, '<div class="bsac-empty-note">' . $message . '</div>' ); } else { return $this->show_ads_container( $ad_data, '<div class="bsac-empty-note"><a href="' . $link . '">' . $message . '</a></div>' ); } } /** * Handy function used to generate ads container * * @param $ad_data * @param $html * * @return string */ private function show_ads_container( $ad_data, $html ) { if ( ! isset( $ad_data['container-class'] ) ) { $ad_data['container-class'] = ''; } if ( empty( $ad_data['align'] ) ) { $ad_data['align'] = 'center'; } if ( empty( $ad_data['columns'] ) ) { $ad_data['columns'] = 1; } $ad_data['container-class'] .= ' bsac-align-' . $ad_data['align']; $ad_data['container-class'] .= ' bsac-column-' . $ad_data['columns']; if ( isset( $ad_data['float'] ) && $ad_data['float'] != 'none' ) { $ad_data['container-class'] .= ' bsac-float-' . $ad_data['float']; } // // Hide ads in device classes // Should not work for campaigns // if ( $ad_data['type'] !== 'campaign' ) { $_check = array(); $_device_hidden_classes = array( 'bsac-hide-on-phone', 'bsac-hide-on-tablet-portrait', 'bsac-hide-on-tablet-landscape', 'bsac-hide-on-desktop', ); foreach ( $_device_hidden_classes as $class ) { if ( ! isset( $_check[ $class ] ) && stripos( $html, $class ) ) { $ad_data['container-class'] .= " $class"; $_check[ $class ] = ''; } } } $output = '<div class="bsac bsac-clearfix ' . $ad_data['container-class'] . '">' . $html . '</div>'; return $output; } /** * Handy function to remove "\n" because some plugins are making problem for this and TinyMCE * * @param string $text * * @return mixed */ private function _fix_new_lines( $text = '' ) { return str_replace( array( "\n", "\t" ), ' ', $text ); } /** * Returns ads current format * * @return string */ public function get_current_format() { static $format; if ( $format ) { return $format; } if ( function_exists( 'is_better_amp' ) && is_better_amp() ) { $format = 'amp'; } else { $format = 'normal'; } return $format; } /** * Handy function to return ad file template by ad type * * todo add functionality to override template files in themes * * @param string $ad_type * * @return string */ public function get_template_file( $ad_type = 'image' ) { return Better_Ads_Manager::dir_path( 'templates/' . $this->get_current_format() . '-' . $ad_type . '.php' ); } /** * Handy function used for showing ad banner from post id * * @param $banner_id * * @return string */ private function show_ad_banner( $banner_id, $args = array() ) { // used inside ad template files $args = bf_merge_args( $args, array( 'show-caption' => true ) ); $banner_data = array_merge( $this->get_banner_data( $banner_id ), $args ); $output = ''; switch ( $banner_data['type'] ) { case 'dfp': if ( ! self::get_option( 'dfp_code' ) ) { $message = __( 'Please enter DFP before </head> code in Better Ads Manager panel.', 'better-studio' ); $link = admin_url( 'admin.php?page=better-studio/better-ads-manager' ); return $this->show_ads_empty_note( $banner_data, $message, $link ); } if ( empty( $banner_data['dfp_spot'] ) ) { $message = __( 'Please select a spot id for this banner or enter custom ad code.', 'better-studio' ); $link = ''; if ( current_user_can( 'edit_posts' ) ) { $link = get_edit_post_link( $banner_data['id'] ); } return $this->show_ads_empty_note( $banner_data, $message, $link ); } elseif ( $banner_data['dfp_spot'] === 'custom' ) { if ( empty( $banner_data['custom_dfp_code'] ) ) { $message = __( 'Custom DFP was selected but the code was not entered.', 'better-studio' ); $link = ''; if ( current_user_can( 'edit_posts' ) ) { $link = get_edit_post_link( $banner_data['id'] ); } return $this->show_ads_empty_note( $banner_data, $message, $link ); } } else { // // Code examples: // Single dimention: // googletag.defineSlot('/21719673487/AbruzzoLive/F1', [300, 100], 'div-gpt-ad-1535184030575-0').addService(googletag.pubads()); // // // Multiple dimention: // googletag.defineSlot('/21719673487/AbruzzoLive/3-Alive-Mobile', [[300, 250], [320, 100]], 'div-gpt-ad-1535361184691-0').addService(googletag.pubads()); // $spot = explode( '--', str_replace( '\'', '', $banner_data['dfp_spot'] ) ); if ( bf_count( $spot ) < 4 ) { $message = __( 'The auto selected spot id is not valid. Please enter custom code.', 'better-studio' ); $link = ''; if ( current_user_can( 'edit_posts' ) ) { $link = get_edit_post_link( $banner_data['id'] ); } return $this->show_ads_empty_note( $banner_data, $message, $link ); } $banner_data['dfp_spot_id'] = trim( $spot[0] ); // If the d spot have multiple size dimensions Google recommends this: // "If using multi-size tags, we recommend either omitting this // (in that case, the size of the element takes the size of the selected creative when rendered) or // making both dimensions large enough to contain the largest eligible creative." // https://support.google.com/admanager/answer/1638622?hl=en // The single dimension code only have 4 element in array, more elements means multiple dimensions if ( bf_count( $spot ) > 4 ) { $banner_data['dfp_spot_width'] = ''; $banner_data['dfp_spot_height'] = ''; } else { $banner_data['dfp_spot_width'] = str_replace( array( '[', ' ' ), '', $spot[1] ); $banner_data['dfp_spot_height'] = str_replace( array( ']', ' ' ), '', $spot[2] ); } // The last item is always the ad ID $banner_data['dfp_spot_tag'] = trim( end( $spot ) ); } $ad_code = include $this->get_template_file( $banner_data['type'] ); $output .= $this->show_ad_banner_container( $banner_data, $ad_code ); break; case 'image': $ad_code = include $this->get_template_file( $banner_data['type'] ); $output .= $this->show_ad_banner_container( $banner_data, $ad_code ); break; // code is Google Adsense code case 'code': // // Advanced: // Changes AdSense banner size from the size detected in code or the size that passed for ad location in themes! // if ( true ) // to fix the PHPStorm reformat bug! { $c_width = $c_height = false; // ad size extracted from AdSense code if ( ! empty( $banner_data['width'] ) && ! empty( $banner_data['height'] ) ) { $c_width = $banner_data['width']; $c_height = $banner_data['height']; } // ad size passed from parent! (usually we use it in ad location to show specific ad size by default) elseif ( ! empty( $banner_data['adsense_default_size'][0] ) && ! empty( $banner_data['adsense_default_size'][1] ) ) { $c_width = $banner_data['adsense_default_size'][0]; $c_height = $banner_data['adsense_default_size'][1]; } // // Detects inline width & height and set's it to default size if was not override! // if ( $c_width && $c_height && empty( $banner_data['size_desktop'] ) ) { $banner_data['size_desktop'] = array( $c_width, $c_height, ); } } if ( ! empty( $banner_data['ad-client'] ) && ! empty( $banner_data['ad-slot'] ) ) { $ad_code = include $this->get_template_file( 'adsense' ); $output .= $this->show_ad_banner_container( $banner_data, $ad_code ); } else { $output .= $this->show_ad_banner_container( $banner_data, str_replace( "\n", '', do_shortcode( $banner_data['code'] ) ) ); } break; case 'custom_code': Better_Ads_Manager()->enqueue_adblocker_detector(); $ad = do_shortcode( $banner_data['custom_code'] ); $caption = ! empty( $banner_data['caption'] ) && $args['show-caption'] ? Better_Ads_Manager::get_option( 'caption_position' ) : false; if ( $caption == 'above' ) { $ad = "<p class='bsac-caption bsac-caption-above'>{$banner_data['caption']}</p>" . $ad; } elseif ( $caption ) { $ad .= "<p class='bsac-caption bsac-caption-below'>{$banner_data['caption']}</p>"; } // print general ad style if ( bf_is_amp() == 'better' ) { better_amp_enqueue_ad(); } $output .= $this->show_ad_banner_container( $banner_data, $ad ); break; } return $output; } /** * Handy function used to create single ad container * * @param $banner_data * @param $html * * @return string */ private function show_ad_banner_container( $banner_data, $html ) { if ( empty( $html ) ) { return ''; } $banner_data['custom_class'] = 'bsac-container bsac-type-' . $banner_data['type'] . ' ' . $banner_data['custom_class']; if ( ! empty( $banner_data['custom_css'] ) ) { Better_Framework()->assets_manager()->add_css( $banner_data['custom_css'], true ); } if ( ! $banner_data['show_desktop'] ) { $banner_data['custom_class'] .= ' bsac-hide-on-desktop'; } if ( ! $banner_data['show_tablet_portrait'] ) { $banner_data['custom_class'] .= ' bsac-hide-on-tablet-portrait'; } if ( ! $banner_data['show_tablet_landscape'] ) { $banner_data['custom_class'] .= ' bsac-hide-on-tablet-landscape'; } if ( ! $banner_data['show_phone'] ) { $banner_data['custom_class'] .= ' bsac-hide-on-phone'; } return '<div id="' . $banner_data['element_id'] . '" class="' . $banner_data['custom_class'] . '" itemscope="" itemtype="https://schema.org/WPAdBlock" data-adid="' . $banner_data['id'] . '" data-type="' . $banner_data['type'] . '">' . $html . '</div>'; } /** * Handy function used for safely getting banner data * * @param $id * * @return array */ function fetch_banner_data( $id ) { // Return from saved cache if ( $data = get_transient( $this->get_meta_cache_id( $id ) ) ) { if ( empty( $data['element_id'] ) ) { $data['element_id'] = 'bsac-' . $data['id'] . '-' . mt_rand(); } return $data; } $data = array( 'id' => $id, 'title' => get_the_title( $id ), 'campaign' => bf_get_post_meta( 'campaign', $id ), 'format' => bf_get_post_meta( 'format', $id ), 'type' => bf_get_post_meta( 'type', $id ), 'caption' => bf_get_post_meta( 'caption', $id ), ); if ( $data['format'] === 'normal' ) { /** * * Normal Adsense code * */ if ( $data['type'] === 'code' ) { $data['code'] = bf_get_post_meta( 'code', $id, '' ); // // Size fields // $_size_check = array( 'vertical' => '', 'horizontal' => '', 'rectangle' => '', ); $_size_fields = array( 'size_desktop', 'size_tablet_portrait', 'size_tablet_landscape', 'size_phone', ); foreach ( $_size_fields as $_size_f ) { $_size = bf_get_post_meta( $_size_f, $id, '' ); if ( empty( $_size ) ) { $data[ $_size_f ] = ''; continue; } if ( isset( $_size_check[ $_size ] ) ) { $data[ $_size_f ] = $_size; } else { $data[ $_size_f ] = explode( '_', $_size ); } } if ( ! empty( $data['code'] ) ) { $data['active-ad'] = true; } } /** * * Normal Image Ad * */ elseif ( $data['type'] == 'image' ) { $_fields = array( 'img' => '', 'caption' => '', 'url' => '', 'target' => '', 'no_follow' => '', ); foreach ( $_fields as $k => $v ) { $data[ $k ] = bf_get_post_meta( $k, $id, $v ); } if ( ! empty( $data['img'] ) ) { $data['active-ad'] = true; } } /** * * Normal DFP * */ elseif ( $data['type'] == 'dfp' ) { $_fields = array( 'dfp_spot' => '', 'custom_dfp_code' => '', ); foreach ( $_fields as $k => $v ) { $data[ $k ] = bf_get_post_meta( $k, $id, $v ); } if ( ! empty( $data['dfp_spot'] ) ) { if ( $data['dfp_spot'] === 'custom' && ! empty( $data['custom_dfp_code'] ) ) { $data['active-ad'] = true; } } } /** * * Normal Custom Code * */ elseif ( $data['type'] === 'custom_code' ) { $data['custom_code'] = bf_get_post_meta( 'custom_code', $id, '' ); if ( ! empty( $data['custom_code'] ) ) { $data['active-ad'] = true; } } /** * * Normal Ad -> Show fields * */ $_fields = array( 'show_desktop' => true, 'show_tablet_portrait' => true, 'show_tablet_landscape' => true, 'show_phone' => true, ); foreach ( $_fields as $k => $v ) { $data[ $k ] = bf_get_post_meta( $k, $id, $v ); } } elseif ( $data['format'] === 'amp' ) { /** * * AMP Adsense code * */ if ( $data['type'] === 'code' ) { $data['code'] = bf_get_post_meta( 'code', $id, '' ); $data['size'] = bf_get_post_meta( 'amp_size', $id, '' ); if ( $data['size'] === 'custom' ) { $data['size'] = array( 'width' => bf_get_post_meta( 'amp_size_width', $id, '' ), 'height' => bf_get_post_meta( 'amp_size_height', $id, '' ), ); } else { $_size = explode( '_', $data['size'] ); $data['size'] = array( 'width' => isset( $_size[0] ) ? $_size[0] : '', 'height' => isset( $_size[1] ) ? $_size[1] : '', ); } if ( ! empty( $data['code'] ) ) { $data['active-ad'] = true; } } /** * * Normal Image Ad * */ elseif ( $data['type'] == 'image' ) { $_fields = array( 'img' => '', 'caption' => '', 'url' => '', 'target' => '', 'no_follow' => '', ); foreach ( $_fields as $k => $v ) { $data[ $k ] = bf_get_post_meta( $k, $id, $v ); } if ( ! empty( $data['img'] ) ) { $data['active-ad'] = true; } } /** * * AMP DFP * */ elseif ( $data['type'] == 'dfp' ) { $_fields = array( 'dfp_spot' => '', 'dfp_custom_code' => '', ); foreach ( $_fields as $k => $v ) { $data[ $k ] = bf_get_post_meta( $k, $id, $v ); } if ( ! empty( $data['dfp_spot'] ) ) { if ( $data['dfp_spot'] === 'custom' && ! empty( $data['custom_dfp_code'] ) ) { $data['active-ad'] = true; } } } /** * * Normal Custom Code * */ elseif ( $data['type'] === 'custom_code' ) { $data['custom_code'] = bf_get_post_meta( 'custom_code', $id, '' ); if ( ! empty( $data['custom_code'] ) ) { $data['active-ad'] = true; } } /** * * Normal Ad -> Show fields * */ $_fields = array( 'show_desktop' => true, 'show_tablet_portrait' => true, 'show_tablet_landscape' => true, 'show_phone' => true, ); foreach ( $_fields as $k => $v ) { $data[ $k ] = bf_get_post_meta( $k, $id, $v ); } } if ( ! isset( $data['active-ad'] ) ) { $data['active-ad'] = false; } /** * * Advanced custom css/class/id * */ $_fields = array( 'custom_class' => '', 'custom_id' => '', 'custom_css' => '', ); foreach ( $_fields as $k => $v ) { if ( $k === 'custom_id' ) { $data['element_id'] = bf_get_post_meta( $k, $id, $v ); } else { $data[ $k ] = bf_get_post_meta( $k, $id, $v ); } } /** * Extract Adsense data from the code in both normal and AMP ads */ if ( $data['type'] === 'code' && $data['code'] ) { $data = $data + better_ads_extract_google_ad_code_data( $data['code'] ); } // Cache it set_transient( $this->get_meta_cache_id( $id ), $data, MONTH_IN_SECONDS ); if ( empty( $data['element_id'] ) ) { $data['element_id'] = 'bsac-' . $data['id'] . '-' . mt_rand(); } return $data; } /** * Handy function used for safely getting banner data * * @param $id * * @return array */ function get_banner_data( $id ) { $data = $this->fetch_banner_data( $id ); return $data; } /** * Handy function used for safely getting banner data * * @param $id * * @return array */ function get_banner_fallback_data( $id ) { $data = array( 'id' => $id, 'title' => get_the_title( $id ), 'type' => 'image', 'code' => '', 'img' => '', 'caption' => '', 'url' => '', 'target' => '', 'no_follow' => '', ); if ( get_post_meta( $id, 'fallback_type', true ) != false ) { $data['type'] = get_post_meta( $id, 'fallback_type', true ); } if ( get_post_meta( $id, 'fallback_code', true ) != false ) { $data['code'] = get_post_meta( $id, 'fallback_code', true ); } if ( get_post_meta( $id, 'fallback_img', true ) != false ) { $data['img'] = get_post_meta( $id, 'fallback_img', true ); } if ( get_post_meta( $id, 'fallback_caption', true ) != false ) { $data['caption'] = get_post_meta( $id, 'fallback_caption', true ); } if ( get_post_meta( $id, 'fallback_url', true ) != false ) { $data['url'] = get_post_meta( $id, 'fallback_url', true ); } if ( get_post_meta( $id, 'fallback_target', true ) != false ) { $data['target'] = get_post_meta( $id, 'fallback_target', true ); } if ( bf_count( get_post_meta( $id, 'fallback_no_follow' ) ) > 0 ) { $data['no_follow'] = get_post_meta( $id, 'fallback_no_follow', true ); } return $data; } /** * Used for adding inline ads to post content in frond end * * @param string $content * * @return string */ function setup_post_content_ads( $content = '' ) { // Add post ads only 1 time if ( bf_is_doing_ajax() ) { static $initialized; if ( $initialized ) { return $content; } else { $initialized = true; } } if ( is_feed() ) { return $content; } if ( ! bf_is_doing_ajax() && ( ! is_singular() || is_front_page() ) ) { return $content; } if ( ! $this->wp_head_finished && ! bf_is_doing_ajax() && empty( $_GET['ajax_related_post'] ) ) { return $content; } // // Ads added to post before! // { static $processed_posts; if ( is_null( $processed_posts ) ) { $processed_posts = array(); } if ( isset( $processed_posts[ get_the_ID() ] ) ) { return $content; } else { $processed_posts[ get_the_ID() ] = true; } } // // Disable ads // if ( ! better_ads_ad_can_be_shown( 'shortcode' ) ) { return $content; } // // Ad locations // todo add RSS ads // if ( $this->get_current_format() === 'amp' ) { $locations = array( 'amp_post_inline' => array( 'type' => 'paragraph', 'container-class' => 'bsac-post-inline', 'add-align' => true, 'multiple' => true, ), 'amp_post_content_before' => array( 'type' => 'before', 'container-class' => 'bsac-post-top', 'add-align' => true, ), 'amp_post_content_middle' => array( 'type' => 'middle', 'container-class' => 'bsac-post-middle', 'add-align' => true, ), 'amp_post_content_after' => array( 'type' => 'after', 'container-class' => 'bsac-post-bottom', 'add-align' => true, ), ); } else { $locations = array( 'ad_post_inline' => array( 'type' => 'paragraph', 'container-class' => 'bsac-post-inline', 'add-align' => true, 'multiple' => true, ), 'ad_post_top' => array( 'type' => 'before', 'container-class' => 'bsac-post-top', 'add-align' => true, ), 'ad_post_middle' => array( 'type' => 'middle', 'container-class' => 'bsac-post-middle', 'add-align' => true, ), 'ad_post_bottom' => array( 'type' => 'after', 'container-class' => 'bsac-post-bottom', 'add-align' => true, ), ); } foreach ( $locations as $k => $v ) { $data = array(); if ( ! empty( $v['multiple'] ) ) { $data = better_ads_get_ad_data( $k, true ); } else { $data[] = better_ads_get_ad_data( $k, false ); } foreach ( $data as $ad_item_k => $ad_item ) { if ( empty( $ad_item['active_location'] ) ) { continue; } if ( empty( $ad_item['align'] ) ) { $ad_item['align'] = 'center'; } if ( ! empty( $v['container-class'] ) ) { $ad_item['container-class'] = $v['container-class']; } else { $ad_item['container-class'] = ''; } if ( $v['add-align'] ) { $ad_item['container-class'] .= ' bsac-float-' . $ad_item['align']; } // Position of ad if ( $v['type'] === 'paragraph' ) { $inline_ad['paragraph'] = intval( $ad_item['paragraph'] ); if ( $inline_ad['paragraph'] <= 0 ) { continue; } $position = $inline_ad['paragraph']; } elseif ( $v['type'] === 'before' ) { $position = 'top'; } elseif ( $v['type'] === 'middle' ) { $position = 'middle'; } else { $position = 'bottom'; } // inject it bf_content_inject( array( 'priority' => 1100, // High Priority [ again in our standards ;)) ] 'position' => $position, 'content' => $this->show_ads( $ad_item ), 'config' => 'better-adsmanager', ) ); } // foreach items } // foreach locations if ( $block_elements = self::get_option( 'html_block_tags' ) ) { bf_content_inject_config( 'better-adsmanager', array( 'blocks_elements' => explode( ',', $block_elements ), ) ); } return $content; } /** * Callback: Ajax callback for retrieving blocked ads fallback! */ function callback_blocked_ads() { if ( ! empty( $_POST["ads"] ) ) { $ads_list = $_POST["ads"]; } else { $ads_list = array(); } // Create ads fallback code foreach ( (array) $ads_list as $ad_id => $ad ) { if ( empty( $ad['ad_id'] ) || empty( $ad['element_id'] ) ) { continue; } // prepare data $banner_data = $this->get_banner_fallback_data( $ad['ad_id'] ); $output = ''; switch ( $banner_data['type'] ) { case 'image': // custom title if ( ! empty( $banner_data['caption'] ) ) { $title = $banner_data['caption']; } else { $title = $banner_data['title']; } if ( ! empty( $banner_data['url'] ) ) { $output .= '<a itemprop="url" class="bsac-link" href="' . $banner_data['url'] . '" target="' . $banner_data['target'] . '" '; $output .= $banner_data['no_follow'] ? ' rel="nofollow" >' : '>'; } $output .= '<img class="bsac-image" src="' . $banner_data['img'] . '" alt="' . $title . '" />'; if ( ! empty( $banner_data['caption'] ) ) { $output .= '<span class="bsac-caption">' . $banner_data['caption'] . '</span>'; } if ( ! empty( $banner_data['url'] ) ) { $output .= '</a>'; } break; case 'code': $output .= $banner_data['code']; if ( ! empty( $banner_data['caption'] ) ) { $output .= '<span class="bsac-caption">' . $banner_data['caption'] . '</span>'; } break; } $ads_list[ $ad_id ]['code'] = $this->make_prefix_undetectable( $output ); } $result = array( 'ads' => $ads_list ); die( json_encode( apply_filters( 'better-ads/blocked-ads/fallback', $result ) ) ); } /** * Callback: Enable oculus error logging system for plugin * Filter : better-framework/oculus/logger/filter * * @access private * * @param boolean $bool previous value * @param string $product_dir * @param string $type_dir * * @return bool true if error belongs to theme, previous value otherwise. */ function oculus_logger( $bool, $product_dir, $type_dir ) { if ( $type_dir === 'plugins' && $product_dir === 'better-adsmanager' ) { return false; } return $bool; } /** * Columns for banners * * @param $columns * * @return array */ function banner_columns( $columns ) { $columns = array( 'cb' => '<input type="checkbox" />', 'format' => __( 'Ad', 'better-studio' ), 'title' => __( 'Ad Name', 'better-studio' ), 'shortcode' => __( 'Shortcode', 'better-studio' ), 'date' => __( 'Date', 'better-studio' ), 'campaign' => __( 'Campaign', 'better-studio' ), ); return $columns; } /** * Content of columns * * @param $column * @param $post_id */ function banner_columns_content( $column, $post_id ) { switch ( $column ) { case 'format' : $format = bf_get_post_meta( 'format', $post_id ); if ( $format === 'normal' || empty( $format ) ) { echo '<strong class="bsacadformat bsacadformatnormal" title="' . __( 'Normal Ad ', 'better-studio' ) . '"><i class="fa fa-desktop"></i></strong>'; } else { echo '<strong class="bsacadformat bsacadformatamp" title="' . __( 'AMP Ad', 'better-studio' ) . '"><i class="fa fa-mobile"></i></strong>'; } $type = bf_get_post_meta( 'type', $post_id ); if ( $type == 'code' ) { echo '<strong class="bsacadtype bsacadtypeadsense" title="' . __( 'Google AdSense Ad', 'better-studio' ) . '"><i class="fa fa-google" "></i></strong>'; } elseif ( $type == 'image' ) { echo '<strong class="bsacadtype bsacadtypeimage" title="' . __( 'Custom Image Ad', 'better-studio' ) . '"><i class="fa fa-image" "></i></strong>'; } elseif ( $type == 'dfp' ) { echo '<strong class="bsacadtype bsacadtypedfp" title="' . __( 'Google DFP Ad', 'better-studio' ) . '"><i class="fa fa-google" "></i></strong>'; } else { echo '<strong class="bsacadtype bsacadtypecode" title="' . __( 'Custom Code Ad', 'better-studio' ) . '"><i class="fa fa-code" "></i></strong>'; } break; case 'shortcode' : $banner_data = $this->get_banner_data( $post_id ); if ( empty( $banner_data['active-ad'] ) ) { echo '<strong class="bsacshortcodeempty">' . __( 'Ad configuration is not correct.', 'better-studio' ) . '</strong>'; } else { echo '<strong class="bsacshortcodecopy">' . "[better-ads type='banner' banner='{$post_id}' ]" . '</strong>'; } break; case 'campaign' : $campaigns = bf_get_post_meta( 'campaign', $post_id ); $all_camps = better_ads_get_campaigns_option( - 1 ); if ( $campaigns && $campaigns != 'none' ) { foreach ( (array) $campaigns as $camp ) { if ( isset( $all_camps[ $camp ] ) ) { echo '<strong class="bsacadcamp">' . $all_camps[ $camp ] . '</strong>'; } } } break; default : break; } } /** * Fix admin menu margins for better UX */ public function admin_styles() { ?> <style> #adminmenu li#toplevel_page_better-studio-better-ads-manager, #adminmenu .toplevel_page_better-amp-translation { margin-top: 10px; margin-bottom: 10px; } #adminmenu li[id^="toplevel_page_better-studio"] + li#toplevel_page_better-studio-better-ads-manager, #adminmenu li[id^="toplevel_page_better-studio"] + .toplevel_page_better-amp-translation { margin-top: -10px; margin-bottom: 10px; } </style> <?php } /** * Prints codes into site header. * * @hooked wp_head * * @since 1.9 */ public function print_wp_head() { // FTP code if ( $dfp_code = self::get_option( 'dfp_code' ) ) { echo $dfp_code; } } /** * Save only active override fields * * @param array $args * * @return array */ public static function handle_ads_manager_override_save( $args = array() ) { if ( $args['id'] !== 'better_ads_manager' ) { return $args; } $fields_list = better_ads_get_override_fields_list(); // All fields $sections = better_ads_get_override_sections_list(); // All sections $ad_fields = array(); // // Collect all active (For performance improvement) // foreach ( $fields_list as $field ) { if ( isset( $field['ad-id'] ) && isset( $field['id'] ) ) { $ad_fields[ $field['ad-id'] ][] = $field['id']; } } // // All Types // foreach ( $sections as $type_id => $type ) { // // Sections // foreach ( $type['items'] as $section ) { // // Detected fields // foreach ( $ad_fields as $field_k => $field ) { // Ad condition ID $condition_field_id = 'ovr_' . $section['id'] . '-' . $field_k . '-active'; // IF ad override is active if ( ! isset( $args['data'][ $condition_field_id ] ) || ! $args['data'][ $condition_field_id ] ) { unset( $args['data'][ $condition_field_id ] ); foreach ( $field as $_k ) { unset( $args['data'][ 'ovr_' . $section['id'] . '-' . $_k ] ); } } } } } return $args; } // handle_ads_manager_override_save /** * Removes all override settings in panel * * @return array */ public static function reset_panel_override_settings() { $lang = bf_get_current_language_option_code(); $ads_options = get_option( self::$panel_id . $lang ); // // Remove all options that start with "ovr_" // foreach ( $ads_options as $id => $value ) { if ( substr( $id, 0, 3 ) === 'ovr_' ) { unset( $ads_options[ $id ] ); } } // Updates option update_option( self::$panel_id . $lang, $ads_options ); Better_Framework()->admin_notices()->add_notice( array( 'msg' => __( 'All ad override settings was removed.', 'better-studio' ), ) ); return array( 'status' => 'succeed', 'msg' => __( 'All ad override settings was removed.', 'better-studio' ), 'refresh' => true ); } /** * Filter Callback: Registers shortcode to BetterStudio Editor Shortcodes Plugin * * @param $shortcodes * * @return mixed */ public static function register_shortcode_to_editor( $shortcodes ) { $shortcodes['better-ads'] = array( 'type' => 'button', 'label' => __( 'Better Ads', 'better-studio' ), 'callback' => 'BetterAds', 'register' => false, 'content' => '[better-ads]<br />' ); return $shortcodes; } /** * Configs BF Editor Shortcodes library * * @param $config * * @return array */ public function editor_shortcodes_config( $config ) { // dynamic styles $config['editor-dynamic-style'][] = Better_Ads_Manager::dir_path( 'includes/dynamics/editor_css.php' ); // Show sidebars $config['layouts'] = false; return $config; } /** * Returns (and generates) the unique ID for BAM codes * * @param bool $reset * * @return string */ function get_unique_id( $reset = false ) { $id = false; $key = 'bam-unique-id'; if ( ! $reset ) { $id = get_option( $key, $id ); } if ( ! $id ) { $id = substr( str_shuffle( "abcdefghijklmnopqrstuvwxyz" ), 0, mt_rand( 3, 10 ) ); update_option( $key, $id, true ); } return $id; } /** * Changes all BAM related classes and texts to the unique ID * This makes BAM completely undetectable. * * @return mixed */ function make_prefix_undetectable( $code ) { return str_replace( array( 'bsac', 'Better_Ads_Manager_Ajax_URL', 'Better_Ads_Manager', 'better-ads', ), array( BAM_PREFIX, '\'' . admin_url( 'admin-ajax.php' ) . '\'', BAM_PREFIX, BAM_PREFIX, ), $code ); } /** * Filter callback: Used for clearing the unique id on save * * @param $output * @param $args * * @return string */ function callback_panel_save_result( $output, $args ) { // change only for BAM panel if ( $args['id'] == self::$panel_id ) { // Reset unique ID self::get_unique_id( true ); } return $output; } /** * @hooked admin_head */ function print_admin_head() { // Prints BetterAds CSS codes in the header of Gutenberg pages // This css code is dynamic if ( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) { $code = ''; ob_start(); include bf_append_suffix( self::dir_path( 'css/bam' ), '.css' ); $code .= ob_get_clean(); ob_start(); include bf_append_suffix( self::dir_path( 'css/gutenberg' ), '.css' ); $code .= ob_get_clean(); $code = $this->make_prefix_undetectable( $code ); echo "<!-- Better Ads Dynamic CSS Code --><style>{$code}</style>"; } } /** * Changes the output of BetterAds widget to make it not detectable for Ad Blcokers! * * @param $params * * @return mixed */ function dynamic_sidebar_params( $params ) { if ( ! empty( $params[0]['widget_id'] ) && substr( $params[0]['widget_id'], 0, 11 ) === "better-ads-" ) { $params[0]['before_widget'] = Better_Ads_Manager()->make_prefix_undetectable( $params[0]['before_widget'] ); } return $params; } /** * Clear's BF cache to generate it again to make sure the BAM * auto generated CSS codes will be added to BF CSS cache. */ public static function plugin_activation_hook() { global $wpdb; delete_transient( '__better_framework__widgets_css' ); $wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->options WHERE option_name LIKE %s ", '_transient___better_framework__panel_css%' ) ); delete_transient( '__better_framework__menu_css' ); delete_transient( '__better_framework__terms_css' ); $wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->options WHERE option_name LIKE %s ", '_transient___better_framework__final_fe_css%' ) ); $wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->options WHERE option_name LIKE %s ", '_transient___better_framework__final_fe_css_version%' ) ); } /** * Clear Ad caches while saving * * @param $post_id * @param $post * @param $update */ function save_ads_post( $post_id, $post, $update ) { if ( wp_is_post_revision( $post_id ) ) { return; } $post_type = get_post_type( $post_id ); // IS ads post? if ( 'better-banner' != $post_type ) { return; } // collect final data delete_transient( $this->get_meta_cache_id( $post_id ) ); } /** * Return meta cache ID based for current version of plugin * * @param $post_id * * @return string */ function get_meta_cache_id( $post_id ) { return $this->meta_cache_id . '-' . self::$version . '-' . $post_id . '-'; } /** * hooked to wp_head action */ function wp_head() { // Save this to know the wp_head was finished or not // do not show ads on the the_content inside the wp_head $this->wp_head_finished = true; if ( ! empty( self::get_option( 'custom_css_code' ) ) ) { echo '<style>', str_replace( array( '<style>', '</style>' ), '', self::get_option( 'custom_css_code' ) ), '</style>'; } echo self::get_option( 'custom_header_code' ); } } PK ���[�@�F F images/adtype-dfp.pngnu �[��� �PNG IHDR Z 7 ��� dPLTE������.�@???���1�C�����މ���� �����ڱ��0�A/�A�� �� ���������� �����¤ѫ�� ��������ʤ�����������Ǻ���մ2�E-�E��������ֶ���ʞ�ǚ�� �� �� ����������������������Ķ۽�����ͥ�˟+�C�� �� ����������������˻��ٻ�Ա�����ˡ\\\0�B�� ����������������������ʳ���Φ{��*�B.�?=�8�� ������������������������������æҮ����̣���r�~+�D1�CG�8��)��)���� ��μ�¸ܾ����ٹ�Ϩ�ŗ��������zzza�olllWWWPPP2�F5�F2�E.�@V�)g�#t����������̿�Ž���ϧ���������������u��n�zk�x��t[�jY�hfffW�eZZZCCC'�A��?8�?4�<6�4N�+m�j�������������������������ﭟШ���z���Ō~�����V��V?�R?�NHHH��A��>K�1[�*_�'������ �����V�l �IDATX��gSQ���: Ui" �DT{I��k,�D�-��{��{��O�,�d�觐/ �����Ͻs�ebĈ#�_b����?|��jO�*��Cs�z��=��/��p2��0�R��_�3�TVE��DA ��Q�3Η��Ì�mLLH8�q��礪0��ƒ�T���,Z������Dvk0�Zw�"|���!7���t�{�A���[:�Gd]�E��g��H�A���nj#���ܸ@Q��Y5��:�Y+�����>�WP���:�r�8�:C�-5:����ԇXs���/o�b�[)*!0��i9�Y�BW��M����b@P�H<��˄#��� �z�]:ט����d��s�i�p��4$�BO�ũB5Fڤ�}�a^VqըN���#�g�<��[��V�p��S�!����Og��-��6�)o�oY�ə��v��z�R��g1�w,�,U�PW=�zż����TB!��nL��զj!.ܬ��I'4�0O��g��j���U�}�&������͛P�~:����歬: ��mɡP�Y�&E�|~ȽSX�-�CȧL�ZEX&� �P���^���?ΒH� �4w3� E�z�m0��⒬@eX��� iݣ�g�Q�%["��m�=���$�H�3x[�ByMf'�v- X� �I3[�ũ^C����.\�����p(��$b�qQ*�R���q�����=|�˙B��2�ƥ@u ��kˀLR�3]Kڭ��45LP��dD�)�LC��T�k���'�mʖ"�[�o����"@�T.L�X3G4A�-HWn=�ˑYӵ`�À3*���A9\�k�G��oM�G�����A�cr@\-��j�lWE� P Y�{���P�(��>�[��-e6R%Ҕ <��I�|���!�ӑG_���$5�Y��� ��wQ�ϯ�-�]�-J]�� ������.Մ���U0�6gޘkM�7NE8�IǼơ"j����6E��~km�R���UT$-oǟ "���9���������dw��A�t*G�9m%��[�m���7��,�?���b% $�N�(�y\�1\d�j"z�3D7��� B�A����SOXs��Z��^U��S�yoV��DU��Gpi� yk��Z��zM�1MTO���j����?�;�%��N�l IEND�B`�PK ���[�[- - images/adformat-normal.pngnu �[��� �PNG IHDR Z 7 ��� �PLTE�����������˴��zzzDDD���PPP���```��߿��^^^���GGG������LLL������������@@@+++ ��٠����������������Ƈ��nnnRRR������eee<<<111$$$###�����ͭ�����|||vvv666555� � =IDATX����r�0��E[(E �ȾY���?Y�&u�(���U2��.�䐡��%�ѥ<�����j;�U��Hk ���<I�8�Т(Z��ah�zг��8�h�cY��O���� ����s+�#��i8�K)IeI�������5����B�� �i2��?�zx�٦4Y^�vc ��K�h����X���ښ0�0��p^������$7Ў�T�A���Am�R�YO�B�`����B����5�#Ta�K�t�L{��W�f�W���Y�F*���ж�%���.�V�ҁ1�+_�А�~L�q�o� IEND�B`�PK ���[����j j images/adtype-adsense.pngnu �[��� �PNG IHDR Z 7 ��� �PLTE����� �� �� A�����C���� �������Hw���Ŵ���� �����Ly����={��������ø�����������P|������������������ɶ����p��>����������g��S�Et�������;w�����<1����������y��?��;�����=|�=y��������������Կ�������ˇ�@5�������������u��L��c��K��7~����?~�4t����:x�9u���������Ǻ����zDŽ��z�y�rk�ng��M�NC�� �����������������r��@��>��4v����3r�2p����-k������������������髤�����xqR�a�KA�A;��&������ ��������������[�������������������M~����������kS�iR�e��]L�\�bZ��Y�[T�TK��G��D��;��6��2�8.������������� �� �E��������������~�����o��e��G��]��V����������������8r��������������V~��ƽ�\����ܵ���c���ج��礠��b{��ҡ����Н����ڋ�߈����ރ�̂r�~��y��w��q��p��p��i��b�f^��[�XI��G��@��4��/��&�$��P� .IDATX���UTSq �����B��6`�6e�� �Fl�@AP���������������]ݘ��>�>��=����gN�%��w=�G3���*+H�%.�Ĭ�gA;B���U�\��=+7f�,e��h�����A[�U)��u��0�6z>�T��ް p���.]�fM� ����~�9�0� ��k���,G��%t) W&����>�n+��J��*��4$��!f��h|鏠�<�F�]��_BnRһ�p�!͖��a,��:O|y�ݒ2�,]�#��ڌ�W�\E�]v������©��K�aW^۔ZT)���C_�3�1���*Ve�2ϻ�n����qq$���p@4�V�1�P� ��1Rw,�,.Ԓ�k��y�]�1v �Z�2�*j�y��a�xT@V�D��`Ҫ����zN%�1��9m�$p�gnZ�^�_���j,M�j�� 8տ߅I �0�Y=pє��y��uCv��L8ῌf)Ӿ(hVa�f�#7��qF�ө .�Y\���Q�Ub�sW��n}�n8?�ֲW�G������G���y��O4s�k���-�O*^}��tsq�&�f���&�{Ѫf ��aM4���:�5����T.���[~~�۴5^�*�ӂ,��-���,�:1����F?S��OMSy�m���&'�SCS��bl���U��O��C��U,�3 �x�<� J@���$�H��@;�x81�4�F�qޔ���x�� a�UJ9L�pR���z���&P�}o�E�%J�@�4�\��@��5XԦ�)ݢx�m�"����T&�C�H��� �2 �p��"��y!�� �.ZۧT���`%���t��0 9�S�e6[��J��B.R��b��� ���Sǔ�>VR�Z���ҥ@gH)��8�D�� :�R�%�����X�}��m۶�U�UrX��(R��e�j�Z'�0��(��f���h�DG���ua�WO���� E�����E\�"Z/�'� C��(@% �!�+��xxxx��~�^�&"�� IEND�B`�PK ���[��t� � images/adtype-image.pngnu �[��� �PNG IHDR Z 7 ��� �PLTE��� ���```???���888���]]]LLL333��ؿ����������hhh������������nnnCCC��������ű��������kkkXXXRRROOO���HHH===�����������ʝ��|||uuurrr@@@������������xxx[[[555///)))���������UUU������pppddd,,,"""�����Հ����o� �IDATX����r�@��� ���@@�1γ�9sr�t@bY�l,au�gA�w������z<舘D����V��>��+"J�5A@�>��+�p2�a�<H��>�ŀ��;��iAo�v[f �I�+�m^��CH֚�h| �y��FB�8��k���Y���p�ْ���:?i6'ѥ3t@`N6f3D�NS�Oj �0-Q?� ��hS�4>]!��v�|�M ���ƇM�,� �x��,AgK2�g�r*�ښh��Wc�K�M#�H܈#N $�,<R�4 ��ޜ� �']a XśF����xAU/�����\���`��F�Y��nT���/^��)�Y���p��EZC��ﺩ6ɓ`���m����5�I��HJ1��x�N�S�8/7Kƀj ��7�L�b6l�.8���=����ԟi~��{���*���w{CӯNw�������m�ǜ�Л�� ��P�Je�ز���Ȕ�xe�-u ��X����v�ћ�S�2���c�J%�JF�b���9���]���KŦfao��,)�f��2m���{i����*����V�躇��w�9�� s7�`�d\�;nZJ�b#�wU�`�G��ql����q�����_�;����/�>��AW IEND�B`�PK ���[�W~�� � images/vc-better-ads.pngnu �[��� �PNG IHDR <