Social Media Share Buttons | MashShare - Version 3.8.1

Version Description

  • New: Compatible up to WordPress 5.9
  • Fix: Make MashShare compatible with PHP 8.x
  • Fix: Don't request share count for preview pages. This fixes an artificially high share count on initial post creation
Download this release

Release Info

Developer ReneHermi
Plugin Icon 128x128 Social Media Share Buttons | MashShare
Version 3.8.1
Comparing to
See all releases

Code changes from version 3.7.9 to 3.8.1

assets/css/mashsb-amp.min.css CHANGED
@@ -1 +1 @@
1
- .mashicon-buffer .text,[class*=" mashicon-"],[class*=" mashicon-"] .text,[class^=mashicon-] .icon,[class^=mashicon-] .text,mashicon-buffer .icon{color:#fff}.mashsb-buttons .secondary-shares a .text{text-indent:-9999px;line-height:0;display:block}.mashsb-buttons .secondary-shares a .text:after{content:" ";text-indent:0;font-size:13px;display:block}.mashsb-buttons .secondary-shares a{min-width:0;font-size:0}.mashsb-buttons .secondary-shares a .icon:before{margin-right:0}.mashsb-buttons .mashsb-hide{display:none}[class*=" mashicon-"]:hover,[class^=mashicon-]:hover{opacity:.8}[class*=" mashicon-"] .onoffswitch-label,[class^=mashicon-]{font-size:15px;border-radius:0;cursor:pointer}.mashicon-share:before,[class*=" mashicon-"] .icon:before,[class^=mashicon-] .icon:before{font-family:mashsb-font;font-style:normal;font-weight:400;speak:none;font-size:16px;display:inline-block;text-decoration:inherit;width:1em;margin-right:.7em;text-align:center;font-variant:normal;text-transform:none;margin-top:0;float:left}.mashicon-facebook .icon:before{content:'\e800'}.mashicon-google .icon:before{content:'\e801'}.mashicon-pinterest .icon:before{content:'\e802'}.mashicon-linkedin .icon:before{content:'\e803'}.mashicon-digg .icon:before{content:'\e804'}.mashicon-reddit .icon:before{content:'\e805'}.mashicon-stumbleupon .icon:before{content:'\e806'}.mashicon-twitter .icon:before{content:'\e807'}.mashicon-mail .icon:before{content:'\e808'}.mashicon-vk .icon:before{content:'\e809'}.mashicon-print .icon:before{content:'\e80a'}.mashicon-delicious .icon:before{content:'\e80b'}.mashicon-buffer .icon:before{content:'\e80c'}.mashicon-heart .icon:before{content:'\e80d'}.mashicon-weibo .icon:before{content:'\e80e'}.mashicon-pocket .icon:before{content:'\e80f'}.mashicon-xing .icon:before{content:'\e810'}.mashicon-flattr .icon:before{content:'\e811'}.mashicon-odnoklassniki .icon:before{content:'\e812'}.mashicon-tumblr .icon:before{content:'\e813'}.mashicon-subscribe .icon:before{content:'\e808'}.mashicon-whatsapp .icon:before{content:'\e814'}.mashicon-meneame .icon:before{content:'\e815'}.mashicon-managewp .icon:before{content:'\e816'}.mashicon-mailru .icon:before{content:'\E819'}.mashicon-line .icon:before{content:'\E81A'}.mashicon-yummly .icon:before{content:'\E81B'}.mashicon-frype .icon:before{content:'\e81c'}.mashicon-skype .icon:before{content:'\e81d'}.mashicon-telegram .icon:before{content:'\e81f'}.mashicon-hackernews .icon:before{content:'\e820'}.mashicon-flipboard .icon:before{content:'\e821'}.mashicon-share:before{content:'\e81E'}.mashsb-container{padding-top:10px;padding-bottom:10px}.mashsb-buttons a{min-width:177px}.mashsb-box .mashsb-buttons a{padding:13px;margin-right:3px;margin-bottom:3px;float:left;text-decoration:none;border:0;box-shadow:none}.mashsb-buttons .float-right{float:right}.mashsb-buttons .float-left{float:left}.mashicon-facebook{background:#2d5f9a}.mashicon-twitter{background:#00c3f3}.mashicon-google{background:#d73d32}.mashicon-subscribe{background:#fff120}.mashicon-pinterest{background:#cd252b}.mashicon-linkedin{background:#2ba3e1}.mashicon-digg{background:#1b5791}.mashicon-stumbleupon{background:#eb4723}.mashicon-vk{background:#5d83aa}.mashicon-mail{background:#888}.mashicon-print{background:#666}.mashicon-reddit{background:#333}.mashicon-delicious{background:#39f}.mashicon-weibo{background:#ed1c24}.mashicon-pocket{background:#ee4055}.mashicon-xing{background:#135a5b}.mashicon-flattr{background:#8cb55b}.mashicon-odnoklassniki{background:#f4731c}.mashicon-managewp{background:#056cad}.mashicon-tumblr{background:#2c4762}.mashicon-meneame{background:#ff7d12}.mashicon-whatsapp{background:#1d9e11}.mashicon-buffer{background:#000}.mashicon-mailru{background:#044b89}.mashicon-line{background:#1dcd00}.mashicon-yummly{background:#e16120}.mashicon-frype{background:#f60}.mashicon-skype{background:#00afef}.mashicon-telegram{background:#1d94d3}.mashicon-hackernews{background:#f60}.mashicon-flipboard{background:#b31f17}.mashicon-subscribe .icon,.mashicon-subscribe .text{color:#000}.mashsb-count{display:block;padding-bottom:0;font-size:43px;font-weight:700;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#7FC04C;border:0 solid #FFF;text-align:center;margin-right:10px;margin-top:10px;float:left;line-height:13px}.mashsb-sharetext{font-size:11px;font-family:Arial,sans-serif;color:#8A8C8E}.mashsb-toggle-container{display:none;padding:11px 2% 8px;border:10px solid #FFF120;position:relative;margin-bottom:10px;margin-top:0}[class*=" mashicon-"],[class^=mashicon-]{position:relative;display:inline-block}[class*=" mashicon-"] .text,[class^=mashicon-] .text{padding:0;margin:0}[class*=" mashicon-"] .text:after,[class^=mashicon-] .text:after{line-height:10px}.mashsb-box{line-height:1}.onoffswitch,.onoffswitch2{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;float:left;margin-right:3px;margin-bottom:3px;margin-left:0;cursor:pointer;background-color:#C5C5C5;color:#FFF;width:42px;height:42px;line-height:42px;text-align:center;display:inline-block}.mashsb-count>counts{clear:both}.onoffswitch:before{content:"+";display:inline-block;font-weight:700;font-size:30px;font-family:arial;vertical-align:middle}.onoffswitch2:before{content:"-";display:inline-block;font-weight:700;font-size:30px;font-family:arial;vertical-align:super}.widget_mashsb_mostshared_posts_widget li{padding:.4688em 0;list-style:none}.widget_mashsb_mostshared_posts_widget li:first-child{border-top:0;padding-top:0}@media only screen and (max-width:568px){[class*=" mashicon-"] .text,[class^=mashicon-] .text{text-indent:-9999px;line-height:0;display:block}[class*=" mashicon-"] .text:after,[class^=mashicon-] .text:after{content:"";text-indent:0;font-size:13px;display:block}[class*=" mashicon-"],[class^=mashicon-]{text-align:center}[class*=" mashicon-"] .icon:before,[class^=mashicon-] .icon:before{float:none;margin-right:0}.mashsb-buttons a{margin-right:3px;margin-bottom:3px;min-width:0;width:41px}.onoffswitch,.onoffswitch-inner:after .onoffswitch2,.onoffswitch-inner:before,.onoffswitch2-inner:after,.onoffswitch2-inner:before{margin-right:0;width:41px}}
1
+ .mashicon-buffer .text,[class*=" mashicon-"],[class*=" mashicon-"] .text,[class^=mashicon-] .icon,[class^=mashicon-] .text,mashicon-buffer .icon{color:#fff}.mashsb-buttons .secondary-shares a .text{text-indent:-9999px;line-height:0;display:block}.mashsb-buttons .secondary-shares a .text:after{content:" ";text-indent:0;font-size:13px;display:block}.mashsb-buttons .secondary-shares a{min-width:0;font-size:0}.mashsb-buttons .secondary-shares a .icon:before{margin-right:0}.mashsb-buttons .mashsb-hide{display:none}[class*=" mashicon-"]:hover,[class^=mashicon-]:hover{opacity:.8}[class*=" mashicon-"] .onoffswitch-label,[class^=mashicon-]{font-size:15px;border-radius:0;cursor:pointer}.mashicon-share:before,[class*=" mashicon-"] .icon:before,[class^=mashicon-] .icon:before{font-family:mashsb-font;font-style:normal;font-weight:400;speak:none;font-size:16px;display:inline-block;text-decoration:inherit;width:1em;margin-right:.7em;text-align:center;font-variant:normal;text-transform:none;margin-top:0;float:left}.mashicon-facebook .icon:before{content:'\e800'}.mashicon-google .icon:before{content:'\e801'}.mashicon-pinterest .icon:before{content:'\e802'}.mashicon-linkedin .icon:before{content:'\e803'}.mashicon-digg .icon:before{content:'\e804'}.mashicon-reddit .icon:before{content:'\e805'}.mashicon-stumbleupon .icon:before{content:'\e806'}.mashicon-twitter .icon:before{content:'\e807'}.mashicon-mail .icon:before{content:'\e808'}.mashicon-vk .icon:before{content:'\e809'}.mashicon-print .icon:before{content:'\e80a'}.mashicon-delicious .icon:before{content:'\e80b'}.mashicon-buffer .icon:before{content:'\e80c'}.mashicon-heart .icon:before{content:'\e80d'}.mashicon-weibo .icon:before{content:'\e80e'}.mashicon-pocket .icon:before{content:'\e80f'}.mashicon-xing .icon:before{content:'\e810'}.mashicon-flattr .icon:before{content:'\e811'}.mashicon-odnoklassniki .icon:before{content:'\e812'}.mashicon-tumblr .icon:before{content:'\e813'}.mashicon-subscribe .icon:before{content:'\e808'}.mashicon-whatsapp .icon:before{content:'\e814'}.mashicon-meneame .icon:before{content:'\e815'}.mashicon-managewp .icon:before{content:'\e816'}.mashicon-mailru .icon:before{content:'\E819'}.mashicon-line .icon:before{content:'\E81A'}.mashicon-yummly .icon:before{content:'\E81B'}.mashicon-frype .icon:before{content:'\e81c'}.mashicon-skype .icon:before{content:'\e81d'}.mashicon-telegram .icon:before{content:'\e81f'}.mashicon-hackernews .icon:before{content:'\e820'}.mashicon-flipboard .icon:before{content:'\e821'}.mashicon-share:before{content:'\e81E'}.mashsb-container{padding-top:10px;padding-bottom:10px}.mashsb-buttons a{min-width:177px}.mashsb-box .mashsb-buttons a{padding:13px;margin-right:3px;margin-bottom:3px;float:left;text-decoration:none;border:0;box-shadow:none}.mashsb-buttons .float-right{float:right}.mashsb-buttons .float-left{float:left}.mashicon-facebook{background:#2d5f9a}.mashicon-twitter{background:#00c3f3}.mashicon-google{background:#d73d32}.mashicon-subscribe{background:#fff120}.mashicon-pinterest{background:#cd252b}.mashicon-linkedin{background:#2ba3e1}.mashicon-digg{background:#1b5791}.mashicon-stumbleupon{background:#eb4723}.mashicon-vk{background:#5d83aa}.mashicon-mail{background:#888}.mashicon-print{background:#666}.mashicon-reddit{background:#333}.mashicon-delicious{background:#39f}.mashicon-weibo{background:#ed1c24}.mashicon-pocket{background:#ee4055}.mashicon-xing{background:#135a5b}.mashicon-flattr{background:#8cb55b}.mashicon-odnoklassniki{background:#f4731c}.mashicon-managewp{background:#056cad}.mashicon-tumblr{background:#2c4762}.mashicon-meneame{background:#ff7d12}.mashicon-whatsapp{background:#1d9e11}.mashicon-buffer{background:#000}.mashicon-mailru{background:#044b89}.mashicon-line{background:#1dcd00}.mashicon-yummly{background:#e16120}.mashicon-frype{background:#f60}.mashicon-skype{background:#00afef}.mashicon-telegram{background:#1d94d3}.mashicon-hackernews{background:#f60}.mashicon-flipboard{background:#b31f17}.mashicon-subscribe .icon,.mashicon-subscribe .text{color:#000}.mashsb-count{display:block;padding-bottom:0;font-size:43px;font-weight:700;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#7FC04C;border:0 solid #FFF;text-align:center;margin-right:10px;margin-top:10px;float:left;line-height:13px}.mashsb-sharetext{font-size:11px;font-family:Arial,sans-serif;color:#8A8C8E}.onoffswitch2:before,.onoffswitch:before{font-weight:700;font-size:30px;font-family:arial}.mashsb-toggle-container{display:none;padding:11px 2% 8px;border:10px solid #FFF120;position:relative;margin-bottom:10px;margin-top:0}[class*=" mashicon-"],[class^=mashicon-]{position:relative;display:inline-block}[class*=" mashicon-"] .text,[class^=mashicon-] .text{padding:0;margin:0}[class*=" mashicon-"] .text:after,[class^=mashicon-] .text:after{line-height:10px}.mashsb-box{line-height:1}.onoffswitch,.onoffswitch2{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;float:left;margin-right:3px;margin-bottom:3px;margin-left:0;cursor:pointer;background-color:#C5C5C5;color:#FFF;width:42px;height:42px;line-height:42px;text-align:center;display:inline-block}.mashsb-count>counts{clear:both}.onoffswitch:before{content:"+";display:inline-block;vertical-align:middle}.onoffswitch2:before{content:"-";display:inline-block;vertical-align:super}.widget_mashsb_mostshared_posts_widget li{padding:.4688em 0;list-style:none}.widget_mashsb_mostshared_posts_widget li:first-child{border-top:0;padding-top:0}@media only screen and (max-width:568px){[class*=" mashicon-"] .text,[class^=mashicon-] .text{text-indent:-9999px;line-height:0;display:block}[class*=" mashicon-"] .text:after,[class^=mashicon-] .text:after{content:"";text-indent:0;font-size:13px;display:block}[class*=" mashicon-"],[class^=mashicon-]{text-align:center}[class*=" mashicon-"] .icon:before,[class^=mashicon-] .icon:before{float:none;margin-right:0}.mashsb-buttons a{margin-right:3px;margin-bottom:3px;min-width:0;width:41px}.onoffswitch,.onoffswitch-inner:after .onoffswitch2,.onoffswitch-inner:before,.onoffswitch2-inner:after,.onoffswitch2-inner:before{margin-right:0;width:41px}}
assets/css/mashsb.min.css CHANGED
@@ -1 +1 @@
1
- .mashsb-buttons a.mash-center,.mashsb-count{text-align:center}.mashsb-buttons .secondary-shares a .text{text-indent:-9999px;line-height:0;display:block}.mashsb-buttons .secondary-shares a .text:after{content:" ";text-indent:0;font-size:13px;display:block}.mashsb-buttons .secondary-shares a{min-width:0;display:block}.mashsb-buttons .secondary-shares a .icon:before{margin-right:0}.mashsb-buttons .mashsb-hide{display:none}@font-face{font-family:mashsb-font;src:url(data:application/octet-stream;base64,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) format('woff'),url(data:application/octet-stream;base64,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) format('truetype')}[class*=" mashicon-"]:hover,[class^=mashicon-]:hover{opacity:.8}[class*=" mashicon-"],[class^=mashicon-] .icon{display:initial;color:#fff}[class*=" mashicon-"] .text,[class^=mashicon-] .text{font-family:sans-serif;color:#fff}[class*=" mashicon-"] .onoffswitch-label,[class^=mashicon-]{font-size:15px;border-radius:0;cursor:pointer}.mashicon-share:before,[class*=" mashicon-"] .icon:before,[class^=mashicon-] .icon:before{font-family:mashsb-font;font-style:normal;font-weight:400;speak:none;font-size:16px;display:inline-block;text-decoration:inherit;width:1em;margin-right:.7em;text-align:center;font-variant:normal;text-transform:none;margin-top:0;float:left}[class^=mashicon-].mash-center .icon:before{float:none}.mashicon-facebook .icon:before{content:'\e800'}.mashicon-google .icon:before{content:'\e801'}.mashicon-pinterest .icon:before{content:'\e802'}.mashicon-linkedin .icon:before{content:'\e803'}.mashicon-digg .icon:before{content:'\e804'}.mashicon-reddit .icon:before{content:'\e805'}.mashicon-stumbleupon .icon:before{content:'\e806'}.mashicon-twitter .icon:before{content:'\e807'}.mashicon-mail .icon:before{content:'\e808'}.mashicon-vk .icon:before{content:'\e809'}.mashicon-print .icon:before{content:'\e80a'}.mashicon-delicious .icon:before{content:'\e80b'}.mashicon-buffer .icon:before{content:'\e80c'}.mashicon-heart .icon:before{content:'\e80d'}.mashicon-weibo .icon:before{content:'\e80e'}.mashicon-pocket .icon:before{content:'\e80f'}.mashicon-xing .icon:before{content:'\e810'}.mashicon-flattr .icon:before{content:'\e811'}.mashicon-odnoklassniki .icon:before{content:'\e812'}.mashicon-tumblr .icon:before{content:'\e813'}.mashicon-subscribe .icon:before{content:'\e808'}.mashicon-whatsapp .icon:before{content:'\e814'}.mashicon-meneame .icon:before{content:'\e815'}.mashicon-managewp .icon:before{content:'\e816'}.mashicon-mailru .icon:before{content:'\E819'}.mashicon-line .icon:before{content:'\E81A'}.mashicon-yummly .icon:before{content:'\E81B'}.mashicon-frype .icon:before{content:'\e81c'}.mashicon-skype .icon:before{content:'\e81d'}.mashicon-share:before{content:'\e81E'}.mashicon-telegram .icon:before{content:'\e81F'}.mashicon-hackernews .icon:before{content:'\e820'}.mashicon-flipboard .icon:before{content:'\e821'}.mashsb-container{padding-top:10px;padding-bottom:10px}.mashsb-buttons a{min-width:177px}.mashsb-box .mashsb-buttons a{padding:13px;margin-right:3px;margin-bottom:3px;float:left;border:0;text-decoration:none}.mashsb-box .mashsb-buttons a:hover{text-decoration:none}.mashsb-box .mashsb-buttons a.mash-nomargin{margin-right:0}.mashsb-box .mashsb-buttons a.mash-medium{padding:10px}.mashsb-box .mashsb-buttons a.mash-small{padding:6px}.mashsb-buttons .float-right{float:right}.mashsb-buttons .float-left{float:left}.mashicon-facebook{background:#2d5f9a}.mashicon-twitter{background:#00c3f3}.mashicon-google{background:#d73d32}.mashicon-subscribe{background:#fff120}.mashicon-pinterest{background:#cd252b}.mashicon-linkedin{background:#2ba3e1}.mashicon-digg{background:#1b5791}.mashicon-stumbleupon{background:#eb4723}.mashicon-vk{background:#5d83aa}.mashicon-mail{background:#888}.mashicon-print{background:#666}.mashicon-reddit{background:#333}.mashicon-delicious{background:#39f}.mashicon-weibo{background:#ed1c24}.mashicon-pocket{background:#ee4055}.mashicon-xing{background:#135a5b}.mashicon-flattr{background:#8cb55b}.mashicon-odnoklassniki{background:#f4731c}.mashicon-managewp{background:#056cad}.mashicon-tumblr{background:#2c4762}.mashicon-meneame{background:#ff7d12}.mashicon-whatsapp{background:#1d9e11}.mashicon-buffer{background:#000}.mashicon-mailru{background:#044b89}.mashicon-line{background:#1dcd00}.mashicon-yummly{background:#e16120}.mashicon-frype{background:#f60}.mashicon-skype{background:#00afef}.mashicon-telegram{background:#1d94d3}.mashicon-hackernews{background:#f60}.mashicon-flipboard{background:#b31f17}.mashicon-buffer .icon,.mashicon-buffer .text{color:#fff}.mashicon-subscribe .icon,.mashicon-subscribe .text{color:#000}.mashsb-count{display:block;padding-bottom:0;font-size:43px;font-weight:700;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#ccc;border:0 solid #FFF;margin-right:10px;margin-top:10px;float:left;line-height:13px}.mashsb-count.mash-medium{font-size:30px;margin-top:5px}.mashsb-count.mash-small{font-size:20px;margin-top:1px}.mashsb-sharetext{font-size:11px;font-family:Arial,sans-serif;color:#8A8C8E}.mashsb-toggle-container{display:none;padding:11px 2% 8px;border:10px solid #FFF120;position:relative;margin-bottom:10px;margin-top:0}[class*=" mashicon-"],[class^=mashicon-]{position:relative;display:inline-block}[class*=" mashicon-"] .text,[class^=mashicon-] .text{padding:0;margin:0}.onoffswitch,.onoffswitch2{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;float:left;margin-bottom:3px;margin-left:0;cursor:pointer;background-color:#C5C5C5;color:#FFF;text-align:center;display:inline-block}[class*=" mashicon-"] .text:after,[class^=mashicon-] .text:after{line-height:10px}.mashsb-box{line-height:1}.mashsb-count>.counts{clear:both}.onoffswitch{margin-right:0;width:42px;height:42px;line-height:42px}.onoffswitch.mash-medium{width:36px;height:36px;line-height:36px}.onoffswitch.mash-small{width:28px;height:28px;line-height:28px}.onoffswitch:before{content:"+";display:inline-block;font-weight:700;font-size:30px;font-family:arial;vertical-align:middle}.onoffswitch2{margin-right:3px;width:42px;height:42px;line-height:42px}.onoffswitch2.mash-medium{width:36px;height:36px;line-height:36px}.onoffswitch2.mash-small{width:28px;height:28px;line-height:28px}.onoffswitch2:before{content:"-";display:inline-block;font-weight:700;font-size:30px;font-family:arial;vertical-align:super}@media only screen and (max-width:568px){[class*=" mashicon-"] .text,[class^=mashicon-] .text{text-indent:-9999px;line-height:0;display:block}[class*=" mashicon-"] .text:after,[class^=mashicon-] .text:after{content:"";text-indent:0;font-size:13px;display:block}[class*=" mashicon-"],[class^=mashicon-]{text-align:center}[class*=" mashicon-"] .icon:before,[class^=mashicon-] .icon:before{float:none;margin-right:0}.mashsb-buttons a{margin-right:3px;margin-bottom:3px;min-width:0;width:41px}.onoffswitch,.onoffswitch-inner:after .onoffswitch2,.onoffswitch-inner:before,.onoffswitch2-inner:after,.onoffswitch2-inner:before{margin-right:0;width:41px}}.mashsb-widget-img{border:1px solid #ccc;margin-right:5px;margin-top:5px;float:left}.mashsb-widget-post-title{font-weight:700}.mashsb-share-widget li{clear:both;min-height:90px;border-bottom:1px solid #f5f5f5;list-style:none;padding-top:8px;padding-bottom:8px}.mashsb-share-widget{margin:0}.mashsb-excerpt{font-size:12px}.mashicon-share{font-size:12px;cursor:default}.mashicon-share:before{font-size:12px;margin-right:5px}.mashicon-share:hover{opacity:1}.mashsb-stretched .mashsb-buttons{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.mashsb-stretched .mashsb-buttons a{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;box-shadow:0 0}.mashsb-buttons .mashsb-shadow{-webkit-box-shadow:1px 2px 5px 0 rgba(0,0,0,.51);-moz-box-shadow:1px 2px 5px 0 rgba(0,0,0,.51);box-shadow:1px 2px 5px 0 rgba(0,0,0,.51)}.mashsb-main .mashsb-buttons .mashsb-noshadow,.mashsb-main .mashsb-buttons .mashsb-noshadow:hover{box-shadow:none;-webkit-box-shadow:none}.mashsb-main .mashsb-buttons .mashsb-pure-icons{min-width:0;flex:none;-webkit-flex:none}.mashsb-main .mashsb-buttons .mashsb-pure-icons .icon:before{margin-right:0}
1
+ .mashsb-buttons a.mash-center,.mashsb-count{text-align:center}.mashsb-buttons .secondary-shares a .text{text-indent:-9999px;line-height:0;display:block}.mashsb-buttons .secondary-shares a .text:after{content:" ";text-indent:0;font-size:13px;display:block}.mashsb-buttons .secondary-shares a{min-width:0;display:block}.mashsb-buttons .secondary-shares a .icon:before{margin-right:0}.mashsb-buttons .mashsb-hide{display:none}@font-face{font-family:mashsb-font;src:url(data:application/octet-stream;base64,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) format('woff'),url(data:application/octet-stream;base64,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) format('truetype')}[class*=" mashicon-"]:hover,[class^=mashicon-]:hover{opacity:.8}[class*=" mashicon-"],[class^=mashicon-] .icon{display:initial;color:#fff}[class*=" mashicon-"] .text,[class^=mashicon-] .text{font-family:sans-serif;color:#fff}[class*=" mashicon-"] .onoffswitch-label,[class^=mashicon-]{font-size:15px;border-radius:0;cursor:pointer}.mashicon-share:before,[class*=" mashicon-"] .icon:before,[class^=mashicon-] .icon:before{font-family:mashsb-font;font-style:normal;font-weight:400;speak:none;font-size:16px;display:inline-block;text-decoration:inherit;width:1em;margin-right:.7em;text-align:center;font-variant:normal;text-transform:none;margin-top:0;float:left}[class^=mashicon-].mash-center .icon:before{float:none}.mashicon-facebook .icon:before{content:'\e800'}.mashicon-google .icon:before{content:'\e801'}.mashicon-pinterest .icon:before{content:'\e802'}.mashicon-linkedin .icon:before{content:'\e803'}.mashicon-digg .icon:before{content:'\e804'}.mashicon-reddit .icon:before{content:'\e805'}.mashicon-stumbleupon .icon:before{content:'\e806'}.mashicon-twitter .icon:before{content:'\e807'}.mashicon-mail .icon:before{content:'\e808'}.mashicon-vk .icon:before{content:'\e809'}.mashicon-print .icon:before{content:'\e80a'}.mashicon-delicious .icon:before{content:'\e80b'}.mashicon-buffer .icon:before{content:'\e80c'}.mashicon-heart .icon:before{content:'\e80d'}.mashicon-weibo .icon:before{content:'\e80e'}.mashicon-pocket .icon:before{content:'\e80f'}.mashicon-xing .icon:before{content:'\e810'}.mashicon-flattr .icon:before{content:'\e811'}.mashicon-odnoklassniki .icon:before{content:'\e812'}.mashicon-tumblr .icon:before{content:'\e813'}.mashicon-subscribe .icon:before{content:'\e808'}.mashicon-whatsapp .icon:before{content:'\e814'}.mashicon-meneame .icon:before{content:'\e815'}.mashicon-managewp .icon:before{content:'\e816'}.mashicon-mailru .icon:before{content:'\E819'}.mashicon-line .icon:before{content:'\E81A'}.mashicon-yummly .icon:before{content:'\E81B'}.mashicon-frype .icon:before{content:'\e81c'}.mashicon-skype .icon:before{content:'\e81d'}.mashicon-share:before{content:'\e81E'}.mashicon-telegram .icon:before{content:'\e81F'}.mashicon-hackernews .icon:before{content:'\e820'}.mashicon-flipboard .icon:before{content:'\e821'}.mashsb-container{padding-top:10px;padding-bottom:10px}.mashsb-buttons a{min-width:177px}.mashsb-box .mashsb-buttons a{padding:13px;margin-right:3px;margin-bottom:3px;float:left;border:0;text-decoration:none}.mashsb-box .mashsb-buttons a:hover{text-decoration:none}.mashsb-box .mashsb-buttons a.mash-nomargin{margin-right:0}.mashsb-box .mashsb-buttons a.mash-medium{padding:10px}.mashsb-box .mashsb-buttons a.mash-small{padding:6px}.mashsb-buttons .float-right{float:right}.mashsb-buttons .float-left{float:left}.mashicon-facebook{background:#2d5f9a}.mashicon-twitter{background:#00c3f3}.mashicon-google{background:#d73d32}.mashicon-subscribe{background:#fff120}.mashicon-pinterest{background:#cd252b}.mashicon-linkedin{background:#2ba3e1}.mashicon-digg{background:#1b5791}.mashicon-stumbleupon{background:#eb4723}.mashicon-vk{background:#5d83aa}.mashicon-mail{background:#888}.mashicon-print{background:#666}.mashicon-reddit{background:#333}.mashicon-delicious{background:#39f}.mashicon-weibo{background:#ed1c24}.mashicon-pocket{background:#ee4055}.mashicon-xing{background:#135a5b}.mashicon-flattr{background:#8cb55b}.mashicon-odnoklassniki{background:#f4731c}.mashicon-managewp{background:#056cad}.mashicon-tumblr{background:#2c4762}.mashicon-meneame{background:#ff7d12}.mashicon-whatsapp{background:#1d9e11}.mashicon-buffer{background:#000}.mashicon-mailru{background:#044b89}.mashicon-line{background:#1dcd00}.mashicon-yummly{background:#e16120}.mashicon-frype{background:#f60}.mashicon-skype{background:#00afef}.mashicon-telegram{background:#1d94d3}.mashicon-hackernews{background:#f60}.mashicon-flipboard{background:#b31f17}.mashicon-buffer .icon,.mashicon-buffer .text{color:#fff}.mashicon-subscribe .icon,.mashicon-subscribe .text{color:#000}.mashsb-count{display:block;padding-bottom:0;font-size:43px;font-weight:700;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;color:#ccc;border:0 solid #FFF;margin-right:10px;margin-top:10px;float:left;line-height:13px}.mashsb-count.mash-medium{font-size:30px;margin-top:5px}.mashsb-count.mash-small{font-size:20px;margin-top:1px}.mashsb-sharetext{font-size:11px;font-family:Arial,sans-serif;color:#8A8C8E}.onoffswitch2:before,.onoffswitch:before{font-size:30px;font-family:arial;font-weight:700}.mashsb-toggle-container{display:none;padding:11px 2% 8px;border:10px solid #FFF120;position:relative;margin-bottom:10px;margin-top:0}[class*=" mashicon-"],[class^=mashicon-]{position:relative;display:inline-block}[class*=" mashicon-"] .text,[class^=mashicon-] .text{padding:0;margin:0}.onoffswitch,.onoffswitch2{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;float:left;margin-bottom:3px;margin-left:0;cursor:pointer;background-color:#C5C5C5;color:#FFF;text-align:center;display:inline-block}[class*=" mashicon-"] .text:after,[class^=mashicon-] .text:after{line-height:10px}.mashsb-box{line-height:1}.mashsb-count>.counts{clear:both}.onoffswitch{margin-right:0;width:42px;height:42px;line-height:42px}.onoffswitch.mash-medium{width:36px;height:36px;line-height:36px}.onoffswitch.mash-small{width:28px;height:28px;line-height:28px}.onoffswitch:before{content:"+";display:inline-block;vertical-align:middle}.onoffswitch2{margin-right:3px;width:42px;height:42px;line-height:42px}.onoffswitch2.mash-medium{width:36px;height:36px;line-height:36px}.onoffswitch2.mash-small{width:28px;height:28px;line-height:28px}.onoffswitch2:before{content:"-";display:inline-block;vertical-align:super}@media only screen and (max-width:568px){[class*=" mashicon-"] .text,[class^=mashicon-] .text{text-indent:-9999px;line-height:0;display:block}[class*=" mashicon-"] .text:after,[class^=mashicon-] .text:after{content:"";text-indent:0;font-size:13px;display:block}[class*=" mashicon-"],[class^=mashicon-]{text-align:center}[class*=" mashicon-"] .icon:before,[class^=mashicon-] .icon:before{float:none;margin-right:0}.mashsb-buttons a{margin-right:3px;margin-bottom:3px;min-width:0;width:41px}.onoffswitch,.onoffswitch-inner:after .onoffswitch2,.onoffswitch-inner:before,.onoffswitch2-inner:after,.onoffswitch2-inner:before{margin-right:0;width:41px}}.mashsb-widget-img{border:1px solid #ccc;margin-right:5px;margin-top:5px;float:left}.mashsb-widget-post-title{font-weight:700}.mashsb-share-widget li{clear:both;min-height:90px;border-bottom:1px solid #f5f5f5;list-style:none;padding-top:8px;padding-bottom:8px}.mashsb-share-widget{margin:0}.mashsb-excerpt{font-size:12px}.mashicon-share{font-size:12px;cursor:default}.mashicon-share:before{font-size:12px;margin-right:5px}.mashicon-share:hover{opacity:1}.mashsb-stretched .mashsb-buttons{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.mashsb-stretched .mashsb-buttons a{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;box-shadow:0 0}.mashsb-buttons .mashsb-shadow{-webkit-box-shadow:1px 2px 5px 0 rgba(0,0,0,.51);-moz-box-shadow:1px 2px 5px 0 rgba(0,0,0,.51);box-shadow:1px 2px 5px 0 rgba(0,0,0,.51)}.mashsb-main .mashsb-buttons .mashsb-noshadow,.mashsb-main .mashsb-buttons .mashsb-noshadow:hover{box-shadow:none;-webkit-box-shadow:none}.mashsb-main .mashsb-buttons .mashsb-pure-icons{min-width:0;flex:none;-webkit-flex:none}.mashsb-main .mashsb-buttons .mashsb-pure-icons .icon:before{margin-right:0}
includes/admin/admin-notices.php CHANGED
@@ -49,20 +49,7 @@ function mashsb_admin_messages() {
49
 
50
  mashsb_show_update_notice_gdpr();
51
 
52
- mashsb_show_new_fb_api();
53
-
54
- // Rate Limit warning
55
- // if( mashsb_is_admin_page() && mashsb_rate_limit_exceeded() ) {
56
- // echo '<div class="error">';
57
- // echo '<p>' . sprintf(__('Your website exceeded the Facebook rate limit. Share count requests to Facebook and other networks will be delayed for 60min and the Share Count will not grow during this time. If you get this notice often consider to change <strong>MashShare Caching Method</strong> to <a href="%s">Refresh while Loading</a> and use a higher cache expiration. MashShare tries again to get shares in ' . mashsbGetRemainingRateLimitTime() , 'mashsb'), admin_url() . 'admin.php?page=mashsb-settings#mashsb_settingsgeneral_header', admin_url() . 'admin.php?page=mashsb-settings#mashsb_settingsservices_header') . '</p>';
58
- // echo '</div>';
59
- // }
60
- // Access Token expired
61
- // if( mashsb_is_invalid_fb_api_key() ) {
62
- // echo '<div class="error">';
63
- // echo '<p>' . sprintf(__('<strong>Error: </strong>'.mashsb_is_invalid_fb_api_key().' <br> Your <strong>Facebook Access Token</strong> has been expired or is invalid. Remove the invalid access token from <a href="%s">MashShare->Settings->Networks</a> or generate a new one. Your MashShare Facebook Shares will not be refreshed any longer. <a href="%s" target="_blank">Read here</a> how to renew the Facebook access token. Fix it and press the button: | <a href="%s" class="button">CHECK AGAIN</a>', 'mashsb'), admin_url() . 'admin.php?page=mashsb-settings#mashsb_settingsservices_header', 'http://docs.mashshare.net/article/132-how-to-create-a-facebook-access-token', admin_url() . 'admin.php?mashsb_action=check_access_token&page=mashsb-settings') . '</p>';
64
- // echo '</div>';
65
- // }
66
 
67
  // Cache warning
68
  if( mashsb_is_deactivated_cache() ) {
@@ -130,7 +117,7 @@ function mashsb_admin_messages() {
130
  // Share count is deactivated when permalinks are not used
131
  if( mashsb_is_admin_page() && !mashsb_is_enabled_permalinks() ) {
132
  echo '<div class="error">';
133
- echo '<p>' . sprintf( __( '<strong>No Share Count aggregation possible!</strong> <a href="%s">Permalinks</a> must be enabled to count shares. Share count is deactivated until you have fixed this.', 'mashsb' ), admin_url( 'options-permalink.php' ) ) . '</p>';
134
  echo '</div>';
135
  }
136
 
@@ -444,9 +431,8 @@ function mashsb_is_invalid_fb_api_key(){
444
  */
445
  function mashsb_show_update_notice_gdpr() {
446
 
447
-
448
  $message = sprintf(__( '<h2 style="color:white;">MashShare GDPR Compliance</h2>'
449
- . 'MashShare uses new sharedcount.com integration to be GDPR compliant. <br>Activate sharedcount.com at <a href="'.admin_url().'admin.php?page=mashsb-settings#mashsb_settingsgeneral_header" style="color:white;">MashShare > Settings > General > Share Count</a><br><br>For collecting Twitter shares get the <a href="https://mashshare.net/downloads/mashshare-social-networks-addon/?utm_source=wp-admin&utm_medium=gdpr-notice&utm_campaign=gdpr-notice" target="_blank">Social Network Add-On</a>'
450
  , 'mashsb' ),
451
  admin_url() . 'admin.php?page=mashsb-settings'
452
  );
@@ -457,7 +443,7 @@ function mashsb_show_update_notice_gdpr() {
457
 
458
  // admin notice after updating Mashshare
459
  echo '<div class="mashsb-notice-gdpr mashsb_update_notice_gdpr update-nag" style="background-color: #00abed;color: white;padding: 20px;margin-top: 20px;border: 3px solid white;">' . $message .
460
- '<p><a href="'.admin_url().'admin.php?page=mashsb-settings&mashsb-action=hide_gdpr_notice" class="mashsb_hide_gdpr" title="I got it" style="text-decoration:none;color:white;">- I Understand! Do Not Show This Message Again -</a></a>'.
461
  '</div>';
462
 
463
 
@@ -469,47 +455,17 @@ function mashsb_show_update_notice_gdpr() {
469
  * @global array $mashsb_options
470
  */
471
  function mashsb_hide_gdpr_notice(){
472
- global $mashsb_options;
473
- // Get all settings
474
  update_option( 'mashsb_show_update_notice_gdpr1', 'no' );
475
  }
476
  add_action ('mashsb_hide_gdpr_notice', 'mashsb_hide_gdpr_notice');
477
 
478
 
479
-
480
- /**
481
- * Show notice for new FB API
482
- * @since 3.5.3.0
483
- */
484
- function mashsb_show_new_fb_api() {
485
-
486
-
487
- $message = sprintf(__( '<h2 style="color:white;">MashShare: Facebook API Changes</h2>'
488
- . 'Facebook shut down its old API endpoint so you need to switch over to sharedcount.com integration to get the latest Facebook share count. <br>Add sharedcount.com API key at <a href="'.admin_url().'admin.php?page=mashsb-settings#mashsb_settingsgeneral_header" style="color:white;">MashShare > Settings > General > Share Count</a><br>'
489
- , 'mashsb' ),
490
- admin_url() . 'admin.php?page=mashsb-settings'
491
- );
492
-
493
- if( get_option( 'mashsb_show_new_fb_api' ) === 'no' ) {
494
- return false;
495
- }
496
-
497
- // admin notice after updating Mashshare
498
- echo '<div class="mashsb-notice-gdpr mashsb_update_notice_gdpr update-nag" style="background-color: red;color: white;padding: 20px;margin-top: 20px;border: 3px solid white;">' . $message .
499
- '<p><a href="'.admin_url().'admin.php?page=mashsb-settings&mashsb-action=hide_fb_api_notice" class="mashsb_hide_fb_api" title="I got it" style="text-decoration:none;color:white;">- I Understand! Do Not Show This Message Again -</a></a>'.
500
- '</div>';
501
-
502
-
503
- }
504
-
505
  /**
506
  * Hide FB API notice
507
  *
508
  * @global array $mashsb_options
509
  */
510
  function mashsb_hide_fb_api_notice(){
511
- global $mashsb_options;
512
- // Get all settings
513
  update_option( 'mashsb_show_new_fb_api', 'no' );
514
  }
515
  add_action ('mashsb_hide_fb_api_notice', 'mashsb_hide_fb_api_notice');
49
 
50
  mashsb_show_update_notice_gdpr();
51
 
52
+ //mashsb_show_new_fb_api();
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  // Cache warning
55
  if( mashsb_is_deactivated_cache() ) {
117
  // Share count is deactivated when permalinks are not used
118
  if( mashsb_is_admin_page() && !mashsb_is_enabled_permalinks() ) {
119
  echo '<div class="error">';
120
+ echo '<p>' . sprintf( __( '<strong>No Share Count aggregation possible!</strong> <a href="%s">Permalinks</a> must be enabled to count shares. Share count is deactivated until you have changed this.', 'mashsb' ), admin_url( 'options-permalink.php' ) ) . '</p>';
121
  echo '</div>';
122
  }
123
 
431
  */
432
  function mashsb_show_update_notice_gdpr() {
433
 
 
434
  $message = sprintf(__( '<h2 style="color:white;">MashShare GDPR Compliance</h2>'
435
+ . 'MashShare uses sharedcount.com integration to be GDPR compliant. <br>Activate sharedcount.com at <a href="'.admin_url().'admin.php?page=mashsb-settings#mashsb_settingsgeneral_header" style="color:white;">MashShare > Settings > General > Share Count</a><br><br>For collecting Twitter shares get the <a href="https://mashshare.net/downloads/mashshare-social-networks-addon/?utm_source=wp-admin&utm_medium=gdpr-notice&utm_campaign=gdpr-notice" target="_blank" style="color:white;text-decoration:underline;">Social Network Add-On</a>'
436
  , 'mashsb' ),
437
  admin_url() . 'admin.php?page=mashsb-settings'
438
  );
443
 
444
  // admin notice after updating Mashshare
445
  echo '<div class="mashsb-notice-gdpr mashsb_update_notice_gdpr update-nag" style="background-color: #00abed;color: white;padding: 20px;margin-top: 20px;border: 3px solid white;">' . $message .
446
+ '<p><a href="'.admin_url().'admin.php?page=mashsb-settings&mashsb-action=hide_gdpr_notice" class="mashsb_hide_gdpr" title="I got it" style="text-decoration:none;color:white;text-decoration:underline;">- I Understand! Do Not Show This Message Again -</a></a>'.
447
  '</div>';
448
 
449
 
455
  * @global array $mashsb_options
456
  */
457
  function mashsb_hide_gdpr_notice(){
 
 
458
  update_option( 'mashsb_show_update_notice_gdpr1', 'no' );
459
  }
460
  add_action ('mashsb_hide_gdpr_notice', 'mashsb_hide_gdpr_notice');
461
 
462
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
463
  /**
464
  * Hide FB API notice
465
  *
466
  * @global array $mashsb_options
467
  */
468
  function mashsb_hide_fb_api_notice(){
 
 
469
  update_option( 'mashsb_show_new_fb_api', 'no' );
470
  }
471
  add_action ('mashsb_hide_fb_api_notice', 'mashsb_hide_fb_api_notice');
includes/admin/welcome.php CHANGED
@@ -131,8 +131,8 @@ class MASHSB_Welcome {
131
  $this->tabs();
132
  ?>
133
  <?php if (isset($_GET['redirect'])) {?>
134
- <p class="about-description mashsb-notice" style="background-color:#00abed;color:white;padding:20px;margin-top:20px;border:3px solid white;"><?php _e( '<strong>Facebook</strong> and <strong>Twitter Share Buttons</strong> have been enabled on all your posts! <br>Use the instructions below to customize MashShare.<br><br>:</strong>MashShare uses new sharedcount.com integration to be GDPR compliant.
135
- Register for sharedcount.com at <a href="'.admin_url().'admin.php?page=mashsb-settings" style="color:white;">MashShare > Settings > Sharecount</a>', 'mashsb' ); ?></p>
136
  <?php } ?>
137
  <div class="changelog clear">
138
  <h1><?php _e( 'Create Your First Social Sharing Button', 'mashsb' ); ?></h1>
131
  $this->tabs();
132
  ?>
133
  <?php if (isset($_GET['redirect'])) {?>
134
+ <p class="about-description mashsb-notice" style="background-color:#00abed;color:white;padding:20px;margin-top:20px;border:3px solid white;"><?php _e( '<strong>Facebook</strong> and <strong>Twitter Share Buttons</strong> have been enabled on all your posts! <br>Use the instructions below to customize MashShare.<br><br>- </strong>MashShare uses sharedcount.com integration to be GDPR compliant.
135
+ Register for sharedcount.com on <a href="'.admin_url().'admin.php?page=mashsb-settings" style="color:white;">MashShare > Settings > Sharecount</a>', 'mashsb' ); ?></p>
136
  <?php } ?>
137
  <div class="changelog clear">
138
  <h1><?php _e( 'Create Your First Social Sharing Button', 'mashsb' ); ?></h1>
includes/template-functions.php CHANGED
@@ -10,7 +10,7 @@
10
  * @since 2.0.0
11
  */
12
  // Exit if accessed directly
13
- if( !defined( 'ABSPATH' ) )
14
  exit;
15
 
16
 
@@ -19,11 +19,11 @@ if( !defined( 'ABSPATH' ) )
19
  * return void
20
  */
21
 
22
- add_shortcode( 'mashshare', 'mashshareShortcodeShow' );
23
- add_filter( 'the_content', 'mashshare_filter_content', getExecutionOrder(), 1 );
24
- add_filter( 'widget_text', 'do_shortcode' );
25
- add_action( 'mashshare', 'mashshare' );
26
- add_filter( 'mash_share_title', 'mashsb_get_title', 10, 2 );
27
 
28
 
29
  /* Get Execution order of injected Share Buttons in $content
@@ -32,9 +32,10 @@ add_filter( 'mash_share_title', 'mashsb_get_title', 10, 2 );
32
  * @return int
33
  */
34
 
35
- function getExecutionOrder() {
 
36
  global $mashsb_options;
37
- isset( $mashsb_options['execution_order'] ) && is_numeric( $mashsb_options['execution_order'] ) ? $priority = trim( $mashsb_options['execution_order'] ) : $priority = 1000;
38
  return $priority;
39
  }
40
 
@@ -47,28 +48,29 @@ function getExecutionOrder() {
47
  * @changed 3.1.8
48
  */
49
 
50
- function mashsbGetShareObj( $url ) {
51
- global $mashsb_options;
52
-
53
- // Sharedcount.com is default option
54
- $mashengine = isset( $mashsb_options['mashsb_sharemethod'] ) && $mashsb_options['mashsb_sharemethod'] === 'mashengine' ? true : false;
55
- if( !$mashengine ) {
56
- require_once(MASHSB_PLUGIN_DIR . 'includes/sharedcount.class.php');
57
- $apikey = isset( $mashsb_options['mashsharer_apikey'] ) ? $mashsb_options['mashsharer_apikey'] : '';
58
- $mashsbSharesObj = new mashsbSharedcount( $url, 10, $apikey );
59
- return $mashsbSharesObj;
60
- }
61
-
62
- if( !class_exists( 'RollingCurlX' ) ) {
63
- require_once MASHSB_PLUGIN_DIR . 'includes/libraries/RolingCurlX.php';
64
- }
65
- if( !class_exists( 'mashengine' ) ) {
66
- require_once(MASHSB_PLUGIN_DIR . 'includes/mashengine.php');
67
- }
68
-
69
- MASHSB()->logger->info( 'mashsbGetShareObj() url: ' . $url );
70
- $mashsbSharesObj = new mashengine( $url );
71
- return $mashsbSharesObj;
 
72
  }
73
 
74
  /*
@@ -78,8 +80,9 @@ function mashsbGetShareObj( $url ) {
78
  * @returns int share count
79
  */
80
 
81
- function mashsbGetShareMethod( $mashsbSharesObj ) {
82
- if( class_exists( 'MashshareNetworks' ) ) {
 
83
  $mashsbShareCounts = $mashsbSharesObj->getAllCounts();
84
  return $mashsbShareCounts;
85
  }
@@ -89,15 +92,16 @@ function mashsbGetShareMethod( $mashsbSharesObj ) {
89
 
90
  /**
91
  * Get share count for all non singular pages where $post is empty or a custom url is used E.g. category or blog list pages or for shortcodes
92
- * Uses transients
93
- *
94
  * @param string $url
95
- *
96
  * @returns integer $shares
97
  */
98
- function mashsbGetNonPostShares( $url ) {
 
99
  global $mashsb_debug;
100
-
101
  /*
102
  * Deactivate share count on:
103
  * - 404 pages
@@ -109,54 +113,56 @@ function mashsbGetNonPostShares( $url ) {
109
  * - deprecated: admin pages (we need to remove this for themes which are using a bad infinite scroll implementation where is_admin() is always true)
110
  */
111
 
112
-
113
- if( is_404() || is_search() || empty($url) || !mashsb_is_enabled_permalinks() || isset($mashsb_options['disable_sharecount']) || mashsb_rate_limit_exceeded() ) {
114
  $mashsb_debug[] = 'MashShare: Share count (temporary) disabled';
115
- return apply_filters( 'filter_get_sharedcount', 0 );
116
  }
117
-
118
-
119
  // Expiration
120
  $expiration = mashsb_get_expiration();
121
-
122
  // Remove variables, parameters and trailingslash
123
- $url_clean = mashsb_sanitize_url( $url );
124
 
125
  // Get any existing copy of our transient data and fill the cache
126
- if( mashsb_force_cache_refresh() ) {
127
-
128
  // Its request limited
129
- if ( mashsb_is_req_limited() ){
130
  mashsbGetShareCountFromTransient($url_clean);
131
  }
132
 
133
  // Regenerate the data and save the transient
134
  // Get the share Object
135
- $mashsbSharesObj = mashsbGetShareObj( $url_clean );
136
  // Get the share counts object
137
- $mashsbShareCounts = mashsbGetShareMethod( $mashsbSharesObj );
138
 
139
  // Set the transient and return shares
140
- set_transient( 'mashcount_' . md5( $url_clean ), $mashsbShareCounts->total, $expiration );
141
- MASHSB()->logger->info( 'mashsbGetNonPostShares set_transient - shares:' . $mashsbShareCounts->total . ' url: ' . $url_clean );
142
  return $mashsbShareCounts->total + getFakecount();
143
  } else {
144
- mashsbGetShareCountFromTransient($url_clean);
145
  }
146
  }
 
147
  /**
148
  * get share count from transient
149
  * @param type string
150
  * @return int
151
  */
152
- function mashsbGetShareCountFromTransient($url){
153
- $shares = get_transient( 'mashcount_' . md5( $url ) );
154
- if( isset( $shares ) && is_numeric( $shares ) ) {
155
- MASHSB()->logger->info( 'mashsbGetNonPostShares() get shares from get_transient. URL: ' . $url . ' SHARES: ' . $shares );
156
- return $shares + getFakecount();
157
- } else {
158
- return 0 + getFakecount(); // we need a result
159
- }
 
160
  xdebug_break();
161
  }
162
 
@@ -164,18 +170,19 @@ function mashsbGetShareCountFromTransient($url){
164
  * Allow or disable share counts for particular posts types to lower the api requests to sharedcount.com
165
  * @return boolean
166
  */
167
- function mashsbIsPostTypeAllowed(){
 
168
  $postType = get_post_type();
169
-
170
- $allowedPostTypes = apply_filters('mashsb_allowed_post_types', array() );
171
-
172
  // If $allowedPostTypes is not defined all post types are allowed
173
- if(empty($allowedPostTypes) ){
174
  return true;
175
  }
176
-
177
  // If filter is used check if current post type is in array of allowed ones
178
- if (in_array($postType, $allowedPostTypes)){
179
  return true;
180
  }
181
  return false;
@@ -190,11 +197,13 @@ function mashsbIsPostTypeAllowed(){
190
  */
191
 
192
 
193
- function getSharedcount( $url ) {
 
194
  global $mashsb_options, $post, $mashsb_sharecount, $mashsb_debug; // todo test a global share count var if it reduces the amount of requests
195
 
196
  /*
197
  * Deactivate share count on:
 
198
  * - 404 pages
199
  * - search page
200
  * - empty url
@@ -205,29 +214,27 @@ function getSharedcount( $url ) {
205
  */
206
 
207
 
208
- // Request is rate limited
209
- // if (mashsb_is_req_limited()) {
210
- // $mashsb_debug[] = 'Rate limit reached: Return Share from custom meta field.';
211
- // return (int) get_post_meta($post->ID, 'mashsb_shares', true) + getFakecount();
212
- // }
213
 
214
 
215
- if( is_404() || is_search() || empty($url) || !mashsb_is_enabled_permalinks() || isset($mashsb_options['disable_sharecount']) || isset($_GET['preview_id']) ) {
216
  $mashsb_debug[] = 'MashShare: Share count (temporary) disabled';
217
- return apply_filters( 'filter_get_sharedcount', 0 );
218
  }
219
-
220
  $mashsb_debug[] = 'Trying to get share count!';
221
-
222
  // Return global share count variable to prevent multiple execution
223
- if (is_array($mashsb_sharecount) && array_key_exists($url, $mashsb_sharecount) && !empty($mashsb_sharecount[$url]) && !mashsb_is_cache_refresh() ){
224
  return $mashsb_sharecount[$url] + getFakecount();
225
  }
226
-
227
-
228
  // Remove mashsb-refresh query parameter
229
  $url = mashsb_sanitize_url($url);
230
-
231
 
232
  /*
233
  * Return share count on non singular pages when url is defined
@@ -235,78 +242,79 @@ function getSharedcount( $url ) {
235
  */
236
 
237
 
238
- if( !empty( $url ) && is_null( $post ) ) {
239
  $mashsb_debug[] = '$url or $post is empty. Return share count with mashsbGetNonPostShares';
240
- return apply_filters( 'filter_get_sharedcount', mashsbGetNonPostShares( $url ) );
241
  }
242
 
243
  /*
244
  * Refresh Cache
245
  */
246
- if( mashsb_force_cache_refresh() && is_singular() ) {
247
-
248
  $mashsb_debug[] = 'Force Cache Refresh for page type singular()';
249
-
250
  // Its request limited
251
- if ( mashsb_is_req_limited() ){
252
- $mashsb_debug[] = 'Rate limit reached: Return Share from custom meta field.';
253
- return (int)get_post_meta( $post->ID, 'mashsb_shares', true ) + getFakecount();
254
  }
255
 
256
  // free some memory
257
- unset ( $mashsb_sharecount[$url] );
258
-
259
  // Write timestamp (Use this on top of this condition. If this is not on top following return statements will be skipped and ignored - possible bug?)
260
- update_post_meta( $post->ID, 'mashsb_timestamp', time() );
261
 
262
- MASHSB()->logger->info( 'Refresh Cache: Update Timestamp: ' . time() );
263
  $mashsb_debug[] = 'Refresh Cache: Update Timestamp: ' . time();
264
  // Get the share Object
265
- $mashsbSharesObj = mashsbGetShareObj( $url );
266
  // Get the share count Method
267
- $mashsbShareCounts = mashsbGetShareMethod( $mashsbSharesObj );
268
  // Get stored share count
269
- $mashsbStoredShareCount = get_post_meta( $post->ID, 'mashsb_shares', true );
270
 
271
  // Create global sharecount
272
  $mashsb_sharecount = array($url => $mashsbShareCounts->total);
273
-
274
  $mashsb_debug[] = 'Get Share count for URL: ' . $url . ' Shares: ' . $mashsbShareCounts->total;
275
- MASHSB()->logger->info( 'Get Share count for URL: ' . $url . ' Shares: ' . $mashsbShareCounts->total );
276
  /*
277
  * Update post_meta only when API is requested and
278
  * API share count is greater than real fresh requested share count ->
279
  */
280
-
281
- if( is_numeric($mashsbShareCounts->total) && $mashsbShareCounts->total >= $mashsbStoredShareCount ) {
282
- update_post_meta( $post->ID, 'mashsb_shares', $mashsbShareCounts->total );
283
- update_post_meta( $post->ID, 'mashsb_jsonshares', json_encode( $mashsbShareCounts ) );
284
- MASHSB()->logger->info( "Refresh Cache: Update database with share count: " . $mashsbShareCounts->total );
285
-
286
  /* return counts from getAllCounts() after DB update */
287
- return apply_filters( 'filter_get_sharedcount', $mashsbShareCounts->total + getFakecount() );
288
  }
289
-
290
  /* return previous counts from DB Cache | this happens when API has a hiccup and does not return any results as expected */
291
- return apply_filters( 'filter_get_sharedcount', $mashsbStoredShareCount + getFakecount() );
292
  } else {
293
  // Return cached results
294
- $cachedCountsMeta = is_numeric($var = get_post_meta( $post->ID, 'mashsb_shares', true )) ? (int)$var : 0;
295
  $cachedCounts = $cachedCountsMeta + getFakecount();
296
  $mashsb_debug[] = 'Cached Results: ' . $cachedCounts . ' url:' . $url;
297
- MASHSB()->logger->info( 'Cached Results: ' . $cachedCounts . ' url:' . $url );
298
- return apply_filters( 'filter_get_sharedcount', $cachedCounts );
299
  }
300
  }
301
 
302
- function mashsb_subscribe_button() {
 
303
  global $mashsb_options;
304
- if( $mashsb_options['networks'][2] ) {
305
- $subscribebutton = '<a href="javascript:void(0)" class="mashicon-subscribe" id="mash-subscribe-control"><span class="icon"><span class="text">' . __( 'Subscribe', 'mashsb' ) . '</span></span></a>';
306
  } else {
307
  $subscribebutton = '';
308
  }
309
- return apply_filters( 'mashsb_filter_subscribe_button', $subscribebutton );
310
  }
311
 
312
  /* Put the Subscribe container under the share buttons
@@ -314,14 +322,15 @@ function mashsb_subscribe_button() {
314
  * @return string
315
  */
316
 
317
- function mashsb_subscribe_content() {
 
318
  global $mashsb_options;
319
- if( isset( $mashsb_options['networks'][2] ) && isset( $mashsb_options['subscribe_behavior'] ) && $mashsb_options['subscribe_behavior'] === 'content' ) { //Subscribe content enabled
320
- $container = '<div class="mashsb-toggle-container">' . mashsb_cleanShortcode( 'mashshare', $mashsb_options['subscribe_content'] ) . '</div>';
321
  } else {
322
  $container = '';
323
  }
324
- return apply_filters( 'mashsb_toggle_container', $container );
325
  }
326
 
327
  /* Check if [mashshare] shortcode is used in subscribe field and deletes it
@@ -331,14 +340,15 @@ function mashsb_subscribe_content() {
331
  * @return string / shortcodes parsed
332
  */
333
 
334
- function mashsb_cleanShortcode( $code, $content ) {
 
335
  global $shortcode_tags;
336
  $stack = $shortcode_tags;
337
  $shortcode_tags = array($code => 1);
338
- $content = strip_shortcodes( $content );
339
  $shortcode_tags = $stack;
340
 
341
- return do_shortcode( $content );
342
  }
343
 
344
  /* Round the totalshares
@@ -348,13 +358,14 @@ function mashsb_cleanShortcode( $code, $content ) {
348
  * @return string
349
  */
350
 
351
- function roundshares( $totalshares ) {
352
- if( $totalshares > 1000000 ) {
353
- $totalshares = round( $totalshares / 1000000, 1 ) . 'M';
354
- } elseif( $totalshares > 1000 ) {
355
- $totalshares = round( $totalshares / 1000, 1 ) . 'k';
 
356
  }
357
- return apply_filters( 'get_rounded_shares', $totalshares );
358
  }
359
 
360
  /* Return the more networks button
@@ -362,20 +373,21 @@ function roundshares( $totalshares ) {
362
  * @return string
363
  */
364
 
365
- function onOffSwitch($size = false) {
 
366
  global $mashsb_options;
367
-
368
  // Get class names for buttons size
369
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
370
-
371
  // Override size with shortcode argument
372
- $class_size = $size ? ' mash-'.$size : $class_size;
373
-
374
  // Get class names for button style
375
  $class_style = isset($mashsb_options['mash_style']) && $mashsb_options['mash_style'] === 'shadow' ? ' mashsb-shadow' : ' mashsb-noshadow';
376
-
377
  $output = '<div class="onoffswitch' . $class_size . $class_style . '"></div>';
378
- return apply_filters( 'mashsh_onoffswitch', $output );
379
  }
380
 
381
  /* Return the second more networks button after
@@ -386,20 +398,21 @@ function onOffSwitch($size = false) {
386
  * @return string
387
  */
388
 
389
- function onOffSwitch2( $size = false) {
 
390
  global $mashsb_options;
391
-
392
  // Get class names for buttons size
393
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
394
-
395
  // Override size with shortcode argument
396
- $class_size = $size ? ' mash-'.$size : $class_size;
397
-
398
  // Get class names for button style
399
  $class_style = isset($mashsb_options['mash_style']) && $mashsb_options['mash_style'] === 'shadow' ? ' mashsb-shadow' : ' mashsb-noshadow';
400
-
401
- $output = '<div class="onoffswitch2' .$class_size . $class_style . '" style="display:none;"></div>';
402
- return apply_filters( 'mashsh_onoffswitch2', $output );
403
  }
404
 
405
  /*
@@ -408,8 +421,9 @@ function onOffSwitch2( $size = false) {
408
  * @return callback
409
  */
410
 
411
- function isStatus( $var ) {
412
- return (!empty( $var["status"] ));
 
413
  }
414
 
415
  /*
@@ -422,22 +436,23 @@ function isStatus( $var ) {
422
  * @return string
423
  */
424
 
425
- function arrNetworks( $name, $is_shortcode ) {
 
426
  global $mashsb_custom_url, $mashsb_custom_text, $mashsb_twitter_url;
427
 
428
- if( $is_shortcode ) {
429
- $url = !empty( $mashsb_custom_url ) ? urlencode($mashsb_custom_url) : urlencode(mashsb_get_url());
430
- $title = !empty( $mashsb_custom_text ) ? $mashsb_custom_text : mashsb_get_title();
431
- $twitter_title = !empty( $mashsb_custom_text ) ? $mashsb_custom_text : mashsb_get_twitter_title();
432
  }
433
- if( !$is_shortcode ) {
434
  $url = urlencode(mashsb_get_url());
435
  $title = mashsb_get_title();
436
  $twitter_title = mashsb_get_twitter_title();
437
  }
438
 
439
  $via = mashsb_get_twitter_username() ? '&via=' . mashsb_get_twitter_username() : '';
440
-
441
  $networks_arr = array(
442
  'facebook' => 'https://www.facebook.com/sharer.php?u=' . mashsb_append_tracking_param($url, 'facebook'),
443
  'twitter' => 'https://twitter.com/intent/tweet?text=' . $twitter_title . '&url=' . $mashsb_twitter_url . $via,
@@ -445,15 +460,15 @@ function arrNetworks( $name, $is_shortcode ) {
445
  'url' => mashsb_append_tracking_param($url),
446
  'title' => $title
447
  );
448
-
449
-
450
  // Delete custom text
451
  unset ($mashsb_custom_text);
452
  // Delete custom url
453
  unset ($mashsb_custom_url);
454
 
455
- $networks = apply_filters( 'mashsb_array_networks', $networks_arr );
456
- return isset( $networks[$name] ) ? $networks[$name] : '';
457
  }
458
 
459
  /* Returns all available networks
@@ -466,30 +481,31 @@ function arrNetworks( $name, $is_shortcode ) {
466
  * @return string html
467
  */
468
 
469
- function mashsb_getNetworks( $is_shortcode = false, $services = 0 ) {
 
470
  global $mashsb_options, $mashsb_custom_url, $enablednetworks, $mashsb_twitter_url;
471
-
472
-
473
  // define globals
474
- if( $is_shortcode ) {
475
- $mashsb_twitter_url = !empty( $mashsb_custom_url ) ? mashsb_get_shorturl( $mashsb_custom_url ) : mashsb_get_twitter_url();
476
 
477
- }else{
478
  $mashsb_twitter_url = mashsb_get_twitter_url();
479
  }
480
-
481
  // Get class names for buttons size
482
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
483
-
484
  // Override size with shortcode argument
485
  //$class_size = $size ? ' mash-'.$size : $class_size;
486
-
487
  // Get class names for buttons margin
488
  $class_margin = isset($mashsb_options['button_margin']) ? '' : ' mash-nomargin';
489
 
490
  // Get class names for center align
491
  $class_center = isset($mashsb_options['text_align_center']) ? ' mash-center' : '';
492
-
493
  // Get class names for button style
494
  $class_style = isset($mashsb_options['mash_style']) && $mashsb_options['mash_style'] === 'shadow' ? ' mashsb-shadow' : ' mashsb-noshadow';
495
 
@@ -503,9 +519,9 @@ function mashsb_getNetworks( $is_shortcode = false, $services = 0 ) {
503
  /* counter for 'Visible Services' */
504
  $startcounter = 1;
505
 
506
- $maxcounter = isset( $mashsb_options['visible_services'] ) ? $mashsb_options['visible_services'] : 0;
507
  $maxcounter = ($maxcounter === 'all') ? 'all' : ($maxcounter + 1); // plus 1 to get networks correct counted (array's starting counting from zero)
508
- $maxcounter = apply_filters( 'mashsb_visible_services', $maxcounter );
509
 
510
  /* Overwrite maxcounter with shortcode attribute */
511
  $maxcounter = ($services === 0) ? $maxcounter : $services;
@@ -514,15 +530,15 @@ function mashsb_getNetworks( $is_shortcode = false, $services = 0 ) {
514
  * Our list of available services, includes the disabled ones!
515
  * We have to clean this array first!
516
  */
517
- $getnetworks = isset( $mashsb_options['networks'] ) ? apply_filters('mashsb_filter_networks', $mashsb_options['networks']) : apply_filters('mashsb_filter_networks', '');
518
-
519
-
520
  /* Delete disabled services from array. Use callback function here. Do this only once because array_filter is slow!
521
  * Use the newly created array and bypass the callback function
522
  */
523
- if( is_array( $getnetworks ) ) {
524
- if( !is_array( $enablednetworks ) ) {
525
- $enablednetworks = array_filter( $getnetworks, 'isStatus' );
526
  } else {
527
  $enablednetworks = $enablednetworks;
528
  }
@@ -530,49 +546,49 @@ function mashsb_getNetworks( $is_shortcode = false, $services = 0 ) {
530
  $enablednetworks = $getnetworks;
531
  }
532
 
533
-
534
  // Use custom networks if available and override default networks
535
  //$enablednetworks = $networks ? $networks : $enablednetworks;
536
-
537
  //var_dump($enablednetworks);
538
-
539
  // Start Primary Buttons
540
-
541
- if( !empty( $enablednetworks ) ) {
542
- foreach ( $enablednetworks as $key => $network ):
543
-
544
- if( $maxcounter !== 'all' && $maxcounter < count( $enablednetworks ) ) { // $maxcounter + 1 for correct comparision with count()
545
- if( $startcounter == $maxcounter ) {
546
  $onoffswitch = onOffSwitch(); // Start More Button
547
  //$startsecondaryshares = '</div>'; // End Primary Buttons
548
  $visibility = mashsb_is_amp_page() ? '' : 'display:none;';
549
- $startsecondaryshares .= '<div class="secondary-shares" style="'.$visibility.'">'; // Start secondary-shares
550
  } else {
551
  $onoffswitch = '';
552
  $onoffswitch2 = '';
553
  $startsecondaryshares = '';
554
  }
555
- if( $startcounter === (count( $enablednetworks )) ) {
556
  $endsecondaryshares = '</div>';
557
  } else {
558
  $endsecondaryshares = '';
559
  }
560
  }
561
 
562
- if( isset($enablednetworks[$key]['name']) && !empty($enablednetworks[$key]['name']) ) {
563
  /* replace all spaces with $nbsp; This prevents error in css style content: text-intend */
564
- $name = preg_replace( '/\040{1,}/', '&nbsp;', $enablednetworks[$key]['name'] ); // The custom share label
565
  } else {
566
- $name = ucfirst( $enablednetworks[$key]['id'] ); // Use the id as share label. Capitalize it!
567
  }
568
-
569
  $enablednetworks[$key]['id'] == 'whatsapp' && !mashsb_is_amp_page() ? $display = 'style="display:none;"' : $display = ''; // Whatsapp button is made visible via js when opened on mobile devices
570
 
571
  // Lets use the data attribute to prevent that pininit.js is overwriting our pinterest button - PR: https://secure.helpscout.net/conversation/257066283/954/?folderId=924740
572
- if ('pinterest' === $enablednetworks[$key]['id'] && !mashsb_is_amp_page() ) {
573
- $output .= '<a class="mashicon-' . $enablednetworks[$key]['id'] . $class_size . $class_margin . $class_center . $class_style . '" href="#" data-mashsb-url="'. arrNetworks( $enablednetworks[$key]['id'], $is_shortcode ) . '" target="_blank" rel="nofollow"><span class="icon"></span><span class="text">' . $name . '</span></a>';
574
  } else {
575
- $output .= '<a class="mashicon-' . $enablednetworks[$key]['id'] . $class_size . $class_margin . $class_center . $class_style . '" href="' . arrNetworks( $enablednetworks[$key]['id'], $is_shortcode ) . '" target="_top" rel="nofollow"><span class="icon"></span><span class="text">' . $name . '</span></a>';
576
  }
577
  $output .= $onoffswitch;
578
  $output .= $startsecondaryshares;
@@ -583,9 +599,10 @@ function mashsb_getNetworks( $is_shortcode = false, $services = 0 ) {
583
  $output .= $endsecondaryshares;
584
  }
585
 
586
- return apply_filters( 'return_networks', $output );
587
  }
588
- /*
 
589
  * Return all available networks for Shortcode generated buttons
590
  *
591
  * @since 2.0
@@ -596,36 +613,37 @@ function mashsb_getNetworks( $is_shortcode = false, $services = 0 ) {
596
  * @return string html
597
  */
598
 
599
- function mashsb_getNetworksShortcode( $is_shortcode = false, $services = 0, $networks = false, $size = false, $icons = false ) {
 
600
  //global $mashsb_options, $mashsb_custom_url, $enablednetworks, $mashsb_twitter_url;
601
  global $mashsb_options, $mashsb_custom_url, $mashsb_twitter_url;
602
-
603
-
604
  // define globals
605
- if( $is_shortcode ) {
606
- $mashsb_twitter_url = !empty( $mashsb_custom_url ) ? mashsb_get_shorturl( $mashsb_custom_url ) : mashsb_get_twitter_url();
607
 
608
- }else{
609
  $mashsb_twitter_url = mashsb_get_twitter_url();
610
  }
611
-
612
  // Get class names for buttons size
613
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
614
-
615
  // Override size with shortcode argument
616
- $class_size = $size ? ' mash-'.$size : $class_size;
617
-
618
  // Get class names for buttons margin
619
  $class_margin = isset($mashsb_options['button_margin']) ? '' : ' mash-nomargin';
620
 
621
  // Get class names for center align
622
  $class_center = isset($mashsb_options['text_align_center']) ? ' mash-center' : '';
623
-
624
  // Get class names for button style
625
  $class_style = isset($mashsb_options['mash_style']) && $mashsb_options['mash_style'] === 'shadow' ? ' mashsb-shadow' : ' mashsb-noshadow';
626
-
627
- $class_icons = $icons ? ' mashsb-pure-icons' : '';
628
-
629
  //$style = $fullwidth ? '' : 'style="min-width:0;flex:none;-webkit-flex:none;"';
630
 
631
  $output = '';
@@ -638,9 +656,9 @@ function mashsb_getNetworksShortcode( $is_shortcode = false, $services = 0, $net
638
  /* counter for 'Visible Services' */
639
  $startcounter = 1;
640
 
641
- $maxcounter = isset( $mashsb_options['visible_services'] ) ? $mashsb_options['visible_services'] : 0;
642
  $maxcounter = ($maxcounter === 'all') ? 'all' : ($maxcounter + 1); // plus 1 to get networks correct counted (array's starting counting from zero)
643
- $maxcounter = apply_filters( 'mashsb_visible_services', $maxcounter );
644
 
645
  /* Overwrite maxcounter with shortcode attribute */
646
  $maxcounter = ($services === 0) ? $maxcounter : $services;
@@ -649,15 +667,15 @@ function mashsb_getNetworksShortcode( $is_shortcode = false, $services = 0, $net
649
  * Our list of available services, includes the disabled ones!
650
  * We have to clean this array first!
651
  */
652
- $getnetworks = isset( $mashsb_options['networks'] ) ? apply_filters('mashsb_filter_networks', $mashsb_options['networks']) : apply_filters('mashsb_filter_networks', '');
653
 
654
  /*
655
  * Delete disabled services from array. Use callback function here. Do this only once because array_filter is slow!
656
  * Use the newly created array and bypass the callback function
657
  */
658
- if( is_array( $getnetworks ) ) {
659
- if( !isset($enablednetworks) || !is_array( $enablednetworks ) ) {
660
- $enablednetworks = array_filter( $getnetworks, 'isStatus' );
661
  } else {
662
  $enablednetworks = $enablednetworks;
663
  }
@@ -665,19 +683,19 @@ function mashsb_getNetworksShortcode( $is_shortcode = false, $services = 0, $net
665
  $enablednetworks = $getnetworks;
666
  }
667
 
668
-
669
  // Use custom networks if available and override default networks
670
  $enablednetworks = $networks ? $networks : $enablednetworks;
671
-
672
  //var_dump($enablednetworks);
673
-
674
  // Start Primary Buttons
675
-
676
- if( !empty( $enablednetworks ) ) {
677
- foreach ( $enablednetworks as $key => $network ):
678
-
679
- if( $maxcounter !== 'all' && $maxcounter < count( $enablednetworks ) ) { // $maxcounter + 1 for correct comparision with count()
680
- if( $startcounter == $maxcounter ) {
681
  $onoffswitch = onOffSwitch($size); // Start More Button
682
  //$startsecondaryshares = '</div>'; // End Primary Buttons
683
  $startsecondaryshares .= '<div class="secondary-shares" style="display:none;">'; // Start secondary-shares
@@ -686,27 +704,27 @@ function mashsb_getNetworksShortcode( $is_shortcode = false, $services = 0, $net
686
  $onoffswitch2 = '';
687
  $startsecondaryshares = '';
688
  }
689
- if( $startcounter === (count( $enablednetworks )) ) {
690
  $endsecondaryshares = '</div>';
691
  } else {
692
  $endsecondaryshares = '';
693
  }
694
  }
695
 
696
- if( isset($enablednetworks[$key]['name']) && !empty($enablednetworks[$key]['name']) ) {
697
  /* replace all spaces with $nbsp; This prevents error in css style content: text-intend */
698
- $name = !$icons ? preg_replace( '/\040{1,}/', '&nbsp;', $enablednetworks[$key]['name'] ) : ''; // The custom share label
699
  } else {
700
- $name = !$icons ? ucfirst( $enablednetworks[$key]['id'] ) : ''; // Use the id as share label. Capitalize it!
701
  }
702
-
703
  //$enablednetworks[$key]['id'] == 'whatsapp' ? $display = 'style="display:none;"' : $display = ''; // Whatsapp button is made visible via js when opened on mobile devices
704
 
705
  // Lets use the data attribute to prevent that pininit.js is overwriting our pinterest button - PR: https://secure.helpscout.net/conversation/257066283/954/?folderId=924740
706
- if ('pinterest' === $enablednetworks[$key]['id'] && !mashsb_is_amp_page() ) {
707
- $output .= '<a class="mashicon-' . $enablednetworks[$key]['id'] . $class_size . $class_margin . $class_center . $class_style . $class_icons . '" href="#" data-mashsb-url="'. arrNetworks( $enablednetworks[$key]['id'], $is_shortcode ) . '" target="_blank" rel="nofollow"><span class="icon"></span><span class="text">' . $name . '</span></a>';
708
  } else {
709
- $output .= '<a class="mashicon-' . $enablednetworks[$key]['id'] . $class_size . $class_margin . $class_center . $class_style . $class_icons . '" href="' . arrNetworks( $enablednetworks[$key]['id'], $is_shortcode ) . '" target="_top" rel="nofollow"><span class="icon"></span><span class="text">' . $name . '</span></a>';
710
  }
711
  $output .= $onoffswitch;
712
  $output .= $startsecondaryshares;
@@ -717,7 +735,7 @@ function mashsb_getNetworksShortcode( $is_shortcode = false, $services = 0, $net
717
  $output .= $endsecondaryshares;
718
  }
719
 
720
- return apply_filters( 'return_networks', $output );
721
  }
722
 
723
 
@@ -729,67 +747,69 @@ function mashsb_getNetworksShortcode( $is_shortcode = false, $services = 0, $net
729
  * @returns string html
730
  */
731
 
732
- function mashshareShow() {
 
733
  global $mashsb_options;
734
-
735
  $class_stretched = isset($mashsb_options['responsive_buttons']) ? 'mashsb-stretched' : '';
736
 
737
  $return = '<aside class="mashsb-container mashsb-main ' . $class_stretched . '">'
738
- . mashsb_content_above() .
739
- '<div class="mashsb-box">'
740
- . apply_filters( 'mashsb_sharecount_filter', mashsb_render_sharecounts() ) .
741
- '<div class="mashsb-buttons">'
742
- . mashsb_getNetworks() .
743
- '</div>
744
  </div>
745
  <div style="clear:both;"></div>'
746
- . mashsb_subscribe_content()
747
- . mashsb_content_below() .
748
- '</aside>
749
  <!-- Share buttons by mashshare.net - Version: ' . MASHSB_VERSION . '-->';
750
- return apply_filters( 'mashsb_output_buttons', $return );
751
  }
752
 
753
  /**
754
  * Render the sharecount template
755
- *
756
  * @param string $customurl default empty
757
  * @param string alignment default left
758
  * @return string html
759
  */
760
- function mashsb_render_sharecounts( $customurl = '', $align = 'left', $size = false ) {
 
761
  global $mashsb_options;
762
-
763
  // Share count disabled
764
- if (false === mashsbIsPostTypeAllowed()){
765
  return '';
766
  }
767
 
768
- if( isset( $mashsb_options['disable_sharecount'] ) || !mashsb_curl_installed() || !mashsb_is_enabled_permalinks() ) {
769
  return '';
770
  }
771
 
772
- $url = empty( $customurl ) ? mashsb_get_url() : $customurl;
773
- $sharetitle = isset( $mashsb_options['sharecount_title'] ) ? $mashsb_options['sharecount_title'] : __( 'SHARES', 'mashsb' );
774
 
775
- $shares = getSharedcount( $url );
776
- $sharecount = isset( $mashsb_options['mashsharer_round'] ) ? roundshares( $shares ) : $shares;
777
 
778
  // do not show shares after x shares
779
- if( mashsb_hide_shares( $shares ) ) {
780
  return;
781
  }
782
-
783
  // Get class names for buttons size
784
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
785
-
786
  // Override size with shortcode argument
787
- $class_size = $size ? ' mash-'.$size : $class_size;
788
-
789
  // No inline style if it's amp
790
  $style = !mashsb_is_amp_page() ? 'style="float:' . $align . ';"' : '';
791
 
792
- $html = '<div class="mashsb-count'.$class_size . '" ' . $style . '><div class="counts mashsbcount">' . $sharecount . '</div><span class="mashsb-sharetext">' . $sharetitle . '</span></div>';
793
  return apply_filters('mashsb_share_count', $html);
794
  }
795
 
@@ -801,15 +821,16 @@ function mashsb_render_sharecounts( $customurl = '', $align = 'left', $size = fa
801
  * @returns string
802
  */
803
 
804
- function mashshareShortcodeShow( $args ) {
 
805
  global $mashsb_options, $mashsb_custom_url, $mashsb_custom_text;
806
 
807
  $sharecount = '';
808
 
809
  //Filter shortcode args to add an option for developers to change (add) some args
810
- apply_filters( 'mashsb_shortcode_atts', $args );
811
 
812
- extract( shortcode_atts( array(
813
  'cache' => '3600',
814
  'shares' => 'true',
815
  'buttons' => 'true',
@@ -820,14 +841,14 @@ function mashshareShortcodeShow( $args ) {
820
  'networks' => '', // List of networks separated by comma
821
  'size' => '', // small, medium, large button size
822
  'icons' => '0' // 1
823
- ), $args ) );
824
-
825
  // Visible services
826
  $count_services = !empty($services) ? $services : 0;
827
-
828
  // Enable specific networks
829
  $networks = !empty($networks) ? explode(",", $networks) : false;
830
-
831
  // Convert into appropriate array structure
832
  if ($networks) {
833
  $new = array();
@@ -838,43 +859,43 @@ function mashshareShortcodeShow( $args ) {
838
  }
839
  $networks = $new;
840
  }
841
-
842
  //var_dump( $new );
843
-
844
  // Define custom url var to share
845
  //$mashsb_custom_url = empty( $url ) ? mashsb_get_url() : $url;
846
  // The global available custom url to share
847
- $mashsb_custom_url = !empty( $url ) ? $url : '';
848
  // local url
849
- $mashsb_url = empty( $url ) ? mashsb_get_url() : $url;
850
 
851
  // Define custom text to share
852
- $mashsb_custom_text = !empty( $text ) ? $text : false;
853
 
854
- if( $shares != 'false' ) {
855
- $sharecount = mashsb_render_sharecounts( $mashsb_url, $align, $size );
856
  // shortcode [mashshare shares="true" buttons="false"]
857
- if( $shares === "true" && $buttons === 'false' ) {
858
  return $sharecount;
859
  }
860
  }
861
-
862
  $class_stretched = isset($mashsb_options['responsive_buttons']) ? 'mashsb-stretched' : '';
863
 
864
  $return = '<aside class="mashsb-container mashsb-main ' . $class_stretched . '">'
865
- . mashsb_content_above() .
866
- '<div class="mashsb-box">'
867
- . $sharecount .
868
- '<div class="mashsb-buttons">'
869
- . mashsb_getNetworksShortcode( true, $count_services, $networks, $size, $icons ) .
870
- '</div></div>
871
  <div style="clear:both;"></div>'
872
- . mashsb_subscribe_content()
873
- . mashsb_content_below() .
874
- '</aside>
875
  <!-- Share buttons made by mashshare.net - Version: ' . MASHSB_VERSION . '-->';
876
 
877
- return apply_filters( 'mashsb_output_buttons', $return );
878
  }
879
 
880
 
@@ -885,70 +906,72 @@ function mashshareShortcodeShow( $args ) {
885
  * @TODO: Check if shortcode [mashshare] is used in widget
886
  */
887
 
888
- function mashsbGetActiveStatus() {
 
889
  global $mashsb_options, $post;
890
 
891
- $frontpage = isset( $mashsb_options['frontpage'] ) ? true : false;
892
  $current_post_type = get_post_type();
893
- $enabled_post_types = isset( $mashsb_options['post_types'] ) ? $mashsb_options['post_types'] : array();
894
- $singular = isset( $mashsb_options['singular'] ) ? true : false;
895
- $loadall = isset( $mashsb_options['loadall'] ) ? $loadall = true : $loadall = false;
896
 
897
 
898
- if( mashsb_is_excluded() ) {
899
- mashdebug()->info( "mashsb_is_excluded()" );
900
- return apply_filters( 'mashsb_active', false );
901
  }
902
 
903
- if( $loadall ) {
904
- mashdebug()->info( "load all mashsb scripts" );
905
- return apply_filters( 'mashsb_active', true );
906
  }
907
 
908
  // Load on frontpage
909
- if( $frontpage === true && is_front_page() ) {
910
- mashdebug()->info( "allow frontpage and is frontpage" );
911
- return apply_filters( 'mashsb_active', true );
912
  }
913
 
914
  // Load scripts when shortcode is used
915
  /* Check if shortcode is used */
916
- if( function_exists( 'has_shortcode' ) && is_object( $post ) && has_shortcode( $post->post_content, 'mashshare' ) ) {
917
- mashdebug()->info( "has_shortcode" );
918
- return apply_filters( 'mashsb_active', true );
919
  }
920
 
921
  // No scripts on non singular page
922
- if( !is_singular() && !$singular ) {
923
- mashdebug()->info( "No scripts on non singular page" );
924
- return apply_filters( 'mashsb_active', false );
925
  }
926
 
927
 
928
  // Load scripts when post_type is defined (for automatic embeding)
929
- if( in_array( $current_post_type, $enabled_post_types ) ) {
930
- mashdebug()->info( "automatic post_type enabled" );
931
- return apply_filters( 'mashsb_active', true );
932
  }
933
 
934
- mashdebug()->info( "mashsbGetActiveStatus false" );
935
- return apply_filters( 'mashsb_active', false );
936
  }
937
 
938
  /**
939
  * Get the post meta value of position
940
- *
941
- * @global int $post
942
  * @return mixed string|bool false
 
943
  */
944
- function mashsb_get_post_meta_position() {
 
945
  global $post;
946
-
947
- if( isset( $post->ID ) && !empty($post->ID) ) {
948
- $check_position_meta_post = get_post_meta( $post->ID, 'mashsb_position', true );
949
- if( !empty( $check_position_meta_post ) ) {
950
  return $check_position_meta_post;
951
- }else{
952
  return false;
953
  }
954
  }
@@ -961,55 +984,56 @@ function mashsb_get_post_meta_position() {
961
  * @return string
962
  */
963
 
964
- function mashshare_filter_content( $content ) {
 
965
  global $mashsb_options, $wp_current_filter;
966
-
967
  // Default position
968
- $position = !empty( $mashsb_options['mashsharer_position'] ) ? $mashsb_options['mashsharer_position'] : '';
969
  // Check if we have a post meta setting which overrides the global position than we use that one instead
970
- if ( true == ($position_meta = mashsb_get_post_meta_position() ) ){
971
  $position = $position_meta;
972
  }
973
 
974
-
975
- $enabled_post_types = isset( $mashsb_options['post_types'] ) ? $mashsb_options['post_types'] : null;
976
  $current_post_type = get_post_type();
977
- $frontpage = isset( $mashsb_options['frontpage'] ) ? true : false;
978
- $excluded = isset( $mashsb_options['excluded_from'] ) ? $mashsb_options['excluded_from'] : null;
979
- $singular = isset( $mashsb_options['singular'] ) ? $singular = true : $singular = false;
980
 
981
-
982
- if( isset($mashsb_options['is_main_query']) && !is_main_query() ) {
983
  return $content;
984
  }
985
-
986
- if( mashsb_is_excluded() ){
987
  return $content;
988
  }
989
-
990
- if (is_feed()){
991
  return $content;
992
  }
993
 
994
- if( $frontpage == false && is_front_page() ) {
995
  return $content;
996
  }
997
 
998
- if( !is_singular() == 1 && $singular !== true ) {
999
  return $content;
1000
  }
1001
 
1002
- if( $enabled_post_types == null or ! in_array( $current_post_type, $enabled_post_types ) ) {
1003
  return $content;
1004
  }
1005
 
1006
- if( in_array( 'get_the_excerpt', $wp_current_filter ) ) {
1007
  return $content;
1008
  }
1009
-
1010
  // Get one instance (prevents multiple similar calls)
1011
  $mashsb_instance = apply_filters('mashsb_the_content', mashshareShow());
1012
- switch ( $position ) {
1013
  case 'manual':
1014
  break;
1015
 
@@ -1024,7 +1048,7 @@ function mashshare_filter_content( $content ) {
1024
  case 'after':
1025
  $content .= $mashsb_instance;
1026
  break;
1027
-
1028
  case 'disable':
1029
  break;
1030
  }
@@ -1036,7 +1060,8 @@ function mashshare_filter_content( $content ) {
1036
  * @return string
1037
  */
1038
 
1039
- function mashshare() {
 
1040
  //global $atts;
1041
  echo mashshareShow();
1042
  }
@@ -1046,7 +1071,8 @@ function mashshare() {
1046
  * @return string
1047
  */
1048
 
1049
- function mashsharer() {
 
1050
  //global $atts;
1051
  echo mashshareShow();
1052
  }
@@ -1054,81 +1080,84 @@ function mashsharer() {
1054
  /**
1055
  * Get Thumbnail featured image if existed
1056
  *
1057
- * @since 1.0
1058
  * @param int $postID
1059
  * @return string
 
1060
  */
1061
- function mashsb_get_image( $postID ) {
 
1062
  global $post;
1063
 
1064
- if( !isset( $post ) ) {
1065
  return '';
1066
  }
1067
 
1068
- if( has_post_thumbnail( $post->ID ) ) {
1069
- $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' );
1070
  return isset($image[0]) ? $image[0] : '';
1071
  }
1072
  }
1073
 
1074
- add_action( 'mashsb_get_image', 'mashsb_get_image' );
1075
 
1076
  /**
1077
  * Get the excerpt
1078
  *
1079
- * @since 1.0
1080
  * @param int $postID
1081
  * @changed 3.0.0
1082
  * @return string
 
1083
  */
1084
- function mashsb_get_excerpt_by_id( $post_id ) {
 
1085
  // Check if the post has an excerpt
1086
- if( has_excerpt() ) {
1087
  return get_the_excerpt();
1088
  }
1089
 
1090
- if( !isset( $post_id ) ) {
1091
  return "";
1092
  }
1093
 
1094
- $the_post = get_post( $post_id ); //Gets post ID
1095
 
1096
  /*
1097
  * If post_content isn't set
1098
  */
1099
- if( !isset( $the_post->post_content ) ) {
1100
  return "";
1101
  }
1102
 
1103
  $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
1104
  // Strip all shortcodes
1105
  $excerpt_length = 35; //Sets excerpt length by word count
1106
- $the_excerpt = strip_tags( strip_shortcodes( $the_excerpt ) ); //Strips tags and images
1107
- $words = explode( ' ', $the_excerpt, $excerpt_length + 1 );
1108
- if( count( $words ) > $excerpt_length ) :
1109
- array_pop( $words );
1110
- array_push( $words, '…' );
1111
- $the_excerpt = implode( ' ', $words );
1112
  endif;
1113
  $the_excerpt = '<p>' . $the_excerpt . '</p>';
1114
- return wp_strip_all_tags( $the_excerpt );
1115
  }
1116
 
1117
- add_action( 'mashsb_get_excerpt_by_id', 'mashsb_get_excerpt_by_id' );
1118
 
1119
  /**
1120
- * Create a factor for calculating individual fake counts
1121
  * based on the number of word within a page title
1122
  *
1123
- * @since 2.0
1124
  * @return int
 
1125
  */
1126
- function mashsb_get_fake_factor() {
 
1127
  // str_word_count is not working for hebraic and arabic languages
1128
  //$wordcount = str_word_count(the_title_attribute('echo=0')); //Gets title to be used as a basis for the count
1129
- $wordcount = count( explode( ' ', the_title_attribute( 'echo=0' ) ) );
1130
  $factor = $wordcount / 10;
1131
- return apply_filters( 'mashsb_fake_factor', $factor );
1132
  }
1133
 
1134
  /*
@@ -1139,13 +1168,14 @@ function mashsb_get_fake_factor() {
1139
  *
1140
  */
1141
 
1142
- function getFakecount() {
 
1143
  global $mashsb_options;
1144
 
1145
-
1146
- $fakecount = isset($mashsb_options['fake_count']) && is_numeric ($mashsb_options['fake_count']) ?
1147
- round( $mashsb_options['fake_count'] * mashsb_get_fake_factor(), 0 ) : 0;
1148
-
1149
  return (int)$fakecount;
1150
 
1151
  }
@@ -1160,17 +1190,18 @@ function getFakecount() {
1160
  *
1161
  */
1162
 
1163
- function mashsb_hide_shares( $sharecount ) {
 
1164
  global $mashsb_options, $post;
1165
 
1166
- if( empty( $mashsb_options['hide_sharecount'] ) ) {
1167
  return false;
1168
  }
1169
 
1170
- $url = get_permalink( isset( $post->ID ) );
1171
- $sharelimit = isset( $mashsb_options['hide_sharecount'] ) ? $mashsb_options['hide_sharecount'] : 0;
1172
 
1173
- if( $sharecount >= $sharelimit ) {
1174
  return false;
1175
  }
1176
  // Hide share count per default when it is not a valid number
@@ -1183,10 +1214,11 @@ function mashsb_hide_shares( $sharecount ) {
1183
  * @scince 2.3.2
1184
  */
1185
 
1186
- function mashsb_content_above() {
 
1187
  global $mashsb_options;
1188
- $html = !empty( $mashsb_options['content_above'] ) ? '<div class="mashsb_above_buttons">' . mashsb_cleanShortcode('mashshare', $mashsb_options['content_above']) . '</div>' : '';
1189
- return apply_filters( 'mashsb_above_buttons', $html );
1190
  }
1191
 
1192
  /* Additional content above share buttons
@@ -1195,36 +1227,38 @@ function mashsb_content_above() {
1195
  * @scince 2.3.2
1196
  */
1197
 
1198
- function mashsb_content_below() {
 
1199
  global $mashsb_options;
1200
- $html = !empty( $mashsb_options['content_below'] ) ? '<div class="mashsb_below_buttons">' . mashsb_cleanShortcode('mashshare', $mashsb_options['content_below']) . '</div>' : '';
1201
- return apply_filters( 'mashsb_below_buttons', $html );
1202
  }
1203
 
1204
  /**
1205
  * Check if buttons are excluded from a specific post id
1206
- *
1207
  * @return true if post is excluded
1208
  */
1209
- function mashsb_is_excluded() {
 
1210
  global $post, $mashsb_options;
1211
 
1212
- if( !isset( $post ) ) {
1213
  return false;
1214
  }
1215
 
1216
- $excluded = isset( $mashsb_options['excluded_from'] ) ? $mashsb_options['excluded_from'] : null;
1217
 
1218
  // Load scripts when page is not excluded
1219
- if( strpos( $excluded, ',' ) !== false ) {
1220
- $excluded = explode( ',', $excluded );
1221
- if( in_array( $post->ID, $excluded ) ) {
1222
- mashdebug()->info( "is excluded" );
1223
  return true;
1224
  }
1225
  }
1226
- if( $post->ID == $excluded ) {
1227
- mashdebug()->info( "is single excluded" );
1228
  return true;
1229
  }
1230
 
@@ -1234,20 +1268,21 @@ function mashsb_is_excluded() {
1234
 
1235
  /**
1236
  * Return general post title
1237
- *
1238
  * @param string $title default post title
1239
- * @global obj $mashsb_meta_tags
1240
- *
1241
  * @return string the default post title, shortcode title or custom twitter title
 
 
1242
  */
1243
- function mashsb_get_title() {
 
1244
  global $post, $mashsb_meta_tags;
1245
- if( is_singular() && method_exists($mashsb_meta_tags, 'get_og_title')) {
1246
  $title = $mashsb_meta_tags->get_og_title();
1247
- $title = html_entity_decode( $title, ENT_QUOTES, 'UTF-8' );
1248
- $title = urlencode( $title );
1249
- $title = str_replace( '#', '%23', $title );
1250
- $title = esc_html( $title );
1251
  } else {
1252
  $title = mashsb_get_document_title();
1253
  $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8');
@@ -1255,34 +1290,35 @@ function mashsb_get_title() {
1255
  $title = str_replace('#', '%23', $title);
1256
  $title = esc_html($title);
1257
  }
1258
- return apply_filters( 'mashsb_get_title', $title );
1259
  }
1260
 
1261
  /**
1262
  * Return twitter custom title
1263
- *
 
1264
  * @global object $mashsb_meta_tags
1265
  * @changed 3.0.0
1266
- *
1267
- * @return string the custom twitter title
1268
  */
1269
- function mashsb_get_twitter_title() {
 
1270
  global $mashsb_meta_tags;
1271
  // $mashsb_meta_tags is only available on singular pages
1272
- if( is_singular() && method_exists($mashsb_meta_tags, 'get_twitter_title') ) {
1273
  $title = $mashsb_meta_tags->get_twitter_title();
1274
- $title = html_entity_decode( $title, ENT_QUOTES, 'UTF-8' );
1275
- $title = urlencode( $title );
1276
- $title = str_replace( '#', '%23', $title );
1277
- $title = str_replace( '+', '%20', $title );
1278
- $title = str_replace('|','',$title);
1279
- $title = esc_html( $title );
1280
-
1281
  } else {
1282
  // title for non singular pages
1283
  $title = mashsb_get_title();
1284
- $title = str_replace( '+', '%20', $title );
1285
- $title = str_replace('|','',$title);
1286
  }
1287
  return apply_filters('mashsb_twitter_title', $title);
1288
  }
@@ -1294,21 +1330,22 @@ function mashsb_get_twitter_title() {
1294
  * @scince 2.2.8
1295
  */
1296
 
1297
- function mashsb_get_url() {
 
1298
  global $post;
1299
-
1300
- if( isset($post->ID )) {
1301
  // The permalink for singular pages!
1302
  // Do not check here for is_singular() (like e.g. the sharebar addon does.)
1303
  // Need to check for post id because on category and archiv pages
1304
  // we want the pageID within the loop instead the first appearing one.
1305
- $url = mashsb_sanitize_url(get_permalink( $post->ID ));
1306
  } else {
1307
- // The main URL
1308
  $url = mashsb_get_main_url();
1309
  }
1310
-
1311
- return apply_filters( 'mashsb_get_url', $url );
1312
  }
1313
 
1314
  /*
@@ -1318,28 +1355,30 @@ function mashsb_get_url() {
1318
  * @scince 2.2.8
1319
  */
1320
 
1321
- function mashsb_get_twitter_url() {
1322
- if( function_exists( 'mashsb_get_shorturl_singular' ) ) {
1323
- $url = mashsb_get_shorturl_singular( mashsb_get_url() );
1324
- } else if( function_exists( 'mashsuGetShortURL' ) ) { // compatibility mode for MashShare earlier than 3.0
 
1325
  $get_url = mashsb_get_url();
1326
- $url = mashsuGetShortURL( $get_url );
1327
  } else {
1328
  $url = mashsb_get_url();
1329
  }
1330
- return apply_filters( 'mashsb_get_twitter_url', $url );
1331
  }
1332
 
1333
  /**
1334
  * Wrapper for mashsb_get_shorturl_singular()
1335
- *
1336
  * @param string $url
1337
  * @return string
1338
  */
1339
- function mashsb_get_shorturl( $url ) {
 
1340
 
1341
- if( !empty( $url ) ) {
1342
- $url = mashsb_get_shorturl_singular( $url );
1343
  } else {
1344
  $url = "";
1345
  }
@@ -1350,22 +1389,23 @@ function mashsb_get_shorturl( $url ) {
1350
 
1351
  /**
1352
  * Get sanitized twitter handle
1353
- *
1354
- * @global array $mashsb_options
1355
  * @return mixed string | bool false
 
1356
  */
1357
- function mashsb_get_twitter_username() {
 
1358
  global $mashsb_options;
1359
 
1360
- if( empty( $mashsb_options['mashsharer_hashtag'] ) ) {
1361
  return;
1362
  }
1363
 
1364
  // If plugin is not running on mashshare.net or dev environment replace @mashshare
1365
- if ( empty( $_SERVER['HTTP_HOST'] ) || ( $_SERVER['HTTP_HOST'] !== 'www.mashshare.net' && $_SERVER['HTTP_HOST'] !== 'src.wordpress-develop.dev' ) ){
1366
  //Sanitize it
1367
- $replace_first = str_ireplace( 'mashshare', '', $mashsb_options['mashsharer_hashtag'] );
1368
- $replace_second = str_ireplace( '@', '', $replace_first );
1369
  return $replace_second;
1370
  } else {
1371
  return $mashsb_options['mashsharer_hashtag'];
@@ -1375,70 +1415,71 @@ function mashsb_get_twitter_username() {
1375
  /**
1376
  * Returns document title for the current page.
1377
  *
1378
- * @since 3.0
1379
- *
1380
  * @global int $post Page number of a list of posts.
1381
  *
1382
- * @return string Tag with the document title.
 
1383
  */
1384
- function mashsb_get_document_title() {
1385
-
 
1386
  /**
1387
  * Filter the document title before it is generated.
1388
  *
1389
  * Passing a non-empty value will short-circuit wp_get_document_title(),
1390
  * returning that value instead.
1391
  *
 
1392
  * @since 4.4.0
1393
  *
1394
- * @param string $title The document title. Default empty string.
1395
  */
1396
-
1397
- $title = '';
1398
 
1399
  // If it's a 404 page, use a "Page not found" title.
1400
- if( is_404() ) {
1401
- $title = __( 'Page not found' );
1402
 
1403
  // If it's a search, use a dynamic search results title.
1404
- } elseif( is_search() ) {
1405
  /* translators: %s: search phrase */
1406
- $title = sprintf( __( 'Search Results for &#8220;%s&#8221;' ), get_search_query() );
1407
 
1408
  // If on a post type archive, use the post type archive title.
1409
- } elseif( is_post_type_archive() ) {
1410
- $title = post_type_archive_title( '', false );
1411
-
1412
  // If on a taxonomy archive, use the term title.
1413
- } elseif( is_tax() ) {
1414
- $title = single_term_title( '', false );
1415
 
1416
  /*
1417
  * If we're on the blog page that is not the homepage or
1418
  * a single post of any post type, use the post title.
1419
  */
1420
- //} elseif( !is_home() || is_singular() ) {
1421
- } elseif( is_singular() ) {
1422
  $title = the_title_attribute('echo=0');
1423
 
1424
  // If on the front page, use the site title.
1425
- } elseif( is_front_page() ) {
1426
- $title = get_bloginfo( 'name', 'display' );
1427
-
1428
  // If on a category or tag archive, use the term title.
1429
- } elseif( is_category() || is_tag() ) {
1430
- $title = single_term_title( '', false );
1431
 
1432
  // If on an author archive, use the author's display name.
1433
- } elseif( is_author() && $author = get_queried_object() ) {
1434
  $title = $author->display_name;
1435
 
1436
  // If it's a date archive, use the date as the title.
1437
- } elseif( is_year() ) {
1438
- $title = get_the_date( _x( 'Y', 'yearly archives date format' ) );
1439
- } elseif( is_month() ) {
1440
- $title = get_the_date( _x( 'F Y', 'monthly archives date format' ) );
1441
- } elseif( is_day() ) {
1442
  $title = get_the_date();
1443
  }
1444
 
@@ -1448,16 +1489,17 @@ function mashsb_get_document_title() {
1448
 
1449
  /**
1450
  * Append tracking parameter to shared url
1451
- *
1452
  * @param string $url
1453
  * @return string
1454
  */
1455
- function mashsb_append_tracking_param($url, $network = 'mashshare'){
 
1456
  global $mashsb_options;
1457
-
1458
- if (!isset($mashsb_options['tracking_params'])){
1459
  return $url;
1460
  }
1461
-
1462
- return $url . urlencode('?utm_source=sharebuttons&utm_medium='.$network.'&utm_campaign=mashshare');
1463
  }
10
  * @since 2.0.0
11
  */
12
  // Exit if accessed directly
13
+ if (!defined('ABSPATH'))
14
  exit;
15
 
16
 
19
  * return void
20
  */
21
 
22
+ add_shortcode('mashshare', 'mashshareShortcodeShow');
23
+ add_filter('the_content', 'mashshare_filter_content', getExecutionOrder(), 1);
24
+ add_filter('widget_text', 'do_shortcode');
25
+ add_action('mashshare', 'mashshare');
26
+ add_filter('mash_share_title', 'mashsb_get_title', 10, 2);
27
 
28
 
29
  /* Get Execution order of injected Share Buttons in $content
32
  * @return int
33
  */
34
 
35
+ function getExecutionOrder()
36
+ {
37
  global $mashsb_options;
38
+ isset($mashsb_options['execution_order']) && is_numeric($mashsb_options['execution_order']) ? $priority = trim($mashsb_options['execution_order']) : $priority = 1000;
39
  return $priority;
40
  }
41
 
48
  * @changed 3.1.8
49
  */
50
 
51
+ function mashsbGetShareObj($url)
52
+ {
53
+ global $mashsb_options;
54
+
55
+ // Sharedcount.com is default option
56
+ $mashengine = isset($mashsb_options['mashsb_sharemethod']) && $mashsb_options['mashsb_sharemethod'] === 'mashengine' ? true : false;
57
+ if (!$mashengine) {
58
+ require_once(MASHSB_PLUGIN_DIR . 'includes/sharedcount.class.php');
59
+ $apikey = isset($mashsb_options['mashsharer_apikey']) ? $mashsb_options['mashsharer_apikey'] : '';
60
+ $mashsbSharesObj = new mashsbSharedcount($url, 10, $apikey);
61
+ return $mashsbSharesObj;
62
+ }
63
+
64
+ if (!class_exists('RollingCurlX')) {
65
+ require_once MASHSB_PLUGIN_DIR . 'includes/libraries/RolingCurlX.php';
66
+ }
67
+ if (!class_exists('mashengine')) {
68
+ require_once(MASHSB_PLUGIN_DIR . 'includes/mashengine.php');
69
+ }
70
+
71
+ MASHSB()->logger->info('mashsbGetShareObj() url: ' . $url);
72
+ $mashsbSharesObj = new mashengine($url);
73
+ return $mashsbSharesObj;
74
  }
75
 
76
  /*
80
  * @returns int share count
81
  */
82
 
83
+ function mashsbGetShareMethod($mashsbSharesObj)
84
+ {
85
+ if (class_exists('MashshareNetworks')) {
86
  $mashsbShareCounts = $mashsbSharesObj->getAllCounts();
87
  return $mashsbShareCounts;
88
  }
92
 
93
  /**
94
  * Get share count for all non singular pages where $post is empty or a custom url is used E.g. category or blog list pages or for shortcodes
95
+ * Uses transients
96
+ *
97
  * @param string $url
98
+ *
99
  * @returns integer $shares
100
  */
101
+ function mashsbGetNonPostShares($url)
102
+ {
103
  global $mashsb_debug;
104
+
105
  /*
106
  * Deactivate share count on:
107
  * - 404 pages
113
  * - deprecated: admin pages (we need to remove this for themes which are using a bad infinite scroll implementation where is_admin() is always true)
114
  */
115
 
116
+
117
+ if (is_404() || is_search() || empty($url) || !mashsb_is_enabled_permalinks() || isset($mashsb_options['disable_sharecount']) || mashsb_rate_limit_exceeded()) {
118
  $mashsb_debug[] = 'MashShare: Share count (temporary) disabled';
119
+ return apply_filters('filter_get_sharedcount', 0);
120
  }
121
+
122
+
123
  // Expiration
124
  $expiration = mashsb_get_expiration();
125
+
126
  // Remove variables, parameters and trailingslash
127
+ $url_clean = mashsb_sanitize_url($url);
128
 
129
  // Get any existing copy of our transient data and fill the cache
130
+ if (mashsb_force_cache_refresh()) {
131
+
132
  // Its request limited
133
+ if (mashsb_is_req_limited()) {
134
  mashsbGetShareCountFromTransient($url_clean);
135
  }
136
 
137
  // Regenerate the data and save the transient
138
  // Get the share Object
139
+ $mashsbSharesObj = mashsbGetShareObj($url_clean);
140
  // Get the share counts object
141
+ $mashsbShareCounts = mashsbGetShareMethod($mashsbSharesObj);
142
 
143
  // Set the transient and return shares
144
+ set_transient('mashcount_' . md5($url_clean), $mashsbShareCounts->total, $expiration);
145
+ MASHSB()->logger->info('mashsbGetNonPostShares set_transient - shares:' . $mashsbShareCounts->total . ' url: ' . $url_clean);
146
  return $mashsbShareCounts->total + getFakecount();
147
  } else {
148
+ mashsbGetShareCountFromTransient($url_clean);
149
  }
150
  }
151
+
152
  /**
153
  * get share count from transient
154
  * @param type string
155
  * @return int
156
  */
157
+ function mashsbGetShareCountFromTransient($url)
158
+ {
159
+ $shares = get_transient('mashcount_' . md5($url));
160
+ if (isset($shares) && is_numeric($shares)) {
161
+ MASHSB()->logger->info('mashsbGetNonPostShares() get shares from get_transient. URL: ' . $url . ' SHARES: ' . $shares);
162
+ return $shares + getFakecount();
163
+ } else {
164
+ return 0 + getFakecount(); // we need a result
165
+ }
166
  xdebug_break();
167
  }
168
 
170
  * Allow or disable share counts for particular posts types to lower the api requests to sharedcount.com
171
  * @return boolean
172
  */
173
+ function mashsbIsPostTypeAllowed()
174
+ {
175
  $postType = get_post_type();
176
+
177
+ $allowedPostTypes = apply_filters('mashsb_allowed_post_types', array());
178
+
179
  // If $allowedPostTypes is not defined all post types are allowed
180
+ if (empty($allowedPostTypes)) {
181
  return true;
182
  }
183
+
184
  // If filter is used check if current post type is in array of allowed ones
185
+ if (in_array($postType, $allowedPostTypes)) {
186
  return true;
187
  }
188
  return false;
197
  */
198
 
199
 
200
+ function getSharedcount($url)
201
+ {
202
  global $mashsb_options, $post, $mashsb_sharecount, $mashsb_debug; // todo test a global share count var if it reduces the amount of requests
203
 
204
  /*
205
  * Deactivate share count on:
206
+ * - preview pages
207
  * - 404 pages
208
  * - search page
209
  * - empty url
214
  */
215
 
216
 
217
+ if (is_preview()) {
218
+ return 0;
219
+ }
 
 
220
 
221
 
222
+ if (is_404() || is_search() || empty($url) || !mashsb_is_enabled_permalinks() || isset($mashsb_options['disable_sharecount']) || isset($_GET['preview_id'])) {
223
  $mashsb_debug[] = 'MashShare: Share count (temporary) disabled';
224
+ return apply_filters('filter_get_sharedcount', 0);
225
  }
226
+
227
  $mashsb_debug[] = 'Trying to get share count!';
228
+
229
  // Return global share count variable to prevent multiple execution
230
+ if (is_array($mashsb_sharecount) && array_key_exists($url, $mashsb_sharecount) && !empty($mashsb_sharecount[$url]) && !mashsb_is_cache_refresh()) {
231
  return $mashsb_sharecount[$url] + getFakecount();
232
  }
233
+
234
+
235
  // Remove mashsb-refresh query parameter
236
  $url = mashsb_sanitize_url($url);
237
+
238
 
239
  /*
240
  * Return share count on non singular pages when url is defined
242
  */
243
 
244
 
245
+ if (!empty($url) && is_null($post)) {
246
  $mashsb_debug[] = '$url or $post is empty. Return share count with mashsbGetNonPostShares';
247
+ return apply_filters('filter_get_sharedcount', mashsbGetNonPostShares($url));
248
  }
249
 
250
  /*
251
  * Refresh Cache
252
  */
253
+ if (mashsb_force_cache_refresh() && is_singular()) {
254
+
255
  $mashsb_debug[] = 'Force Cache Refresh for page type singular()';
256
+
257
  // Its request limited
258
+ if (mashsb_is_req_limited()) {
259
+ $mashsb_debug[] = 'Rate limit reached: Return Share from custom meta field.';
260
+ return (int)get_post_meta($post->ID, 'mashsb_shares', true) + getFakecount();
261
  }
262
 
263
  // free some memory
264
+ unset ($mashsb_sharecount[$url]);
265
+
266
  // Write timestamp (Use this on top of this condition. If this is not on top following return statements will be skipped and ignored - possible bug?)
267
+ update_post_meta($post->ID, 'mashsb_timestamp', time());
268
 
269
+ MASHSB()->logger->info('Refresh Cache: Update Timestamp: ' . time());
270
  $mashsb_debug[] = 'Refresh Cache: Update Timestamp: ' . time();
271
  // Get the share Object
272
+ $mashsbSharesObj = mashsbGetShareObj($url);
273
  // Get the share count Method
274
+ $mashsbShareCounts = mashsbGetShareMethod($mashsbSharesObj);
275
  // Get stored share count
276
+ $mashsbStoredShareCount = get_post_meta($post->ID, 'mashsb_shares', true);
277
 
278
  // Create global sharecount
279
  $mashsb_sharecount = array($url => $mashsbShareCounts->total);
280
+
281
  $mashsb_debug[] = 'Get Share count for URL: ' . $url . ' Shares: ' . $mashsbShareCounts->total;
282
+ MASHSB()->logger->info('Get Share count for URL: ' . $url . ' Shares: ' . $mashsbShareCounts->total);
283
  /*
284
  * Update post_meta only when API is requested and
285
  * API share count is greater than real fresh requested share count ->
286
  */
287
+
288
+ if (is_numeric($mashsbShareCounts->total) && $mashsbShareCounts->total >= $mashsbStoredShareCount) {
289
+ update_post_meta($post->ID, 'mashsb_shares', $mashsbShareCounts->total);
290
+ update_post_meta($post->ID, 'mashsb_jsonshares', json_encode($mashsbShareCounts));
291
+ MASHSB()->logger->info("Refresh Cache: Update database with share count: " . $mashsbShareCounts->total);
292
+
293
  /* return counts from getAllCounts() after DB update */
294
+ return apply_filters('filter_get_sharedcount', $mashsbShareCounts->total + getFakecount());
295
  }
296
+
297
  /* return previous counts from DB Cache | this happens when API has a hiccup and does not return any results as expected */
298
+ return apply_filters('filter_get_sharedcount', $mashsbStoredShareCount + getFakecount());
299
  } else {
300
  // Return cached results
301
+ $cachedCountsMeta = is_numeric($var = get_post_meta($post->ID, 'mashsb_shares', true)) ? (int)$var : 0;
302
  $cachedCounts = $cachedCountsMeta + getFakecount();
303
  $mashsb_debug[] = 'Cached Results: ' . $cachedCounts . ' url:' . $url;
304
+ MASHSB()->logger->info('Cached Results: ' . $cachedCounts . ' url:' . $url);
305
+ return apply_filters('filter_get_sharedcount', $cachedCounts);
306
  }
307
  }
308
 
309
+ function mashsb_subscribe_button()
310
+ {
311
  global $mashsb_options;
312
+ if ($mashsb_options['networks'][2]) {
313
+ $subscribebutton = '<a href="javascript:void(0)" class="mashicon-subscribe" id="mash-subscribe-control"><span class="icon"><span class="text">' . __('Subscribe', 'mashsb') . '</span></span></a>';
314
  } else {
315
  $subscribebutton = '';
316
  }
317
+ return apply_filters('mashsb_filter_subscribe_button', $subscribebutton);
318
  }
319
 
320
  /* Put the Subscribe container under the share buttons
322
  * @return string
323
  */
324
 
325
+ function mashsb_subscribe_content()
326
+ {
327
  global $mashsb_options;
328
+ if (isset($mashsb_options['networks'][2]) && isset($mashsb_options['subscribe_behavior']) && $mashsb_options['subscribe_behavior'] === 'content') { //Subscribe content enabled
329
+ $container = '<div class="mashsb-toggle-container">' . mashsb_cleanShortcode('mashshare', $mashsb_options['subscribe_content']) . '</div>';
330
  } else {
331
  $container = '';
332
  }
333
+ return apply_filters('mashsb_toggle_container', $container);
334
  }
335
 
336
  /* Check if [mashshare] shortcode is used in subscribe field and deletes it
340
  * @return string / shortcodes parsed
341
  */
342
 
343
+ function mashsb_cleanShortcode($code, $content)
344
+ {
345
  global $shortcode_tags;
346
  $stack = $shortcode_tags;
347
  $shortcode_tags = array($code => 1);
348
+ $content = strip_shortcodes($content);
349
  $shortcode_tags = $stack;
350
 
351
+ return do_shortcode($content);
352
  }
353
 
354
  /* Round the totalshares
358
  * @return string
359
  */
360
 
361
+ function roundshares($totalshares)
362
+ {
363
+ if ($totalshares > 1000000) {
364
+ $totalshares = round($totalshares / 1000000, 1) . 'M';
365
+ } elseif ($totalshares > 1000) {
366
+ $totalshares = round($totalshares / 1000, 1) . 'k';
367
  }
368
+ return apply_filters('get_rounded_shares', $totalshares);
369
  }
370
 
371
  /* Return the more networks button
373
  * @return string
374
  */
375
 
376
+ function onOffSwitch($size = false)
377
+ {
378
  global $mashsb_options;
379
+
380
  // Get class names for buttons size
381
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
382
+
383
  // Override size with shortcode argument
384
+ $class_size = $size ? ' mash-' . $size : $class_size;
385
+
386
  // Get class names for button style
387
  $class_style = isset($mashsb_options['mash_style']) && $mashsb_options['mash_style'] === 'shadow' ? ' mashsb-shadow' : ' mashsb-noshadow';
388
+
389
  $output = '<div class="onoffswitch' . $class_size . $class_style . '"></div>';
390
+ return apply_filters('mashsh_onoffswitch', $output);
391
  }
392
 
393
  /* Return the second more networks button after
398
  * @return string
399
  */
400
 
401
+ function onOffSwitch2($size = false)
402
+ {
403
  global $mashsb_options;
404
+
405
  // Get class names for buttons size
406
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
407
+
408
  // Override size with shortcode argument
409
+ $class_size = $size ? ' mash-' . $size : $class_size;
410
+
411
  // Get class names for button style
412
  $class_style = isset($mashsb_options['mash_style']) && $mashsb_options['mash_style'] === 'shadow' ? ' mashsb-shadow' : ' mashsb-noshadow';
413
+
414
+ $output = '<div class="onoffswitch2' . $class_size . $class_style . '" style="display:none;"></div>';
415
+ return apply_filters('mashsh_onoffswitch2', $output);
416
  }
417
 
418
  /*
421
  * @return callback
422
  */
423
 
424
+ function isStatus($var)
425
+ {
426
+ return (!empty($var["status"]));
427
  }
428
 
429
  /*
436
  * @return string
437
  */
438
 
439
+ function arrNetworks($name, $is_shortcode)
440
+ {
441
  global $mashsb_custom_url, $mashsb_custom_text, $mashsb_twitter_url;
442
 
443
+ if ($is_shortcode) {
444
+ $url = !empty($mashsb_custom_url) ? urlencode($mashsb_custom_url) : urlencode(mashsb_get_url());
445
+ $title = !empty($mashsb_custom_text) ? $mashsb_custom_text : mashsb_get_title();
446
+ $twitter_title = !empty($mashsb_custom_text) ? $mashsb_custom_text : mashsb_get_twitter_title();
447
  }
448
+ if (!$is_shortcode) {
449
  $url = urlencode(mashsb_get_url());
450
  $title = mashsb_get_title();
451
  $twitter_title = mashsb_get_twitter_title();
452
  }
453
 
454
  $via = mashsb_get_twitter_username() ? '&via=' . mashsb_get_twitter_username() : '';
455
+
456
  $networks_arr = array(
457
  'facebook' => 'https://www.facebook.com/sharer.php?u=' . mashsb_append_tracking_param($url, 'facebook'),
458
  'twitter' => 'https://twitter.com/intent/tweet?text=' . $twitter_title . '&url=' . $mashsb_twitter_url . $via,
460
  'url' => mashsb_append_tracking_param($url),
461
  'title' => $title
462
  );
463
+
464
+
465
  // Delete custom text
466
  unset ($mashsb_custom_text);
467
  // Delete custom url
468
  unset ($mashsb_custom_url);
469
 
470
+ $networks = apply_filters('mashsb_array_networks', $networks_arr);
471
+ return isset($networks[$name]) ? $networks[$name] : '';
472
  }
473
 
474
  /* Returns all available networks
481
  * @return string html
482
  */
483
 
484
+ function mashsb_getNetworks($is_shortcode = false, $services = 0)
485
+ {
486
  global $mashsb_options, $mashsb_custom_url, $enablednetworks, $mashsb_twitter_url;
487
+
488
+
489
  // define globals
490
+ if ($is_shortcode) {
491
+ $mashsb_twitter_url = !empty($mashsb_custom_url) ? mashsb_get_shorturl($mashsb_custom_url) : mashsb_get_twitter_url();
492
 
493
+ } else {
494
  $mashsb_twitter_url = mashsb_get_twitter_url();
495
  }
496
+
497
  // Get class names for buttons size
498
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
499
+
500
  // Override size with shortcode argument
501
  //$class_size = $size ? ' mash-'.$size : $class_size;
502
+
503
  // Get class names for buttons margin
504
  $class_margin = isset($mashsb_options['button_margin']) ? '' : ' mash-nomargin';
505
 
506
  // Get class names for center align
507
  $class_center = isset($mashsb_options['text_align_center']) ? ' mash-center' : '';
508
+
509
  // Get class names for button style
510
  $class_style = isset($mashsb_options['mash_style']) && $mashsb_options['mash_style'] === 'shadow' ? ' mashsb-shadow' : ' mashsb-noshadow';
511
 
519
  /* counter for 'Visible Services' */
520
  $startcounter = 1;
521
 
522
+ $maxcounter = isset($mashsb_options['visible_services']) ? $mashsb_options['visible_services'] : 0;
523
  $maxcounter = ($maxcounter === 'all') ? 'all' : ($maxcounter + 1); // plus 1 to get networks correct counted (array's starting counting from zero)
524
+ $maxcounter = apply_filters('mashsb_visible_services', $maxcounter);
525
 
526
  /* Overwrite maxcounter with shortcode attribute */
527
  $maxcounter = ($services === 0) ? $maxcounter : $services;
530
  * Our list of available services, includes the disabled ones!
531
  * We have to clean this array first!
532
  */
533
+ $getnetworks = isset($mashsb_options['networks']) ? apply_filters('mashsb_filter_networks', $mashsb_options['networks']) : apply_filters('mashsb_filter_networks', '');
534
+
535
+
536
  /* Delete disabled services from array. Use callback function here. Do this only once because array_filter is slow!
537
  * Use the newly created array and bypass the callback function
538
  */
539
+ if (is_array($getnetworks)) {
540
+ if (!is_array($enablednetworks)) {
541
+ $enablednetworks = array_filter($getnetworks, 'isStatus');
542
  } else {
543
  $enablednetworks = $enablednetworks;
544
  }
546
  $enablednetworks = $getnetworks;
547
  }
548
 
549
+
550
  // Use custom networks if available and override default networks
551
  //$enablednetworks = $networks ? $networks : $enablednetworks;
552
+
553
  //var_dump($enablednetworks);
554
+
555
  // Start Primary Buttons
556
+
557
+ if (!empty($enablednetworks)) {
558
+ foreach ($enablednetworks as $key => $network):
559
+
560
+ if ($maxcounter !== 'all' && $maxcounter < count($enablednetworks)) { // $maxcounter + 1 for correct comparision with count()
561
+ if ($startcounter == $maxcounter) {
562
  $onoffswitch = onOffSwitch(); // Start More Button
563
  //$startsecondaryshares = '</div>'; // End Primary Buttons
564
  $visibility = mashsb_is_amp_page() ? '' : 'display:none;';
565
+ $startsecondaryshares .= '<div class="secondary-shares" style="' . $visibility . '">'; // Start secondary-shares
566
  } else {
567
  $onoffswitch = '';
568
  $onoffswitch2 = '';
569
  $startsecondaryshares = '';
570
  }
571
+ if ($startcounter === (count($enablednetworks))) {
572
  $endsecondaryshares = '</div>';
573
  } else {
574
  $endsecondaryshares = '';
575
  }
576
  }
577
 
578
+ if (isset($enablednetworks[$key]['name']) && !empty($enablednetworks[$key]['name'])) {
579
  /* replace all spaces with $nbsp; This prevents error in css style content: text-intend */
580
+ $name = preg_replace('/\040{1,}/', '&nbsp;', $enablednetworks[$key]['name']); // The custom share label
581
  } else {
582
+ $name = ucfirst($enablednetworks[$key]['id']); // Use the id as share label. Capitalize it!
583
  }
584
+
585
  $enablednetworks[$key]['id'] == 'whatsapp' && !mashsb_is_amp_page() ? $display = 'style="display:none;"' : $display = ''; // Whatsapp button is made visible via js when opened on mobile devices
586
 
587
  // Lets use the data attribute to prevent that pininit.js is overwriting our pinterest button - PR: https://secure.helpscout.net/conversation/257066283/954/?folderId=924740
588
+ if ('pinterest' === $enablednetworks[$key]['id'] && !mashsb_is_amp_page()) {
589
+ $output .= '<a class="mashicon-' . $enablednetworks[$key]['id'] . $class_size . $class_margin . $class_center . $class_style . '" href="#" data-mashsb-url="' . arrNetworks($enablednetworks[$key]['id'], $is_shortcode) . '" target="_blank" rel="nofollow"><span class="icon"></span><span class="text">' . $name . '</span></a>';
590
  } else {
591
+ $output .= '<a class="mashicon-' . $enablednetworks[$key]['id'] . $class_size . $class_margin . $class_center . $class_style . '" href="' . arrNetworks($enablednetworks[$key]['id'], $is_shortcode) . '" target="_top" rel="nofollow"><span class="icon"></span><span class="text">' . $name . '</span></a>';
592
  }
593
  $output .= $onoffswitch;
594
  $output .= $startsecondaryshares;
599
  $output .= $endsecondaryshares;
600
  }
601
 
602
+ return apply_filters('return_networks', $output);
603
  }
604
+
605
+ /*
606
  * Return all available networks for Shortcode generated buttons
607
  *
608
  * @since 2.0
613
  * @return string html
614
  */
615
 
616
+ function mashsb_getNetworksShortcode($is_shortcode = false, $services = 0, $networks = false, $size = false, $icons = false)
617
+ {
618
  //global $mashsb_options, $mashsb_custom_url, $enablednetworks, $mashsb_twitter_url;
619
  global $mashsb_options, $mashsb_custom_url, $mashsb_twitter_url;
620
+
621
+
622
  // define globals
623
+ if ($is_shortcode) {
624
+ $mashsb_twitter_url = !empty($mashsb_custom_url) ? mashsb_get_shorturl($mashsb_custom_url) : mashsb_get_twitter_url();
625
 
626
+ } else {
627
  $mashsb_twitter_url = mashsb_get_twitter_url();
628
  }
629
+
630
  // Get class names for buttons size
631
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
632
+
633
  // Override size with shortcode argument
634
+ $class_size = $size ? ' mash-' . $size : $class_size;
635
+
636
  // Get class names for buttons margin
637
  $class_margin = isset($mashsb_options['button_margin']) ? '' : ' mash-nomargin';
638
 
639
  // Get class names for center align
640
  $class_center = isset($mashsb_options['text_align_center']) ? ' mash-center' : '';
641
+
642
  // Get class names for button style
643
  $class_style = isset($mashsb_options['mash_style']) && $mashsb_options['mash_style'] === 'shadow' ? ' mashsb-shadow' : ' mashsb-noshadow';
644
+
645
+ $class_icons = $icons ? ' mashsb-pure-icons' : '';
646
+
647
  //$style = $fullwidth ? '' : 'style="min-width:0;flex:none;-webkit-flex:none;"';
648
 
649
  $output = '';
656
  /* counter for 'Visible Services' */
657
  $startcounter = 1;
658
 
659
+ $maxcounter = isset($mashsb_options['visible_services']) ? $mashsb_options['visible_services'] : 0;
660
  $maxcounter = ($maxcounter === 'all') ? 'all' : ($maxcounter + 1); // plus 1 to get networks correct counted (array's starting counting from zero)
661
+ $maxcounter = apply_filters('mashsb_visible_services', $maxcounter);
662
 
663
  /* Overwrite maxcounter with shortcode attribute */
664
  $maxcounter = ($services === 0) ? $maxcounter : $services;
667
  * Our list of available services, includes the disabled ones!
668
  * We have to clean this array first!
669
  */
670
+ $getnetworks = isset($mashsb_options['networks']) ? apply_filters('mashsb_filter_networks', $mashsb_options['networks']) : apply_filters('mashsb_filter_networks', '');
671
 
672
  /*
673
  * Delete disabled services from array. Use callback function here. Do this only once because array_filter is slow!
674
  * Use the newly created array and bypass the callback function
675
  */
676
+ if (is_array($getnetworks)) {
677
+ if (!isset($enablednetworks) || !is_array($enablednetworks)) {
678
+ $enablednetworks = array_filter($getnetworks, 'isStatus');
679
  } else {
680
  $enablednetworks = $enablednetworks;
681
  }
683
  $enablednetworks = $getnetworks;
684
  }
685
 
686
+
687
  // Use custom networks if available and override default networks
688
  $enablednetworks = $networks ? $networks : $enablednetworks;
689
+
690
  //var_dump($enablednetworks);
691
+
692
  // Start Primary Buttons
693
+
694
+ if (!empty($enablednetworks)) {
695
+ foreach ($enablednetworks as $key => $network):
696
+
697
+ if ($maxcounter !== 'all' && $maxcounter < count($enablednetworks)) { // $maxcounter + 1 for correct comparision with count()
698
+ if ($startcounter == $maxcounter) {
699
  $onoffswitch = onOffSwitch($size); // Start More Button
700
  //$startsecondaryshares = '</div>'; // End Primary Buttons
701
  $startsecondaryshares .= '<div class="secondary-shares" style="display:none;">'; // Start secondary-shares
704
  $onoffswitch2 = '';
705
  $startsecondaryshares = '';
706
  }
707
+ if ($startcounter === (count($enablednetworks))) {
708
  $endsecondaryshares = '</div>';
709
  } else {
710
  $endsecondaryshares = '';
711
  }
712
  }
713
 
714
+ if (isset($enablednetworks[$key]['name']) && !empty($enablednetworks[$key]['name'])) {
715
  /* replace all spaces with $nbsp; This prevents error in css style content: text-intend */
716
+ $name = !$icons ? preg_replace('/\040{1,}/', '&nbsp;', $enablednetworks[$key]['name']) : ''; // The custom share label
717
  } else {
718
+ $name = !$icons ? ucfirst($enablednetworks[$key]['id']) : ''; // Use the id as share label. Capitalize it!
719
  }
720
+
721
  //$enablednetworks[$key]['id'] == 'whatsapp' ? $display = 'style="display:none;"' : $display = ''; // Whatsapp button is made visible via js when opened on mobile devices
722
 
723
  // Lets use the data attribute to prevent that pininit.js is overwriting our pinterest button - PR: https://secure.helpscout.net/conversation/257066283/954/?folderId=924740
724
+ if ('pinterest' === $enablednetworks[$key]['id'] && !mashsb_is_amp_page()) {
725
+ $output .= '<a class="mashicon-' . $enablednetworks[$key]['id'] . $class_size . $class_margin . $class_center . $class_style . $class_icons . '" href="#" data-mashsb-url="' . arrNetworks($enablednetworks[$key]['id'], $is_shortcode) . '" target="_blank" rel="nofollow"><span class="icon"></span><span class="text">' . $name . '</span></a>';
726
  } else {
727
+ $output .= '<a class="mashicon-' . $enablednetworks[$key]['id'] . $class_size . $class_margin . $class_center . $class_style . $class_icons . '" href="' . arrNetworks($enablednetworks[$key]['id'], $is_shortcode) . '" target="_top" rel="nofollow"><span class="icon"></span><span class="text">' . $name . '</span></a>';
728
  }
729
  $output .= $onoffswitch;
730
  $output .= $startsecondaryshares;
735
  $output .= $endsecondaryshares;
736
  }
737
 
738
+ return apply_filters('return_networks', $output);
739
  }
740
 
741
 
747
  * @returns string html
748
  */
749
 
750
+ function mashshareShow()
751
+ {
752
  global $mashsb_options;
753
+
754
  $class_stretched = isset($mashsb_options['responsive_buttons']) ? 'mashsb-stretched' : '';
755
 
756
  $return = '<aside class="mashsb-container mashsb-main ' . $class_stretched . '">'
757
+ . mashsb_content_above() .
758
+ '<div class="mashsb-box">'
759
+ . apply_filters('mashsb_sharecount_filter', mashsb_render_sharecounts()) .
760
+ '<div class="mashsb-buttons">'
761
+ . mashsb_getNetworks() .
762
+ '</div>
763
  </div>
764
  <div style="clear:both;"></div>'
765
+ . mashsb_subscribe_content()
766
+ . mashsb_content_below() .
767
+ '</aside>
768
  <!-- Share buttons by mashshare.net - Version: ' . MASHSB_VERSION . '-->';
769
+ return apply_filters('mashsb_output_buttons', $return);
770
  }
771
 
772
  /**
773
  * Render the sharecount template
774
+ *
775
  * @param string $customurl default empty
776
  * @param string alignment default left
777
  * @return string html
778
  */
779
+ function mashsb_render_sharecounts($customurl = '', $align = 'left', $size = false)
780
+ {
781
  global $mashsb_options;
782
+
783
  // Share count disabled
784
+ if (false === mashsbIsPostTypeAllowed()) {
785
  return '';
786
  }
787
 
788
+ if (isset($mashsb_options['disable_sharecount']) || !mashsb_curl_installed() || !mashsb_is_enabled_permalinks()) {
789
  return '';
790
  }
791
 
792
+ $url = empty($customurl) ? mashsb_get_url() : $customurl;
793
+ $sharetitle = isset($mashsb_options['sharecount_title']) ? $mashsb_options['sharecount_title'] : __('SHARES', 'mashsb');
794
 
795
+ $shares = getSharedcount($url);
796
+ $sharecount = isset($mashsb_options['mashsharer_round']) ? roundshares($shares) : $shares;
797
 
798
  // do not show shares after x shares
799
+ if (mashsb_hide_shares($shares)) {
800
  return;
801
  }
802
+
803
  // Get class names for buttons size
804
  $class_size = isset($mashsb_options['buttons_size']) ? ' ' . $mashsb_options['buttons_size'] : '';
805
+
806
  // Override size with shortcode argument
807
+ $class_size = $size ? ' mash-' . $size : $class_size;
808
+
809
  // No inline style if it's amp
810
  $style = !mashsb_is_amp_page() ? 'style="float:' . $align . ';"' : '';
811
 
812
+ $html = '<div class="mashsb-count' . $class_size . '" ' . $style . '><div class="counts mashsbcount">' . $sharecount . '</div><span class="mashsb-sharetext">' . $sharetitle . '</span></div>';
813
  return apply_filters('mashsb_share_count', $html);
814
  }
815
 
821
  * @returns string
822
  */
823
 
824
+ function mashshareShortcodeShow($args)
825
+ {
826
  global $mashsb_options, $mashsb_custom_url, $mashsb_custom_text;
827
 
828
  $sharecount = '';
829
 
830
  //Filter shortcode args to add an option for developers to change (add) some args
831
+ apply_filters('mashsb_shortcode_atts', $args);
832
 
833
+ extract(shortcode_atts(array(
834
  'cache' => '3600',
835
  'shares' => 'true',
836
  'buttons' => 'true',
841
  'networks' => '', // List of networks separated by comma
842
  'size' => '', // small, medium, large button size
843
  'icons' => '0' // 1
844
+ ), $args));
845
+
846
  // Visible services
847
  $count_services = !empty($services) ? $services : 0;
848
+
849
  // Enable specific networks
850
  $networks = !empty($networks) ? explode(",", $networks) : false;
851
+
852
  // Convert into appropriate array structure
853
  if ($networks) {
854
  $new = array();
859
  }
860
  $networks = $new;
861
  }
862
+
863
  //var_dump( $new );
864
+
865
  // Define custom url var to share
866
  //$mashsb_custom_url = empty( $url ) ? mashsb_get_url() : $url;
867
  // The global available custom url to share
868
+ $mashsb_custom_url = !empty($url) ? $url : '';
869
  // local url
870
+ $mashsb_url = empty($url) ? mashsb_get_url() : $url;
871
 
872
  // Define custom text to share
873
+ $mashsb_custom_text = !empty($text) ? $text : false;
874
 
875
+ if ($shares != 'false') {
876
+ $sharecount = mashsb_render_sharecounts($mashsb_url, $align, $size);
877
  // shortcode [mashshare shares="true" buttons="false"]
878
+ if ($shares === "true" && $buttons === 'false') {
879
  return $sharecount;
880
  }
881
  }
882
+
883
  $class_stretched = isset($mashsb_options['responsive_buttons']) ? 'mashsb-stretched' : '';
884
 
885
  $return = '<aside class="mashsb-container mashsb-main ' . $class_stretched . '">'
886
+ . mashsb_content_above() .
887
+ '<div class="mashsb-box">'
888
+ . $sharecount .
889
+ '<div class="mashsb-buttons">'
890
+ . mashsb_getNetworksShortcode(true, $count_services, $networks, $size, $icons) .
891
+ '</div></div>
892
  <div style="clear:both;"></div>'
893
+ . mashsb_subscribe_content()
894
+ . mashsb_content_below() .
895
+ '</aside>
896
  <!-- Share buttons made by mashshare.net - Version: ' . MASHSB_VERSION . '-->';
897
 
898
+ return apply_filters('mashsb_output_buttons', $return);
899
  }
900
 
901
 
906
  * @TODO: Check if shortcode [mashshare] is used in widget
907
  */
908
 
909
+ function mashsbGetActiveStatus()
910
+ {
911
  global $mashsb_options, $post;
912
 
913
+ $frontpage = isset($mashsb_options['frontpage']) ? true : false;
914
  $current_post_type = get_post_type();
915
+ $enabled_post_types = isset($mashsb_options['post_types']) ? $mashsb_options['post_types'] : array();
916
+ $singular = isset($mashsb_options['singular']) ? true : false;
917
+ $loadall = isset($mashsb_options['loadall']) ? $loadall = true : $loadall = false;
918
 
919
 
920
+ if (mashsb_is_excluded()) {
921
+ mashdebug()->info("mashsb_is_excluded()");
922
+ return apply_filters('mashsb_active', false);
923
  }
924
 
925
+ if ($loadall) {
926
+ mashdebug()->info("load all mashsb scripts");
927
+ return apply_filters('mashsb_active', true);
928
  }
929
 
930
  // Load on frontpage
931
+ if ($frontpage === true && is_front_page()) {
932
+ mashdebug()->info("allow frontpage and is frontpage");
933
+ return apply_filters('mashsb_active', true);
934
  }
935
 
936
  // Load scripts when shortcode is used
937
  /* Check if shortcode is used */
938
+ if (function_exists('has_shortcode') && is_object($post) && has_shortcode($post->post_content, 'mashshare')) {
939
+ mashdebug()->info("has_shortcode");
940
+ return apply_filters('mashsb_active', true);
941
  }
942
 
943
  // No scripts on non singular page
944
+ if (!is_singular() && !$singular) {
945
+ mashdebug()->info("No scripts on non singular page");
946
+ return apply_filters('mashsb_active', false);
947
  }
948
 
949
 
950
  // Load scripts when post_type is defined (for automatic embeding)
951
+ if (in_array($current_post_type, $enabled_post_types)) {
952
+ mashdebug()->info("automatic post_type enabled");
953
+ return apply_filters('mashsb_active', true);
954
  }
955
 
956
+ mashdebug()->info("mashsbGetActiveStatus false");
957
+ return apply_filters('mashsb_active', false);
958
  }
959
 
960
  /**
961
  * Get the post meta value of position
962
+ *
 
963
  * @return mixed string|bool false
964
+ * @global int $post
965
  */
966
+ function mashsb_get_post_meta_position()
967
+ {
968
  global $post;
969
+
970
+ if (isset($post->ID) && !empty($post->ID)) {
971
+ $check_position_meta_post = get_post_meta($post->ID, 'mashsb_position', true);
972
+ if (!empty($check_position_meta_post)) {
973
  return $check_position_meta_post;
974
+ } else {
975
  return false;
976
  }
977
  }
984
  * @return string
985
  */
986
 
987
+ function mashshare_filter_content($content)
988
+ {
989
  global $mashsb_options, $wp_current_filter;
990
+
991
  // Default position
992
+ $position = !empty($mashsb_options['mashsharer_position']) ? $mashsb_options['mashsharer_position'] : '';
993
  // Check if we have a post meta setting which overrides the global position than we use that one instead
994
+ if (true == ($position_meta = mashsb_get_post_meta_position())) {
995
  $position = $position_meta;
996
  }
997
 
998
+
999
+ $enabled_post_types = isset($mashsb_options['post_types']) ? $mashsb_options['post_types'] : null;
1000
  $current_post_type = get_post_type();
1001
+ $frontpage = isset($mashsb_options['frontpage']) ? true : false;
1002
+ $excluded = isset($mashsb_options['excluded_from']) ? $mashsb_options['excluded_from'] : null;
1003
+ $singular = isset($mashsb_options['singular']) ? $singular = true : $singular = false;
1004
 
1005
+
1006
+ if (isset($mashsb_options['is_main_query']) && !is_main_query()) {
1007
  return $content;
1008
  }
1009
+
1010
+ if (mashsb_is_excluded()) {
1011
  return $content;
1012
  }
1013
+
1014
+ if (is_feed()) {
1015
  return $content;
1016
  }
1017
 
1018
+ if ($frontpage == false && is_front_page()) {
1019
  return $content;
1020
  }
1021
 
1022
+ if (!is_singular() == 1 && $singular !== true) {
1023
  return $content;
1024
  }
1025
 
1026
+ if ($enabled_post_types == null or !in_array($current_post_type, $enabled_post_types)) {
1027
  return $content;
1028
  }
1029
 
1030
+ if (in_array('get_the_excerpt', $wp_current_filter)) {
1031
  return $content;
1032
  }
1033
+
1034
  // Get one instance (prevents multiple similar calls)
1035
  $mashsb_instance = apply_filters('mashsb_the_content', mashshareShow());
1036
+ switch ($position) {
1037
  case 'manual':
1038
  break;
1039
 
1048
  case 'after':
1049
  $content .= $mashsb_instance;
1050
  break;
1051
+
1052
  case 'disable':
1053
  break;
1054
  }
1060
  * @return string
1061
  */
1062
 
1063
+ function mashshare()
1064
+ {
1065
  //global $atts;
1066
  echo mashshareShow();
1067
  }
1071
  * @return string
1072
  */
1073
 
1074
+ function mashsharer()
1075
+ {
1076
  //global $atts;
1077
  echo mashshareShow();
1078
  }
1080
  /**
1081
  * Get Thumbnail featured image if existed
1082
  *
 
1083
  * @param int $postID
1084
  * @return string
1085
+ * @since 1.0
1086
  */
1087
+ function mashsb_get_image($postID)
1088
+ {
1089
  global $post;
1090
 
1091
+ if (!isset($post)) {
1092
  return '';
1093
  }
1094
 
1095
+ if (has_post_thumbnail($post->ID)) {
1096
+ $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'single-post-thumbnail');
1097
  return isset($image[0]) ? $image[0] : '';
1098
  }
1099
  }
1100
 
1101
+ add_action('mashsb_get_image', 'mashsb_get_image');
1102
 
1103
  /**
1104
  * Get the excerpt
1105
  *
 
1106
  * @param int $postID
1107
  * @changed 3.0.0
1108
  * @return string
1109
+ * @since 1.0
1110
  */
1111
+ function mashsb_get_excerpt_by_id($post_id)
1112
+ {
1113
  // Check if the post has an excerpt
1114
+ if (has_excerpt()) {
1115
  return get_the_excerpt();
1116
  }
1117
 
1118
+ if (!isset($post_id)) {
1119
  return "";
1120
  }
1121
 
1122
+ $the_post = get_post($post_id); //Gets post ID
1123
 
1124
  /*
1125
  * If post_content isn't set
1126
  */
1127
+ if (!isset($the_post->post_content)) {
1128
  return "";
1129
  }
1130
 
1131
  $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
1132
  // Strip all shortcodes
1133
  $excerpt_length = 35; //Sets excerpt length by word count
1134
+ $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
1135
+ $words = explode(' ', $the_excerpt, $excerpt_length + 1);
1136
+ if (count($words) > $excerpt_length) :
1137
+ array_pop($words);
1138
+ array_push($words, '…');
1139
+ $the_excerpt = implode(' ', $words);
1140
  endif;
1141
  $the_excerpt = '<p>' . $the_excerpt . '</p>';
1142
+ return wp_strip_all_tags($the_excerpt);
1143
  }
1144
 
1145
+ add_action('mashsb_get_excerpt_by_id', 'mashsb_get_excerpt_by_id');
1146
 
1147
  /**
1148
+ * Create a factor for calculating individual fake counts
1149
  * based on the number of word within a page title
1150
  *
 
1151
  * @return int
1152
+ * @since 2.0
1153
  */
1154
+ function mashsb_get_fake_factor()
1155
+ {
1156
  // str_word_count is not working for hebraic and arabic languages
1157
  //$wordcount = str_word_count(the_title_attribute('echo=0')); //Gets title to be used as a basis for the count
1158
+ $wordcount = count(explode(' ', the_title_attribute('echo=0')));
1159
  $factor = $wordcount / 10;
1160
+ return apply_filters('mashsb_fake_factor', $factor);
1161
  }
1162
 
1163
  /*
1168
  *
1169
  */
1170
 
1171
+ function getFakecount()
1172
+ {
1173
  global $mashsb_options;
1174
 
1175
+
1176
+ $fakecount = isset($mashsb_options['fake_count']) && is_numeric($mashsb_options['fake_count']) ?
1177
+ round($mashsb_options['fake_count'] * mashsb_get_fake_factor(), 0) : 0;
1178
+
1179
  return (int)$fakecount;
1180
 
1181
  }
1190
  *
1191
  */
1192
 
1193
+ function mashsb_hide_shares($sharecount)
1194
+ {
1195
  global $mashsb_options, $post;
1196
 
1197
+ if (empty($mashsb_options['hide_sharecount'])) {
1198
  return false;
1199
  }
1200
 
1201
+ $url = get_permalink(isset($post->ID));
1202
+ $sharelimit = isset($mashsb_options['hide_sharecount']) ? $mashsb_options['hide_sharecount'] : 0;
1203
 
1204
+ if ($sharecount >= $sharelimit) {
1205
  return false;
1206
  }
1207
  // Hide share count per default when it is not a valid number
1214
  * @scince 2.3.2
1215
  */
1216
 
1217
+ function mashsb_content_above()
1218
+ {
1219
  global $mashsb_options;
1220
+ $html = !empty($mashsb_options['content_above']) ? '<div class="mashsb_above_buttons">' . mashsb_cleanShortcode('mashshare', $mashsb_options['content_above']) . '</div>' : '';
1221
+ return apply_filters('mashsb_above_buttons', $html);
1222
  }
1223
 
1224
  /* Additional content above share buttons
1227
  * @scince 2.3.2
1228
  */
1229
 
1230
+ function mashsb_content_below()
1231
+ {
1232
  global $mashsb_options;
1233
+ $html = !empty($mashsb_options['content_below']) ? '<div class="mashsb_below_buttons">' . mashsb_cleanShortcode('mashshare', $mashsb_options['content_below']) . '</div>' : '';
1234
+ return apply_filters('mashsb_below_buttons', $html);
1235
  }
1236
 
1237
  /**
1238
  * Check if buttons are excluded from a specific post id
1239
+ *
1240
  * @return true if post is excluded
1241
  */
1242
+ function mashsb_is_excluded()
1243
+ {
1244
  global $post, $mashsb_options;
1245
 
1246
+ if (!isset($post)) {
1247
  return false;
1248
  }
1249
 
1250
+ $excluded = isset($mashsb_options['excluded_from']) ? $mashsb_options['excluded_from'] : null;
1251
 
1252
  // Load scripts when page is not excluded
1253
+ if (strpos($excluded, ',') !== false) {
1254
+ $excluded = explode(',', $excluded);
1255
+ if (in_array($post->ID, $excluded)) {
1256
+ mashdebug()->info("is excluded");
1257
  return true;
1258
  }
1259
  }
1260
+ if ($post->ID == $excluded) {
1261
+ mashdebug()->info("is single excluded");
1262
  return true;
1263
  }
1264
 
1268
 
1269
  /**
1270
  * Return general post title
1271
+ *
1272
  * @param string $title default post title
 
 
1273
  * @return string the default post title, shortcode title or custom twitter title
1274
+ * @global obj $mashsb_meta_tags
1275
+ *
1276
  */
1277
+ function mashsb_get_title()
1278
+ {
1279
  global $post, $mashsb_meta_tags;
1280
+ if (is_singular() && !empty($mashsb_meta_tags) && method_exists($mashsb_meta_tags, 'get_og_title')) {
1281
  $title = $mashsb_meta_tags->get_og_title();
1282
+ $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8');
1283
+ $title = urlencode($title);
1284
+ $title = str_replace('#', '%23', $title);
1285
+ $title = esc_html($title);
1286
  } else {
1287
  $title = mashsb_get_document_title();
1288
  $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8');
1290
  $title = str_replace('#', '%23', $title);
1291
  $title = esc_html($title);
1292
  }
1293
+ return apply_filters('mashsb_get_title', $title);
1294
  }
1295
 
1296
  /**
1297
  * Return twitter custom title
1298
+ *
1299
+ * @return string the custom twitter title
1300
  * @global object $mashsb_meta_tags
1301
  * @changed 3.0.0
1302
+ *
 
1303
  */
1304
+ function mashsb_get_twitter_title()
1305
+ {
1306
  global $mashsb_meta_tags;
1307
  // $mashsb_meta_tags is only available on singular pages
1308
+ if (is_singular() && !empty($mashsb_meta_tags) && method_exists($mashsb_meta_tags, 'get_twitter_title')) {
1309
  $title = $mashsb_meta_tags->get_twitter_title();
1310
+ $title = html_entity_decode($title, ENT_QUOTES, 'UTF-8');
1311
+ $title = urlencode($title);
1312
+ $title = str_replace('#', '%23', $title);
1313
+ $title = str_replace('+', '%20', $title);
1314
+ $title = str_replace('|', '', $title);
1315
+ $title = esc_html($title);
1316
+
1317
  } else {
1318
  // title for non singular pages
1319
  $title = mashsb_get_title();
1320
+ $title = str_replace('+', '%20', $title);
1321
+ $title = str_replace('|', '', $title);
1322
  }
1323
  return apply_filters('mashsb_twitter_title', $title);
1324
  }
1330
  * @scince 2.2.8
1331
  */
1332
 
1333
+ function mashsb_get_url()
1334
+ {
1335
  global $post;
1336
+
1337
+ if (isset($post->ID)) {
1338
  // The permalink for singular pages!
1339
  // Do not check here for is_singular() (like e.g. the sharebar addon does.)
1340
  // Need to check for post id because on category and archiv pages
1341
  // we want the pageID within the loop instead the first appearing one.
1342
+ $url = mashsb_sanitize_url(get_permalink($post->ID));
1343
  } else {
1344
+ // The main URL
1345
  $url = mashsb_get_main_url();
1346
  }
1347
+
1348
+ return apply_filters('mashsb_get_url', $url);
1349
  }
1350
 
1351
  /*
1355
  * @scince 2.2.8
1356
  */
1357
 
1358
+ function mashsb_get_twitter_url()
1359
+ {
1360
+ if (function_exists('mashsb_get_shorturl_singular')) {
1361
+ $url = mashsb_get_shorturl_singular(mashsb_get_url());
1362
+ } else if (function_exists('mashsuGetShortURL')) { // compatibility mode for MashShare earlier than 3.0
1363
  $get_url = mashsb_get_url();
1364
+ $url = mashsuGetShortURL($get_url);
1365
  } else {
1366
  $url = mashsb_get_url();
1367
  }
1368
+ return apply_filters('mashsb_get_twitter_url', $url);
1369
  }
1370
 
1371
  /**
1372
  * Wrapper for mashsb_get_shorturl_singular()
1373
+ *
1374
  * @param string $url
1375
  * @return string
1376
  */
1377
+ function mashsb_get_shorturl($url)
1378
+ {
1379
 
1380
+ if (!empty($url)) {
1381
+ $url = mashsb_get_shorturl_singular($url);
1382
  } else {
1383
  $url = "";
1384
  }
1389
 
1390
  /**
1391
  * Get sanitized twitter handle
1392
+ *
 
1393
  * @return mixed string | bool false
1394
+ * @global array $mashsb_options
1395
  */
1396
+ function mashsb_get_twitter_username()
1397
+ {
1398
  global $mashsb_options;
1399
 
1400
+ if (empty($mashsb_options['mashsharer_hashtag'])) {
1401
  return;
1402
  }
1403
 
1404
  // If plugin is not running on mashshare.net or dev environment replace @mashshare
1405
+ if (empty($_SERVER['HTTP_HOST']) || ($_SERVER['HTTP_HOST'] !== 'www.mashshare.net' && $_SERVER['HTTP_HOST'] !== 'src.wordpress-develop.dev')) {
1406
  //Sanitize it
1407
+ $replace_first = str_ireplace('mashshare', '', $mashsb_options['mashsharer_hashtag']);
1408
+ $replace_second = str_ireplace('@', '', $replace_first);
1409
  return $replace_second;
1410
  } else {
1411
  return $mashsb_options['mashsharer_hashtag'];
1415
  /**
1416
  * Returns document title for the current page.
1417
  *
1418
+ * @return string Tag with the document title.
 
1419
  * @global int $post Page number of a list of posts.
1420
  *
1421
+ * @since 3.0
1422
+ *
1423
  */
1424
+ function mashsb_get_document_title()
1425
+ {
1426
+
1427
  /**
1428
  * Filter the document title before it is generated.
1429
  *
1430
  * Passing a non-empty value will short-circuit wp_get_document_title(),
1431
  * returning that value instead.
1432
  *
1433
+ * @param string $title The document title. Default empty string.
1434
  * @since 4.4.0
1435
  *
 
1436
  */
1437
+
1438
+ $title = '';
1439
 
1440
  // If it's a 404 page, use a "Page not found" title.
1441
+ if (is_404()) {
1442
+ $title = __('Page not found');
1443
 
1444
  // If it's a search, use a dynamic search results title.
1445
+ } elseif (is_search()) {
1446
  /* translators: %s: search phrase */
1447
+ $title = sprintf(__('Search Results for &#8220;%s&#8221;'), get_search_query());
1448
 
1449
  // If on a post type archive, use the post type archive title.
1450
+ } elseif (is_post_type_archive()) {
1451
+ $title = post_type_archive_title('', false);
1452
+
1453
  // If on a taxonomy archive, use the term title.
1454
+ } elseif (is_tax()) {
1455
+ $title = single_term_title('', false);
1456
 
1457
  /*
1458
  * If we're on the blog page that is not the homepage or
1459
  * a single post of any post type, use the post title.
1460
  */
1461
+ //} elseif( !is_home() || is_singular() ) {
1462
+ } elseif (is_singular()) {
1463
  $title = the_title_attribute('echo=0');
1464
 
1465
  // If on the front page, use the site title.
1466
+ } elseif (is_front_page()) {
1467
+ $title = get_bloginfo('name', 'display');
1468
+
1469
  // If on a category or tag archive, use the term title.
1470
+ } elseif (is_category() || is_tag()) {
1471
+ $title = single_term_title('', false);
1472
 
1473
  // If on an author archive, use the author's display name.
1474
+ } elseif (is_author() && $author = get_queried_object()) {
1475
  $title = $author->display_name;
1476
 
1477
  // If it's a date archive, use the date as the title.
1478
+ } elseif (is_year()) {
1479
+ $title = get_the_date(_x('Y', 'yearly archives date format'));
1480
+ } elseif (is_month()) {
1481
+ $title = get_the_date(_x('F Y', 'monthly archives date format'));
1482
+ } elseif (is_day()) {
1483
  $title = get_the_date();
1484
  }
1485
 
1489
 
1490
  /**
1491
  * Append tracking parameter to shared url
1492
+ *
1493
  * @param string $url
1494
  * @return string
1495
  */
1496
+ function mashsb_append_tracking_param($url, $network = 'mashshare')
1497
+ {
1498
  global $mashsb_options;
1499
+
1500
+ if (!isset($mashsb_options['tracking_params'])) {
1501
  return $url;
1502
  }
1503
+
1504
+ return $url . urlencode('?utm_source=sharebuttons&utm_medium=' . $network . '&utm_campaign=mashshare');
1505
  }
mashshare.php CHANGED
@@ -6,7 +6,7 @@
6
  * Description: Mashshare is a Share functionality inspired by the the great website Mashable for Facebook and Twitter. More networks available.
7
  * Author: René Hermenau
8
  * Author URI: https://www.mashshare.net
9
- * Version: 3.8.0
10
  * Text Domain: mashsb
11
  * Domain Path: /languages
12
 
@@ -35,7 +35,7 @@ if( !defined( 'ABSPATH' ) )
35
 
36
  // Plugin version
37
  if( !defined( 'MASHSB_VERSION' ) ) {
38
- define( 'MASHSB_VERSION', '3.8.0' );
39
  }
40
 
41
  // Debug mode
6
  * Description: Mashshare is a Share functionality inspired by the the great website Mashable for Facebook and Twitter. More networks available.
7
  * Author: René Hermenau
8
  * Author URI: https://www.mashshare.net
9
+ * Version: 3.8.1
10
  * Text Domain: mashsb
11
  * Domain Path: /languages
12
 
35
 
36
  // Plugin version
37
  if( !defined( 'MASHSB_VERSION' ) ) {
38
+ define( 'MASHSB_VERSION', '3.8.1' );
39
  }
40
 
41
  // Debug mode
readme.txt CHANGED
@@ -8,9 +8,9 @@ License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Tags: Share buttons, Social Sharing, social media, Facebook, Twitter, Subscribe, social share buttons
10
  Requires at least: 3.6+
11
- Tested up to: 5.8
12
- Stable tag: 3.8.0
13
- Requires PHP: 5.2
14
 
15
  Social Media Share Buttons for Twitter, Facebook, and other social networks. Highly customizable Social Media ecosystem
16
 
@@ -249,6 +249,11 @@ Read here more about this: http://docs.mashshare.net/article/10-facebook-is-show
249
 
250
  == Changelog ==
251
 
 
 
 
 
 
252
  = 3.8.0 =
253
  * New: Compatible up to WordPress 5.8
254
 
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
  Tags: Share buttons, Social Sharing, social media, Facebook, Twitter, Subscribe, social share buttons
10
  Requires at least: 3.6+
11
+ Tested up to: 5.9
12
+ Stable tag: 3.8.1
13
+ Requires PHP: 5.6
14
 
15
  Social Media Share Buttons for Twitter, Facebook, and other social networks. Highly customizable Social Media ecosystem
16
 
249
 
250
  == Changelog ==
251
 
252
+ = 3.8.1 =
253
+ * New: Compatible up to WordPress 5.9
254
+ * Fix: Make MashShare compatible with PHP 8.x
255
+ * Fix: Don't request share count for preview pages. This fixes an artificially high share count on initial post creation
256
+
257
  = 3.8.0 =
258
  * New: Compatible up to WordPress 5.8
259