PowerPress Podcasting plugin by Blubrry - Version 8.4.5

Version Description

  • Released 11/30/2020
  • Fixed CSRF security vulnerabilities inside the new login
  • Fixed XSS vulnerabilities in metamarks function
  • Replaced deprecated wp_make_content_images_responsive with wp_filter_content_tags
  • Fixed a bug that was causing the text color to be white in the Title input in post editor
Download this release

Release Info

Developer benbeecroft
Plugin Icon 128x128 PowerPress Podcasting plugin by Blubrry
Version 8.4.5
Comparing to
See all releases

Code changes from version 8.4.4 to 8.4.5

css/style.css CHANGED
@@ -671,11 +671,6 @@ a > h4 {
671
  clear: both;
672
  }
673
 
674
- #title {
675
- color: white;
676
-
677
- }
678
-
679
  .play-button-outer {
680
  width: 2em;
681
  height: 2em;
671
  clear: both;
672
  }
673
 
 
 
 
 
 
674
  .play-button-outer {
675
  width: 2em;
676
  height: 2em;
css/style.min.css CHANGED
@@ -1 +1 @@
1
- #test{font-size:80px}.card{min-height:100px;min-width:100px}.well-z-depth-1{min-height:20px;padding:19px;background-color:#f9f9f9;border:1px solid transparent;border-radius:3px;margin:auto auto 20px auto;width:100%}.ppn-container{margin:10px}.ppn-header{text-align:center;font-family:Montserrat,sans-serif}#ppn-header p{font-size:18px}#ppn-header h2{font-size:30px;text-shadow:0 3px 4px rgba(63,63,63,.2);font-weight:400}#ppn-episode h3{color:#1976d2}#ppn-episode i{margin-top:7px;display:block;padding:0 0 0 55px}.jumbotron{background-image:url("../images/ShowPageRedesign_Banner BG Image.jpg");background-size:cover;border:1px solid;padding-right:0;overflow:inherit;margin-bottom:0}.jumbotron .share-icons{position:relative;color:#fff;font-size:25px;background:rgba(25,25,25,.35);width:100%;float:right;height:40px;text-align:center;vertical-align:center}@media screen and (min-width:768px){.container .jumbotron,.container-fluid .jumbotron{padding-right:0!important;padding-left:0!important}}.pp-sub-button{width:100%;height:48px;padding:0;background-color:#888;color:#fff;display:inline-block;margin:10px 0 5px 0;text-decoration:none;text-align:left;vertical-align:middle;line-height:48px;font-size:90%;font-weight:700;overflow:hidden;border-radius:1px;box-shadow:0 1px 4px rgba(0,0,0,.2)}.pp-sub-buttons{width:90%!important;margin:0;margin-left:5%;padding:5px;display:inline-block}.twitter{background-image:url(../images/twitter.png);background-position:0 0;background-repeat:no-repeat}.facebook{background-image:url(../images/facebook.png);background-position:0 0;background-repeat:no-repeat}.linkedin{background-image:url(../images/linkedin.png);background-position:0 0;background-repeat:no-repeat}.email{background-image:url(../images/email.png);background-position:0 0;background-repeat:no-repeat}.pp-sub-buttons .pp-sub-img{width:48px;height:48px;border:0;display:inline-block;vertical-align:middle;margin-right:2px}.pp-sub-img{background-image:url(../images/spriteStandard.png);background-repeat:no-repeat;background-size:294px}.pp-sub-itunes{background-color:#732bbe}.pp-sub-mycast{background-color:#003466}.pp-sub-email,.pp-sub-pr{background-color:#337ec9}.pp-sub-bp,.pp-sub-rss{background-color:#f80}.pp-sub-browse{background-color:#1976d2}.pp-sub-android{background-color:#6ab344}.pp-sub-itunes .pp-sub-img{background:url(../images/spriteStandard.png) -49px 0}.pp-sub-rss .pp-sub-img{background:url(../images/spriteStandard.png) 0 -49px}.pp-sub-email .pp-sub-img{background:url(../images/spriteStandard.png) -196px -49px}.pp-sub-pr .pp-sub-img{background:url(../images/spriteStandard.png) -196px 0}.pp-sub-bp .pp-sub-img{background:url(../images/spriteStandard.png) -147px 0}.pp-sub-mycast .pp-sub-img{background:url(../images/spriteStandard.png) 0 -98px}.pp-sub-share .pp-sub-img{background:url(../images/spriteStandard.png) -245px 0}.pp-sub-browse .pp-sub-img{background:url(../images/spriteStandard.png) -49px -98px}.pp-sub-android .pp-sub-img{background:url(../images/spriteStandard.png) -98px -98px}h4{margin:0}.playnow{width:48px;height:48px;float:left;padding:0;margin:0;margin-right:10px;text-decoration:none;text-align:left;vertical-align:top;line-height:48px;overflow:hidden;background:url(../images/spriteStandard.png) -98px 0;background-color:#1976d2;border-radius:1px;box-shadow:0 1px 4px rgba(0,0,0,.2)}.share-popup{z-index:5000;position:absolute;color:#000;padding:5px;font-weight:400;width:100%;margin:5px;line-height:normal}.share-popup h2{font-size:20px;margin:5px 0 15px 10px}.share-popup ul{list-style-type:none;padding:0;margin:0}.share-popup ul li{font-weight:400;margin:0 10px;height:28px;width:130px;float:left;font-size:16px}.share-popup ul li a{padding-left:24px}.mycast_popup{display:none;z-index:5000;position:absolute;display:none;background-color:#eee;border:1px solid #999;color:#000;padding:5px;font-weight:400;width:300px;margin:5px}.mycast_popup p{margin-top:10px}.episode-container{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);transition:all .3s cubic-bezier(.25,.8,.25,1)}.episode-container a{text-decoration:underline;font-size:18px}@media screen and (min-width:768px){#cbocContent{width:100%;height:100%}}.featured-container{overflow:hidden;width:100%;height:235px;display:flex;margin-right:10px}h3{margin-top:0}.featured-container-large{width:100%;display:flex;flex-wrap:wrap;overflow:hidden;height:235px;justify-content:stretch;flex-direction:row;min-height:336px}.featured{overflow:hidden;min-width:100px;display:flex;justify-content:stretch;flex-direction:row;flex-wrap:wrap}.featured-large{min-width:100px;display:flex;justify-content:stretch;flex-direction:row;flex-wrap:wrap;position:inherit;padding-top:15px}.featured-item{width:130px;justify-content:center;background:#f7f7f7}p{margin-block-start:0;margin-block-end:0;margin:0}.title{margin-bottom:0;font-size:small;font-weight:500;margin-left:8px;background:#f7f7f7}.blubrry-icon{color:#fff}.featured-item-container{width:auto;min-width:150px;justify-content:center;border-radius:2px;display:inline-block;height:200px;background:#f7f7f7;margin:1.5rem;position:relative;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);transition:all .3s cubic-bezier(.25,.8,.25,1)}.artwork{width:150px;padding:1px}#results-artwork{padding:1px;border:solid 2px rgba(0,0,0,.1)}.featured-link{text-decoration:none;color:inherit;justify-content:center}.first{border:none}.header-link{color:inherit;text-decoration:none!important}#featured-container .row{content:"";clear:both;display:flex;position:absolute}.row{margin-left:0!important;margin-right:0!important}#featured-column{float:left;min-width:300px}#search-btn{text-decoration:none}.search-container{display:inline-block}.search-container-container{margin:auto;margin-top:20px}@media (min-width:200px){#search.form-control{width:0%!important}}#search.form-control{width:100%!important}.search-button{position:absolute;right:0;top:0;line-height:0;width:37px;height:37px;font-size:34px}.search-container{margin:auto;padding:0;position:relative;width:100%}.no-style-button{background-color:inherit!important;color:transparent!important;border:none!important;position:absolute;right:0;top:0;height:37px;width:37px}.artwork-container{padding-left:0;height:90px!important;width:90px!important}.results-container{overflow-y:auto;min-width:320px;max-width:800px;margin:auto}.result{padding-top:10px;padding-left:20px;height:120px;border-top:1px solid rgba(0,0,0,.2)}.first{border-top:none}.result-text{float:left;margin-top:-10px;margin-left:10px}@media (min-width:300px){.result-text{max-width:200px}}@media (min-width:400px){.result-text{max-width:250px}}@media (min-width:500px){.result-text{max-width:350px}}@media (min-width:600px){.result-text{max-width:400px}}a>h4{color:inherit}.results-header{border-bottom:2px solid rgba(0,0,0,.4);clear:both;display:block;overflow:auto}.header-text{float:right}.page-next{float:right;width:50%;text-align:right}.page-prev{float:left;width:50%}.page-nav{border-top:2px solid rgba(0,0,0,.4);padding-top:20px}.disabled,.disabled:hover{color:grey;text-decoration:none!important}.audio-panel{margin:0;padding:0}#playist ul{list-style:none;margin:0;padding:20px}#playist li{margin:0;padding:0}#playist li,a{transition:all .5s}.list-group-item.active a{text-decoration:none;color:#fff;vertical-align:bottom;border-color:transparent transparent transparent #fff}.list-group-item{vertical-align:bottom}#playist a{display:block;position:relative;width:100%}#playist li a{display:block;text-decoration:none}#playist li:hover{background-color:#333}#playist li a:hover{text-decoration:none;color:#fff}#playist a{color:#fff;text-decoration:none}.last{display:none}#playlist{padding-left:0}.column{float:left;padding:.5%}.row:after{content:"";display:table;clear:both}#title{color:#fff}.play-button-outer{width:2em;height:2em;cursor:pointer;float:left;padding-right:3%}.play-button{margin:0 auto;position:relative;width:0;height:0;border-style:solid;border-width:1em 0 1em 1.75em;border-color:transparent transparent transparent #0a6ebd;opacity:.75}.active .list-group-item .play-button-outer .play-button{border-color:transparent transparent transparent #fff}.play-button-outer:hover .play-button{opacity:1}.active .play-button{border-color:transparent transparent transparent #fff}.item1{grid-area:header}.item2{grid-area:menu}.item3{grid-area:main}.coverart{grid-area:left;margin-left:25px}.player{grid-area:footer}.share-icons{grid-area:share;margin-top:90%}.grid-container{display:grid;grid-template-areas:'header header header header header header header' 'left main main main main main share' 'footer footer footer footer footer footer footer';grid-template-columns:300px auto auto auto auto auto 300px}@media screen and (max-width:425px){.grid-container{display:grid;grid-template-areas:'left left left left left left' 'share share share share share share' 'footer footer footer footer footer footer'}.coverart{margin-left:0}}.grid-container>div{text-align:center;font-size:30px}.caret{display:inline;float:right;border-top:0;border-bottom:6px dashed;border-right:6px solid transparent;border-left:6px solid transparent;color:#1976d2;margin-top:1%;cursor:pointer}li.active p.caret{display:inline;float:right;border-top:6px dashed;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:0;color:#ffff}.subtitle{margin-block-end:0;margin-left:3%}.mejs__controls,.mejs__mediaelement{background:#eee!important}.mejs__container{border:1px solid #eee}.mejs__container *{color:#020202!important}.mejs__controls button{color:#020101!important}.mejs__controls .mejs__time-rail .mejs__time-total{background:#fff!important}.mejs__controls .mejs__time-rail .mejs__time-current{background:#8f8f8f!important}.mejs__controls .mejs__time-rail .mejs__time-loaded{background:#fff!important}.mejs__controls .mejs__horizontal-volume-slider .mejs__horizontal-volume-total{background:#fff!important}.mejs__controls .mejs__horizontal-volume-slider .mejs__horizontal-volume-current{background:#8f8f8f!important}.category-text{text-decoration:none;font-size:large;font-weight:700}.entry-content a{text-decoration:none!important}.entry-content a:hover{text-decoration:underline}.playbutton{width:48px;height:48px;padding:0;margin:0;display:inline-block;text-decoration:none;text-align:left;vertical-align:top;line-height:48px}.list-group-item{padding:3px}.playbuttoncontainer{float:left;vertical-align:center;margin-right:1%;margin-top:1%}.subshare{vertical-align:text-bottom;display:inline;color:#fff;font-family:Roboto,Arial,Helvetica,sans-serif;padding:5px}a:hover a:focus{color:#fff}.ppn-program-description,.ppn-program-talent-name{text-align:left;font-family:Montserrat,sans-serif;letter-spacing:0;color:#444;font-weight:700;opacity:1}.ppn-program-url a{text-align:left;font-family:Montserrat,sans-serif;letter-spacing:0;color:#1976d2;opacity:1}.ppn-episode-title{color:#444;font-family:Montserrat,sans-serif;font-weight:bolder}.ppn-episode-row{outline:1px solid #707070;padding:20px}.ppn-episode-date{color:#444;font-family:Montserrat,sans-serif;font-style:italic;font-size:larger}.ppn-episode-description{color:#444;font-family:Montserrat,sans-serif;font-size:medium}.ppn-download-link{width:150px;max-width:250px;background-color:#1976d2;text-align:center;min-height:40px}@media screen and (max-width:500px){.ppn-download-link{max-width:100%}}.ppn-download-link div{color:#fff;font-family:Montserrat,sans-serif;font-weight:100;font-size:18px;line-height:40px;vertical-align:middle}.ppn-download-arrow{display:inline-block;background-image:url(../images/download.svg);background-repeat:no-repeat;width:30px;height:30px}.ppn-program-sub-title{color:#444;font-family:Montserrat,sans-serif;font-size:x-large;font-weight:bolder;padding-top:10px}.ppn-program-artwork-cell{outline:1px solid #444}div.ppn-artwork-inline{float:left}.ppn-list-artwork,.ppn-program-artwork{max-width:100%}.ppn-program-row{border:1px solid #707070;padding:20px}.ppn-program-title{margin-top:0;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:500px){.ppn-program-title{font-size:larger}}.ppn-program-detail *{font-family:Montserrat,sans-serif;color:#444}.ppn-program-detail h2{font-weight:bolder}.sub-success{border:1px solid #06843a;display:flex;width:100%;margin-bottom:10px;color:#06843a}.sub-success-icon{background-color:#06843a;margin:-1px}.sub-success-icon-check{width:100%;height:100%;min-height:50px;min-width:80px;background-size:40px 40px!important;background:url(../images/circlecheck.svg) center no-repeat}.sub-error{border:1px solid #b2201a;display:flex;width:100%;margin-bottom:10px;color:#b2201a}.sub-error-icon{background-color:#b2201a;margin:-1px}.sub-error-icon-check{width:100%;height:100%;min-height:50px;min-width:80px;background-size:40px 40px!important;background:url(../images/circleerror.svg) center no-repeat}@media screen and (min-width:688px){.ppn-form-div{margin-left:0;margin-right:60px}}.sub-alert-text{padding:15px;vertical-align:center}.sub-form{border:1px solid #707070;padding:20px;font-family:Montserrat,sans-serif}.sub-checkbox-cl{display:none}.sub-checkbox-cl-label{display:inline-block;position:relative;vertical-align:middle;margin:5px;cursor:pointer;font-weight:400}.sub-checkbox-cl+.sub-checkbox-cl-label:before{content:'';background:#ddd;border-radius:5px;border:2px solid #ddd;display:inline-block;vertical-align:middle;width:20px;height:20px;padding:2px;margin-right:10px;text-align:center}.sub-checkbox-cl:checked+.sub-checkbox-cl-label:after{content:"";padding:2px;text-align:center;position:absolute;width:1px;height:12px;border:solid #1c7cd5;border-width:0 3px 3px 0;transform:rotate(45deg);-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);top:6px;left:6px}.sub-checkbox-cl:checked{background:#1c7cd5}.sub-btn{width:150px;height:40px;text-align:center;border:none;background-color:#1976d2;color:#fff;font-family:Montserrat,sans-serif}.ppn-grid-header{padding-top:5%}.ppn-grid-rows{position:relative;top:0;left:0;height:100%;width:100%;margin-bottom:20px}.ppn-grid-cell{position:relative;align-content:center}.ppn-grid-img{align-items:center;justify-content:center;display:block}.ppn-grid-title{line-height:1.5em;height:3em;overflow:hidden}.ppn-grid-title:hover{cursor:hand}.ppn-title{font-size:100%;margin-top:5px;padding-bottom:5px}.ppn-title a{color:#fff;font-family:Montserrat,sans-serif}.ppn-img{width:100%;height:100%;max-width:300px!important;max-height:300px!important;position:absolute}.square{width:100%;padding-bottom:100%}.square:after{content:"";display:block;padding-bottom:100%}.app-paragraphs{color:#373a3c;margin:0;font-size:large}.app-form-border{border:none}.tos-color{color:#1976d2}.podcast-filename{margin-top:2%;margin-bottom:1%}.audio-tag-filename{width:100%;margin:2%}.display-inline{display:inline}.display-inline-block{display:inline-block}.podcast-summary-paragraph{color:#000;font-size:small}.text-decoration-none{text-decoration:none}.ppn-subscribe-style{color:#fff;padding:3px}.ppn-share-style{color:#fff;padding:5px}.ppn-margin-bottom{margin-bottom:0}.ppn-claim-style{font-family:Roboto,Arial,Helvetica,sans-serif}.ppn-padding{padding:0}.word-break{word-break:break-all}h1{font-size:38px}
1
+ #test{font-size:80px}.card{min-height:100px;min-width:100px}.well-z-depth-1{min-height:20px;padding:19px;background-color:#f9f9f9;border:1px solid transparent;border-radius:3px;margin:auto auto 20px auto;width:100%}.ppn-container{margin:10px}.ppn-header{text-align:center;font-family:Montserrat,sans-serif}#ppn-header p{font-size:18px}#ppn-header h2{font-size:30px;text-shadow:0 3px 4px rgba(63,63,63,.2);font-weight:400}#ppn-episode h3{color:#1976d2}#ppn-episode i{margin-top:7px;display:block;padding:0 0 0 55px}.jumbotron{background-image:url("../images/ShowPageRedesign_Banner BG Image.jpg");background-size:cover;border:1px solid;padding-right:0;overflow:inherit;margin-bottom:0}.jumbotron .share-icons{position:relative;color:#fff;font-size:25px;background:rgba(25,25,25,.35);width:100%;float:right;height:40px;text-align:center;vertical-align:center}@media screen and (min-width:768px){.container .jumbotron,.container-fluid .jumbotron{padding-right:0!important;padding-left:0!important}}.pp-sub-button{width:100%;height:48px;padding:0;background-color:#888;color:#fff;display:inline-block;margin:10px 0 5px 0;text-decoration:none;text-align:left;vertical-align:middle;line-height:48px;font-size:90%;font-weight:700;overflow:hidden;border-radius:1px;box-shadow:0 1px 4px rgba(0,0,0,.2)}.pp-sub-buttons{width:90%!important;margin:0;margin-left:5%;padding:5px;display:inline-block}.twitter{background-image:url(../images/twitter.png);background-position:0 0;background-repeat:no-repeat}.facebook{background-image:url(../images/facebook.png);background-position:0 0;background-repeat:no-repeat}.linkedin{background-image:url(../images/linkedin.png);background-position:0 0;background-repeat:no-repeat}.email{background-image:url(../images/email.png);background-position:0 0;background-repeat:no-repeat}.pp-sub-buttons .pp-sub-img{width:48px;height:48px;border:0;display:inline-block;vertical-align:middle;margin-right:2px}.pp-sub-img{background-image:url(../images/spriteStandard.png);background-repeat:no-repeat;background-size:294px}.pp-sub-itunes{background-color:#732bbe}.pp-sub-mycast{background-color:#003466}.pp-sub-email,.pp-sub-pr{background-color:#337ec9}.pp-sub-bp,.pp-sub-rss{background-color:#f80}.pp-sub-browse{background-color:#1976d2}.pp-sub-android{background-color:#6ab344}.pp-sub-itunes .pp-sub-img{background:url(../images/spriteStandard.png) -49px 0}.pp-sub-rss .pp-sub-img{background:url(../images/spriteStandard.png) 0 -49px}.pp-sub-email .pp-sub-img{background:url(../images/spriteStandard.png) -196px -49px}.pp-sub-pr .pp-sub-img{background:url(../images/spriteStandard.png) -196px 0}.pp-sub-bp .pp-sub-img{background:url(../images/spriteStandard.png) -147px 0}.pp-sub-mycast .pp-sub-img{background:url(../images/spriteStandard.png) 0 -98px}.pp-sub-share .pp-sub-img{background:url(../images/spriteStandard.png) -245px 0}.pp-sub-browse .pp-sub-img{background:url(../images/spriteStandard.png) -49px -98px}.pp-sub-android .pp-sub-img{background:url(../images/spriteStandard.png) -98px -98px}h4{margin:0}.playnow{width:48px;height:48px;float:left;padding:0;margin:0;margin-right:10px;text-decoration:none;text-align:left;vertical-align:top;line-height:48px;overflow:hidden;background:url(../images/spriteStandard.png) -98px 0;background-color:#1976d2;border-radius:1px;box-shadow:0 1px 4px rgba(0,0,0,.2)}.share-popup{z-index:5000;position:absolute;color:#000;padding:5px;font-weight:400;width:100%;margin:5px;line-height:normal}.share-popup h2{font-size:20px;margin:5px 0 15px 10px}.share-popup ul{list-style-type:none;padding:0;margin:0}.share-popup ul li{font-weight:400;margin:0 10px;height:28px;width:130px;float:left;font-size:16px}.share-popup ul li a{padding-left:24px}.mycast_popup{display:none;z-index:5000;position:absolute;display:none;background-color:#eee;border:1px solid #999;color:#000;padding:5px;font-weight:400;width:300px;margin:5px}.mycast_popup p{margin-top:10px}.episode-container{box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);transition:all .3s cubic-bezier(.25,.8,.25,1)}.episode-container a{text-decoration:underline;font-size:18px}@media screen and (min-width:768px){#cbocContent{width:100%;height:100%}}.featured-container{overflow:hidden;width:100%;height:235px;display:flex;margin-right:10px}h3{margin-top:0}.featured-container-large{width:100%;display:flex;flex-wrap:wrap;overflow:hidden;height:235px;justify-content:stretch;flex-direction:row;min-height:336px}.featured{overflow:hidden;min-width:100px;display:flex;justify-content:stretch;flex-direction:row;flex-wrap:wrap}.featured-large{min-width:100px;display:flex;justify-content:stretch;flex-direction:row;flex-wrap:wrap;position:inherit;padding-top:15px}.featured-item{width:130px;justify-content:center;background:#f7f7f7}p{margin-block-start:0;margin-block-end:0;margin:0}.title{margin-bottom:0;font-size:small;font-weight:500;margin-left:8px;background:#f7f7f7}.blubrry-icon{color:#fff}.featured-item-container{width:auto;min-width:150px;justify-content:center;border-radius:2px;display:inline-block;height:200px;background:#f7f7f7;margin:1.5rem;position:relative;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);transition:all .3s cubic-bezier(.25,.8,.25,1)}.artwork{width:150px;padding:1px}#results-artwork{padding:1px;border:solid 2px rgba(0,0,0,.1)}.featured-link{text-decoration:none;color:inherit;justify-content:center}.first{border:none}.header-link{color:inherit;text-decoration:none!important}#featured-container .row{content:"";clear:both;display:flex;position:absolute}.row{margin-left:0!important;margin-right:0!important}#featured-column{float:left;min-width:300px}#search-btn{text-decoration:none}.search-container{display:inline-block}.search-container-container{margin:auto;margin-top:20px}@media (min-width:200px){#search.form-control{width:0%!important}}#search.form-control{width:100%!important}.search-button{position:absolute;right:0;top:0;line-height:0;width:37px;height:37px;font-size:34px}.search-container{margin:auto;padding:0;position:relative;width:100%}.no-style-button{background-color:inherit!important;color:transparent!important;border:none!important;position:absolute;right:0;top:0;height:37px;width:37px}.artwork-container{padding-left:0;height:90px!important;width:90px!important}.results-container{overflow-y:auto;min-width:320px;max-width:800px;margin:auto}.result{padding-top:10px;padding-left:20px;height:120px;border-top:1px solid rgba(0,0,0,.2)}.first{border-top:none}.result-text{float:left;margin-top:-10px;margin-left:10px}@media (min-width:300px){.result-text{max-width:200px}}@media (min-width:400px){.result-text{max-width:250px}}@media (min-width:500px){.result-text{max-width:350px}}@media (min-width:600px){.result-text{max-width:400px}}a>h4{color:inherit}.results-header{border-bottom:2px solid rgba(0,0,0,.4);clear:both;display:block;overflow:auto}.header-text{float:right}.page-next{float:right;width:50%;text-align:right}.page-prev{float:left;width:50%}.page-nav{border-top:2px solid rgba(0,0,0,.4);padding-top:20px}.disabled,.disabled:hover{color:grey;text-decoration:none!important}.audio-panel{margin:0;padding:0}#playist ul{list-style:none;margin:0;padding:20px}#playist li{margin:0;padding:0}#playist li,a{transition:all .5s}.list-group-item.active a{text-decoration:none;color:#fff;vertical-align:bottom;border-color:transparent transparent transparent #fff}.list-group-item{vertical-align:bottom}#playist a{display:block;position:relative;width:100%}#playist li a{display:block;text-decoration:none}#playist li:hover{background-color:#333}#playist li a:hover{text-decoration:none;color:#fff}#playist a{color:#fff;text-decoration:none}.last{display:none}#playlist{padding-left:0}.column{float:left;padding:.5%}.row:after{content:"";display:table;clear:both}.play-button-outer{width:2em;height:2em;cursor:pointer;float:left;padding-right:3%}.play-button{margin:0 auto;position:relative;width:0;height:0;border-style:solid;border-width:1em 0 1em 1.75em;border-color:transparent transparent transparent #0a6ebd;opacity:.75}.active .list-group-item .play-button-outer .play-button{border-color:transparent transparent transparent #fff}.play-button-outer:hover .play-button{opacity:1}.active .play-button{border-color:transparent transparent transparent #fff}.item1{grid-area:header}.item2{grid-area:menu}.item3{grid-area:main}.coverart{grid-area:left;margin-left:25px}.player{grid-area:footer}.share-icons{grid-area:share;margin-top:90%}.grid-container{display:grid;grid-template-areas:'header header header header header header header' 'left main main main main main share' 'footer footer footer footer footer footer footer';grid-template-columns:300px auto auto auto auto auto 300px}@media screen and (max-width:425px){.grid-container{display:grid;grid-template-areas:'left left left left left left' 'share share share share share share' 'footer footer footer footer footer footer'}.coverart{margin-left:0}}.grid-container>div{text-align:center;font-size:30px}.caret{display:inline;float:right;border-top:0;border-bottom:6px dashed;border-right:6px solid transparent;border-left:6px solid transparent;color:#1976d2;margin-top:1%;cursor:pointer}li.active p.caret{display:inline;float:right;border-top:6px dashed;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:0;color:#ffff}.subtitle{margin-block-end:0;margin-left:3%}.mejs__controls,.mejs__mediaelement{background:#eee!important}.mejs__container{border:1px solid #eee}.mejs__container *{color:#020202!important}.mejs__controls button{color:#020101!important}.mejs__controls .mejs__time-rail .mejs__time-total{background:#fff!important}.mejs__controls .mejs__time-rail .mejs__time-current{background:#8f8f8f!important}.mejs__controls .mejs__time-rail .mejs__time-loaded{background:#fff!important}.mejs__controls .mejs__horizontal-volume-slider .mejs__horizontal-volume-total{background:#fff!important}.mejs__controls .mejs__horizontal-volume-slider .mejs__horizontal-volume-current{background:#8f8f8f!important}.category-text{text-decoration:none;font-size:large;font-weight:700}.entry-content a{text-decoration:none!important}.entry-content a:hover{text-decoration:underline}.playbutton{width:48px;height:48px;padding:0;margin:0;display:inline-block;text-decoration:none;text-align:left;vertical-align:top;line-height:48px}.list-group-item{padding:3px}.playbuttoncontainer{float:left;vertical-align:center;margin-right:1%;margin-top:1%}.subshare{vertical-align:text-bottom;display:inline;color:#fff;font-family:Roboto,Arial,Helvetica,sans-serif;padding:5px}a:hover a:focus{color:#fff}.ppn-program-description,.ppn-program-talent-name{text-align:left;font-family:Montserrat,sans-serif;letter-spacing:0;color:#444;font-weight:700;opacity:1}.ppn-program-url a{text-align:left;font-family:Montserrat,sans-serif;letter-spacing:0;color:#1976d2;opacity:1}.ppn-episode-title{color:#444;font-family:Montserrat,sans-serif;font-weight:bolder}.ppn-episode-row{outline:1px solid #707070;padding:20px}.ppn-episode-date{color:#444;font-family:Montserrat,sans-serif;font-style:italic;font-size:larger}.ppn-episode-description{color:#444;font-family:Montserrat,sans-serif;font-size:medium}.ppn-download-link{width:150px;max-width:250px;background-color:#1976d2;text-align:center;min-height:40px}@media screen and (max-width:500px){.ppn-download-link{max-width:100%}}.ppn-download-link div{color:#fff;font-family:Montserrat,sans-serif;font-weight:100;font-size:18px;line-height:40px;vertical-align:middle}.ppn-download-arrow{display:inline-block;background-image:url(../images/download.svg);background-repeat:no-repeat;width:30px;height:30px}.ppn-program-sub-title{color:#444;font-family:Montserrat,sans-serif;font-size:x-large;font-weight:bolder;padding-top:10px}.ppn-program-artwork-cell{outline:1px solid #444}div.ppn-artwork-inline{float:left}.ppn-list-artwork,.ppn-program-artwork{max-width:100%}.ppn-program-row{border:1px solid #707070;padding:20px}.ppn-program-title{margin-top:0;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:500px){.ppn-program-title{font-size:larger}}.ppn-program-detail *{font-family:Montserrat,sans-serif;color:#444}.ppn-program-detail h2{font-weight:bolder}.sub-success{border:1px solid #06843a;display:flex;width:100%;margin-bottom:10px;color:#06843a}.sub-success-icon{background-color:#06843a;margin:-1px}.sub-success-icon-check{width:100%;height:100%;min-height:50px;min-width:80px;background-size:40px 40px!important;background:url(../images/circlecheck.svg) center no-repeat}.sub-error{border:1px solid #b2201a;display:flex;width:100%;margin-bottom:10px;color:#b2201a}.sub-error-icon{background-color:#b2201a;margin:-1px}.sub-error-icon-check{width:100%;height:100%;min-height:50px;min-width:80px;background-size:40px 40px!important;background:url(../images/circleerror.svg) center no-repeat}@media screen and (min-width:688px){.ppn-form-div{margin-left:0;margin-right:60px}}.sub-alert-text{padding:15px;vertical-align:center}.sub-form{border:1px solid #707070;padding:20px;font-family:Montserrat,sans-serif}.sub-checkbox-cl{display:none}.sub-checkbox-cl-label{display:inline-block;position:relative;vertical-align:middle;margin:5px;cursor:pointer;font-weight:400}.sub-checkbox-cl+.sub-checkbox-cl-label:before{content:'';background:#ddd;border-radius:5px;border:2px solid #ddd;display:inline-block;vertical-align:middle;width:20px;height:20px;padding:2px;margin-right:10px;text-align:center}.sub-checkbox-cl:checked+.sub-checkbox-cl-label:after{content:"";padding:2px;text-align:center;position:absolute;width:1px;height:12px;border:solid #1c7cd5;border-width:0 3px 3px 0;transform:rotate(45deg);-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);top:6px;left:6px}.sub-checkbox-cl:checked{background:#1c7cd5}.sub-btn{width:150px;height:40px;text-align:center;border:none;background-color:#1976d2;color:#fff;font-family:Montserrat,sans-serif}.ppn-grid-header{padding-top:5%}.ppn-grid-rows{position:relative;top:0;left:0;height:100%;width:100%;margin-bottom:20px}.ppn-grid-cell{position:relative;align-content:center}.ppn-grid-img{align-items:center;justify-content:center;display:block}.ppn-grid-title{line-height:1.5em;height:3em;overflow:hidden}.ppn-grid-title:hover{cursor:hand}.ppn-title{font-size:100%;margin-top:5px;padding-bottom:5px}.ppn-title a{color:#fff;font-family:Montserrat,sans-serif}.ppn-img{width:100%;height:100%;max-width:300px!important;max-height:300px!important;position:absolute}.square{width:100%;padding-bottom:100%}.square:after{content:"";display:block;padding-bottom:100%}.app-paragraphs{color:#373a3c;margin:0;font-size:large}.app-form-border{border:none}.tos-color{color:#1976d2}.podcast-filename{margin-top:2%;margin-bottom:1%}.audio-tag-filename{width:100%;margin:2%}.display-inline{display:inline}.display-inline-block{display:inline-block}.podcast-summary-paragraph{color:#000;font-size:small}.text-decoration-none{text-decoration:none}.ppn-subscribe-style{color:#fff;padding:3px}.ppn-share-style{color:#fff;padding:5px}.ppn-margin-bottom{margin-bottom:0}.ppn-claim-style{font-family:Roboto,Arial,Helvetica,sans-serif}.ppn-padding{padding:0}.word-break{word-break:break-all}h1{font-size:38px}
feed-podcast.php CHANGED
@@ -22,8 +22,8 @@
22
  $content = wpautop($content);
23
  $content = shortcode_unautop($content); // Why do we do this?
24
  $content = prepend_attachment($content);
25
- if( function_exists('wp_make_content_images_responsive') )
26
- $content = wp_make_content_images_responsive($content);
27
 
28
  $shortcodesTemp = $GLOBALS['shortcode_tags'];
29
  $GLOBALS['shortcode_tags']['skipto'] = 'powerpress_shortcode_skipto';
22
  $content = wpautop($content);
23
  $content = shortcode_unautop($content); // Why do we do this?
24
  $content = prepend_attachment($content);
25
+ if( function_exists('wp_filter_content_tags') )
26
+ $content = wp_filter_content_tags($content);
27
 
28
  $shortcodesTemp = $GLOBALS['shortcode_tags'];
29
  $GLOBALS['shortcode_tags']['skipto'] = 'powerpress_shortcode_skipto';
js/admin.js CHANGED
@@ -301,6 +301,7 @@ function powerpress_cancelMediaEdit(el) {
301
  let url_field = jQuery("#powerpress_url_" + feed_slug + " > input");
302
  let show_input = jQuery("#powerpress_url_show_" + feed_slug);
303
  let edit_media = jQuery("#edit-media-file-" + feed_slug);
 
304
  let buttons = jQuery("#pp-change-media-file-" + feed_slug);
305
  let warning = jQuery("#file-change-warning-" + feed_slug);
306
  let blubrry_info = jQuery("#ep-box-blubrry-service-" + feed_slug);
@@ -316,6 +317,8 @@ function powerpress_cancelMediaEdit(el) {
316
  show_input.css("display", "inline-block");
317
  edit_media.removeAttr("style");
318
  edit_media.attr("style", "display: inline-block");
 
 
319
  buttons.removeAttr("style");
320
  buttons.attr("style", "display: none");
321
  blubrry_info.removeAttr("style");
301
  let url_field = jQuery("#powerpress_url_" + feed_slug + " > input");
302
  let show_input = jQuery("#powerpress_url_show_" + feed_slug);
303
  let edit_media = jQuery("#edit-media-file-" + feed_slug);
304
+ let select_file = jQuery("#select-media-file-" + feed_slug);
305
  let buttons = jQuery("#pp-change-media-file-" + feed_slug);
306
  let warning = jQuery("#file-change-warning-" + feed_slug);
307
  let blubrry_info = jQuery("#ep-box-blubrry-service-" + feed_slug);
317
  show_input.css("display", "inline-block");
318
  edit_media.removeAttr("style");
319
  edit_media.attr("style", "display: inline-block");
320
+ select_file.removeAttr("style");
321
+ select_file.attr("style", "display: none");
322
  buttons.removeAttr("style");
323
  buttons.attr("style", "display: none");
324
  blubrry_info.removeAttr("style");
powerpress-metamarks.php CHANGED
@@ -105,21 +105,21 @@ function powerpress_metamarks_editrow_html($feed_slug, $next_row, $data = null,
105
  $class = '';
106
  $option = 'Save';
107
  }
108
- $html = '<div class="pp-metamarks-row" id="powerpress_metamarks_row_'. $feed_slug .'_'. $next_row .'">';
109
- $html .= '<div class="metamark-top-section id="metamark-top-section-' . $feed_slug .'-'. $next_row . '">';
110
- $html .= '<div id="pp-metamark-preview-pos-' . $feed_slug .'-'. $next_row . '" class="pp-metamark-preview-pos-">' . $pos . '</div>';
111
- $html .= '<div id="pp-metamark-preview-type--' . $feed_slug .'-'. $next_row . '" class="pp-metamark-preview-type-">' . $type . '</div>';
112
- $html .= '<div class="pp-metamark-delete"><a href="" onclick="return powerpress_metamarks_deleterow(\'powerpress_metamarks_row_'. $feed_slug .'_'. $next_row .'\');" title="'. __('Delete', 'powerpress') .'">';
113
- $html .= __('Delete', 'powerpress') . '</a></div><div class="pp-metamark-edit"><a href="" id="pp-toggle-metamark-'. $next_row . '-' . $feed_slug . '" title="'. __($option, 'powerpress') .'" onclick="powerpress_toggleMetamarksSettings(this); return false;">' . __($option, 'powerpress') . '</a></div>';
114
- $html .= '</div><div id="pp-hide-metamark-' . $feed_slug .'-'. $next_row . '"' . $class . '>';
115
- $html .= '<div class="pp-section-container"><div class="powerpress-label-container" id="pp-type-label' . $feed_slug .'-'. $next_row . '"><label class="pp-ep-box-label" style="width: 100%;" for="pp-metamark-type-'. $feed_slug .'_'. $next_row .'">' . __('Type', 'powerpress') . '</label><select id="pp-metamark-type-'. $feed_slug .'-'. $next_row .'" class="pp-ep-box-input" style="width: 100%;" type="text" title="'. __('Type', 'powerpress') .'" name="MetaMarks['.$feed_slug.']['.$next_row.'][type]">';
116
- $html .= powerpress_print_options( array(''=>'Select Type')+ $MarkTypes, $data['type'], true);
117
- $html .= '</select></div><div class="powerpress-label-container" id="pp-pos-label' . $feed_slug .'-'. $next_row . '"><label class="pp-ep-box-label" for="pp-metamark-pos-'. $feed_slug .'-'. $next_row .'">' . __('Position', 'powerpress') . '</label>';
118
- $html .= '<input id="pp-metamark-pos-'. $feed_slug .'-'. $next_row .'" class="pp-ep-box-input" style="width: 100%;" type="text" title="'. __('Position', 'powerpress') .'" name="MetaMarks['.$feed_slug.']['.$next_row.'][position]" value="' .htmlspecialchars($data['position']) .'" placeholder="'. htmlspecialchars(__('Position', 'powerpress')) .'" /></div>';
119
- $html .= '<div class="powerpress-label-container" id="pp-dur-label' . $feed_slug .'-'. $next_row . '"><label class="pp-ep-box-label" for=\"pp-metamark-dur-'. $feed_slug .'-'. $next_row .'\">' . __('Duration', 'powerpress') . '</label>';
120
- $html .= '<input id="pp-metamark-dur-'. $feed_slug .'-'. $next_row .'" class="pp-ep-box-input" style="width: 100%;" type="text" title="'. __('Duration', 'powerpress') .'" name="MetaMarks['.$feed_slug.']['.$next_row.'][duration]" value="' .htmlspecialchars($data['duration']) .'" placeholder="'. htmlspecialchars(__('Duration', 'powerpress')) .'" /></div></div>';
121
- $html .= '<div class="pp-section-container"><div class="powerpress-label-container" style="width: 100%;"><label class="pp-ep-box-label" for="pp-metamark-link-' . $feed_slug .'-'. $next_row .'">' . __('Link', 'powerpress') . '</label><input id="pp-metamark-link-'. $feed_slug .'-'. $next_row .'" class="pp-ep-box-input" style="width: 100%;" type="text" title="'. __('Link', 'powerpress') .'" name="MetaMarks['.$feed_slug.']['.$next_row.'][link]" value="' .htmlspecialchars($data['link']) .'" placeholder="'. htmlspecialchars(__('Link', 'powerpress')) .'" /></div></div>';
122
- $html .= '<div class="pp-section-container" id="pp-value-container-' . $feed_slug .'-'. $next_row . '"><div class="powerpress-label-container" style="width: 100%;"><label class="pp-ep-box-label" for="pp-metamark-val-' . $next_row .'">' . __('Value', 'powerpress') . '</label><textarea id="pp-metamark-val-'. $feed_slug .'-'. $next_row .'" class="pp-ep-box-input" style="width: 100%;" name="MetaMarks['.$feed_slug.']['.$next_row.'][value]" title="'. __('Value', 'powerpress') .'" placeholder="'. htmlspecialchars(__('Value', 'powerpress')) .'">' .htmlspecialchars($data['value']) .'</textarea></div></div>';
123
 
124
 
125
  $html .= '</div></div>';
105
  $class = '';
106
  $option = 'Save';
107
  }
108
+ $html = '<div class="pp-metamarks-row" id="powerpress_metamarks_row_'. esc_attr($feed_slug) .'_'. esc_attr($next_row) .'">';
109
+ $html .= '<div class="metamark-top-section id="metamark-top-section-' . esc_attr($feed_slug) .'-'. esc_attr($next_row) . '">';
110
+ $html .= '<div id="pp-metamark-preview-pos-' . esc_attr($feed_slug) .'-'. esc_attr($next_row) . '" class="pp-metamark-preview-pos-">' . esc_html($pos) . '</div>';
111
+ $html .= '<div id="pp-metamark-preview-type--' . esc_attr($feed_slug) .'-'. esc_attr($next_row) . '" class="pp-metamark-preview-type-">' . esc_html($type) . '</div>';
112
+ $html .= '<div class="pp-metamark-delete"><a href="" onclick="return powerpress_metamarks_deleterow(\'powerpress_metamarks_row_'. esc_js($feed_slug) .'_'. esc_js($next_row) .'\');" title="'. __('Delete', 'powerpress') .'">';
113
+ $html .= __('Delete', 'powerpress') . '</a></div><div class="pp-metamark-edit"><a href="" id="pp-toggle-metamark-'. esc_attr($next_row) . '-' . esc_attr($feed_slug) . '" title="'. __($option, 'powerpress') .'" onclick="powerpress_toggleMetamarksSettings(this); return false;">' . __($option, 'powerpress') . '</a></div>';
114
+ $html .= '</div><div id="pp-hide-metamark-' . esc_attr($feed_slug) .'-'. esc_attr($next_row) . '"' . $class . '>';
115
+ $html .= '<div class="pp-section-container"><div class="powerpress-label-container" id="pp-type-label' . esc_attr($feed_slug) .'-'. esc_attr($next_row) . '"><label class="pp-ep-box-label" style="width: 100%;" for="pp-metamark-type-'. esc_attr($feed_slug) .'_'. esc_attr($next_row) .'">' . __('Type', 'powerpress') . '</label><select id="pp-metamark-type-'. esc_attr($feed_slug) .'-'. esc_attr($next_row) .'" class="pp-ep-box-input" style="width: 100%;" type="text" title="'. __('Type', 'powerpress') .'" name="MetaMarks['.esc_attr($feed_slug).']['.esc_attr($next_row).'][type]">';
116
+ $html .= powerpress_print_options( array(''=>'Select Type')+ $MarkTypes, esc_html($data['type']), true);
117
+ $html .= '</select></div><div class="powerpress-label-container" id="pp-pos-label' . esc_attr($feed_slug) .'-'. esc_attr($next_row) . '"><label class="pp-ep-box-label" for="pp-metamark-pos-'. esc_attr($feed_slug) .'-'. esc_attr($next_row) .'">' . __('Position', 'powerpress') . '</label>';
118
+ $html .= '<input id="pp-metamark-pos-'. esc_attr($feed_slug) .'-'. esc_attr($next_row) .'" class="pp-ep-box-input" style="width: 100%;" type="text" title="'. __('Position', 'powerpress') .'" name="MetaMarks['.esc_attr($feed_slug).']['.esc_attr($next_row).'][position]" value="' .htmlspecialchars($data['position']) .'" placeholder="'. htmlspecialchars(__('Position', 'powerpress')) .'" /></div>';
119
+ $html .= '<div class="powerpress-label-container" id="pp-dur-label' . esc_attr($feed_slug) .'-'. esc_attr($next_row) . '"><label class="pp-ep-box-label" for=\"pp-metamark-dur-'. esc_attr($feed_slug) .'-'. esc_attr($next_row) .'\">' . __('Duration', 'powerpress') . '</label>';
120
+ $html .= '<input id="pp-metamark-dur-'. esc_attr($feed_slug) .'-'. esc_attr($next_row) .'" class="pp-ep-box-input" style="width: 100%;" type="text" title="'. __('Duration', 'powerpress') .'" name="MetaMarks['.esc_attr($feed_slug).']['.esc_attr($next_row).'][duration]" value="' .htmlspecialchars($data['duration']) .'" placeholder="'. htmlspecialchars(__('Duration', 'powerpress')) .'" /></div></div>';
121
+ $html .= '<div class="pp-section-container"><div class="powerpress-label-container" style="width: 100%;"><label class="pp-ep-box-label" for="pp-metamark-link-' . esc_attr($feed_slug) .'-'. esc_attr($next_row) .'">' . __('Link', 'powerpress') . '</label><input id="pp-metamark-link-'. esc_attr($feed_slug) .'-'. esc_attr($next_row) .'" class="pp-ep-box-input" style="width: 100%;" type="text" title="'. __('Link', 'powerpress') .'" name="MetaMarks['.esc_attr($feed_slug).']['.esc_attr($next_row).'][link]" value="' .htmlspecialchars($data['link']) .'" placeholder="'. htmlspecialchars(__('Link', 'powerpress')) .'" /></div></div>';
122
+ $html .= '<div class="pp-section-container" id="pp-value-container-' . esc_attr($feed_slug) .'-'. esc_attr($next_row) . '"><div class="powerpress-label-container" style="width: 100%;"><label class="pp-ep-box-label" for="pp-metamark-val-' . esc_attr($next_row) .'">' . __('Value', 'powerpress') . '</label><textarea id="pp-metamark-val-'. esc_attr($feed_slug) .'-'. esc_attr($next_row) .'" class="pp-ep-box-input" style="width: 100%;" name="MetaMarks['.esc_attr($feed_slug).']['.esc_attr($next_row).'][value]" title="'. __('Value', 'powerpress') .'" placeholder="'. htmlspecialchars(__('Value', 'powerpress')) .'">' .htmlspecialchars($data['value']) .'</textarea></div></div>';
123
 
124
 
125
  $html .= '</div></div>';
powerpress.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://create.blubrry.com/resources/powerpress/
5
  Description: <a href="https://create.blubrry.com/resources/powerpress/" target="_blank">Blubrry PowerPress</a> is the No. 1 Podcasting plugin for WordPress. Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast tools, podcast SEO features, and more! Fully supports Apple Podcasts (previously iTunes), Google Podcasts, Spotify, Stitcher, and Blubrry Podcasting directories, as well as all podcast applications and clients.
6
- Version: 8.4.4
7
  Author: Blubrry
8
  Author URI: https://blubrry.com/
9
  Requires at least: 3.6
@@ -36,7 +36,7 @@ if( !function_exists('add_action') ) {
36
 
37
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
38
 
39
- define('POWERPRESS_VERSION', '8.4.4' );
40
 
41
  // Translation support:
42
  if ( !defined('POWERPRESS_ABSPATH') )
3
  Plugin Name: Blubrry PowerPress
4
  Plugin URI: http://create.blubrry.com/resources/powerpress/
5
  Description: <a href="https://create.blubrry.com/resources/powerpress/" target="_blank">Blubrry PowerPress</a> is the No. 1 Podcasting plugin for WordPress. Developed by podcasters for podcasters; features include Simple and Advanced modes, multiple audio/video player options, subscribe to podcast tools, podcast SEO features, and more! Fully supports Apple Podcasts (previously iTunes), Google Podcasts, Spotify, Stitcher, and Blubrry Podcasting directories, as well as all podcast applications and clients.
6
+ Version: 8.4.5
7
  Author: Blubrry
8
  Author URI: https://blubrry.com/
9
  Requires at least: 3.6
36
 
37
  // WP_PLUGIN_DIR (REMEMBER TO USE THIS DEFINE IF NEEDED)
38
 
39
+ define('POWERPRESS_VERSION', '8.4.5' );
40
 
41
  // Translation support:
42
  if ( !defined('POWERPRESS_ABSPATH') )
powerpressadmin-auth.class.php CHANGED
@@ -128,18 +128,18 @@ class PowerPressAuth {
128
  return $this->api($accessToken, $path, array('client_id' => $clientID, 'client_secret' => $clientSecret));
129
  }
130
 
131
- function api($accessToken, $path, $post = false, $custom_request = false, $timeout = 15 )
132
  {
133
  $requestUrl = $this->apiUrl[ $this->apiUrlIndex ] . ltrim($path, '/'); // Make sure prefix slash is removed
134
- $return = $this->_makeApiCall($requestUrl, $post, false, $accessToken, $custom_request, $timeout);
135
  while( $return === false && $this->_retryApiUrl() ) {
136
  $requestUrl = $this->apiUrl[ $this->apiUrlIndex ] . ltrim($path, '/'); // Make sure prefix slash is removed
137
- $return = $this->_makeApiCall($requestUrl, $post, false, $accessToken, $custom_request, $timeout);
138
  }
139
  return $return;
140
  }
141
 
142
- private function _makeApiCallCurl($url, $post = false, $clientCredsBase64 = false, $bearerValue = '', $custom_request = false, $timeout = 15 ) {
143
 
144
  $curl = curl_init();
145
  if ( version_compare( PHP_VERSION, '5.5.0') > 0 )
@@ -237,9 +237,13 @@ class PowerPressAuth {
237
  if( !empty($returnedBody) ) {
238
  //mail('cio@rawvoice,com', '_makeApiCallCurl body', "$returnedBody");
239
  //var_dump($returnedBody);
240
- $decoded = @json_decode($returnedBody, true);
241
- if( !empty($decoded) )
242
- return $decoded;
 
 
 
 
243
 
244
  if( $this->errorCode != 0 ) {
245
  $this->error = 'Unable to decode response.';
@@ -256,13 +260,13 @@ class PowerPressAuth {
256
  return false;
257
  }
258
 
259
- private function _makeApiCall($url, $post = false, $clientCredsBase64 = false, $bearerValue = '', $custom_request = false, $timeout = 15) {
260
 
261
  // Reset the errors
262
  $this->error = '';
263
  $this->errorCode = 0;
264
  if( function_exists('curl_init') ) // If using CURL, better handling of errors
265
- return $this->_makeApiCallCurl($url, $post, $clientCredsBase64, $bearerValue, $custom_request);
266
 
267
  if( !function_exists('wp_remote_post') ) {
268
  $this->error = 'WordPress or curl library required.';
@@ -317,9 +321,13 @@ class PowerPressAuth {
317
  }
318
 
319
  if( !empty($returnedBody) ) {
320
- $decoded = @json_decode($returnedBody, true);
321
- if( $decoded !== false ) {
322
- return $decoded;
 
 
 
 
323
  }
324
 
325
  if( $this->errorCode != 0 ) {
128
  return $this->api($accessToken, $path, array('client_id' => $clientID, 'client_secret' => $clientSecret));
129
  }
130
 
131
+ function api($accessToken, $path, $post = false, $custom_request = false, $timeout = 15, $decode_json = true )
132
  {
133
  $requestUrl = $this->apiUrl[ $this->apiUrlIndex ] . ltrim($path, '/'); // Make sure prefix slash is removed
134
+ $return = $this->_makeApiCall($requestUrl, $post, false, $accessToken, $custom_request, $timeout, $decode_json);
135
  while( $return === false && $this->_retryApiUrl() ) {
136
  $requestUrl = $this->apiUrl[ $this->apiUrlIndex ] . ltrim($path, '/'); // Make sure prefix slash is removed
137
+ $return = $this->_makeApiCall($requestUrl, $post, false, $accessToken, $custom_request, $timeout, $decode_json);
138
  }
139
  return $return;
140
  }
141
 
142
+ private function _makeApiCallCurl($url, $post = false, $clientCredsBase64 = false, $bearerValue = '', $custom_request = false, $timeout = 15, $decode_json = true ) {
143
 
144
  $curl = curl_init();
145
  if ( version_compare( PHP_VERSION, '5.5.0') > 0 )
237
  if( !empty($returnedBody) ) {
238
  //mail('cio@rawvoice,com', '_makeApiCallCurl body', "$returnedBody");
239
  //var_dump($returnedBody);
240
+ if ($decode_json) {
241
+ $decoded = @json_decode($returnedBody, true);
242
+ if (!empty($decoded))
243
+ return $decoded;
244
+ } else {
245
+ return $returnedBody;
246
+ }
247
 
248
  if( $this->errorCode != 0 ) {
249
  $this->error = 'Unable to decode response.';
260
  return false;
261
  }
262
 
263
+ private function _makeApiCall($url, $post = false, $clientCredsBase64 = false, $bearerValue = '', $custom_request = false, $timeout = 15, $decode_json = true) {
264
 
265
  // Reset the errors
266
  $this->error = '';
267
  $this->errorCode = 0;
268
  if( function_exists('curl_init') ) // If using CURL, better handling of errors
269
+ return $this->_makeApiCallCurl($url, $post, $clientCredsBase64, $bearerValue, $custom_request, $timeout, $decode_json);
270
 
271
  if( !function_exists('wp_remote_post') ) {
272
  $this->error = 'WordPress or curl library required.';
321
  }
322
 
323
  if( !empty($returnedBody) ) {
324
+ if ($decode_json) {
325
+ $decoded = @json_decode($returnedBody, true);
326
+ if ($decoded !== false) {
327
+ return $decoded;
328
+ }
329
+ } else {
330
+ return $returnedBody;
331
  }
332
 
333
  if( $this->errorCode != 0 ) {
powerpressadmin-dashboard.php CHANGED
@@ -169,7 +169,7 @@ function powerpress_dashboard_stats_content()
169
  $accessToken = powerpress_getAccessToken();
170
  $req_url = sprintf('/2/stats/%s/summary.html?nobody=1', $Keyword);
171
  $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'?'. POWERPRESS_BLUBRRY_API_QSA:'');
172
- $new_content = $auth->api($accessToken, $req_url, false, false, 2);
173
 
174
  if( $new_content )
175
  {
169
  $accessToken = powerpress_getAccessToken();
170
  $req_url = sprintf('/2/stats/%s/summary.html?nobody=1', $Keyword);
171
  $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA')?'?'. POWERPRESS_BLUBRRY_API_QSA:'');
172
+ $new_content = $auth->api($accessToken, $req_url, false, false, 2, false);
173
 
174
  if( $new_content )
175
  {
powerpressadmin-jquery.php CHANGED
@@ -587,7 +587,7 @@ window.onload = function() {
587
  powerpress_admin_jquery_footer();
588
  exit;
589
  }
590
- //var_dump($_GET);
591
 
592
  if (isset($_GET['logout']) && $_GET['logout']) {
593
  $action_url = admin_url('admin.php?action=powerpress-jquery-account-save');
@@ -706,7 +706,7 @@ window.onload = function() {
706
  exit;
707
  }
708
 
709
- //check_admin_referer('powerpress-jquery-account');
710
 
711
  $SaveSettings = isset($_POST['Settings']) ? $_POST['Settings'] : array();
712
  $SaveSettings = powerpress_stripslashes($SaveSettings);
@@ -934,7 +934,7 @@ jQuery(document).ready(function($) {
934
  exit;
935
  }
936
 
937
- //check_admin_referer('powerpress-jquery-account');
938
 
939
  if( !$Settings )
940
  $Settings = get_option('powerpress_general');
587
  powerpress_admin_jquery_footer();
588
  exit;
589
  }
590
+ check_admin_referer('powerpress-jquery-account-verify');
591
 
592
  if (isset($_GET['logout']) && $_GET['logout']) {
593
  $action_url = admin_url('admin.php?action=powerpress-jquery-account-save');
706
  exit;
707
  }
708
 
709
+ check_admin_referer('powerpress-jquery-account-save');
710
 
711
  $SaveSettings = isset($_POST['Settings']) ? $_POST['Settings'] : array();
712
  $SaveSettings = powerpress_stripslashes($SaveSettings);
934
  exit;
935
  }
936
 
937
+ check_admin_referer('powerpress-jquery-account-edit');
938
 
939
  if( !$Settings )
940
  $Settings = get_option('powerpress_general');
powerpressadmin-metabox.php CHANGED
@@ -92,6 +92,7 @@ function episode_box_top($EnclosureURL, $FeedSlug, $ExtraData, $GeneralSettings,
92
  </a>
93
  </div>
94
  <?php } else {
 
95
  ?>
96
  <div id="ep-box-blubrry-connect-<?php echo $FeedSlug; ?>" style="<?php echo $style4; ?>">
97
  <img class="ep-box-blubrry-icon" src="<?php echo powerpress_get_root_url(); ?>images/blubrry_icon.png" alt="" />
@@ -99,23 +100,21 @@ function episode_box_top($EnclosureURL, $FeedSlug, $ExtraData, $GeneralSettings,
99
  <h4 class="blubrry-connect-info"><?php echo __('If you host with Blubrry', 'powerpress'); ?></h4>
100
  <p class="blubrry-connect-info"><?php echo __('You can select a media file from your computer by connecting your hosting account.', 'powerpress'); ?></p>
101
  </div>
102
- <a class="button-blubrry" id="ep-box-connect-account-<?php echo $FeedSlug; ?>" title="<?php echo esc_attr(__('Blubrry Services Integration', 'powerpress')); ?>" href="<?php echo admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignin&from=new_post"); ?>">
103
  <div id="ep-box-connect-account-button-<?php echo $FeedSlug; ?>"><?php echo __('Connect to Blubrry', 'powerpress'); ?></div>
104
  </a>
105
  </div>
106
  <div id="ep-box-min-blubrry-connect-<?php echo $FeedSlug; ?>" style="<?php echo $style2; ?>">
107
  <div id="pp-connect-account-<?php echo $FeedSlug; ?>">
108
- <a id="pp-connect-account-link-<?php echo $FeedSlug; ?>" class="pp-media-edit-details button-blubrry" title="<?php echo esc_attr(__("Blubrry Services Integration","powerpress")); ?>" href="<?php echo admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignin&from=new_post"); ?>">
109
  <b><?php echo esc_html(__('Connect Blubrry Account', 'powerpress')); ?></b>
110
  </a>
111
  </div>
112
  <div id="pp-cancel-container-<?php echo $FeedSlug; ?>">
113
- <!--<div class="ep-box-line-bold"></div>-->
114
  <div id="pp-cancel-media-<?php echo $FeedSlug; ?>">
115
  <button id="cancel-media-edit-<?php echo $FeedSlug; ?>" class="pp-media-edit-details"
116
  onclick="powerpress_cancelMediaEdit(this); return false;"><b><?php echo esc_html(__('CANCEL', 'powerpress')); ?></b></button>
117
- <!--<a id="hide-details-link-<?php //echo $FeedSlug; ?>" class="pp-hidden-settings"
118
- onclick="showHideMediaDetails(this)"><?php //echo __('Hide File Size and Duration', 'powerpress'); ?> &#708;</a>-->
119
  </div>
120
  </div>
121
  </div>
92
  </a>
93
  </div>
94
  <?php } else {
95
+ $pp_nonce = powerpress_login_create_nonce();
96
  ?>
97
  <div id="ep-box-blubrry-connect-<?php echo $FeedSlug; ?>" style="<?php echo $style4; ?>">
98
  <img class="ep-box-blubrry-icon" src="<?php echo powerpress_get_root_url(); ?>images/blubrry_icon.png" alt="" />
100
  <h4 class="blubrry-connect-info"><?php echo __('If you host with Blubrry', 'powerpress'); ?></h4>
101
  <p class="blubrry-connect-info"><?php echo __('You can select a media file from your computer by connecting your hosting account.', 'powerpress'); ?></p>
102
  </div>
103
+ <a class="button-blubrry" id="ep-box-connect-account-<?php echo $FeedSlug; ?>" title="<?php echo esc_attr(__('Blubrry Services Integration', 'powerpress')); ?>" href="<?php echo add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignin&from=new_post")); ?>">
104
  <div id="ep-box-connect-account-button-<?php echo $FeedSlug; ?>"><?php echo __('Connect to Blubrry', 'powerpress'); ?></div>
105
  </a>
106
  </div>
107
  <div id="ep-box-min-blubrry-connect-<?php echo $FeedSlug; ?>" style="<?php echo $style2; ?>">
108
  <div id="pp-connect-account-<?php echo $FeedSlug; ?>">
109
+ <a id="pp-connect-account-link-<?php echo $FeedSlug; ?>" class="pp-media-edit-details button-blubrry" title="<?php echo esc_attr(__("Blubrry Services Integration","powerpress")); ?>" href="<?php echo add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignin&from=new_post")); ?>">
110
  <b><?php echo esc_html(__('Connect Blubrry Account', 'powerpress')); ?></b>
111
  </a>
112
  </div>
113
  <div id="pp-cancel-container-<?php echo $FeedSlug; ?>">
 
114
  <div id="pp-cancel-media-<?php echo $FeedSlug; ?>">
115
  <button id="cancel-media-edit-<?php echo $FeedSlug; ?>" class="pp-media-edit-details"
116
  onclick="powerpress_cancelMediaEdit(this); return false;"><b><?php echo esc_html(__('CANCEL', 'powerpress')); ?></b></button>
117
+
 
118
  </div>
119
  </div>
120
  </div>
powerpressadmin-rss-import.php CHANGED
@@ -1334,7 +1334,8 @@ jQuery(document).ready( function() {
1334
  $nextUrl = admin_url("admin.php?page=powerpressadmin_basic&step=createEpisode&import=true&migrate=true");
1335
  } else {
1336
  if ($this->isHostedOnBlubrry) {
1337
- $nextUrl = admin_url("admin.php?page=powerpressadmin_basic&step=blubrrySignin&import=true");
 
1338
  } else {
1339
  $nextUrl = admin_url("admin.php?page=powerpressadmin_basic&step=nohost&import=true&from=import");
1340
  }
@@ -1345,7 +1346,8 @@ jQuery(document).ready( function() {
1345
  $nextUrl = admin_url("admin.php?page=powerpressadmin_onboarding.php&step=createEpisode&import=true&migrate=true");
1346
  } else {
1347
  if ($this->isHostedOnBlubrry) {
1348
- $nextUrl = admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignin&import=true");
 
1349
  } else {
1350
  $nextUrl = admin_url("admin.php?page=powerpressadmin_onboarding.php&step=nohost&import=true&from=import");
1351
  }
1334
  $nextUrl = admin_url("admin.php?page=powerpressadmin_basic&step=createEpisode&import=true&migrate=true");
1335
  } else {
1336
  if ($this->isHostedOnBlubrry) {
1337
+ $pp_nonce = powerpress_login_create_nonce();
1338
+ $nextUrl = add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page=powerpressadmin_basic&step=blubrrySignin&import=true"));
1339
  } else {
1340
  $nextUrl = admin_url("admin.php?page=powerpressadmin_basic&step=nohost&import=true&from=import");
1341
  }
1346
  $nextUrl = admin_url("admin.php?page=powerpressadmin_onboarding.php&step=createEpisode&import=true&migrate=true");
1347
  } else {
1348
  if ($this->isHostedOnBlubrry) {
1349
+ $pp_nonce = powerpress_login_create_nonce();
1350
+ $nextUrl = add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignin&import=true"));
1351
  } else {
1352
  $nextUrl = admin_url("admin.php?page=powerpressadmin_onboarding.php&step=nohost&import=true&from=import");
1353
  }
powerpressadmin.php CHANGED
@@ -13,6 +13,10 @@ function powerpress_esc_html($escape)
13
  }
14
  return esc_html($escape);
15
  }
 
 
 
 
16
 
17
  function powerpress_page_message_add_error($msg, $classes='inline', $escape=true)
18
  {
@@ -661,9 +665,11 @@ function powerpress_admin_init()
661
  }
662
 
663
  if (isset($_POST['blubrry-login'])) {
 
 
664
  $tab_string = isset($_POST['tab']) ? "&tab={$_POST['tab']}" : "";
665
  $sidenav_tab_string = isset($_POST['sidenav-tab']) ? "&sidenav-tab={$_POST['sidenav-tab']}" : "";
666
- header("Location: " . admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignin&from=powerpressadmin_basic{$tab_string}{$sidenav_tab_string}"));
667
  }
668
 
669
  // Anytime settings are saved lets flush the rewrite rules
13
  }
14
  return esc_html($escape);
15
  }
16
+
17
+ function powerpress_login_create_nonce() {
18
+ return wp_create_nonce( 'powerpress-link-blubrry' );
19
+ }
20
 
21
  function powerpress_page_message_add_error($msg, $classes='inline', $escape=true)
22
  {
665
  }
666
 
667
  if (isset($_POST['blubrry-login'])) {
668
+ check_admin_referer('powerpress-edit');
669
+ $pp_nonce = powerpress_login_create_nonce();
670
  $tab_string = isset($_POST['tab']) ? "&tab={$_POST['tab']}" : "";
671
  $sidenav_tab_string = isset($_POST['sidenav-tab']) ? "&sidenav-tab={$_POST['sidenav-tab']}" : "";
672
+ header("Location: " . add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page=powerpressadmin_onboarding.php&step=blubrrySignin&from=powerpressadmin_basic{$tab_string}{$sidenav_tab_string}")));
673
  }
674
 
675
  // Anytime settings are saved lets flush the rewrite rules
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: podcasting, podcast, podcaster, powerpress, itunes, apple, apple podcasts,
4
  Requires at least: 3.6
5
  Requires PHP: 5.2
6
  Tested up to: 5.5
7
- Stable tag: 8.4.4
8
  Donate link: https://create.blubrry.com/resources/podcast-media-hosting/
9
  License: GPLv2 or later
10
 
@@ -236,6 +236,13 @@ To install Blubrry PowerPress manually, follow these steps:
236
  = Fan of PowerPress and want to show your support? =
237
  If you are a fan of PowerPress, we would greatly appreciate it if you could take a moment and [leave us a review on WordPress.org](https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post). Your support is greatly appreciated!
238
 
 
 
 
 
 
 
 
239
  = 8.4.4 =
240
  * Released 11/17/2020
241
  * Re-ordered destinations to better integrate new Amazon Music and Podcast Index
4
  Requires at least: 3.6
5
  Requires PHP: 5.2
6
  Tested up to: 5.5
7
+ Stable tag: 8.4.5
8
  Donate link: https://create.blubrry.com/resources/podcast-media-hosting/
9
  License: GPLv2 or later
10
 
236
  = Fan of PowerPress and want to show your support? =
237
  If you are a fan of PowerPress, we would greatly appreciate it if you could take a moment and [leave us a review on WordPress.org](https://wordpress.org/support/plugin/powerpress/reviews/?rate=5#new-post). Your support is greatly appreciated!
238
 
239
+ = 8.4.5 =
240
+ * Released 11/30/2020
241
+ * Fixed CSRF security vulnerabilities inside the new login
242
+ * Fixed XSS vulnerabilities in metamarks function
243
+ * Replaced deprecated wp_make_content_images_responsive with wp_filter_content_tags
244
+ * Fixed a bug that was causing the text color to be white in the Title input in post editor
245
+
246
  = 8.4.4 =
247
  * Released 11/17/2020
248
  * Re-ordered destinations to better integrate new Amazon Music and Podcast Index
views/onboarding/blubrry_signin.php CHANGED
@@ -3,327 +3,339 @@
3
  require_once(POWERPRESS_ABSPATH .'/powerpressadmin-auth.class.php');
4
  $auth = new PowerPressAuth();
5
  add_thickbox();
6
- if(isset($_GET['import'])) {
7
- //powerpress_page_message_add_notice(__('It looks like your podcast is already hosted by Blubrry, sign in to your Blubrry account to get see the full power of Powerpress.', 'powerpress'), 'inline', false);
8
- }
9
-
10
- if(isset($_GET['blubrry_create'])) {
11
- $path = 'create';
12
- $actType = '&account_type=2';
13
- } else {
14
- $path = 'authorize';
15
- $actType = '';
16
  }
 
 
 
 
 
 
 
 
17
 
18
- if (!isset($_GET['code']) && !isset($_GET['error'])&& !isset($_POST['Settings'])) {
19
- $result = $auth->getTemporaryCredentials();
20
- // Okay we got it!
21
- if( $result !== false && !empty($result['temp_client_id']) && !empty($result['temp_client_secret']) ) {
22
- $state = md5( rand(0, 999999) . time() );
23
- update_option('powerpress_temp_client', array('temp_client_id' => $result['temp_client_id'], 'temp_client_secret' =>$result['temp_client_secret'], 'state'=>$state ));
24
- $url_string = "admin.php?page={$_GET['page']}&step=blubrrySignin" . (isset($_GET['blubrry_create']) ? '&blubrry_create=true' : '');
25
- if(isset($_GET['from'])) {
26
- if ($_GET['from'] == 'import') {
27
- $url_string .= "&from=import";
28
- } elseif ($_GET['from'] == 'powerpressadmin_basic') {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  $tab_string = isset($_GET['tab']) ? "&tab={$_GET['tab']}" : "";
30
  $sidenav_tab_string = isset($_GET['sidenav-tab']) ? "&sidenav-tab={$_GET['sidenav-tab']}" : "";
31
- $url_string .= "&from=powerpressadmin_basic{$tab_string}{$sidenav_tab_string}";
32
- } elseif($_GET['from'] == 'new_post') {
33
- $url_string .= "&from=new_post";
 
 
 
 
 
 
 
 
34
  }
 
 
35
  }
36
- $redirect_uri = admin_url($url_string);
37
- update_option('powerpress_blubrry_api_redirect_uri', $redirect_uri);
38
- //header('location:' . $auth->getApiUrl() . 'oauth2/authorize?response_type=code&client_id=' . $result['temp_client_id'] . '&state=' . $state . '&redirect_uri=' . urlencode($redirect_uri) );
39
- echo '<script>window.location.href = "' . $auth->getApiUrl() . 'oauth2/' . $path . '?response_type=code&client_id=' . $result['temp_client_id'] . '&state=' . $state . '&redirect_uri=' . urlencode($redirect_uri) . $actType . '";</script>';
40
- exit;
41
- }
42
- } else if(isset($_GET['code']) || isset($_GET['error'])) {
43
- if (isset($_GET['error']) && $_GET['error'] == 'consent_required') {
44
- if(isset($_GET['from']) && $_GET['from'] == 'powerpressadmin_basic') {
45
- $tab_string = isset($_GET['tab']) ? "&tab={$_GET['tab']}" : "";
46
- $sidenav_tab_string = isset($_GET['sidenav-tab']) ? "&sidenav-tab={$_GET['sidenav-tab']}" : "";
47
- echo '<script>window.location.href = "' . admin_url("admin.php?page={$_GET['from']}{$tab_string}{$sidenav_tab_string}") . '";</script>';
48
- exit;
49
- } elseif (isset($_GET['from']) && $_GET['from'] == 'new_post') {
50
- echo '<script>window.location.href = "' . admin_url('post-new.php') . '";</script>';
51
- exit;
52
- } else {
53
- echo '<script>window.location.href = "' . admin_url("admin.php?page={$_GET['page']}&step=nohost") . '";</script>';
54
- exit;
55
- }
56
- } elseif (empty($_GET['state']) || empty($_GET['code'])) {
57
- powerpress_page_message_add_error(__('An error occurred linking your account. Missing parameters.', 'powerpress'));
58
- }
59
  //First, check if we're already logged in. If we are, we'll skip the client issuing and get access token
60
- $creds = get_option('powerpress_creds');
61
- if(!$creds) {
62
- $tempClient = get_option('powerpress_temp_client');
63
- if ($_GET['state'] != $tempClient['state']) {
64
- powerpress_page_message_add_error(__('An error occurred linking your account. State does not match.', 'powerpress'));
65
- return false;
66
- }
67
- $redirectUri = get_option('powerpress_blubrry_api_redirect_uri');
68
-
69
- // Get the client ID for this installation
70
- $resultClient = $auth->issueClient($_GET['code'], $tempClient['temp_client_id'], $tempClient['temp_client_secret'], $redirectUri);
71
- if ($resultClient === false || empty($resultClient['client_id']) || empty($resultClient['client_secret'])) {
72
- if (!empty($resultTokens['error_description']))
73
- powerpress_page_message_add_error($resultTokens['error_description']);
74
- else if (!empty($resultTokens['error']))
75
- powerpress_page_message_add_error($resultTokens['error']);
76
- else
77
- powerpress_page_message_add_error(__('Error issuing client:', 'powerpress-network') . ' ' . $auth->GetLastError() . $auth->getDebugInfo());
78
- powerpress_page_message_print();
79
- exit;
80
- }
81
 
82
- // Get the access and refresh token for this client
83
- $resultTokens = $auth->getAccessTokenFromCode($_GET['code'], $resultClient['client_id'], $resultClient['client_secret'], $redirectUri);
 
 
 
 
 
 
 
 
 
 
84
 
85
- if ($resultTokens === false || empty($resultTokens['access_token']) || empty($resultTokens['refresh_token'])) {
86
- if (!empty($resultTokens['error_description']))
87
- powerpress_page_message_add_error($resultTokens['error_description']);
88
- else if (!empty($resultTokens['error']))
89
- powerpress_page_message_add_error($resultTokens['error']);
90
- else
91
- powerpress_page_message_add_error(__('Error retrieving access token:', 'powerpress-network') . ' ' . $auth->GetLastError());
92
- powerpress_page_message_print();
93
- exit;
94
- }
95
 
96
- $props = array();
97
- $props['code'] = $_GET['code'];
98
- $props['client_id'] = $resultClient['client_id'];
99
- $props['client_secret'] = $resultClient['client_secret'];
100
- $props['access_token'] = $resultTokens['access_token'];
101
- $props['access_expires'] = (time() + $resultTokens['expires_in'] - 10);
102
- $props['refresh_token'] = $resultTokens['refresh_token'];
103
- powerpress_save_settings($props, 'powerpress_creds');
 
 
104
 
105
- } else {
106
- $props = $creds;
107
- }
108
- $result = $auth->checkAccountVerified();
109
- if (isset($result['account_enabled']) && isset($result['account_confirmed'])) {
110
- if (!$result['account_enabled'] || !$result['account_confirmed']) {
111
- $props['account_verified'] = false;
112
  powerpress_save_settings($props, 'powerpress_creds');
113
- powerpress_check_account_verified_popup(true);
114
  } else {
115
- $props['account_verified'] = true;
116
- powerpress_save_settings($props, 'powerpress_creds');
117
- $Save = false;
118
- $Close = false;
119
- $Programs = array();
120
- $ProgramHosting = array();
121
- $json_data = false;
122
- $results_programs = array();
123
- $api_url_array = powerpress_get_api_array();
124
- $accessToken = powerpress_getAccessToken();
 
 
 
 
 
 
 
 
 
125
 
126
- $req_url = '/2/service/index.json';
127
- $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA') ? '?' . POWERPRESS_BLUBRRY_API_QSA : '');
128
- $results_programs = $auth->api($accessToken, $req_url);
129
 
130
- if (!$results_programs) {
131
- powerpress_page_message_add_error(__('Error accessing account: ', 'powerpress') . $auth->getLastError());
132
- } else {
133
- foreach ($results_programs as $null => $row) {
134
- $Programs[$row['program_keyword']] = $row['program_title'];
 
135
  }
136
- }
137
- $from_string = '';
138
- if (isset($_GET['from'])) {
139
- $from_string = "&from=" . $_GET['from'];
140
- if ($_GET['from'] == 'powerpressadmin_basic') {
141
- $tab_string = isset($_GET['tab']) ? "&tab={$_GET['tab']}" : "";
142
- $sidenav_tab_string = isset($_GET['sidenav-tab']) ? "&sidenav-tab={$_GET['sidenav-tab']}" : "";
143
- $from_string .= $tab_string;
144
- $from_string .= $sidenav_tab_string;
145
  }
146
- }
147
- wp_enqueue_style('powerpress_onboarding_styles',POWERPRESS_ABSPATH . '/css/onboarding.css' );?>
148
 
149
 
150
- <div class="pp_container">
151
- <h2 class="pp_align-center"><?php echo __('You\'re ready to go!', 'powerpress'); ?></h2>
152
- <hr class="pp_align-center" />
153
- <p class="pp_align-center"><?php echo __('You can now now able to upload episodes from within WordPress to blubrry, view basic stats from the wordpress dashboard.', 'powerpress'); ?></p>
154
- <p class="pp_align-center"><?php echo __('If this is the wrong Blubrry account, visit settings to unlink this account.', 'powerpress'); ?></p>
155
- </div>
156
 
157
- <div class="pp_container">
158
- <?php powerpress_page_message_print() ?>
159
- <h2 class="pp_align-center"><?php echo __('Select your default show', 'powerpress'); ?></h2>
160
- <p class="pp_align-center"><?php echo __('You have multiple shows in your account. Please select which one you want to be your default show for this website.', 'powerpress'); ?></p>
161
- <div class="pp_flex-grid">
162
- <div class="pp_col">
163
- <div class="pp_button-container">
164
- <form action="<?php echo admin_url("admin.php?page={$_GET['page']}&step=blubrrySignin{$from_string}"); ?>" method="post">
165
- <?php
166
- foreach( $Programs as $value => $desc )
167
- echo "<div><button type='submit' name='Settings[blubrry_program_keyword]' value='{$value}' class='pp_button show_button'><span>{$desc}</span></button></div>";
 
168
 
169
- if(isset($_GET['from']) && $_GET['from'] == 'import') { ?>
170
- <div class="pp_form-group" style="text-align: center">
171
- <div class="pp_input-field-login" style="display: inline-block">
172
- <input type="checkbox" id="blubrry_migrate_option_signin" name="Settings[blubrry_migrate]">
173
- <label for="blubrry_migrate_option_signin"><?php echo __('Migrate media from imported feed (only possible with a hosting account)', 'powerpress'); ?></label>
 
 
174
  </div>
175
- </div>
176
- <?php } ?>
177
- </form>
178
  </div>
179
  </div>
180
  </div>
181
- </div>
182
- <?php
 
 
 
 
 
183
  }
184
- } else {
185
- $props['account_verified'] = false;
186
- powerpress_save_settings($props, 'powerpress_creds');
187
- powerpress_page_message_add_error(__('Error verifying account: ', 'powerpress') . isset($result['error']) ? $result['error'] : $auth->getLastError());
188
- powerpress_page_message_print();
189
- }
190
- //var_dump($result);
191
- //exit;
192
 
193
- } else if (isset($_POST['Settings'])) {
194
- $SaveSettings = $_POST['Settings'];
195
- $SaveSettings = powerpress_stripslashes($SaveSettings);
196
- $Save = false;
197
- $Close = false;
198
- $Programs = array();
199
- $ProgramHosting = array();
200
- $json_data = false;
201
- $results_programs = array();
202
- $api_url_array = powerpress_get_api_array();
203
- $accessToken = powerpress_getAccessToken();
204
- $req_url = '/2/service/index.json';
205
- $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA') ? '?' . POWERPRESS_BLUBRRY_API_QSA : '');
206
- $results = $auth->api($accessToken, $req_url);
207
- if (isset($results['error'])) {
208
- $Error = $results['error'];
209
- if (strstr($Error, __('currently not available', 'powerpress'))) {
210
- $Error = __('Unable to find podcasts for this account.', 'powerpress');
211
- $Error .= '<br /><span style="font-weight: normal; font-size: 12px;">';
212
- $Error .= 'Verify that the email address you enter here matches the email address you used when you listed your podcast on blubrry.com.</span>';
213
- } else if (preg_match('/No programs found.*media hosting/i', $results['error'])) {
214
- $Error .= '<br/><span style="font-weight: normal; font-size: 12px;">';
215
- $Error .= 'Service may take a few minutes to activate.</span>';
216
- }
217
- } else if (!is_array($results)) {
218
- $Error = $json_data;
219
- } else {
220
- // Get all the programs for this user...
221
- foreach ($results as $null => $row) {
222
- $Programs[$row['program_keyword']] = $row['program_title'];
223
- if ($row['hosting'] === true || $row['hosting'] == 'true')
224
- $ProgramHosting[$row['program_keyword']] = true;
225
- else
226
- $ProgramHosting[$row['program_keyword']] = false;
227
- }
228
 
229
- if (count($Programs) > 0) {
230
- global $wpdb;
231
- $migrate_string = "";
232
 
233
- if (isset($SaveSettings['blubrry_migrate']) && $SaveSettings['blubrry_migrate']) {
234
- $migrate_string = "&migrate=true";
235
- $query = "SELECT meta_id, post_id, meta_key, meta_value FROM {$wpdb->postmeta} WHERE meta_key LIKE \"%enclosure\"";
236
- $results_data = $wpdb->get_results($query, ARRAY_A);
237
- if ($results_data) {
238
- if (empty($GLOBALS['pp_migrate_media_urls']))
239
- $GLOBALS['pp_migrate_media_urls'] = array();
240
- foreach ($results_data as $index => $row) {
241
- list($url) = @explode("\n", $row['meta_value'], 2);
242
- $url = trim($url);
243
- $post_id = $row['post_id'];
244
- $GLOBALS['pp_migrate_media_urls'][$post_id] = $url;
245
- }
246
- require_once(POWERPRESS_ABSPATH . '/powerpressadmin-migrate.php');
247
 
248
- $update_option = true;
249
- $QueuedFiles = get_option('powerpress_migrate_queued');
250
- if (!is_array($QueuedFiles)) {
251
- $QueuedFiles = array();
252
- $update_option = false;
253
- }
254
 
255
- $add_urls = '';
256
- foreach ($GLOBALS['pp_migrate_media_urls'] as $meta_id => $url) {
257
- if (empty($QueuedFiles[$meta_id])) { // Add to the array if not already added
258
- $QueuedFiles[$meta_id] = $url;
259
- if (!empty($add_urls)) {
260
- $add_urls .= "\n";
 
 
261
  }
262
- $add_urls .= $url;
263
  }
 
264
  }
265
- powepress_admin_migrate_add_urls($add_urls);
266
  }
267
- }
268
 
269
 
270
- if (!empty($SaveSettings['blubrry_program_keyword'])) {
271
- powerpress_add_blubrry_redirect($SaveSettings['blubrry_program_keyword']);
272
- $SaveSettings['blubrry_hosting'] = $ProgramHosting[$SaveSettings['blubrry_program_keyword']];
273
- if (!is_bool($SaveSettings['blubrry_hosting'])) {
274
- if ($SaveSettings['blubrry_hosting'] === 'false' || empty($SaveSettings['blubrry_hosting']))
275
- $SaveSettings['blubrry_hosting'] = false;
276
- }
277
 
278
- $Save = true;
279
- $Close = true;
280
- } else if (isset($SaveSettings['blubrry_program_keyword'])) // Present but empty
281
- {
282
- $Error = __('You must select a program to continue.', 'powerpress');
283
- } else if (count($Programs) == 1) {
284
- foreach ($Programs as $keyword => $title) {
285
- break;
286
- }
287
 
288
- $SaveSettings['blubrry_program_keyword'] = $keyword;
289
- $SaveSettings['blubrry_hosting'] = $ProgramHosting[$keyword];
290
- if (!is_bool($SaveSettings['blubrry_hosting'])) {
291
- if ($SaveSettings['blubrry_hosting'] === 'false' || empty($SaveSettings['blubrry_hosting']))
292
- $SaveSettings['blubrry_hosting'] = false;
 
 
 
 
 
 
 
293
  }
294
- powerpress_add_blubrry_redirect($keyword);
295
- $Close = true;
296
- $Save = true;
297
  } else {
298
- $Step = 2;
299
- $Settings['blubrry_username'] = $SaveSettings['blubrry_username'];
300
  }
301
- } else {
302
- $Error = __('No podcasts for this account are listed on blubrry.com.', 'powerpress');
303
  }
304
- }
305
 
306
- if( isset($Error) )
307
- {
308
- $Error .= '<p style="text-align: center;"><a href="http://create.blubrry.com/resources/powerpress/powerpress-settings/services-stats/" target="_blank">'. __('Click Here For Help','powerpress') .'</a></p>';
309
- }
310
- if( $Save ) {
311
- powerpress_save_settings($SaveSettings);
312
- if (isset($_GET['from']) && $_GET['from'] == 'powerpressadmin_basic') {
313
- $tab_string = isset($_GET['tab']) ? "&tab={$_GET['tab']}" : "";
314
- $sidenav_tab_string = isset($_GET['sidenav-tab']) ? "&sidenav-tab={$_GET['sidenav-tab']}" : "";
315
- echo '<script>window.location.href = "' . admin_url("admin.php?page={$_GET['from']}{$tab_string}{$sidenav_tab_string}") . '";</script>';
316
- } elseif (isset($_GET['from']) && $_GET['from'] == 'new_post') {
317
- echo '<script>window.location.href = "' . admin_url('post-new.php') . '";</script>';
318
  }
319
- echo '<script>window.location.href = "' . admin_url("admin.php?page={$_GET['page']}&step=createEpisode$migrate_string") . '";</script>';
320
- }
321
- // Clear cached statistics
322
- delete_option('powerpress_stats');
 
 
 
 
 
 
 
 
 
 
 
323
 
324
- if( isset($Error) )
325
- powerpress_page_message_add_notice( $Error, 'inline', false );
326
 
327
 
 
 
 
 
 
328
  }
329
  ?>
3
  require_once(POWERPRESS_ABSPATH .'/powerpressadmin-auth.class.php');
4
  $auth = new PowerPressAuth();
5
  add_thickbox();
6
+ $General = powerpress_get_settings('powerpress_general');
7
+ if (!isset($_REQUEST['_wpnonce'])) {
8
+ powerpress_page_message_add_error(__('Invalid link', 'powerpress'));
9
+ powerpress_page_message_print();
10
+ exit;
 
 
 
 
 
11
  }
12
+ if (wp_verify_nonce($_REQUEST['_wpnonce'], 'powerpress-link-blubrry')) {
13
+ if (isset($_GET['blubrry_create'])) {
14
+ $path = 'create';
15
+ $actType = '&account_type=2';
16
+ } else {
17
+ $path = 'authorize';
18
+ $actType = '';
19
+ }
20
 
21
+ if (!isset($_GET['code']) && !isset($_GET['error']) && !isset($_POST['Settings'])) {
22
+ $result = $auth->getTemporaryCredentials();
23
+ // Okay we got it!
24
+ if ($result !== false && !empty($result['temp_client_id']) && !empty($result['temp_client_secret'])) {
25
+ $state = md5(rand(0, 999999) . time());
26
+ update_option('powerpress_temp_client', array('temp_client_id' => $result['temp_client_id'], 'temp_client_secret' => $result['temp_client_secret'], 'state' => $state));
27
+ $from_string = '';
28
+ if (isset($_GET['from'])) {
29
+ $from_string = "&from=" . $_GET['from'];
30
+ if ($_GET['from'] == 'powerpressadmin_basic') {
31
+ $tab_string = isset($_GET['tab']) ? "&tab={$_GET['tab']}" : "";
32
+ $sidenav_tab_string = isset($_GET['sidenav-tab']) ? "&sidenav-tab={$_GET['sidenav-tab']}" : "";
33
+ $from_string .= $tab_string;
34
+ $from_string .= $sidenav_tab_string;
35
+ }
36
+ }
37
+ $url_string = "admin.php?page={$_GET['page']}&step=blubrrySignin{$from_string}" . (isset($_GET['blubrry_create']) ? '&blubrry_create=true' : '');
38
+ $redirect_uri = add_query_arg('_wpnonce', $_REQUEST['_wpnonce'], admin_url($url_string));
39
+ update_option('powerpress_blubrry_api_redirect_uri', $redirect_uri);
40
+ echo '<script>window.location.href = "' . $auth->getApiUrl() . 'oauth2/' . $path . '?response_type=code&client_id=' . $result['temp_client_id'] . '&state=' . $state . '&redirect_uri=' . urlencode($redirect_uri) . $actType . '";</script>';
41
+ exit;
42
+ }
43
+ } else if (isset($_GET['code']) || isset($_GET['error'])) {
44
+ if (isset($_GET['error']) && $_GET['error'] == 'consent_required') {
45
+ if (isset($_GET['from']) && $_GET['from'] == 'powerpressadmin_basic') {
46
  $tab_string = isset($_GET['tab']) ? "&tab={$_GET['tab']}" : "";
47
  $sidenav_tab_string = isset($_GET['sidenav-tab']) ? "&sidenav-tab={$_GET['sidenav-tab']}" : "";
48
+ echo '<script>window.location.href = "' . admin_url("admin.php?page={$_GET['from']}{$tab_string}{$sidenav_tab_string}") . '";</script>';
49
+ exit;
50
+ } elseif (isset($_GET['from']) && $_GET['from'] == 'new_post') {
51
+ echo '<script>window.location.href = "' . admin_url('post-new.php') . '";</script>';
52
+ exit;
53
+ } elseif (isset($_GET['from']) && $_GET['from'] == 'hosting_plugin') {
54
+ echo '<script>window.location.href = "' . admin_url('admin.php?page=powerpress-site-setup') . '";</script>';
55
+ exit;
56
+ } else {
57
+ echo '<script>window.location.href = "' . admin_url("admin.php?page={$_GET['page']}&step=nohost") . '";</script>';
58
+ exit;
59
  }
60
+ } elseif (empty($_GET['state']) || empty($_GET['code'])) {
61
+ powerpress_page_message_add_error(__('An error occurred linking your account. Missing parameters.', 'powerpress'));
62
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  //First, check if we're already logged in. If we are, we'll skip the client issuing and get access token
64
+ $creds = get_option('powerpress_creds');
65
+ if (!$creds) {
66
+ $tempClient = get_option('powerpress_temp_client');
67
+ if ($_GET['state'] != $tempClient['state']) {
68
+ powerpress_page_message_add_error(__('An error occurred linking your account. State does not match.', 'powerpress'));
69
+ return false;
70
+ }
71
+ $redirectUri = get_option('powerpress_blubrry_api_redirect_uri');
 
 
 
 
 
 
 
 
 
 
 
 
 
72
 
73
+ // Get the client ID for this installation
74
+ $resultClient = $auth->issueClient($_GET['code'], $tempClient['temp_client_id'], $tempClient['temp_client_secret'], $redirectUri);
75
+ if ($resultClient === false || empty($resultClient['client_id']) || empty($resultClient['client_secret'])) {
76
+ if (!empty($resultTokens['error_description']))
77
+ powerpress_page_message_add_error($resultTokens['error_description']);
78
+ else if (!empty($resultTokens['error']))
79
+ powerpress_page_message_add_error($resultTokens['error']);
80
+ else
81
+ powerpress_page_message_add_error(__('Error issuing client:', 'powerpress-network') . ' ' . $auth->GetLastError() . $auth->getDebugInfo());
82
+ powerpress_page_message_print();
83
+ exit;
84
+ }
85
 
86
+ // Get the access and refresh token for this client
87
+ $resultTokens = $auth->getAccessTokenFromCode($_GET['code'], $resultClient['client_id'], $resultClient['client_secret'], $redirectUri);
 
 
 
 
 
 
 
 
88
 
89
+ if ($resultTokens === false || empty($resultTokens['access_token']) || empty($resultTokens['refresh_token'])) {
90
+ if (!empty($resultTokens['error_description']))
91
+ powerpress_page_message_add_error($resultTokens['error_description']);
92
+ else if (!empty($resultTokens['error']))
93
+ powerpress_page_message_add_error($resultTokens['error']);
94
+ else
95
+ powerpress_page_message_add_error(__('Error retrieving access token:', 'powerpress-network') . ' ' . $auth->GetLastError());
96
+ powerpress_page_message_print();
97
+ exit;
98
+ }
99
 
100
+ $props = array();
101
+ $props['code'] = $_GET['code'];
102
+ $props['client_id'] = $resultClient['client_id'];
103
+ $props['client_secret'] = $resultClient['client_secret'];
104
+ $props['access_token'] = $resultTokens['access_token'];
105
+ $props['access_expires'] = (time() + $resultTokens['expires_in'] - 10);
106
+ $props['refresh_token'] = $resultTokens['refresh_token'];
107
  powerpress_save_settings($props, 'powerpress_creds');
108
+
109
  } else {
110
+ $props = $creds;
111
+ }
112
+ $result = $auth->checkAccountVerified();
113
+ if (isset($result['account_enabled']) && isset($result['account_confirmed'])) {
114
+ if (!$result['account_enabled'] || !$result['account_confirmed']) {
115
+ $props['account_verified'] = false;
116
+ powerpress_save_settings($props, 'powerpress_creds');
117
+ powerpress_check_account_verified_popup(true);
118
+ } else {
119
+ $props['account_verified'] = true;
120
+ powerpress_save_settings($props, 'powerpress_creds');
121
+ $Save = false;
122
+ $Close = false;
123
+ $Programs = array();
124
+ $ProgramHosting = array();
125
+ $json_data = false;
126
+ $results_programs = array();
127
+ $api_url_array = powerpress_get_api_array();
128
+ $accessToken = powerpress_getAccessToken();
129
 
130
+ $req_url = '/2/service/index.json';
131
+ $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA') ? '?' . POWERPRESS_BLUBRRY_API_QSA : '');
132
+ $results_programs = $auth->api($accessToken, $req_url);
133
 
134
+ if (!$results_programs) {
135
+ powerpress_page_message_add_error(__('Error accessing account: ', 'powerpress') . $auth->getLastError());
136
+ } else {
137
+ foreach ($results_programs as $null => $row) {
138
+ $Programs[$row['program_keyword']] = $row['program_title'];
139
+ }
140
  }
141
+ $from_string = '';
142
+ if (isset($_GET['from'])) {
143
+ $from_string = "&from=" . $_GET['from'];
144
+ if ($_GET['from'] == 'powerpressadmin_basic') {
145
+ $tab_string = isset($_GET['tab']) ? "&tab={$_GET['tab']}" : "";
146
+ $sidenav_tab_string = isset($_GET['sidenav-tab']) ? "&sidenav-tab={$_GET['sidenav-tab']}" : "";
147
+ $from_string .= $tab_string;
148
+ $from_string .= $sidenav_tab_string;
149
+ }
150
  }
151
+ wp_enqueue_style('powerpress_onboarding_styles', POWERPRESS_ABSPATH . '/css/onboarding.css'); ?>
 
152
 
153
 
154
+ <div class="pp_container">
155
+ <h2 class="pp_align-center"><?php echo __('You\'re ready to go!', 'powerpress'); ?></h2>
156
+ <hr class="pp_align-center"/>
157
+ <p class="pp_align-center"><?php echo __('You can now now able to upload episodes from within WordPress to blubrry, view basic stats from the wordpress dashboard.', 'powerpress'); ?></p>
158
+ <p class="pp_align-center"><?php echo __('If this is the wrong Blubrry account, visit settings to unlink this account.', 'powerpress'); ?></p>
159
+ </div>
160
 
161
+ <div class="pp_container">
162
+ <?php powerpress_page_message_print() ?>
163
+ <h2 class="pp_align-center"><?php echo __('Select your default show', 'powerpress'); ?></h2>
164
+ <p class="pp_align-center"><?php echo __('You have multiple shows in your account. Please select which one you want to be your default show for this website.', 'powerpress'); ?></p>
165
+ <div class="pp_flex-grid">
166
+ <div class="pp_col">
167
+ <div class="pp_button-container">
168
+ <form action="<?php echo add_query_arg('_wpnonce', $_REQUEST['_wpnonce'], admin_url("admin.php?page={$_GET['page']}&step=blubrrySignin{$from_string}")); ?>"
169
+ method="post">
170
+ <?php
171
+ foreach ($Programs as $value => $desc)
172
+ echo "<div><button type='submit' name='Settings[blubrry_program_keyword]' value='{$value}' class='pp_button show_button'><span>{$desc}</span></button></div>";
173
 
174
+ if (isset($_GET['from']) && $_GET['from'] == 'import') { ?>
175
+ <div class="pp_form-group" style="text-align: center">
176
+ <div class="pp_input-field-login" style="display: inline-block">
177
+ <input type="checkbox" id="blubrry_migrate_option_signin"
178
+ name="Settings[blubrry_migrate]">
179
+ <label for="blubrry_migrate_option_signin"><?php echo __('Migrate media from imported feed (only possible with a hosting account)', 'powerpress'); ?></label>
180
+ </div>
181
  </div>
182
+ <?php } ?>
183
+ </form>
184
+ </div>
185
  </div>
186
  </div>
187
  </div>
188
+ <?php
189
+ }
190
+ } else {
191
+ $props['account_verified'] = false;
192
+ powerpress_save_settings($props, 'powerpress_creds');
193
+ powerpress_page_message_add_error(__('Error verifying account: ', 'powerpress') . isset($result['error']) ? $result['error'] : $auth->getLastError());
194
+ powerpress_page_message_print();
195
  }
196
+ //var_dump($result);
197
+ //exit;
 
 
 
 
 
 
198
 
199
+ } else if (isset($_POST['Settings'])) {
200
+ $SaveSettings = $_POST['Settings'];
201
+ $SaveSettings = powerpress_stripslashes($SaveSettings);
202
+ $Save = false;
203
+ $Close = false;
204
+ $Programs = array();
205
+ $ProgramHosting = array();
206
+ $json_data = false;
207
+ $results_programs = array();
208
+ $api_url_array = powerpress_get_api_array();
209
+ $accessToken = powerpress_getAccessToken();
210
+ $req_url = '/2/service/index.json';
211
+ $req_url .= (defined('POWERPRESS_BLUBRRY_API_QSA') ? '?' . POWERPRESS_BLUBRRY_API_QSA : '');
212
+ $results = $auth->api($accessToken, $req_url);
213
+ if (isset($results['error'])) {
214
+ $Error = $results['error'];
215
+ if (strstr($Error, __('currently not available', 'powerpress'))) {
216
+ $Error = __('Unable to find podcasts for this account.', 'powerpress');
217
+ $Error .= '<br /><span style="font-weight: normal; font-size: 12px;">';
218
+ $Error .= 'Verify that the email address you enter here matches the email address you used when you listed your podcast on blubrry.com.</span>';
219
+ } else if (preg_match('/No programs found.*media hosting/i', $results['error'])) {
220
+ $Error .= '<br/><span style="font-weight: normal; font-size: 12px;">';
221
+ $Error .= 'Service may take a few minutes to activate.</span>';
222
+ }
223
+ } else if (!is_array($results)) {
224
+ $Error = $json_data;
225
+ } else {
226
+ // Get all the programs for this user...
227
+ foreach ($results as $null => $row) {
228
+ $Programs[$row['program_keyword']] = $row['program_title'];
229
+ if ($row['hosting'] === true || $row['hosting'] == 'true')
230
+ $ProgramHosting[$row['program_keyword']] = true;
231
+ else
232
+ $ProgramHosting[$row['program_keyword']] = false;
233
+ }
234
 
235
+ if (count($Programs) > 0) {
236
+ global $wpdb;
237
+ $migrate_string = "";
238
 
239
+ if (isset($SaveSettings['blubrry_migrate']) && $SaveSettings['blubrry_migrate']) {
240
+ $migrate_string = "&migrate=true";
241
+ $query = "SELECT meta_id, post_id, meta_key, meta_value FROM {$wpdb->postmeta} WHERE meta_key LIKE \"%enclosure\"";
242
+ $results_data = $wpdb->get_results($query, ARRAY_A);
243
+ if ($results_data) {
244
+ if (empty($GLOBALS['pp_migrate_media_urls']))
245
+ $GLOBALS['pp_migrate_media_urls'] = array();
246
+ foreach ($results_data as $index => $row) {
247
+ list($url) = @explode("\n", $row['meta_value'], 2);
248
+ $url = trim($url);
249
+ $post_id = $row['post_id'];
250
+ $GLOBALS['pp_migrate_media_urls'][$post_id] = $url;
251
+ }
252
+ require_once(POWERPRESS_ABSPATH . '/powerpressadmin-migrate.php');
253
 
254
+ $update_option = true;
255
+ $QueuedFiles = get_option('powerpress_migrate_queued');
256
+ if (!is_array($QueuedFiles)) {
257
+ $QueuedFiles = array();
258
+ $update_option = false;
259
+ }
260
 
261
+ $add_urls = '';
262
+ foreach ($GLOBALS['pp_migrate_media_urls'] as $meta_id => $url) {
263
+ if (empty($QueuedFiles[$meta_id])) { // Add to the array if not already added
264
+ $QueuedFiles[$meta_id] = $url;
265
+ if (!empty($add_urls)) {
266
+ $add_urls .= "\n";
267
+ }
268
+ $add_urls .= $url;
269
  }
 
270
  }
271
+ powepress_admin_migrate_add_urls($add_urls);
272
  }
 
273
  }
 
274
 
275
 
276
+ if (!empty($SaveSettings['blubrry_program_keyword'])) {
277
+ powerpress_add_blubrry_redirect($SaveSettings['blubrry_program_keyword']);
278
+ $SaveSettings['blubrry_hosting'] = $ProgramHosting[$SaveSettings['blubrry_program_keyword']];
279
+ if (!is_bool($SaveSettings['blubrry_hosting'])) {
280
+ if ($SaveSettings['blubrry_hosting'] === 'false' || empty($SaveSettings['blubrry_hosting']))
281
+ $SaveSettings['blubrry_hosting'] = false;
282
+ }
283
 
284
+ $Save = true;
285
+ $Close = true;
286
+ } else if (isset($SaveSettings['blubrry_program_keyword'])) // Present but empty
287
+ {
288
+ $Error = __('You must select a program to continue.', 'powerpress');
289
+ } else if (count($Programs) == 1) {
290
+ foreach ($Programs as $keyword => $title) {
291
+ break;
292
+ }
293
 
294
+ $SaveSettings['blubrry_program_keyword'] = $keyword;
295
+ $SaveSettings['blubrry_hosting'] = $ProgramHosting[$keyword];
296
+ if (!is_bool($SaveSettings['blubrry_hosting'])) {
297
+ if ($SaveSettings['blubrry_hosting'] === 'false' || empty($SaveSettings['blubrry_hosting']))
298
+ $SaveSettings['blubrry_hosting'] = false;
299
+ }
300
+ powerpress_add_blubrry_redirect($keyword);
301
+ $Close = true;
302
+ $Save = true;
303
+ } else {
304
+ $Step = 2;
305
+ $Settings['blubrry_username'] = $SaveSettings['blubrry_username'];
306
  }
 
 
 
307
  } else {
308
+ $Error = __('No podcasts for this account are listed on blubrry.com.', 'powerpress');
 
309
  }
 
 
310
  }
 
311
 
312
+ if (isset($Error)) {
313
+ $Error .= '<p style="text-align: center;"><a href="http://create.blubrry.com/resources/powerpress/powerpress-settings/services-stats/" target="_blank">' . __('Click Here For Help', 'powerpress') . '</a></p>';
 
 
 
 
 
 
 
 
 
 
314
  }
315
+ if ($Save) {
316
+ powerpress_save_settings($SaveSettings);
317
+ if (isset($_GET['from']) && $_GET['from'] == 'powerpressadmin_basic') {
318
+ $tab_string = isset($_GET['tab']) ? "&tab={$_GET['tab']}" : "";
319
+ $sidenav_tab_string = isset($_GET['sidenav-tab']) ? "&sidenav-tab={$_GET['sidenav-tab']}" : "";
320
+ echo '<script>window.location.href = "' . admin_url("admin.php?page={$_GET['from']}{$tab_string}{$sidenav_tab_string}") . '";</script>';
321
+ } elseif (isset($_GET['from']) && $_GET['from'] == 'new_post') {
322
+ echo '<script>window.location.href = "' . admin_url('post-new.php') . '";</script>';
323
+ } elseif (isset($_GET['from']) && $_GET['from'] == 'hosting_plugin') {
324
+ echo '<script>window.location.href = "' . admin_url('admin.php?page=powerpress-site-setup') . '";</script>';
325
+ }
326
+ echo '<script>window.location.href = "' . admin_url("admin.php?page={$_GET['page']}&step=createEpisode$migrate_string") . '";</script>';
327
+ }
328
+ // Clear cached statistics
329
+ delete_option('powerpress_stats');
330
 
331
+ if (isset($Error))
332
+ powerpress_page_message_add_notice($Error, 'inline', false);
333
 
334
 
335
+ }
336
+ } else {
337
+ powerpress_page_message_add_error(__('Invalid link', 'powerpress'));
338
+ powerpress_page_message_print();
339
+ exit;
340
  }
341
  ?>
views/onboarding/nohost.php CHANGED
@@ -11,6 +11,7 @@ if (isset($_GET['from']) && $_GET['from'] == 'import') {
11
  } else {
12
  $querystring_import = "";
13
  }
 
14
  ?>
15
  <div class="wrap">
16
  <div class="pp_container">
@@ -57,13 +58,13 @@ if (isset($_GET['from']) && $_GET['from'] == 'import') {
57
  <p class="pp_align-center"><?php echo __('Secure media storage, unlimited bandwidth, and pro stats included. Create an account or sign in.', 'powerpress'); ?></p>
58
  </div>
59
  <div class="pp_button-container">
60
- <a href="<?php echo admin_url("admin.php?page={$_GET['page']}&step=blubrrySignin$querystring_import"); ?>">
61
  <button type="button" class="pp_button"><span><?php echo __('Login to Blubrry', 'powerpress'); ?></span></button>
62
  </a>
63
  </div>
64
  <?php if (defined('blubrry_internal_create_account_beta')){ ?>
65
  <div class="pp_button-container">
66
- <a href="<?php echo admin_url("admin.php?page={$_GET['page']}&blubrry_create=true&step=blubrrySignin$querystring_import"); ?>">
67
  <button type="button" class="pp_button"><span><?php echo __('Create Account with Blubrry', 'powerpress'); ?></span></button>
68
  </a>
69
  </div>
11
  } else {
12
  $querystring_import = "";
13
  }
14
+ $pp_nonce = powerpress_login_create_nonce();
15
  ?>
16
  <div class="wrap">
17
  <div class="pp_container">
58
  <p class="pp_align-center"><?php echo __('Secure media storage, unlimited bandwidth, and pro stats included. Create an account or sign in.', 'powerpress'); ?></p>
59
  </div>
60
  <div class="pp_button-container">
61
+ <a href="<?php echo add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page={$_GET['page']}&step=blubrrySignin$querystring_import")); ?>">
62
  <button type="button" class="pp_button"><span><?php echo __('Login to Blubrry', 'powerpress'); ?></span></button>
63
  </a>
64
  </div>
65
  <?php if (defined('blubrry_internal_create_account_beta')){ ?>
66
  <div class="pp_button-container">
67
+ <a href="<?php echo add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page={$_GET['page']}&blubrry_create=true&step=blubrrySignin$querystring_import")); ?>">
68
  <button type="button" class="pp_button"><span><?php echo __('Create Account with Blubrry', 'powerpress'); ?></span></button>
69
  </a>
70
  </div>
views/onboarding/want_stats.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
  ?>
3
  <div class="wrap">
4
  <div class="pp_container">
@@ -43,7 +44,7 @@
43
  <p class="pp_align-center"><?php echo __('Don\'t miss out on Blubrry\'s free podcast stats and directory listing.', 'powerpress'); ?></p>
44
  </div>
45
  <div class="pp_button-container">
46
- <a href="<?php echo admin_url("admin.php?page={$_GET['page']}&step=blubrrySignin"); ?>">
47
  <button type="button" class="pp_button"><span><?php echo __('I\'d like free tools', 'powerpress'); ?></span></button>
48
  </a>
49
  </div>
1
  <?php
2
+ $pp_nonce = powerpress_login_create_nonce();
3
  ?>
4
  <div class="wrap">
5
  <div class="pp_container">
44
  <p class="pp_align-center"><?php echo __('Don\'t miss out on Blubrry\'s free podcast stats and directory listing.', 'powerpress'); ?></p>
45
  </div>
46
  <div class="pp_button-container">
47
+ <a href="<?php echo add_query_arg( '_wpnonce', $pp_nonce, admin_url("admin.php?page={$_GET['page']}&step=blubrrySignin")); ?>">
48
  <button type="button" class="pp_button"><span><?php echo __('I\'d like free tools', 'powerpress'); ?></span></button>
49
  </a>
50
  </div>