RSS Post Importer - Version 2.1.2

Version Description

Download this release

Release Info

Developer koralyne
Plugin Icon 128x128 RSS Post Importer
Version 2.1.2
Comparing to
See all releases

Code changes from version 2.1.1 to 2.1.2

app/assets/css/style.css CHANGED
@@ -24,7 +24,190 @@
24
  * Work: Lead Product Designer @ Kyruus - http://kyruus.com
25
  */
26
  @font-face{font-family:FontAwesome;src:url(../font/fontawesome-webfont.eot?v=3.2.1);src:url(../font/fontawesome-webfont.eot?#iefix&v=3.2.1) format('embedded-opentype'),url(../font/fontawesome-webfont.woff?v=3.2.1) format('woff'),url(../font/fontawesome-webfont.ttf?v=3.2.1) format('truetype'),url(../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1) format('svg');font-weight:400;font-style:normal}[class^=icon-],[class*=" icon-"]{font-family:FontAwesome;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;}[class^=icon-]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.33333333em}a [class^=icon-],a [class*=" icon-"]{display:inline}[class^=icon-].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.14285714em;text-align:right;padding-right:.28571429em}[class^=icon-].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.42857143em}.icons-ul{margin-left:2.14285714em;list-style-type:none}.icons-ul>li{position:relative}.icons-ul .icon-li{position:absolute;left:-2.14285714em;width:2.14285714em;text-align:center;line-height:inherit}[class^=icon-].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-top-right-radius:5px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:5px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:5px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:6px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-top-right-radius:7px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:7px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:7px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^=icon-].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^=icon-].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^=icon-],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;}.icon-stack .icon-stack-base{font-size:2em;}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical:before{-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope-alt:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-power-off:before,.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-gear:before,.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file-alt:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-rotate-right:before,.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-mail-forward:before,.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-gears:before,.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up-alt:before{content:"\f087"}.icon-thumbs-down-alt:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-unchecked:before,.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-rotate-left:before,.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-text-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-mail-reply:before,.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"}.icon-compass:before{content:"\f14e"}.icon-collapse:before{content:"\f150"}.icon-collapse-top:before{content:"\f151"}.icon-expand:before{content:"\f152"}.icon-euro:before,.icon-eur:before{content:"\f153"}.icon-gbp:before{content:"\f154"}.icon-dollar:before,.icon-usd:before{content:"\f155"}.icon-rupee:before,.icon-inr:before{content:"\f156"}.icon-yen:before,.icon-jpy:before{content:"\f157"}.icon-renminbi:before,.icon-cny:before{content:"\f158"}.icon-won:before,.icon-krw:before{content:"\f159"}.icon-bitcoin:before,.icon-btc:before{content:"\f15a"}.icon-file:before{content:"\f15b"}.icon-file-text:before{content:"\f15c"}.icon-sort-by-alphabet:before{content:"\f15d"}.icon-sort-by-alphabet-alt:before{content:"\f15e"}.icon-sort-by-attributes:before{content:"\f160"}.icon-sort-by-attributes-alt:before{content:"\f161"}.icon-sort-by-order:before{content:"\f162"}.icon-sort-by-order-alt:before{content:"\f163"}.icon-thumbs-up:before{content:"\f164"}.icon-thumbs-down:before{content:"\f165"}.icon-youtube-sign:before{content:"\f166"}.icon-youtube:before{content:"\f167"}.icon-xing:before{content:"\f168"}.icon-xing-sign:before{content:"\f169"}.icon-youtube-play:before{content:"\f16a"}.icon-dropbox:before{content:"\f16b"}.icon-stackexchange:before{content:"\f16c"}.icon-instagram:before{content:"\f16d"}.icon-flickr:before{content:"\f16e"}.icon-adn:before{content:"\f170"}.icon-bitbucket:before{content:"\f171"}.icon-bitbucket-sign:before{content:"\f172"}.icon-tumblr:before{content:"\f173"}.icon-tumblr-sign:before{content:"\f174"}.icon-long-arrow-down:before{content:"\f175"}.icon-long-arrow-up:before{content:"\f176"}.icon-long-arrow-left:before{content:"\f177"}.icon-long-arrow-right:before{content:"\f178"}.icon-apple:before{content:"\f179"}.icon-windows:before{content:"\f17a"}.icon-android:before{content:"\f17b"}.icon-linux:before{content:"\f17c"}.icon-dribbble:before{content:"\f17d"}.icon-skype:before{content:"\f17e"}.icon-foursquare:before{content:"\f180"}.icon-trello:before{content:"\f181"}.icon-female:before{content:"\f182"}.icon-male:before{content:"\f183"}.icon-gittip:before{content:"\f184"}.icon-sun:before{content:"\f185"}.icon-moon:before{content:"\f186"}.icon-archive:before{content:"\f187"}.icon-bug:before{content:"\f188"}.icon-vk:before{content:"\f189"}.icon-weibo:before{content:"\f18a"}.icon-renren:before{content:"\f18b"}
27
- #postbox-container-1 h3.version{font-family:HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",sans-serif;background:0 0;margin-bottom:10px;border-bottom:0 none;padding:7px 0;-webkit-box-shadow:0 0 0 #fff;-moz-box-shadow:0 0 0 #fff;box-shadow:0 0 0 #fff}#postbox-container-1 ul li i{font-size:1.2em;margin-right:10px}.log{margin:40px 0}.log code{font-size:1.2em;line-height:1.2em}.loader{margin-top:20px}.rate-box h4{font-family:HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",sans-serif;font-weight:400;font-size:1.2em}.rate-box i{color:#fcd237;text-shadow:0 0 1px #c59e43;font-size:1.9em;margin-bottom:10px;display:inline-block}.rate-box a{font-size:.8em;text-decoration:none;font-style:normal}.rss_pi-table{margin-bottom:20px}.rss_pi-table tbody tr.edit-row{display:none}.rss_pi-table tbody tr.edit-row.show{display:table-row}.rss_pi-table tbody tr.edit-row>td{padding:0;border-top:0 none}.rss_pi-table tbody tr.edit-row table{border:0 none;margin:0}.rss_pi-table tbody tr.edit-row table tr td{border:0 none;border-top:1px solid #F0F0F0;background:#fff}.rss_pi-table tbody tr.edit-row table tr td:first-child{background:#F9F9F9;border-right:1px solid #E1E1E1;width:440px}.rss_pi-table tbody tr.edit-row table tr td label{font-weight:700}.rss_pi-table tbody tr.edit-row table tr td p.description{color:#9f9f9f;font-size:.8em;line-height:2em;font-style:normal}.rss_pi-table tbody tr.edit-row table tr td input,.rss_pi-table tbody tr.edit-row table tr td textarea{padding:8px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}.rss_pi-table tbody tr.edit-row table tr td .radiolist li label{font-weight:400;display:inline-block}.rss_pi-table tbody tr.edit-row table tr td .radiolist li label input{display:inline-block;width:auto;margin-right:10px}.rss_pi-table tbody tr.data-row.show td{background:#2a95c5;background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#185571),color-stop(1,#2a95c5));background:-ms-linear-gradient(bottom,#185571,#2a95c5);background:-moz-linear-gradient(center bottom,#185571 0,#2a95c5 100%);background:-o-linear-gradient(#2a95c5,#185571);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2a95c5', endColorstr='#185571', GradientType=0);border-top:1px solid #2a95c5;color:#fff;text-shadow:0 1px 1px rgba(0,0,0,.5)}.rss_pi-table tbody tr.data-row.show td a{color:#fff;text-shadow:0 1px 1px rgba(0,0,0,.5)}.rss_pi-table tbody tr td{border-bottom:1px solid #E1E1E1;padding:10px}.rss_pi-table tbody tr td .row-options{visibility:hidden}.rss_pi-table tbody tr:hover .row-options{visibility:visible}.rss_pi-table tfoot tr td{padding:10px;text-align:right}.rss_pi-table code{display: block;float: left;clear: both;padding: 3px 5px;font-size: 0.9em;background: none;border: 1px #eaeaea solid;}a.delete-row {color: #a00;}a.delete-row:hover{color: red;}.rss-pi-error{margin: 5px 0 15px;border-left: 4px solid #dd3d36;background: #fff;box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);padding: 1px 12px;} .selectit > input,.tags_container input {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  width: 4% !important;
29
  }
30
  label.selectit,.tags_container label {
24
  * Work: Lead Product Designer @ Kyruus - http://kyruus.com
25
  */
26
  @font-face{font-family:FontAwesome;src:url(../font/fontawesome-webfont.eot?v=3.2.1);src:url(../font/fontawesome-webfont.eot?#iefix&v=3.2.1) format('embedded-opentype'),url(../font/fontawesome-webfont.woff?v=3.2.1) format('woff'),url(../font/fontawesome-webfont.ttf?v=3.2.1) format('truetype'),url(../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1) format('svg');font-weight:400;font-style:normal}[class^=icon-],[class*=" icon-"]{font-family:FontAwesome;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;}[class^=icon-]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.33333333em}a [class^=icon-],a [class*=" icon-"]{display:inline}[class^=icon-].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.14285714em;text-align:right;padding-right:.28571429em}[class^=icon-].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.42857143em}.icons-ul{margin-left:2.14285714em;list-style-type:none}.icons-ul>li{position:relative}.icons-ul .icon-li{position:absolute;left:-2.14285714em;width:2.14285714em;text-align:center;line-height:inherit}[class^=icon-].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-top-right-radius:3px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-top-right-radius:5px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:5px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:5px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:6px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-top-right-radius:7px;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius-topright:7px;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;border-top-right-radius:7px;border-bottom-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;-moz-background-clip:padding-box;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^=icon-].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^=icon-].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^=icon-],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;}.icon-stack .icon-stack-base{font-size:2em;}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical:before{-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope-alt:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-power-off:before,.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-gear:before,.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file-alt:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-rotate-right:before,.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-mail-forward:before,.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-gears:before,.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up-alt:before{content:"\f087"}.icon-thumbs-down-alt:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-unchecked:before,.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-rotate-left:before,.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-text-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-mail-reply:before,.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"}.icon-compass:before{content:"\f14e"}.icon-collapse:before{content:"\f150"}.icon-collapse-top:before{content:"\f151"}.icon-expand:before{content:"\f152"}.icon-euro:before,.icon-eur:before{content:"\f153"}.icon-gbp:before{content:"\f154"}.icon-dollar:before,.icon-usd:before{content:"\f155"}.icon-rupee:before,.icon-inr:before{content:"\f156"}.icon-yen:before,.icon-jpy:before{content:"\f157"}.icon-renminbi:before,.icon-cny:before{content:"\f158"}.icon-won:before,.icon-krw:before{content:"\f159"}.icon-bitcoin:before,.icon-btc:before{content:"\f15a"}.icon-file:before{content:"\f15b"}.icon-file-text:before{content:"\f15c"}.icon-sort-by-alphabet:before{content:"\f15d"}.icon-sort-by-alphabet-alt:before{content:"\f15e"}.icon-sort-by-attributes:before{content:"\f160"}.icon-sort-by-attributes-alt:before{content:"\f161"}.icon-sort-by-order:before{content:"\f162"}.icon-sort-by-order-alt:before{content:"\f163"}.icon-thumbs-up:before{content:"\f164"}.icon-thumbs-down:before{content:"\f165"}.icon-youtube-sign:before{content:"\f166"}.icon-youtube:before{content:"\f167"}.icon-xing:before{content:"\f168"}.icon-xing-sign:before{content:"\f169"}.icon-youtube-play:before{content:"\f16a"}.icon-dropbox:before{content:"\f16b"}.icon-stackexchange:before{content:"\f16c"}.icon-instagram:before{content:"\f16d"}.icon-flickr:before{content:"\f16e"}.icon-adn:before{content:"\f170"}.icon-bitbucket:before{content:"\f171"}.icon-bitbucket-sign:before{content:"\f172"}.icon-tumblr:before{content:"\f173"}.icon-tumblr-sign:before{content:"\f174"}.icon-long-arrow-down:before{content:"\f175"}.icon-long-arrow-up:before{content:"\f176"}.icon-long-arrow-left:before{content:"\f177"}.icon-long-arrow-right:before{content:"\f178"}.icon-apple:before{content:"\f179"}.icon-windows:before{content:"\f17a"}.icon-android:before{content:"\f17b"}.icon-linux:before{content:"\f17c"}.icon-dribbble:before{content:"\f17d"}.icon-skype:before{content:"\f17e"}.icon-foursquare:before{content:"\f180"}.icon-trello:before{content:"\f181"}.icon-female:before{content:"\f182"}.icon-male:before{content:"\f183"}.icon-gittip:before{content:"\f184"}.icon-sun:before{content:"\f185"}.icon-moon:before{content:"\f186"}.icon-archive:before{content:"\f187"}.icon-bug:before{content:"\f188"}.icon-vk:before{content:"\f189"}.icon-weibo:before{content:"\f18a"}.icon-renren:before{content:"\f18b"}
27
+
28
+ #postbox-container-1 h3.version {
29
+ font-family: HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", sans-serif;
30
+ background: 0 0;
31
+ margin-bottom: 10px;
32
+ border-bottom: 0 none;
33
+ padding: 7px 0;
34
+ -webkit-box-shadow: 0 0 0 #fff;
35
+ -moz-box-shadow: 0 0 0 #fff;
36
+ box-shadow: 0 0 0 #fff;
37
+ }
38
+ #postbox-container-1 ul li i {
39
+ font-size: 1.2em;
40
+ margin-right: 10px;
41
+ }
42
+ .log {
43
+ margin: 40px 0;
44
+ }
45
+ .log code {
46
+ font-size: 1.2em;
47
+ line-height: 1.2em;
48
+ }
49
+ .loader {
50
+ margin-top: 20px;
51
+ }
52
+ .rate-box h4{
53
+ font-family: HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", sans-serif;
54
+ font-weight: 400;
55
+ font-size: 1.2em;
56
+ }
57
+ .rate-box i {
58
+ color: #fcd237;
59
+ text-shadow: 0 0 1px #c59e43;
60
+ font-size: 1.9em;
61
+ margin-bottom: 10px;
62
+ display: inline-block;
63
+ }
64
+ .rate-box a {
65
+ font-size: .8em;
66
+ text-decoration: none;
67
+ font-style: normal;
68
+ }
69
+ .rss_pi-table {
70
+ margin-bottom: 20px;
71
+ }
72
+ .rss_pi-table tbody tr.edit-row {
73
+ display: none;
74
+ }
75
+ .rss_pi-table tbody tr.edit-row.show {
76
+ display: table-row;
77
+ }
78
+ .rss_pi-table tbody tr.edit-row > td {
79
+ padding: 0;
80
+ border-top: 0 none;
81
+ }
82
+ .rss_pi-table tbody tr.edit-row table {
83
+ border: 0 none;
84
+ margin: 0;
85
+ }
86
+ .rss_pi-table tbody tr.edit-row table tr td {
87
+ border: 0 none;
88
+ border-top: 1px solid #F0F0F0;
89
+ background: #fff;
90
+ }
91
+ .rss_pi-table tbody tr.edit-row table tr td:first-child {
92
+ background: #F9F9F9;
93
+ border-right: 1px solid #E1E1E1;
94
+ width: 440px;
95
+ }
96
+ .rss_pi-table tbody tr.edit-row table tr td label {
97
+ font-weight: 700;
98
+ }
99
+ .rss_pi-table tbody tr.edit-row table tr td p.description {
100
+ color: #9f9f9f;
101
+ font-size: .8em;
102
+ line-height: 2em;
103
+ font-style: normal;
104
+ }
105
+ .rss_pi-table tbody tr.edit-row table tr td input,
106
+ .rss_pi-table tbody tr.edit-row table tr td textarea {
107
+ padding: 8px;
108
+ -webkit-box-sizing: border-box;
109
+ -moz-box-sizing: border-box;
110
+ box-sizing: border-box;
111
+ width: 100%;
112
+ }
113
+ .rss_pi-table tbody tr.edit-row table tr td input.button {
114
+ width: auto;
115
+ }
116
+ .rss_pi-table tbody tr.edit-row table tr td .radiolist li label {
117
+ font-weight: 400;
118
+ display: inline-block;
119
+ }
120
+ .rss_pi-table tbody tr.edit-row table tr td .radiolist li label input {
121
+ display: inline-block;
122
+ width: auto;
123
+ margin-right: 10px;
124
+ }
125
+ .rss_pi-table tfoot tr.data-row,
126
+ .rss_pi-table tfoot tr.edit-row {
127
+ display: none;
128
+ }
129
+ .rss_pi-table tbody tr.rss-pi-unsaved td:last-child {
130
+ position: relative;
131
+ overflow: visible;
132
+ }
133
+ .rss_pi-table tbody tr.rss-pi-unsaved td:last-child:after {
134
+ content: "unsaved";
135
+ position: absolute;
136
+ display: block;
137
+ width: 50px;
138
+ text-align: center;
139
+ color: #FFA500;
140
+ font-size: smaller;
141
+ top: 10px;
142
+ right: -5px;
143
+ /* top: -10px\0/;
144
+ right: -5px\0/;*/
145
+ -ms-transform: rotate(45deg);
146
+ -moz-transform: rotate(45deg);
147
+ -o-transform: rotate(45deg);
148
+ -webkit-transform: rotate(45deg);
149
+ transform: rotate(45deg);
150
+ filter: progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476);
151
+ -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(SizingMethod='auto expand', M11=0.7071067811865476, M12=-0.7071067811865475, M21=0.7071067811865475, M22=0.7071067811865476)";
152
+ }
153
+ .rss_pi-table tbody tr.data-row.show td {
154
+ background: #2a95c5;
155
+ background: -webkit-gradient(linear,left bottom,left top,color-stop(0,#185571),color-stop(1,#2a95c5));
156
+ background: -ms-linear-gradient(bottom,#185571,#2a95c5);
157
+ background: -moz-linear-gradient(center bottom,#185571 0,#2a95c5 100%);
158
+ background: -o-linear-gradient(#2a95c5,#185571);
159
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2a95c5', endColorstr='#185571', GradientType=0);
160
+ border-top: 1px solid #2a95c5;
161
+ color: #fff;
162
+ text-shadow: 0 1px 1px rgba(0,0,0,.5);
163
+ }
164
+ .rss_pi-table tbody tr.rss-pi-unsaved.show td:last-child:after,
165
+ .rss_pi-table tbody tr.data-row.show td a {
166
+ color: #fff;
167
+ text-shadow: 0 1px 1px rgba(0,0,0,.5);
168
+ }
169
+ .rss_pi-table tbody tr td {
170
+ border-bottom: 1px solid #E1E1E1;
171
+ padding: 10px;
172
+ }
173
+ .rss_pi-table tbody tr td .row-options {
174
+ visibility: hidden;
175
+ }
176
+ .rss_pi-table tbody tr:hover .row-options {
177
+ visibility: visible;
178
+ }
179
+ .rss_pi-table tfoot tr td {
180
+ padding: 10px;
181
+ text-align: right;
182
+ }
183
+ .rss_pi-feed_name,
184
+ .rss_pi-feed_url {
185
+ word-break: break-all;
186
+ }
187
+ .rss_pi-table code {
188
+ display: block;
189
+ float: left;
190
+ clear: both;
191
+ padding: 3px 5px;
192
+ font-size: 0.9em;
193
+ background: none;
194
+ border: 1px #eaeaea solid;
195
+ }
196
+ a.delete-row {
197
+ color: #a00;
198
+ }
199
+ a.delete-row:hover {
200
+ color: red;
201
+ }
202
+ .rss-pi-error{
203
+ margin: 5px 0 15px;
204
+ border-left: 4px solid #dd3d36;
205
+ background: #fff;
206
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
207
+ padding: 1px 12px;
208
+ }
209
+ .selectit > input,
210
+ .tags_container input {
211
  width: 4% !important;
212
  }
213
  label.selectit,.tags_container label {
app/assets/font/fontawesome-webfont.eot CHANGED
File without changes
app/assets/font/fontawesome-webfont.svg CHANGED
File without changes
app/assets/font/fontawesome-webfont.ttf CHANGED
File without changes
app/assets/font/fontawesome-webfont.woff CHANGED
File without changes
app/assets/js/main.js CHANGED
@@ -1,105 +1,160 @@
1
- jQuery('document').ready(function () {
 
 
2
 
3
  // Edit-buttons
4
- jQuery('body').on('click', 'a.toggle-edit', function () {
5
- jQuery('#edit_' + jQuery(this).attr('data-target')).toggleClass('show');
6
- jQuery('#display_' + jQuery(this).attr('data-target')).toggleClass('show');
7
  return false;
8
  });
9
 
10
  // Delete-buttons
11
- jQuery('body').on('click', 'a.delete-row', function () {
12
- jQuery('#edit_' + jQuery(this).attr('data-target')).remove();
13
- jQuery('#display_' + jQuery(this).attr('data-target')).remove();
14
  update_ids();
15
  return false;
16
  });
17
 
18
- jQuery('a.add-row').on('click', function () {
19
- jQuery.ajax({
20
- type: 'POST',
21
- url: rss_pi.ajaxurl,
22
- data: ({
23
- action: 'rss_pi_add_row'
24
- }),
25
- success: function (data) {
26
- jQuery('.rss-rows').append(data);
27
- jQuery('.empty_table').remove();
28
- update_ids();
 
 
 
 
 
 
 
 
29
  }
30
  });
31
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  });
33
 
34
- jQuery('#save_and_import').on('click', function () {
35
- jQuery('#save_to_db').val('true');
36
  });
37
 
38
- jQuery('a.load-log').on('click', function () {
39
- jQuery('#main_ui').hide();
40
- jQuery('.ajax_content').html('<img src="/wp-admin/images/wpspin_light.gif" alt="" class="loader" />');
41
- jQuery.ajax({
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  type: 'POST',
43
  url: rss_pi.ajaxurl,
44
  data: ({
45
  action: 'rss_pi_load_log'
46
  }),
47
  success: function (data) {
48
- jQuery('.ajax_content').html(data);
49
  }
50
  });
51
  return false;
52
  });
53
 
54
- jQuery('body').delegate('a.show-main-ui', 'click', function () {
55
- jQuery('#main_ui').show();
56
- jQuery('.ajax_content').html('');
57
  return false;
58
  });
59
 
60
- jQuery('body').delegate('a.clear-log', 'click', function () {
61
- jQuery.ajax({
62
  type: 'POST',
63
  url: rss_pi.ajaxurl,
64
  data: ({
65
  action: 'rss_pi_clear_log'
66
  }),
67
  success: function (data) {
68
- jQuery('.log').html(data);
69
  }
70
  });
71
  return false;
72
  });
73
 
74
- jQuery("#from_date").datepicker();
75
- jQuery("#till_date").datepicker();
76
 
77
- if ( jQuery("#rss_pi-stats-placeholder").length ) {
78
  rss_filter_stats = function(form) {
79
  var data = {
80
  action: "rss_pi_stats",
81
- rss_from_date: jQuery("#from_date").val() || "",
82
- rss_till_date: jQuery("#till_date").val() || ""
83
  },
84
  $loading = false;
85
- if (form && jQuery("#submit-rss_filter_stats").length) {
86
- data.rss_filter_stats = jQuery("#submit-rss_filter_stats").val();
87
  } else {
88
- $loading = jQuery('<div class="rss_pi_overlay"><img class="rss_pi_loading" src="'+rss_pi.pluginurl+'app/assets/img/loading.gif" /><p>Stats are loading. Please wait...</p></div>').appendTo("#rss_pi-stats-placeholder");
89
  }
90
- jQuery.ajax({
91
  type: "POST",
92
  url: rss_pi.ajaxurl,
93
  data: data,
94
  success: function (data) {
95
  if ($loading) { $loading.remove(); $loading = false; }
96
- jQuery("#rss_pi-stats-placeholder").empty().append(data);
97
  drawChart();
98
- jQuery("#from_date").datepicker();
99
- jQuery("#till_date").datepicker();
100
- jQuery("#submit-rss_filter_stats").on("click",function(e){
101
  e.preventDefault();
102
- $loading = jQuery('<div class="rss_pi_overlay"><img class="rss_pi_loading" src="'+rss_pi.pluginurl+'app/assets/img/loading.gif" /><p>Stats are loading. Please wait...</p></div>').appendTo("#rss_pi-stats-placeholder");
103
  rss_filter_stats(true);
104
  });
105
  }
@@ -108,9 +163,9 @@ jQuery('document').ready(function () {
108
  rss_filter_stats();
109
  }
110
 
111
- if ( jQuery("#rss_pi_progressbar").length && feeds !== undefined && feeds.count ) {
112
  var import_feed = function(id) {
113
- jQuery.ajax({
114
  type: 'POST',
115
  url: rss_pi.ajaxurl,
116
  data: {
@@ -119,33 +174,35 @@ jQuery('document').ready(function () {
119
  },
120
  success: function (data) {
121
  var data = data.data || {};
122
- jQuery("#rss_pi_progressbar").progressbar({
123
  value: feeds.processed()
124
  });
125
- jQuery("#rss_pi_progressbar_label .processed").text(feeds.processed());
126
  if ( data.count !== undefined ) feeds.imported(data.count);
127
  if (feeds.left()) {
128
- jQuery("#rss_pi_progressbar_label .count").text(feeds.imported());
129
  import_feed(feeds.get());
130
  } else {
131
- jQuery("#rss_pi_progressbar_label").html("Import completed. Imported posts: " + feeds.imported());
132
  }
133
  }
134
  });
135
  }
136
- jQuery("#rss_pi_progressbar").progressbar({
137
  value: 0,
138
  max: feeds.total()
139
  });
140
- jQuery("#rss_pi_progressbar_label").html("Import in progres. Processed feeds: <span class='processed'>0</span> of <span class='max'>"+feeds.total()+"</span>. Imported posts so far: <span class='count'>0</span>");
141
  import_feed(feeds.get());
142
  }
143
 
144
  });
145
 
 
 
146
  function update_ids() {
147
 
148
- ids = jQuery('input[name="id"]').map(function () {
149
  return jQuery(this).val();
150
  }).get().join();
151
 
@@ -154,9 +211,8 @@ function update_ids() {
154
  }
155
 
156
  var feeds = {
157
- ids: [],
158
- // ids_cache: <?php echo json_encode($ids); ?>,
159
- count: 0,
160
  imported_posts: 0,
161
  set: function(ids){
162
  this.ids = ids;
@@ -165,9 +221,6 @@ var feeds = {
165
  get: function(){
166
  return this.ids.splice(0,1)[0];
167
  },
168
- // has: function(){
169
- // return !!this.ids.length;
170
- // },
171
  left: function(){
172
  return this.ids.length;
173
  },
1
+ (function($){
2
+
3
+ $('document').ready(function(){
4
 
5
  // Edit-buttons
6
+ $('body').on('click', 'a.toggle-edit', function () {
7
+ $('#edit_' + $(this).attr('data-target')).toggleClass('show');
8
+ $('#display_' + $(this).attr('data-target')).toggleClass('show');
9
  return false;
10
  });
11
 
12
  // Delete-buttons
13
+ $('body').on('click', 'a.delete-row', function () {
14
+ $('#edit_' + $(this).attr('data-target')).remove();
15
+ $('#display_' + $(this).attr('data-target')).remove();
16
  update_ids();
17
  return false;
18
  });
19
 
20
+ if ( $("#rss_pi-feed-table").length ) {
21
+
22
+ $("#rss_pi-feed-table").on("rss-pi-changed", "tr", function () {
23
+ var $tr = $(this),
24
+ id = $tr.attr("id").replace("display_","").replace("edit_",""),
25
+ $tr_data = $("#display_"+id),
26
+ $tr_edit = $("#edit_"+id),
27
+ fields = $tr_data.data("fields").split(",");
28
+ $.each(fields,function(i){
29
+ var field = ".field-"+fields[i];
30
+ $tr_data.find(field).text($tr_edit.find(field).val());
31
+ });
32
+ $tr_data.addClass("rss-pi-unsaved");
33
+ });
34
+
35
+ var do_save = false;
36
+ $(window).bind('beforeunload', function() {
37
+ if( ! do_save && $("#rss_pi-feed-table .rss-pi-unsaved").length ){
38
+ return rss_pi.l18n.unsaved;
39
  }
40
  });
41
+ $("#rss_pi-settings-form").on("submit",function(){
42
+ do_save = true;
43
+ });
44
+ // Monitor dynamic inputs
45
+ $("#rss_pi-feed-table").on('change', ':input', function(){ //triggers change in all input fields including text type
46
+ $(this).parents("tr.edit-row").trigger("rss-pi-changed");
47
+ });
48
+
49
+ }
50
+
51
+ $('a.add-row').on('click', function (e) {
52
+ e.preventDefault();
53
+ var id = uniqid();
54
+ $("#rss_pi-feed-table > tbody .empty_table").parent("tr").remove();
55
+ $tr_data = $("#rss_pi-feed-table > tfoot > tr.data-row").clone().attr("id","display_"+id).appendTo("#rss_pi-feed-table > tbody");
56
+ $tr_edit = $("#rss_pi-feed-table > tfoot > tr.edit-row").clone().attr("id","edit_"+id).appendTo("#rss_pi-feed-table > tbody");
57
+ $tr_data.find(".toggle-edit,.delete-row").attr("data-target",id);
58
+ $tr_edit.find(".toggle-edit").attr("data-target",id);
59
+ $tr_edit.find("[name='id']").val(id);
60
+ $tr_edit.find("[for^=0-]").each(function(){
61
+ $(this).attr("for",$(this).attr("for").replace("0-",id+"-"));
62
+ });
63
+ $tr_edit.find("[id^=0-]").each(function(){
64
+ $(this).attr("id",$(this).attr("id").replace("0-",id+"-"));
65
+ });
66
+ $tr_edit.find("[name^=0-]").each(function(){
67
+ $(this).attr("name",$(this).attr("name").replace("0-",id+"-"));
68
+ });
69
+ update_ids();
70
+ $("#"+id+"-name").focus().select();
71
  });
72
 
73
+ $('#save_and_import').on('click', function () {
74
+ $('#save_to_db').val('true');
75
  });
76
 
77
+ if ( Modernizr !== undefined && Modernizr.input.min && Modernizr.input.max )
78
+ $("#rss_pi-settings-form [type='submit']").on("click",function(e){
79
+ $("[name$='-max_posts']").each(function(){
80
+ var max_posts = {
81
+ val: parseInt($(this).val()),
82
+ min: parseInt($(this).attr("min")),
83
+ max: parseInt($(this).attr("max")),
84
+ id: $(this).attr("id").replace("-max_posts","")
85
+ }
86
+ if ( max_posts.val < max_posts.min || max_posts.val > max_posts.max ) {
87
+ $("#edit_"+max_posts.id).addClass("show");
88
+ $("#display_"+max_posts.id).addClass("show");
89
+ }
90
+ });
91
+ });
92
+
93
+ $('a.load-log').on('click', function () {
94
+ $('#main_ui').hide();
95
+ $('.ajax_content').html('<img src="/wp-admin/images/wpspin_light.gif" alt="" class="loader" />');
96
+ $.ajax({
97
  type: 'POST',
98
  url: rss_pi.ajaxurl,
99
  data: ({
100
  action: 'rss_pi_load_log'
101
  }),
102
  success: function (data) {
103
+ $('.ajax_content').html(data);
104
  }
105
  });
106
  return false;
107
  });
108
 
109
+ $('body').delegate('a.show-main-ui', 'click', function () {
110
+ $('#main_ui').show();
111
+ $('.ajax_content').html('');
112
  return false;
113
  });
114
 
115
+ $('body').delegate('a.clear-log', 'click', function () {
116
+ $.ajax({
117
  type: 'POST',
118
  url: rss_pi.ajaxurl,
119
  data: ({
120
  action: 'rss_pi_clear_log'
121
  }),
122
  success: function (data) {
123
+ $('.log').html(data);
124
  }
125
  });
126
  return false;
127
  });
128
 
129
+ $("#from_date").datepicker();
130
+ $("#till_date").datepicker();
131
 
132
+ if ( $("#rss_pi-stats-placeholder").length ) {
133
  rss_filter_stats = function(form) {
134
  var data = {
135
  action: "rss_pi_stats",
136
+ rss_from_date: $("#from_date").val() || "",
137
+ rss_till_date: $("#till_date").val() || ""
138
  },
139
  $loading = false;
140
+ if (form && $("#submit-rss_filter_stats").length) {
141
+ data.rss_filter_stats = $("#submit-rss_filter_stats").val();
142
  } else {
143
+ $loading = $('<div class="rss_pi_overlay"><img class="rss_pi_loading" src="'+rss_pi.pluginurl+'app/assets/img/loading.gif" /><p>Stats are loading. Please wait...</p></div>').appendTo("#rss_pi-stats-placeholder");
144
  }
145
+ $.ajax({
146
  type: "POST",
147
  url: rss_pi.ajaxurl,
148
  data: data,
149
  success: function (data) {
150
  if ($loading) { $loading.remove(); $loading = false; }
151
+ $("#rss_pi-stats-placeholder").empty().append(data);
152
  drawChart();
153
+ $("#from_date").datepicker();
154
+ $("#till_date").datepicker();
155
+ $("#submit-rss_filter_stats").on("click",function(e){
156
  e.preventDefault();
157
+ $loading = $('<div class="rss_pi_overlay"><img class="rss_pi_loading" src="'+rss_pi.pluginurl+'app/assets/img/loading.gif" /><p>Stats are loading. Please wait...</p></div>').appendTo("#rss_pi-stats-placeholder");
158
  rss_filter_stats(true);
159
  });
160
  }
163
  rss_filter_stats();
164
  }
165
 
166
+ if ( $("#rss_pi_progressbar").length && feeds !== undefined && feeds.count ) {
167
  var import_feed = function(id) {
168
+ $.ajax({
169
  type: 'POST',
170
  url: rss_pi.ajaxurl,
171
  data: {
174
  },
175
  success: function (data) {
176
  var data = data.data || {};
177
+ $("#rss_pi_progressbar").progressbar({
178
  value: feeds.processed()
179
  });
180
+ $("#rss_pi_progressbar_label .processed").text(feeds.processed());
181
  if ( data.count !== undefined ) feeds.imported(data.count);
182
  if (feeds.left()) {
183
+ $("#rss_pi_progressbar_label .count").text(feeds.imported());
184
  import_feed(feeds.get());
185
  } else {
186
+ $("#rss_pi_progressbar_label").html("Import completed. Imported posts: " + feeds.imported());
187
  }
188
  }
189
  });
190
  }
191
+ $("#rss_pi_progressbar").progressbar({
192
  value: 0,
193
  max: feeds.total()
194
  });
195
+ $("#rss_pi_progressbar_label").html("Import in progres. Processed feeds: <span class='processed'>0</span> of <span class='max'>"+feeds.total()+"</span>. Imported posts so far: <span class='count'>0</span>");
196
  import_feed(feeds.get());
197
  }
198
 
199
  });
200
 
201
+ })(jQuery);
202
+
203
  function update_ids() {
204
 
205
+ ids = jQuery("#rss_pi-feed-table > tbody input[name='id']").map(function () {
206
  return jQuery(this).val();
207
  }).get().join();
208
 
211
  }
212
 
213
  var feeds = {
214
+ ids: feeds || [],
215
+ count: feeds && feeds.length ? feeds.length : 0,
 
216
  imported_posts: 0,
217
  set: function(ids){
218
  this.ids = ids;
221
  get: function(){
222
  return this.ids.splice(0,1)[0];
223
  },
 
 
 
224
  left: function(){
225
  return this.ids.length;
226
  },
app/assets/js/modernizr.custom.32882.js ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ /* Modernizr 2.8.3 (Custom Build) | MIT & BSD
2
+ * Build: http://modernizr.com/download/#-input-load
3
+ */
4
+ ;window.Modernizr=function(a,b,c){function t(a){i.cssText=a}function u(a,b){return t(prefixes.join(a+";")+(b||""))}function v(a,b){return typeof a===b}function w(a,b){return!!~(""+a).indexOf(b)}function x(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:v(f,"function")?f.bind(d||b):f}return!1}function y(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)n[c[d]]=c[d]in j;return n.list&&(n.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),n}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" "))}var d="2.8.3",e={},f=b.documentElement,g="modernizr",h=b.createElement(g),i=h.style,j=b.createElement("input"),k={}.toString,l={},m={},n={},o=[],p=o.slice,q,r={}.hasOwnProperty,s;!v(r,"undefined")&&!v(r.call,"undefined")?s=function(a,b){return r.call(a,b)}:s=function(a,b){return b in a&&v(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=p.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(p.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(p.call(arguments)))};return e});for(var z in l)s(l,z)&&(q=z.toLowerCase(),e[q]=l[z](),o.push((e[q]?"":"no-")+q));return e.input||y(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)s(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof enableClasses!="undefined"&&enableClasses&&(f.className+=" "+(b?"":"no-")+a),e[a]=b}return e},t(""),h=j=null,e._version=d,e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
app/assets/js/uniqid.js ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function uniqid(prefix, more_entropy) {
2
+ // discuss at: http://phpjs.org/functions/uniqid/
3
+ // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
4
+ // revised by: Kankrelune (http://www.webfaktory.info/)
5
+ // note: Uses an internal counter (in php_js global) to avoid collision
6
+ // test: skip
7
+ // example 1: uniqid();
8
+ // returns 1: 'a30285b160c14'
9
+ // example 2: uniqid('foo');
10
+ // returns 2: 'fooa30285b1cd361'
11
+ // example 3: uniqid('bar', true);
12
+ // returns 3: 'bara20285b23dfd1.31879087'
13
+
14
+ if (typeof prefix === 'undefined') {
15
+ prefix = '';
16
+ }
17
+
18
+ var retId;
19
+ var formatSeed = function (seed, reqWidth) {
20
+ seed = parseInt(seed, 10)
21
+ .toString(16); // to hex str
22
+ if (reqWidth < seed.length) {
23
+ // so long we split
24
+ return seed.slice(seed.length - reqWidth);
25
+ }
26
+ if (reqWidth > seed.length) {
27
+ // so short we pad
28
+ return Array(1 + (reqWidth - seed.length))
29
+ .join('0') + seed;
30
+ }
31
+ return seed;
32
+ };
33
+
34
+ // BEGIN REDUNDANT
35
+ if (!this.php_js) {
36
+ this.php_js = {};
37
+ }
38
+ // END REDUNDANT
39
+ if (!this.php_js.uniqidSeed) {
40
+ // init seed with big random int
41
+ this.php_js.uniqidSeed = Math.floor(Math.random() * 0x75bcd15);
42
+ }
43
+ this.php_js.uniqidSeed++;
44
+
45
+ // start with prefix, add current milliseconds hex string
46
+ retId = prefix;
47
+ retId += formatSeed(parseInt(new Date()
48
+ .getTime() / 1000, 10), 8);
49
+ // add seed hex string
50
+ retId += formatSeed(this.php_js.uniqidSeed, 5);
51
+ if (more_entropy) {
52
+ // for more entropy we add a float lower to 10
53
+ retId += (Math.random() * 10)
54
+ .toFixed(8)
55
+ .toString();
56
+ }
57
+
58
+ return retId;
59
+ }
app/class-rss-post-importer.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * One class to rule them all
5
  *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
  */
8
  class rssPostImporter {
9
 
@@ -34,6 +34,9 @@ class rssPostImporter {
34
  // populate the options first
35
  $this->load_options();
36
 
 
 
 
37
  // setup this plugin options page link
38
  $this->page_link = admin_url('options-general.php?page=rss_pi');
39
 
@@ -61,6 +64,7 @@ class rssPostImporter {
61
  'keywords' => array(),
62
  'import_images_locally' => false,
63
  'disable_thumbnail' => false,
 
64
  );
65
 
66
  $options = get_option('rss_pi_feeds', array());
@@ -78,6 +82,9 @@ class rssPostImporter {
78
  if (!isset($options['imports'])) {
79
  $options['imports'] = 0;
80
  }
 
 
 
81
 
82
  $options['settings'] = wp_parse_args($options['settings'], $default_settings);
83
 
@@ -88,6 +95,85 @@ class rssPostImporter {
88
  $this->options = $options;
89
  }
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  /**
92
  * Load translations
93
  */
3
  /**
4
  * One class to rule them all
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  class rssPostImporter {
9
 
34
  // populate the options first
35
  $this->load_options();
36
 
37
+ // do any upgrade if needed
38
+ $this->upgrade();
39
+
40
  // setup this plugin options page link
41
  $this->page_link = admin_url('options-general.php?page=rss_pi');
42
 
64
  'keywords' => array(),
65
  'import_images_locally' => false,
66
  'disable_thumbnail' => false,
67
+ 'cache_deleted' => true,
68
  );
69
 
70
  $options = get_option('rss_pi_feeds', array());
82
  if (!isset($options['imports'])) {
83
  $options['imports'] = 0;
84
  }
85
+ if (!isset($options['upgraded'])) {
86
+ $options['upgraded'] = array();
87
+ }
88
 
89
  $options['settings'] = wp_parse_args($options['settings'], $default_settings);
90
 
95
  $this->options = $options;
96
  }
97
 
98
+ /**
99
+ * Upgrade plugin settings
100
+ */
101
+ public function upgrade() {
102
+
103
+ global $wpdb;
104
+ $upgraded = FALSE;
105
+ $bail = FALSE;
106
+
107
+ // migrate to rss_pi_deleted_posts only items from rss_pi_imported_posts that are actually deleted, discard the others
108
+ // do this in iterations so not to degrade the UX
109
+ if ( ! isset($this->options['upgraded']['deleted_posts']) ) {
110
+ // get meta data for "deleted" and "imported" posts
111
+ $rss_pi_deleted_posts = get_option( 'rss_pi_deleted_posts', array() );
112
+ $rss_pi_imported_posts = get_option( 'rss_pi_imported_posts', array() );
113
+ $rss_pi_imported_posts_migrated = get_option( 'rss_pi_imported_posts_migrated', array() );
114
+ // limit execution time (in seconds)
115
+ $_limit = ( ( defined('DOING_CRON') && DOING_CRON ) ? 20 : ( ( defined('DOING_AJAX') && DOING_AJAX ) ? 10 : 3 ) );
116
+ $_start = microtime(TRUE);
117
+ // iterate through all imported posts' source URLs
118
+ foreach ( $rss_pi_imported_posts as $k => $source_url ) {
119
+ // hash the URL for storage
120
+ $source_md5 = md5($source_url);
121
+ // properly format the URL for comparison
122
+ $source_url = esc_url($source_url);
123
+ // skip if we already have "migrated" this item
124
+ if ( in_array( $k, $rss_pi_imported_posts_migrated ) ) {
125
+ continue;
126
+ }
127
+ // skip if we already have "deleted" metadata for this item
128
+ if ( in_array( $source_md5, $rss_pi_deleted_posts ) ) {
129
+ continue;
130
+ }
131
+ $rss_pi_imported_posts_migrated[] = $k;
132
+ // check if there is a post with this source URL
133
+ $post_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = 'rss_pi_source_url' and meta_value = %s", $source_url ) );
134
+ // when there is no such post (it was deleted?)
135
+ if ( ! $post_id ) {
136
+ // add this source URL to "deleted" metadata
137
+ $rss_pi_deleted_posts[] = $source_md5;
138
+ } else {
139
+ // otherwise update the post metadata to include hashed URL
140
+ update_post_meta( $post_id, 'rss_pi_source_md5', $source_md5 );
141
+ }
142
+ // remove it from "imported" metadata
143
+ $_curr = microtime(TRUE);
144
+ if ( $_curr - $_start > $_limit ) {
145
+ // bail out when the "max execution time" limit is exhausted
146
+ $bail = TRUE;
147
+ break;
148
+ }
149
+ }
150
+ // shed any duplicates
151
+ $rss_pi_deleted_posts = array_unique($rss_pi_deleted_posts);
152
+ update_option('rss_pi_deleted_posts', $rss_pi_deleted_posts);
153
+ // keep record of migrated items
154
+ update_option('rss_pi_imported_posts_migrated', $rss_pi_imported_posts_migrated);
155
+ // are there still source URLs in the "imported" metadata?
156
+ if ( count($rss_pi_imported_posts_migrated) < count($rss_pi_imported_posts) ) {
157
+ } else {
158
+ // remove the "imported" metadata from database
159
+ delete_option('rss_pi_imported_posts_migrated');
160
+ delete_option('rss_pi_imported_posts');
161
+ // mark this upgrade as completed
162
+ $this->options['upgraded']['deleted_posts'] = TRUE;
163
+ $upgraded = TRUE;
164
+ }
165
+ }
166
+ // check after each upgrade routine
167
+ if ( $bail ) {
168
+ return;
169
+ }
170
+
171
+ // if there is something to record as an upgrade
172
+ if ( $upgraded ) {
173
+ update_option('rss_pi_feeds', $this->options);
174
+ }
175
+ }
176
+
177
  /**
178
  * Load translations
179
  */
app/classes/admin/class-rss-pi-admin-processor.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Processes the admin screen form submissions
5
  *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
  */
8
  class rssPIAdminProcessor {
9
 
@@ -44,22 +44,19 @@ class rssPIAdminProcessor {
44
  $feeds = $this->process_feeds($ids);
45
 
46
  // import settings
47
- if (isset($_FILES['import_csv']))
48
  $feeds = $this->import_csv($feeds);
 
49
 
50
  // save and reload the options
51
  $this->save_reload_options($settings, $feeds);
52
 
53
- // // check if we need to and import feeds
54
- // $imported = $this->import();
55
-
56
  global $rss_post_importer;
57
 
58
- // wp_redirect(add_query_arg(array('settings-updated'=>'true','imported'=>$imported),$rss_post_importer->page_link));
59
- // wp_redirect(add_query_arg(array('settings-updated'=>'true','import'=>($_POST['save_to_db']=='true')),$rss_post_importer->page_link));
60
  wp_redirect(add_query_arg(
61
  array(
62
  'settings-updated' => 'true',
 
63
  'import' => ( $_POST['save_to_db'] == 'true' ),
64
  'message' => $invalid_api_key ? 2 : 1
65
  ),
@@ -68,6 +65,31 @@ class rssPIAdminProcessor {
68
  exit;
69
  }
70
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  /**
72
  * Import CSV function to import CSV file data into database
73
 
@@ -104,15 +126,21 @@ class rssPIAdminProcessor {
104
 
105
  if (!empty($importdata['feeds'])) {
106
  for ($r = 0; $r < count($importdata['feeds']); $r++) {
107
- $importdata['feeds'][$r]['category_id'] = array(1);
108
- $importdata['feeds'][$r]['tags_id'] = "";
109
- $importdata['feeds'][$r]['keywords'] = "";
110
- $importdata['feeds'][$r]['strip_html'] = "false";
 
 
 
 
 
 
 
111
 
112
  $check_result = $this->check_feed_exist($feeds, $importdata['feeds'][$r]);
113
 
114
  if ($check_result) {
115
-
116
  unset($importdata['feeds'][$r]);
117
  } else {
118
  array_push($feeds, $importdata['feeds'][$r]);
@@ -160,7 +188,9 @@ class rssPIAdminProcessor {
160
  'enable_logging' => $_POST['enable_logging'],
161
  'import_images_locally' => $_POST['import_images_locally'],
162
  'disable_thumbnail' => $_POST['disable_thumbnail'],
163
- 'keywords' => array()
 
 
164
  );
165
 
166
  global $rss_post_importer;
@@ -250,7 +280,8 @@ class rssPIAdminProcessor {
250
  'feeds' => $feeds,
251
  'settings' => $settings,
252
  'latest_import' => $options['latest_import'],
253
- 'imports' => $options['imports']
 
254
  );
255
 
256
  // update in db
@@ -260,25 +291,6 @@ class rssPIAdminProcessor {
260
  $rss_post_importer->load_options();
261
  }
262
 
263
- /**
264
- * Import feeds
265
- *
266
- * @return null
267
- */
268
- private function import() {
269
-
270
- // if we don't need to import anything, bail
271
- if ($_POST['save_to_db'] != 'true') {
272
- return;
273
- }
274
-
275
- // initialise the engine and import
276
- $engine = new rssPIEngine();
277
- $imported = $engine->import_feed();
278
-
279
- return $imported;
280
- }
281
-
282
  /**
283
  * Filter settings for API key vs non-API key installs
284
  *
@@ -308,6 +320,10 @@ class rssPIAdminProcessor {
308
  $keywords = explode(',', $keyword_str);
309
  }
310
  $settings['keywords'] = array_map('trim',$keywords);
 
 
 
 
311
  }
312
 
313
  return $settings;
3
  /**
4
  * Processes the admin screen form submissions
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  class rssPIAdminProcessor {
9
 
44
  $feeds = $this->process_feeds($ids);
45
 
46
  // import settings
47
+ if ( isset($_FILES['import_csv']) && $settings['is_key_valid'] ) {
48
  $feeds = $this->import_csv($feeds);
49
+ }
50
 
51
  // save and reload the options
52
  $this->save_reload_options($settings, $feeds);
53
 
 
 
 
54
  global $rss_post_importer;
55
 
 
 
56
  wp_redirect(add_query_arg(
57
  array(
58
  'settings-updated' => 'true',
59
+ // yield the routine for import feeds via AJAX when needed
60
  'import' => ( $_POST['save_to_db'] == 'true' ),
61
  'message' => $invalid_api_key ? 2 : 1
62
  ),
65
  exit;
66
  }
67
 
68
+ /**
69
+ * Purge "deleted_posts" cache from wp_options
70
+ * @return void
71
+ */
72
+ function purge_deleted_posts_cache() {
73
+
74
+ if (isset($_POST['purge_deleted_cache'])) {
75
+
76
+ delete_option('rss_pi_deleted_posts');
77
+ delete_option('rss_pi_imported_posts');
78
+
79
+ global $rss_post_importer;
80
+
81
+ wp_redirect(add_query_arg(
82
+ array(
83
+ 'deleted_cache_purged' => 'true',
84
+ ),
85
+ $rss_post_importer->page_link
86
+ ));
87
+ exit;
88
+
89
+ }
90
+
91
+ }
92
+
93
  /**
94
  * Import CSV function to import CSV file data into database
95
 
126
 
127
  if (!empty($importdata['feeds'])) {
128
  for ($r = 0; $r < count($importdata['feeds']); $r++) {
129
+ if ( isset($importdata['feeds'][$r]['category_id']) ) {
130
+ $importdata['feeds'][$r]['category_id'] = explode(',',$importdata['feeds'][$r]['category_id']);
131
+ $importdata['feeds'][$r]['tags_id'] = explode(',',$importdata['feeds'][$r]['tags_id']);
132
+ $importdata['feeds'][$r]['keywords'] = explode(',',$importdata['feeds'][$r]['keywords']);
133
+ $importdata['feeds'][$r]['strip_html'] = $importdata['feeds'][$r]['strip_html']; // this is a STRING, not a BOOLEAN
134
+ } else {
135
+ $importdata['feeds'][$r]['category_id'] = array(1);
136
+ $importdata['feeds'][$r]['tags_id'] = "";
137
+ $importdata['feeds'][$r]['keywords'] = "";
138
+ $importdata['feeds'][$r]['strip_html'] = "false";
139
+ }
140
 
141
  $check_result = $this->check_feed_exist($feeds, $importdata['feeds'][$r]);
142
 
143
  if ($check_result) {
 
144
  unset($importdata['feeds'][$r]);
145
  } else {
146
  array_push($feeds, $importdata['feeds'][$r]);
188
  'enable_logging' => $_POST['enable_logging'],
189
  'import_images_locally' => $_POST['import_images_locally'],
190
  'disable_thumbnail' => $_POST['disable_thumbnail'],
191
+ // these values are setup after key_validity check via filter()
192
+ 'keywords' => array(),
193
+ 'cache_deleted' => 'true',
194
  );
195
 
196
  global $rss_post_importer;
280
  'feeds' => $feeds,
281
  'settings' => $settings,
282
  'latest_import' => $options['latest_import'],
283
+ 'imports' => $options['imports'],
284
+ 'upgraded' => $options['upgraded']
285
  );
286
 
287
  // update in db
291
  $rss_post_importer->load_options();
292
  }
293
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
294
  /**
295
  * Filter settings for API key vs non-API key installs
296
  *
320
  $keywords = explode(',', $keyword_str);
321
  }
322
  $settings['keywords'] = array_map('trim',$keywords);
323
+
324
+ // set up "import deleted posts" (otherwise don't)
325
+ $settings['cache_deleted'] = isset($_POST['cache_deleted']) ? $_POST['cache_deleted'] : 'true';
326
+
327
  }
328
 
329
  return $settings;
app/classes/admin/class-rss-pi-admin.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * The class that handles the admin screen
5
  *
6
- * @author saurabhshukla
7
  */
8
  class rssPIAdmin {
9
 
@@ -37,13 +37,8 @@ class rssPIAdmin {
37
  $this->load_options();
38
 
39
  // add a key prompt
40
- // $this->key_prompt = __('You need a <a href="http://www.feedsapi.com/?utm_source=rsspi-full-rss-key-here" target="_blank">Full Text RSS Key</a> to activate this section, please <a href="http://www.feedsapi.com/?utm_source=rsspi-full-rss-key-here" target="_blank">get one and try it free</a> for the next 14 days to see how it goes.', 'rss_pi');
41
  $this->key_prompt = __('%1$sYou need a <a href="%2$s" target="_blank">Full Text RSS Key</a> to activate this section, please <a href="%2$s" target="_blank">get one and try it free</a> for the next 14 days to see how it goes.', 'rss_pi');
42
 
43
- // now OBSOLETE as of 2.0.18
44
- $this->key_prompt_multiple_category = __('Multiple Category selection available.You need a <a href="http://www.feedsapi.com/?utm_source=rsspi-full-rss-key-here" target="_blank">Full Text RSS Key</a> to activate this section, please <a href="http://www.feedsapi.com/?utm_source=rsspi-full-rss-key-here" target="_blank">get one and try it free</a> for the next 14 days to see how it goes.', 'rss_pi');
45
- $this->key_prompt_multiple_tags = __('Multiple Tags selection available.You need a <a href="http://www.feedsapi.com/?utm_source=rsspi-full-rss-key-here" target="_blank">Full Text RSS Key</a> to activate this section, please <a href="http://www.feedsapi.com/?utm_source=rsspi-full-rss-key-here" target="_blank">get one and try it free</a> for the next 14 days to see how it goes.', 'rss_pi');
46
-
47
  // initialise logging
48
  $this->log = new rssPILog();
49
  $this->log->init();
@@ -70,17 +65,18 @@ class rssPIAdmin {
70
  unset($this->options['settings']['feeds_api_key']);
71
  }
72
  // update options
73
- update_option('rss_pi_feeds', array(
74
  'feeds' => $this->options['feeds'],
75
  'settings' => $this->options['settings'],
76
  'latest_import' => $this->options['latest_import'],
77
- 'imports' => $this->options['imports']
78
- ));
 
 
 
79
  } else {
80
  $this->is_key_valid = $this->options['settings']['is_key_valid'];
81
  }
82
- // use our cached key validity
83
- // $this->is_key_valid = isset($this->options['settings']['is_key_valid']) ? $this->options['settings']['is_key_valid'] : false;
84
  }
85
 
86
  /**
@@ -97,6 +93,11 @@ class rssPIAdmin {
97
  // load scripts and styles we need
98
  add_action('admin_enqueue_scripts', array($this, 'enqueue'));
99
 
 
 
 
 
 
100
  // the ajax for adding new feeds (table rows)
101
  add_action('wp_ajax_rss_pi_add_row', array($this, 'add_row'));
102
 
@@ -137,24 +138,49 @@ class rssPIAdmin {
137
  // register scripts & styles
138
  wp_enqueue_style('rss-pi', RSS_PI_URL . 'app/assets/css/style.css', array(), RSS_PI_VERSION);
139
 
140
- // wp_enqueue_style('rss-pi-jquery-ui-css', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/themes/smoothness/jquery-ui.css', false, RSS_PI_VERSION, false);
141
- wp_enqueue_style('rss-pi-jquery-ui-css', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/themes/redmond/jquery-ui.css', false, RSS_PI_VERSION, false);
142
 
143
  wp_enqueue_script('jquery-ui-core');
144
  wp_enqueue_script('jquery-ui-datepicker');
145
- wp_enqueue_script('jquery-ui-core');
146
  wp_enqueue_script('jquery-ui-progressbar');
147
 
148
- wp_enqueue_script('rss-pi', RSS_PI_URL . 'app/assets/js/main.js', array('jquery'), RSS_PI_VERSION);
 
 
149
 
150
  // localise ajaxuel for use
151
  $localise_args = array(
152
  'ajaxurl' => admin_url('admin-ajax.php'),
153
- 'pluginurl' => RSS_PI_URL
 
 
 
154
  );
155
  wp_localize_script('rss-pi', 'rss_pi', $localise_args);
156
  }
157
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  function rss_pi_cron_add($schedules) {
159
 
160
  $schedules['minutes_10'] = array(
@@ -171,6 +197,11 @@ class rssPIAdmin {
171
 
172
  // load the form processor
173
  $this->processor->process();
 
 
 
 
 
174
  }
175
 
176
  /**
@@ -179,10 +210,15 @@ class rssPIAdmin {
179
  function screen() {
180
 
181
  // display a success message
182
- if( isset($_GET['settings-updated']) || isset($_GET['invalid_api_key']) || isset($_GET['import']) && $_GET['settings-updated'] ) {
183
  ?>
184
  <div id="message" class="updated">
185
  <?php
 
 
 
 
 
186
  if( isset($_GET['settings-updated']) && $_GET['settings-updated'] ) {
187
  ?>
188
  <p><strong><?php _e('Settings saved.') ?></strong></p>
@@ -204,13 +240,16 @@ class rssPIAdmin {
204
  <?php
205
  $ids = array();
206
  if ( is_array($this->options['feeds']) ) :
207
- // $ids = array_keys($this->options['feeds'])
208
  foreach ($this->options['feeds'] as $f) :
209
  $ids[] = $f['id'];
210
  endforeach;
211
  endif;
212
  ?>
213
- feeds.set(<?php echo json_encode($ids); ?>);
 
 
 
 
214
  </script>
215
  <?php
216
  }
@@ -235,9 +274,6 @@ feeds.set(<?php echo json_encode($ids); ?>);
235
  <?php
236
  }
237
 
238
- // load the form processor first
239
- // $this->processor->process();
240
-
241
  // it'll process any submitted form data
242
  // reload the options just in case
243
  $this->load_options();
@@ -285,12 +321,6 @@ feeds.set(<?php echo json_encode($ids); ?>);
285
  function ajax_import() {
286
  global $rss_post_importer;
287
 
288
- // $imported = $this->processor->import();
289
- // wp_send_json_success(array('imported'=>$imported));
290
-
291
- // $engine = new rssPIEngine();
292
- // $imported = $engine->import_feed();
293
-
294
  // if there's nothing for processing or invalid data, bail
295
  if ( ! isset($_POST['feed']) ) {
296
  wp_send_json_error(array('message'=>'no feed provided'));
@@ -318,12 +348,15 @@ feeds.set(<?php echo json_encode($ids); ?>);
318
  unset($this->options['settings']['feeds_api_key']);
319
  }
320
  // update options
321
- update_option('rss_pi_feeds', array(
322
  'feeds' => $this->options['feeds'],
323
  'settings' => $this->options['settings'],
324
  'latest_import' => $this->options['latest_import'],
325
- 'imports' => $this->options['imports']
326
- ));
 
 
 
327
  }
328
 
329
  $post_count = 0;
@@ -335,7 +368,8 @@ feeds.set(<?php echo json_encode($ids); ?>);
335
  // filter cache lifetime
336
  add_filter('wp_feed_cache_transient_lifetime', array($engine, 'frequency'));
337
 
338
- if ( $items = $engine->prepare_import($f) ) {
 
339
  $post_count += count($items);
340
  }
341
 
@@ -345,12 +379,15 @@ feeds.set(<?php echo json_encode($ids); ?>);
345
  $imports = intval($this->options['imports']) + $post_count;
346
 
347
  // update options
348
- update_option('rss_pi_feeds', array(
349
  'feeds' => $this->options['feeds'],
350
  'settings' => $this->options['settings'],
351
  'latest_import' => date("Y-m-d H:i:s"),
352
- 'imports' => $imports
353
- ));
 
 
 
354
 
355
  global $rss_post_importer;
356
  // reload options
3
  /**
4
  * The class that handles the admin screen
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  class rssPIAdmin {
9
 
37
  $this->load_options();
38
 
39
  // add a key prompt
 
40
  $this->key_prompt = __('%1$sYou need a <a href="%2$s" target="_blank">Full Text RSS Key</a> to activate this section, please <a href="%2$s" target="_blank">get one and try it free</a> for the next 14 days to see how it goes.', 'rss_pi');
41
 
 
 
 
 
42
  // initialise logging
43
  $this->log = new rssPILog();
44
  $this->log->init();
65
  unset($this->options['settings']['feeds_api_key']);
66
  }
67
  // update options
68
+ $new_options = array(
69
  'feeds' => $this->options['feeds'],
70
  'settings' => $this->options['settings'],
71
  'latest_import' => $this->options['latest_import'],
72
+ 'imports' => $this->options['imports'],
73
+ 'upgraded' => $this->options['upgraded']
74
+ );
75
+ // update in db
76
+ update_option('rss_pi_feeds', $new_options);
77
  } else {
78
  $this->is_key_valid = $this->options['settings']['is_key_valid'];
79
  }
 
 
80
  }
81
 
82
  /**
93
  // load scripts and styles we need
94
  add_action('admin_enqueue_scripts', array($this, 'enqueue'));
95
 
96
+ // manage meta data on post deletion and restoring
97
+ add_action('wp_trash_post', array($this, 'delete_post')); // trashing a post
98
+ add_action('before_delete_post', array($this, 'delete_post')); // deleting a post permanently
99
+ add_action('untrash_post', array($this, 'restore_post')); // restoring a post from trash
100
+
101
  // the ajax for adding new feeds (table rows)
102
  add_action('wp_ajax_rss_pi_add_row', array($this, 'add_row'));
103
 
138
  // register scripts & styles
139
  wp_enqueue_style('rss-pi', RSS_PI_URL . 'app/assets/css/style.css', array(), RSS_PI_VERSION);
140
 
141
+ wp_enqueue_style('rss-pi-jquery-ui-css', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/themes/redmond/jquery-ui.css', array(), RSS_PI_VERSION);
 
142
 
143
  wp_enqueue_script('jquery-ui-core');
144
  wp_enqueue_script('jquery-ui-datepicker');
 
145
  wp_enqueue_script('jquery-ui-progressbar');
146
 
147
+ wp_enqueue_script('modernizr', RSS_PI_URL . 'app/assets/js/modernizr.custom.32882.js', array(), RSS_PI_VERSION, true);
148
+ wp_enqueue_script('phpjs-uniqid', RSS_PI_URL . 'app/assets/js/uniqid.js', array(), RSS_PI_VERSION, true);
149
+ wp_enqueue_script('rss-pi', RSS_PI_URL . 'app/assets/js/main.js', array('jquery'), RSS_PI_VERSION, true);
150
 
151
  // localise ajaxuel for use
152
  $localise_args = array(
153
  'ajaxurl' => admin_url('admin-ajax.php'),
154
+ 'pluginurl' => RSS_PI_URL,
155
+ 'l18n' => array(
156
+ 'unsaved' => __( 'You have unsaved changes on this page. Do you want to leave this page and discard your changes or stay on this page?', 'rss_pi' )
157
+ )
158
  );
159
  wp_localize_script('rss-pi', 'rss_pi', $localise_args);
160
  }
161
 
162
+ // add post URL to rss_pi_deleted_posts when trashing
163
+ function delete_post($post_id) {
164
+ $rss_pi_deleted_posts = get_option( 'rss_pi_deleted_posts', array() );
165
+ $source_md5 = get_post_meta($post_id, 'rss_pi_source_md5', true);
166
+ if ( $source_md5 && ! in_array( $source_md5, $rss_pi_deleted_posts ) ) {
167
+ // add this source URL hash to the "deleted" metadata
168
+ $rss_pi_deleted_posts[] = $source_md5;
169
+ update_option('rss_pi_deleted_posts', $rss_pi_deleted_posts);
170
+ }
171
+ }
172
+
173
+ // remove post URL from rss_pi_deleted_posts when restoring from trash
174
+ function restore_post($post_id) {
175
+ $rss_pi_deleted_posts = get_option( 'rss_pi_deleted_posts', array() );
176
+ $source_md5 = get_post_meta($post_id, 'rss_pi_source_md5', true);
177
+ if ( $source_md5 && in_array( $source_md5, $rss_pi_deleted_posts ) ) {
178
+ // remove this source URL hash from the "deleted" metadata
179
+ $rss_pi_deleted_posts = array_diff( $rss_pi_deleted_posts, array( $source_md5 ) );
180
+ update_option('rss_pi_deleted_posts', $rss_pi_deleted_posts);
181
+ }
182
+ }
183
+
184
  function rss_pi_cron_add($schedules) {
185
 
186
  $schedules['minutes_10'] = array(
197
 
198
  // load the form processor
199
  $this->processor->process();
200
+
201
+ if ( $this->is_key_valid ) {
202
+ // purge "deleted posts" cache when requested
203
+ $this->processor->purge_deleted_posts_cache();
204
+ }
205
  }
206
 
207
  /**
210
  function screen() {
211
 
212
  // display a success message
213
+ if( isset($_GET['deleted_cache_purged']) || isset($_GET['settings-updated']) || isset($_GET['invalid_api_key']) || isset($_GET['import']) && $_GET['settings-updated'] ) {
214
  ?>
215
  <div id="message" class="updated">
216
  <?php
217
+ if( isset($_GET['deleted_cache_purged']) && $_GET['deleted_cache_purged'] == 'true' ) {
218
+ ?>
219
+ <p><strong><?php _e('Cache for Deleted posts was purged.') ?></strong></p>
220
+ <?php
221
+ }
222
  if( isset($_GET['settings-updated']) && $_GET['settings-updated'] ) {
223
  ?>
224
  <p><strong><?php _e('Settings saved.') ?></strong></p>
240
  <?php
241
  $ids = array();
242
  if ( is_array($this->options['feeds']) ) :
 
243
  foreach ($this->options['feeds'] as $f) :
244
  $ids[] = $f['id'];
245
  endforeach;
246
  endif;
247
  ?>
248
+ if (feeds !== undefined) {
249
+ feeds.set(<?php echo json_encode($ids); ?>);
250
+ } else {
251
+ var feeds = <?php echo json_encode($ids); ?>;
252
+ }
253
  </script>
254
  <?php
255
  }
274
  <?php
275
  }
276
 
 
 
 
277
  // it'll process any submitted form data
278
  // reload the options just in case
279
  $this->load_options();
321
  function ajax_import() {
322
  global $rss_post_importer;
323
 
 
 
 
 
 
 
324
  // if there's nothing for processing or invalid data, bail
325
  if ( ! isset($_POST['feed']) ) {
326
  wp_send_json_error(array('message'=>'no feed provided'));
348
  unset($this->options['settings']['feeds_api_key']);
349
  }
350
  // update options
351
+ $new_options = array(
352
  'feeds' => $this->options['feeds'],
353
  'settings' => $this->options['settings'],
354
  'latest_import' => $this->options['latest_import'],
355
+ 'imports' => $this->options['imports'],
356
+ 'upgraded' => $this->options['upgraded']
357
+ );
358
+ // update in db
359
+ update_option('rss_pi_feeds', $new_options);
360
  }
361
 
362
  $post_count = 0;
368
  // filter cache lifetime
369
  add_filter('wp_feed_cache_transient_lifetime', array($engine, 'frequency'));
370
 
371
+ // prepare, import feed and count imported posts
372
+ if ( $items = $engine->do_import($f) ) {
373
  $post_count += count($items);
374
  }
375
 
379
  $imports = intval($this->options['imports']) + $post_count;
380
 
381
  // update options
382
+ $new_options = array(
383
  'feeds' => $this->options['feeds'],
384
  'settings' => $this->options['settings'],
385
  'latest_import' => date("Y-m-d H:i:s"),
386
+ 'imports' => $imports,
387
+ 'upgraded' => $this->options['upgraded']
388
+ );
389
+ // update in db
390
+ update_option('rss_pi_feeds', $new_options);
391
 
392
  global $rss_post_importer;
393
  // reload options
app/classes/admin/class-rss-pi-export-to-csv.php CHANGED
@@ -11,17 +11,22 @@ function array2csv(array &$array) {
11
  }
12
  ob_start();
13
  $df = fopen("php://output", 'w');
14
- $arrayhead = array_keys(reset($array));
15
- $exclude_data = array('id', 'category_id', 'tags_id', 'strip_html');
16
- $arrayhead = array_diff($arrayhead, array('id', 'category_id', 'tags_id', 'strip_html'));
 
 
 
17
 
18
  fputcsv($df, $arrayhead);
19
 
20
- foreach ($array as $row) {
21
- unset($row['id']);
22
- unset($row['category_id']);
23
- unset($row['tags_id']);
24
- unset($row['strip_html']);
 
 
25
  fputcsv($df, $row);
26
  }
27
  fclose($df);
@@ -47,7 +52,7 @@ function download_send_headers($filename) {
47
  header("Content-Transfer-Encoding: binary");
48
  }
49
 
50
- if (isset($_POST['csv_download'])) {
51
 
52
  download_send_headers("data_export_" . date("Y-m-d") . ".csv");
53
  echo array2csv($options['feeds']);
11
  }
12
  ob_start();
13
  $df = fopen("php://output", 'w');
14
+ reset($array);
15
+ $arrayhead = array_keys($array[0]);
16
+ $include_data = array( 'url', 'name', 'max_posts', 'author_id', 'strip_html' );
17
+ $include_data_arrays = array( 'category_id', 'tags_id', 'keywords' );
18
+ $include_data = array_merge( $include_data, $include_data_arrays );
19
+ $arrayhead = array_intersect( $arrayhead, $include_data );
20
 
21
  fputcsv($df, $arrayhead);
22
 
23
+ foreach ( $array as $row ) {
24
+ $row = array_intersect_key( $row, array_flip($include_data) );
25
+ foreach ( $row as $key => $value ) {
26
+ if ( in_array( $key, $include_data_arrays ) ) {
27
+ $row[$key] = implode(',',$value);
28
+ }
29
+ }
30
  fputcsv($df, $row);
31
  }
32
  fclose($df);
52
  header("Content-Transfer-Encoding: binary");
53
  }
54
 
55
+ if ( isset($_POST['csv_download']) && $options['settings']['is_key_valid'] ) {
56
 
57
  download_send_headers("data_export_" . date("Y-m-d") . ".csv");
58
  echo array2csv($options['feeds']);
app/classes/admin/class-rss-pi-stats.php CHANGED
@@ -1,8 +1,9 @@
1
  <?php
2
- /*
 
3
  * Calculates and shows graphical stats
4
  *
5
- * @author Pramod Jodhani<mrpramodjodhani@gmail.com>
6
  */
7
  if (!class_exists("Rss_pi_stats")) {
8
 
@@ -17,6 +18,9 @@ if (!class_exists("Rss_pi_stats")) {
17
  // echo 'No Stats';
18
  ?>
19
  <div class="rss_pi_stat_message">Sorry, there are no imported posts to show stats for.</div>
 
 
 
20
  <?php
21
  return;
22
  }
@@ -271,7 +275,6 @@ function drawChart() {};
271
 
272
  function draw_pie_chart_js($pie_feeds_data, $feeds) {
273
 
274
- //$data_pie = get_pie_data();
275
  ?>
276
  var data_pie_chart = google.visualization.arrayToDataTable([
277
  <?php
@@ -308,7 +311,6 @@ function drawChart() {};
308
 
309
  $data = array();
310
 
311
- //pre($feeds); exit;
312
  foreach ($feeds["feeds"] as $feed) {
313
 
314
  $data[$feed["name"]] = 0;
@@ -421,8 +423,8 @@ function drawChart() {};
421
  <div class="rss_pi_stats_date">
422
  <div class="rss_filter_heading">Filter results:</div>
423
  <hr>
424
- <label>From: <input type="text" id="from_date" name="rss_from_date" value=<?php echo (isset($_POST["rss_from_date"])) ? $_POST["rss_from_date"] : ""; ?> /> </label>
425
- <label>Till: <input type="text" id="till_date" name="rss_till_date" value=<?php echo (isset($_POST["rss_till_date"])) ? $_POST["rss_till_date"] : ""; ?> /> </label>
426
  <input type="submit" id="submit-rss_filter_stats" name="rss_filter_stats" class="button button-primary button-large " value="Filter">
427
  <br>
428
  </div>
1
  <?php
2
+
3
+ /**
4
  * Calculates and shows graphical stats
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  if (!class_exists("Rss_pi_stats")) {
9
 
18
  // echo 'No Stats';
19
  ?>
20
  <div class="rss_pi_stat_message">Sorry, there are no imported posts to show stats for.</div>
21
+ <script type="text/javascript">
22
+ function drawChart() {}
23
+ </script>
24
  <?php
25
  return;
26
  }
275
 
276
  function draw_pie_chart_js($pie_feeds_data, $feeds) {
277
 
 
278
  ?>
279
  var data_pie_chart = google.visualization.arrayToDataTable([
280
  <?php
311
 
312
  $data = array();
313
 
 
314
  foreach ($feeds["feeds"] as $feed) {
315
 
316
  $data[$feed["name"]] = 0;
423
  <div class="rss_pi_stats_date">
424
  <div class="rss_filter_heading">Filter results:</div>
425
  <hr>
426
+ <label>From: <input type="text" id="from_date" name="rss_from_date" value="<?php echo (isset($_POST["rss_from_date"])) ? $_POST["rss_from_date"] : ""; ?>" /> </label>
427
+ <label>Till: <input type="text" id="till_date" name="rss_till_date" value="<?php echo (isset($_POST["rss_till_date"])) ? $_POST["rss_till_date"] : ""; ?>" /> </label>
428
  <input type="submit" id="submit-rss_filter_stats" name="rss_filter_stats" class="button button-primary button-large " value="Filter">
429
  <br>
430
  </div>
app/classes/front/class-rss-pi-front.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * The class that handles the front screen
5
  *
6
- *
7
  */
8
  class rssPIFront {
9
 
3
  /**
4
  * The class that handles the front screen
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  class rssPIFront {
9
 
app/classes/helpers/class-rss-pi-featured-image.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Sets a featured image
5
  *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
  */
8
  if (!function_exists('download_url')) {
9
  require_once(ABSPATH . '/wp-admin/includes/file.php');
@@ -46,17 +46,17 @@ class rssPIFeaturedImage {
46
 
47
  if (empty($baseref)) {
48
  return false;
49
- };
50
 
51
  $bc = parse_url($baseref);
52
- $scheme = (empty($bc["scheme"])) ? "http" : $bc["scheme"];
53
- $port = $bc["port"];
54
  $host = $bc["host"];
 
55
  if (empty($host)) {
56
  return false;
57
- };
58
 
59
- $img_url = $scheme . ":" . $port . "//" . $host . $img_url;
60
  }
61
 
62
  // get the first image from content
@@ -101,7 +101,7 @@ class rssPIFeaturedImage {
101
  $file_array['name'] = basename($file);
102
 
103
  // Download file to temp location.
104
- $file_array['tmp_name'] = download_url($file);
105
 
106
  // If error storing temporarily, return the error.
107
  if (is_wp_error($file_array['tmp_name'])) {
3
  /**
4
  * Sets a featured image
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  if (!function_exists('download_url')) {
9
  require_once(ABSPATH . '/wp-admin/includes/file.php');
46
 
47
  if (empty($baseref)) {
48
  return false;
49
+ }
50
 
51
  $bc = parse_url($baseref);
52
+ $scheme = (!isset($bc["scheme"]) || empty($bc["scheme"])) ? 'http' : $bc["scheme"];
 
53
  $host = $bc["host"];
54
+ $port = (isset($bc["port"]) && empty($bc["port"])) ? ':' . $bc["port"] : '';
55
  if (empty($host)) {
56
  return false;
57
+ }
58
 
59
+ $img_url = $scheme . '://' . $host . $port . $img_url;
60
  }
61
 
62
  // get the first image from content
101
  $file_array['name'] = basename($file);
102
 
103
  // Download file to temp location.
104
+ $file_array['tmp_name'] = @download_url($file);
105
 
106
  // If error storing temporarily, return the error.
107
  if (is_wp_error($file_array['tmp_name'])) {
app/classes/helpers/class-rss-pi-log.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Manipulates log files
5
  *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
  */
8
  class rssPILog {
9
 
3
  /**
4
  * Manipulates log files
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  class rssPILog {
9
 
app/classes/helpers/class-rss-pi-parser.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Parses content according to settings
5
  *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
  */
8
  class rssPIParser {
9
 
3
  /**
4
  * Parses content according to settings
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  class rssPIParser {
9
 
app/classes/helpers/rss-pi-functions.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Fallback Functions
5
+ *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
+ */
8
+
9
+ /*
10
+ * array_intersect_key for PHP earlier than 5.1.0
11
+ */
12
+ if (!function_exists('array_intersect_key'))
13
+ {
14
+ function array_intersect_key ($isec, $arr2)
15
+ {
16
+ $argc = func_num_args();
17
+
18
+ for ($i = 1; !empty($isec) && $i < $argc; $i++)
19
+ {
20
+ $arr = func_get_arg($i);
21
+
22
+ foreach ($isec as $k => $v)
23
+ if (!isset($arr[$k]))
24
+ unset($isec[$k]);
25
+ }
26
+
27
+ return $isec;
28
+ }
29
+ }
app/classes/import/class-rss-pi-cron.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Handles cron jobs
5
  *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
  */
8
  class rssPICron {
9
 
3
  /**
4
  * Handles cron jobs
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  class rssPICron {
9
 
app/classes/import/class-rss-pi-engine.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Main import engine
5
  *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
  */
8
  class rssPIEngine {
9
 
@@ -59,17 +59,21 @@ class rssPIEngine {
59
  unset($this->options['settings']['feeds_api_key']);
60
  }
61
  // update options
62
- update_option('rss_pi_feeds', array(
63
  'feeds' => $this->options['feeds'],
64
  'settings' => $this->options['settings'],
65
  'latest_import' => $this->options['latest_import'],
66
- 'imports' => $this->options['imports']
67
- ));
 
 
 
68
  }
69
 
70
- // prepare and import each feed
71
- $items = $this->prepare_import($f);
72
- $post_count += count($items);
 
73
  }
74
 
75
  // reformulate import count
@@ -110,7 +114,7 @@ class rssPIEngine {
110
  * @param array $f feed array
111
  * @return array
112
  */
113
- public function prepare_import($f) {
114
 
115
  $args = array(
116
  'feed_title' => $f['name'],
@@ -160,6 +164,10 @@ class rssPIEngine {
160
  // fetch the feed
161
  $feed = fetch_feed($url);
162
 
 
 
 
 
163
  // save as posts
164
  $posts = $this->save($feed, $args);
165
 
@@ -196,9 +204,6 @@ class rssPIEngine {
196
  */
197
  private function save($feed, $args = array()) {
198
 
199
- if (is_wp_error($feed)) {
200
- return false;
201
- }
202
  // filter the feed and get feed items
203
  $feed_items = $this->filter($feed, $args);
204
 
@@ -405,32 +410,56 @@ class rssPIEngine {
405
 
406
  global $wpdb;
407
  $permalink = $item->get_permalink();
408
- $title = $item->get_title();
409
- $domain_old = $this->get_domain($item->get_permalink());
410
-
411
- $post_exists = 0;
412
- //checking if post title already exists
413
- if ($posts = $wpdb->get_results("SELECT ID FROM " . $wpdb->prefix . "posts WHERE post_title = '" . $title . "' and post_status = 'publish' ", 'ARRAY_A')) {
414
- //checking if post source is also same
415
- foreach ($posts as $post) {
416
- $post_id = $post['ID'];
417
- $source_url = get_post_meta($post_id, 'rss_pi_source_url', true);
418
- $domain_new = $this->get_domain($source_url);
419
-
420
- if ($domain_new == $domain_old) {
421
- $post_exists = 1;
 
 
 
 
 
 
 
 
 
 
 
422
  }
423
  }
424
  }
425
- //check if the post has already been imported and then deleted
426
- $rss_pi_imported_posts = get_option('rss_pi_imported_posts');
427
- if (is_array($rss_pi_imported_posts) && in_array($permalink, $rss_pi_imported_posts)) {
428
- $post_exists = 1;
 
 
 
 
 
 
 
 
 
 
 
 
429
  }
430
 
431
  return $post_exists;
432
  }
433
 
 
434
  private function get_domain($url) {
435
 
436
  $pieces = parse_url($url);
@@ -465,15 +494,9 @@ class rssPIEngine {
465
 
466
  add_action('save_rss_pi_post', $post_id);
467
 
468
- add_post_meta($post_id, 'rss_pi_source_url', esc_url($url));
469
-
470
- //saving each post URL in option table
471
- $rss_pi_imported_posts = get_option('rss_pi_imported_posts');
472
- if (!is_array($rss_pi_imported_posts)) {
473
- $rss_pi_imported_posts = array();
474
- }
475
- $rss_pi_imported_posts[] = $url;
476
- update_option('rss_pi_imported_posts', $rss_pi_imported_posts);
477
 
478
  return $post_id;
479
  }
3
  /**
4
  * Main import engine
5
  *
6
+ * @author mobilova UG (haftungsbeschränkt) <rsspostimporter@feedsapi.com>
7
  */
8
  class rssPIEngine {
9
 
59
  unset($this->options['settings']['feeds_api_key']);
60
  }
61
  // update options
62
+ $new_options = array(
63
  'feeds' => $this->options['feeds'],
64
  'settings' => $this->options['settings'],
65
  'latest_import' => $this->options['latest_import'],
66
+ 'imports' => $this->options['imports'],
67
+ 'upgraded' => $this->options['upgraded']
68
+ );
69
+ // update in db
70
+ update_option('rss_pi_feeds', $new_options);
71
  }
72
 
73
+ // prepare, import feed and count imported posts
74
+ if ( $items = $this->do_import($f) ) {
75
+ $post_count += count($items);
76
+ }
77
  }
78
 
79
  // reformulate import count
114
  * @param array $f feed array
115
  * @return array
116
  */
117
+ public function do_import($f) {
118
 
119
  $args = array(
120
  'feed_title' => $f['name'],
164
  // fetch the feed
165
  $feed = fetch_feed($url);
166
 
167
+ if (is_wp_error($feed)) {
168
+ return false;
169
+ }
170
+
171
  // save as posts
172
  $posts = $this->save($feed, $args);
173
 
204
  */
205
  private function save($feed, $args = array()) {
206
 
 
 
 
207
  // filter the feed and get feed items
208
  $feed_items = $this->filter($feed, $args);
209
 
410
 
411
  global $wpdb;
412
  $permalink = $item->get_permalink();
413
+ $permalink_md5 = md5($permalink);
414
+ $post_exists = FALSE;
415
+
416
+ if ( isset($this->options['upgraded']['deleted_posts']) ) { // database migrated
417
+ // check if there is a post with this source URL
418
+ $posts = $wpdb->get_results( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->postmeta} WHERE meta_key = 'rss_pi_source_md5' and meta_value = %s", $permalink_md5 ), 'ARRAY_A');
419
+ if ( count($posts) ) {
420
+ $post_exists = TRUE;
421
+ }
422
+ } else {
423
+ // do it the old fashion way
424
+ $title = $item->get_title();
425
+ $domain_old = $this->get_domain($permalink);
426
+
427
+ //checking if post title already exists
428
+ if ($posts = $wpdb->get_results("SELECT ID FROM " . $wpdb->prefix . "posts WHERE post_title = '" . $title . "' and post_status = 'publish' ", 'ARRAY_A')) {
429
+ //checking if post source is also same
430
+ foreach ($posts as $post) {
431
+ $post_id = $post['ID'];
432
+ $source_url = get_post_meta($post_id, 'rss_pi_source_url', true);
433
+ $domain_new = $this->get_domain($source_url);
434
+
435
+ if ($domain_new == $domain_old) {
436
+ $post_exists = TRUE;
437
+ }
438
  }
439
  }
440
  }
441
+
442
+ if ( ! $post_exists && $this->options['settings']['cache_deleted'] == 'true' ) {
443
+
444
+ // check if the post has been imported and then deleted
445
+ if ( $this->options['upgraded']['deleted_posts'] ) { // database migrated
446
+ $rss_pi_deleted_posts = get_option( 'rss_pi_deleted_posts', array() );
447
+ if ( in_array( $permalink_md5, $rss_pi_deleted_posts ) ) {
448
+ $post_exists = TRUE;
449
+ }
450
+ } else {
451
+ //do it the old fashion way
452
+ $rss_pi_imported_posts = get_option( 'rss_pi_imported_posts', array() );
453
+ if ( in_array( $permalink, $rss_pi_imported_posts ) ) {
454
+ $post_exists = TRUE;
455
+ }
456
+ }
457
  }
458
 
459
  return $post_exists;
460
  }
461
 
462
+ // deprecated as of 2.1.2
463
  private function get_domain($url) {
464
 
465
  $pieces = parse_url($url);
494
 
495
  add_action('save_rss_pi_post', $post_id);
496
 
497
+ $url_md5 = md5($url);
498
+ update_post_meta($post_id, 'rss_pi_source_url', esc_url($url));
499
+ update_post_meta($post_id, 'rss_pi_source_md5', $url_md5);
 
 
 
 
 
 
500
 
501
  return $post_id;
502
  }
app/templates/admin-ui.php CHANGED
@@ -6,7 +6,7 @@
6
  <div id="rss_pi_progressbar"></div>
7
  <div id="rss_pi_progressbar_label"></div>
8
 
9
- <form method="post" id="" enctype="multipart/form-data" action="<?php echo $rss_post_importer->page_link; ?>">
10
 
11
  <input type="hidden" name="save_to_db" id="save_to_db" />
12
 
6
  <div id="rss_pi_progressbar"></div>
7
  <div id="rss_pi_progressbar_label"></div>
8
 
9
+ <form method="post" id="rss_pi-settings-form" enctype="multipart/form-data" action="<?php echo $rss_post_importer->page_link; ?>">
10
 
11
  <input type="hidden" name="save_to_db" id="save_to_db" />
12
 
app/templates/feed-save-box.php CHANGED
@@ -1,77 +1,80 @@
1
- <div class="postbox">
2
- <div class="inside">
3
- <div class="misc-pub-section">
4
- <h3 class="version">V. <?php echo RSS_PI_VERSION; ?></h3>
5
- <ul>
6
- <li>
7
- <i class="icon-calendar"></i> <?php _e("Latest import:", 'rss_pi'); ?> <strong><?php echo $this->options['latest_import'] ? $this->options['latest_import'] : 'never' ; ?></strong>
8
- </li>
9
- <li><i class="icon-eye-open"></i> <a href="#" class="load-log"><?php _e("View the log", 'rss_pi'); ?></a></li>
10
- </ul>
11
- </div>
12
- <div id="major-publishing-actions">
13
- <input class="button button-primary button-large right" type="submit" name="info_update" value="<?php _e('Save', 'rss_pi'); ?>" />
14
- <input class="button button-large" type="submit" name="info_update" value="<?php _e('Save and import', "rss_pi"); ?>" id="save_and_import" />
15
- </div>
16
- </div>
17
- </div>
18
- <?php if ($this->options['imports'] > 10) : ?>
19
- <div class="rate-box">
20
- <h4><?php printf(__('%d posts imported and counting!', "rss_pi"), $this->options['imports']); ?></h4>
21
- <i class="icon-star"></i>
22
- <i class="icon-star"></i>
23
- <i class="icon-star"></i>
24
- <i class="icon-star"></i>
25
- <i class="icon-star"></i>
26
- <p class="description"><a href="http://wordpress.org/plugins/rss-post-importer/" target="_blank">Please support this plugin by rating it!</a></p>
27
- </div>
28
- <?php endif; ?>
29
-
30
- <?php $banner_url = RSS_PI_URL . "app/assets/img/rss-post-importer_280x600.jpg"; ?>
31
- <a target="_blank" href="http://www.feedsapi.com/?utm=rsspostimporter_banner">
32
- <img class='rss_pi_banner_img' src="<?php echo $banner_url; ?>" />
33
- </a>
34
- <!--Start of Zopim Live Chat Script-->
35
- <script type="text/javascript">
36
- window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s=
37
- d.createElement(s),e=d.getElementsByTagName(s)[0];z.set=function(o){z.set.
38
- _.push(o)};z._=[];z.set._=[];$.async=!0;$.setAttribute('charset','utf-8');
39
- $.src='//v2.zopim.com/?1JkI9crULWPOzNzvAJ6SYbeghH5FjhVV';z.t=+new Date;$.
40
- type='text/javascript';e.parentNode.insertBefore($,e)})(document,'script');
41
- </script>
42
- <!--End of Zopim Live Chat Script-->
43
-
44
- <!--Start of Feedback Box-->
45
- <!--
46
- <script src="http://www.jotform.com/min/?g=feedback2" type="text/javascript"></script>
47
- <script type="text/javascript">
48
- new JotformFeedback({
49
- formId : "50873505454962",
50
- buttonText : "Get Help!",
51
- windowTitle : "Mark up the screenshot to describe a problem or suggestion",
52
- base : "http://jotformpro.com/",
53
- background : "#F59202",
54
- fontColor : "#FFFFFF",
55
- buttonSide : "bottom",
56
- buttonAlign : "right",
57
- type : false,
58
- width : 280,
59
- height : 420,
60
- instant : true
61
- });
62
- </script> -->
63
- <!--End of Feedback Box-->
64
-
65
- <!--Perfect Audience Start-->
66
- <script type="text/javascript">
67
- (function() {
68
- window._pa = window._pa || {};
69
- // _pa.orderId = "myOrderId"; // OPTIONAL: attach unique conversion identifier to conversions
70
- // _pa.revenue = "19.99"; // OPTIONAL: attach dynamic purchase values to conversions
71
- // _pa.productId = "myProductId"; // OPTIONAL: Include product ID for use with dynamic ads
72
- var pa = document.createElement('script'); pa.type = 'text/javascript'; pa.async = true;
73
- pa.src = ('https:' == document.location.protocol ? 'https:' : 'http:') + "//tag.perfectaudience.com/serve/52c8aa7b965728ddac000007.js";
74
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(pa, s);
75
- })();
76
- </script>
 
 
 
77
  <!--Perfect Audience End-->
1
+ <div class="postbox">
2
+ <div class="inside">
3
+ <div class="misc-pub-section">
4
+ <h3 class="version">V. <?php echo RSS_PI_VERSION; ?></h3>
5
+ <ul>
6
+ <li>
7
+ <i class="icon-calendar"></i> <?php _e("Latest import:", 'rss_pi'); ?> <strong><?php echo $this->options['latest_import'] ? $this->options['latest_import'] : 'never' ; ?></strong>
8
+ </li>
9
+ <li><i class="icon-eye-open"></i> <a href="#" class="load-log"><?php _e("View the log", 'rss_pi'); ?></a></li>
10
+ </ul>
11
+ </div>
12
+ <div id="major-publishing-actions">
13
+ <input class="button button-primary button-large right" type="submit" name="info_update" value="<?php _e('Save', 'rss_pi'); ?>" />
14
+ <input class="button button-large" type="submit" name="info_update" value="<?php _e('Save and import', "rss_pi"); ?>" id="save_and_import" />
15
+ </div>
16
+ </div>
17
+ </div>
18
+ <?php if ($this->options['imports'] > 10) : ?>
19
+ <div class="rate-box">
20
+ <h4><?php printf(__('%d posts imported and counting!', "rss_pi"), $this->options['imports']); ?></h4>
21
+ <i class="icon-star"></i>
22
+ <i class="icon-star"></i>
23
+ <i class="icon-star"></i>
24
+ <i class="icon-star"></i>
25
+ <i class="icon-star"></i>
26
+ <p class="description"><a href="http://wordpress.org/plugins/rss-post-importer/" target="_blank">Please support this plugin by rating it!</a></p>
27
+ </div>
28
+ <?php endif; ?>
29
+
30
+ <?php if (!$this->is_key_valid) : ?>
31
+ <?php $banner_url = RSS_PI_URL . "app/assets/img/rss-post-importer_280x600.jpg"; ?>
32
+ <a target="_blank" href="http://www.feedsapi.com/?utm=rsspostimporter_banner">
33
+ <img class='rss_pi_banner_img' src="<?php echo $banner_url; ?>" />
34
+ </a>
35
+ <?php endif; ?>
36
+
37
+ <!--Start of Zopim Live Chat Script-->
38
+ <script type="text/javascript">
39
+ window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s=
40
+ d.createElement(s),e=d.getElementsByTagName(s)[0];z.set=function(o){z.set.
41
+ _.push(o)};z._=[];z.set._=[];$.async=!0;$.setAttribute('charset','utf-8');
42
+ $.src='//v2.zopim.com/?1JkI9crULWPOzNzvAJ6SYbeghH5FjhVV';z.t=+new Date;$.
43
+ type='text/javascript';e.parentNode.insertBefore($,e)})(document,'script');
44
+ </script>
45
+ <!--End of Zopim Live Chat Script-->
46
+
47
+ <!--Start of Feedback Box-->
48
+ <!--
49
+ <script src="http://www.jotform.com/min/?g=feedback2" type="text/javascript"></script>
50
+ <script type="text/javascript">
51
+ new JotformFeedback({
52
+ formId : "50873505454962",
53
+ buttonText : "Get Help!",
54
+ windowTitle : "Mark up the screenshot to describe a problem or suggestion",
55
+ base : "http://jotformpro.com/",
56
+ background : "#F59202",
57
+ fontColor : "#FFFFFF",
58
+ buttonSide : "bottom",
59
+ buttonAlign : "right",
60
+ type : false,
61
+ width : 280,
62
+ height : 420,
63
+ instant : true
64
+ });
65
+ </script> -->
66
+ <!--End of Feedback Box-->
67
+
68
+ <!--Perfect Audience Start-->
69
+ <script type="text/javascript">
70
+ (function() {
71
+ window._pa = window._pa || {};
72
+ // _pa.orderId = "myOrderId"; // OPTIONAL: attach unique conversion identifier to conversions
73
+ // _pa.revenue = "19.99"; // OPTIONAL: attach dynamic purchase values to conversions
74
+ // _pa.productId = "myProductId"; // OPTIONAL: Include product ID for use with dynamic ads
75
+ var pa = document.createElement('script'); pa.type = 'text/javascript'; pa.async = true;
76
+ pa.src = ('https:' == document.location.protocol ? 'https:' : 'http:') + "//tag.perfectaudience.com/serve/52c8aa7b965728ddac000007.js";
77
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(pa, s);
78
+ })();
79
+ </script>
80
  <!--Perfect Audience End-->
app/templates/feed-table-row.php CHANGED
@@ -3,7 +3,7 @@ $show = '';
3
 
4
  if (!isset($f)) {
5
  $f = array(
6
- 'id' => uniqid(),
7
  'name' => 'New feed',
8
  'url' => '',
9
  'max_posts' => 5,
@@ -12,8 +12,7 @@ if (!isset($f)) {
12
  'tags_id' => array(),
13
  'strip_html' => 'false'
14
  );
15
-
16
- $show = 'show';
17
  }
18
 
19
  if (is_array($f['tags_id'])) {
@@ -37,9 +36,6 @@ if (is_array($f['tags_id'])) {
37
  }
38
  }
39
 
40
- /* echo "<pre>";
41
- print_r($f);
42
- exit; */
43
  if (is_array($f['category_id'])) {
44
  foreach ($f['category_id'] as $cat) {
45
  $catarray[] = get_cat_name($cat);
@@ -56,25 +52,25 @@ if (is_array($f['category_id'])) {
56
  }
57
  ?>
58
 
59
- <tr id="display_<?php echo ($f['id']); ?>" class="data-row <?php echo $show; ?>">
60
- <td>
61
- <strong><a href="#" class="toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php echo $f['name']; ?></a></strong>
62
  <div class="row-options">
63
  <a href="#" class="toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php _e('Edit', 'rss_pi'); ?></a> |
64
  <a href="#" class="delete-row" data-target="<?php echo ($f['id']); ?>"><?php _e('Delete', 'rss_pi'); ?></a>
65
  </div>
66
  </td>
67
- <td><?php echo $f['url']; ?></td>
68
- <td><?php echo $f['max_posts']; ?></td>
69
  <!-- <td width="20%"><?php //echo $category; ?></td>-->
70
  </tr>
71
- <tr id="edit_<?php echo ($f['id']); ?>" class="edit-row <?php echo $show; ?>">
72
  <td colspan="4">
73
  <table class="widefat edit-table">
74
  <tr>
75
  <td><label for="<?php echo ($f['id']); ?>-name"><?php _e("Feed name", 'rss_pi'); ?></label></td>
76
  <td>
77
- <input type="text" name="<?php echo ($f['id']); ?>-name" id="<?php echo ($f['id']); ?>-name" value="<?php echo ($f['name']); ?>" />
78
  </td>
79
  </tr>
80
  <tr>
@@ -82,18 +78,17 @@ if (is_array($f['category_id'])) {
82
  <label for="<?php echo ($f['id']); ?>-url"><?php _e("Feed url", 'rss_pi'); ?></label>
83
  <p class="description">e.g. "http://news.google.com/?output=rss"</p>
84
  </td>
85
- <td><input type="text" name="<?php echo ($f['id']); ?>-url" id="<?php echo ($f['id']); ?>-url" value="<?php echo ($f['url']); ?>" /></td>
86
  </tr>
87
  <tr>
88
- <td><label for=""><?php _e("Max posts / import", 'rss_pi'); ?></label></td>
89
- <td><input type="number" name="<?php echo ($f['id']); ?>-max_posts" id="<?php echo ($f['id']); ?>-max_posts" value="<?php echo ($f['max_posts']); ?>" min="1" max="100" /></td>
90
  </tr>
91
  <tr>
92
- <td><label for=""><?php _e("Feed Author", 'rss_pi'); ?></label></td>
93
  <td>
94
  <?php
95
  if (!$this->is_key_valid) {
96
- // $this->key_error($this->key_prompt, true);
97
  $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=feed-author&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
98
  }
99
  $args = array(
@@ -113,7 +108,6 @@ wp_dropdown_users($args);
113
  $rss_post_pi_admin = new rssPIAdmin();
114
  $disabled = '';
115
  if (!$this->is_key_valid) {
116
- // $this->key_error($this->key_prompt_multiple_category, true);
117
  $this->key_error( sprintf( $this->key_prompt, 'Multiple Category selection available. ', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=multi-category&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
118
  wp_dropdown_categories(array('hide_empty' => 0, 'hierarchical' => true, 'id' => $f['id'] . '-category_id', 'name' => $f['id'] . '-category_id', 'selected' => $f['category_id'][0]));
119
  } else {
@@ -138,7 +132,6 @@ wp_dropdown_users($args);
138
  <?php
139
  $disabled = '';
140
  if (!$this->is_key_valid) {
141
- // $this->key_error($this->key_prompt_multiple_tags, true);
142
  $this->key_error( sprintf( $this->key_prompt, 'Multiple Tags selection available. ', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=multi-tags-free&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
143
  echo $rss_post_pi_admin->rss_pi_tags_dropdown($f['id'], $f['tags_id']);
144
  } else {
@@ -165,7 +158,6 @@ wp_dropdown_users($args);
165
  $disabled = '';
166
  if (!$this->is_key_valid) {
167
  $disabled = ' disabled="disabled"';
168
- // $this->key_error($this->key_prompt, true);
169
  $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=keywords-filters&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
170
  }
171
  ?>
@@ -189,7 +181,7 @@ wp_dropdown_users($args);
189
  </tr>
190
  <tr>
191
  <td><input type="hidden" name="id" value="<?php echo($f['id']); ?>" /></td>
192
- <td><a id="close-edit-table" class="button button-large toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php _e('Close', 'rss_pi'); ?></a></td>
193
  </tr>
194
  </table>
195
 
3
 
4
  if (!isset($f)) {
5
  $f = array(
6
+ 'id' => 0,
7
  'name' => 'New feed',
8
  'url' => '',
9
  'max_posts' => 5,
12
  'tags_id' => array(),
13
  'strip_html' => 'false'
14
  );
15
+ $show = ' show';
 
16
  }
17
 
18
  if (is_array($f['tags_id'])) {
36
  }
37
  }
38
 
 
 
 
39
  if (is_array($f['category_id'])) {
40
  foreach ($f['category_id'] as $cat) {
41
  $catarray[] = get_cat_name($cat);
52
  }
53
  ?>
54
 
55
+ <tr id="display_<?php echo ($f['id']); ?>" class="data-row<?php echo $show; ?>" data-fields="name,url,max_posts">
56
+ <td class="rss_pi-feed_name">
57
+ <strong><a href="#" class="toggle-edit" data-target="<?php echo ($f['id']); ?>"><span class="field-name"><?php echo $f['name']; ?></span></a></strong>
58
  <div class="row-options">
59
  <a href="#" class="toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php _e('Edit', 'rss_pi'); ?></a> |
60
  <a href="#" class="delete-row" data-target="<?php echo ($f['id']); ?>"><?php _e('Delete', 'rss_pi'); ?></a>
61
  </div>
62
  </td>
63
+ <td class="rss_pi-feed_url"><span class="field-url"><?php echo $f['url']; ?></span></td>
64
+ <td class="rss_pi_feed_max_posts"><span class="field-max_posts"><?php echo $f['max_posts']; ?></span></td>
65
  <!-- <td width="20%"><?php //echo $category; ?></td>-->
66
  </tr>
67
+ <tr id="edit_<?php echo ($f['id']); ?>" class="edit-row<?php echo $show; ?>">
68
  <td colspan="4">
69
  <table class="widefat edit-table">
70
  <tr>
71
  <td><label for="<?php echo ($f['id']); ?>-name"><?php _e("Feed name", 'rss_pi'); ?></label></td>
72
  <td>
73
+ <input type="text" class="field-name" name="<?php echo ($f['id']); ?>-name" id="<?php echo ($f['id']); ?>-name" value="<?php echo ($f['name']); ?>" />
74
  </td>
75
  </tr>
76
  <tr>
78
  <label for="<?php echo ($f['id']); ?>-url"><?php _e("Feed url", 'rss_pi'); ?></label>
79
  <p class="description">e.g. "http://news.google.com/?output=rss"</p>
80
  </td>
81
+ <td><input type="text" class="field-url" name="<?php echo ($f['id']); ?>-url" id="<?php echo ($f['id']); ?>-url" value="<?php echo ($f['url']); ?>" /></td>
82
  </tr>
83
  <tr>
84
+ <td><label for="<?php echo ($f['id']); ?>-max_posts"><?php _e("Max posts / import", 'rss_pi'); ?></label></td>
85
+ <td><input type="number" class="field-max_posts" name="<?php echo ($f['id']); ?>-max_posts" id="<?php echo ($f['id']); ?>-max_posts" value="<?php echo ($f['max_posts']); ?>" min="1" max="100" /></td>
86
  </tr>
87
  <tr>
88
+ <td><label for="<?php echo ($f['id']); ?>-author_id"><?php _e("Feed Author", 'rss_pi'); ?></label></td>
89
  <td>
90
  <?php
91
  if (!$this->is_key_valid) {
 
92
  $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=feed-author&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
93
  }
94
  $args = array(
108
  $rss_post_pi_admin = new rssPIAdmin();
109
  $disabled = '';
110
  if (!$this->is_key_valid) {
 
111
  $this->key_error( sprintf( $this->key_prompt, 'Multiple Category selection available. ', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=multi-category&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
112
  wp_dropdown_categories(array('hide_empty' => 0, 'hierarchical' => true, 'id' => $f['id'] . '-category_id', 'name' => $f['id'] . '-category_id', 'selected' => $f['category_id'][0]));
113
  } else {
132
  <?php
133
  $disabled = '';
134
  if (!$this->is_key_valid) {
 
135
  $this->key_error( sprintf( $this->key_prompt, 'Multiple Tags selection available. ', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=multi-tags-free&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
136
  echo $rss_post_pi_admin->rss_pi_tags_dropdown($f['id'], $f['tags_id']);
137
  } else {
158
  $disabled = '';
159
  if (!$this->is_key_valid) {
160
  $disabled = ' disabled="disabled"';
 
161
  $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=keywords-filters&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
162
  }
163
  ?>
181
  </tr>
182
  <tr>
183
  <td><input type="hidden" name="id" value="<?php echo($f['id']); ?>" /></td>
184
+ <td><a id="close-edit-table-<?php echo($f['id']); ?>" class="button button-large toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php _e('Close', 'rss_pi'); ?></a></td>
185
  </tr>
186
  </table>
187
 
app/templates/feed-table.php CHANGED
@@ -1,4 +1,4 @@
1
- <table class="widefat rss_pi-table" id="rss_pi-table">
2
  <thead>
3
  <tr>
4
  <th><?php _e("Feed name", 'rss_pi'); ?></th>
@@ -15,7 +15,6 @@
15
  foreach ($this->options['feeds'] as $f) :
16
  $category = get_the_category($f['category_id']);
17
  array_push($saved_ids, $f['id']);
18
-
19
  include( RSS_PI_PATH . 'app/templates/feed-table-row.php');
20
  endforeach;
21
  else :
@@ -38,5 +37,13 @@
38
  <input type="hidden" name="ids" id="ids" value="<?php echo(join($saved_ids, ',')); ?>" />
39
  </td>
40
  </tr>
 
 
 
 
 
41
  </tfoot>
42
- </table>
 
 
 
1
+ <table class="widefat rss_pi-table" id="rss_pi-feed-table">
2
  <thead>
3
  <tr>
4
  <th><?php _e("Feed name", 'rss_pi'); ?></th>
15
  foreach ($this->options['feeds'] as $f) :
16
  $category = get_the_category($f['category_id']);
17
  array_push($saved_ids, $f['id']);
 
18
  include( RSS_PI_PATH . 'app/templates/feed-table-row.php');
19
  endforeach;
20
  else :
37
  <input type="hidden" name="ids" id="ids" value="<?php echo(join($saved_ids, ',')); ?>" />
38
  </td>
39
  </tr>
40
+ <?php
41
+ // preload an empty (and hidden by css) "new feed" row
42
+ unset($f);
43
+ include( RSS_PI_PATH . 'app/templates/feed-table-row.php');
44
+ ?>
45
  </tfoot>
46
+ </table>
47
+ <style>
48
+ .rss_pi-table tfoot tr.data-row,.rss_pi-table tfoot tr.edit-row{display:none;}
49
+ </style>
app/templates/settings-table.php CHANGED
@@ -1,4 +1,4 @@
1
- <table class="widefat rss_pi-table" id="rss_pi-table">
2
  <thead>
3
  <tr>
4
  <th colspan="5"><?php _e('Settings', 'rss_pi'); ?></th>
@@ -28,10 +28,12 @@
28
  <tr>
29
  <td>
30
  <label for="feeds_api_key"><?php _e('Full Text RSS Feed API Key', "rss_pi"); ?></label>
 
31
  <p class="description">
32
  <?php _e('Boost Your traffic with Full RSS Content - ', "rss_pi"); ?>
33
  Request a Free 14 Days <a href="http://www.feedsapi.com/?utm_source=rsspi-full-rss-key-here" target="_blank"> Full RSS Key Here !</a>
34
  </p>
 
35
  </td>
36
  <td>
37
  <?php $feeds_api_key = isset($this->options['settings']["feeds_api_key"]) ? $this->options['settings']["feeds_api_key"] : ""; ?>
@@ -79,7 +81,6 @@
79
  $disabled = '';
80
  if (!$this->is_key_valid) {
81
  $disabled = ' disabled="disabled"';
82
- // $this->key_error($this->key_prompt, true);
83
  $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=keywords-filters&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
84
  }
85
  ?>
@@ -214,40 +215,94 @@
214
  </ul>
215
  </td>
216
  </tr>
217
- <?php
218
- if ($this->is_key_valid) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  ?>
 
 
220
 
221
- <tr>
222
- <td>
223
- <?php _e('Export and backup your Feeds and setting as CSV File', "rss_pi"); ?>
224
- <p class="description"><?php _e('This option will help you download a csv file with all your feeds setting , you can upload it back later.', "rss_pi"); ?></p>
225
- </td>
226
- <td>
227
- <input type="submit" value="Export your Feeds and Setting as CSV File" name="csv_download" class="button button-primary button-large right">
228
- </td>
229
-
230
- </tr>
231
- <tr>
232
- <td>
233
- <?php _e('Import your CSV file with your feeds settings', "rss_pi"); ?>
234
- <p class="description"><?php _e('Create and Import a CSV file with your Feeds Setting with the following Structure and heading:<br/>
235
-
236
- url , name, max_posts, author_id <br/>
237
-
238
- url = your feed url <br/>
239
- name = the name you gives to your feed <br/>
240
- max_posts = the number of posts to simultaneously import <br/>
241
- author_id = your author ID , this is a number.', "rss_pi"); ?></p>
242
- </td>
243
- <td>
244
- <input type="file" name="import_csv" />
245
- </td>
246
-
247
- </tr>
248
  <?php
249
- }
250
- ?>
 
 
 
 
 
 
 
 
251
  </table>
252
  </td>
253
  </tr>
1
+ <table class="widefat rss_pi-table" id="rss_pi-settings-table">
2
  <thead>
3
  <tr>
4
  <th colspan="5"><?php _e('Settings', 'rss_pi'); ?></th>
28
  <tr>
29
  <td>
30
  <label for="feeds_api_key"><?php _e('Full Text RSS Feed API Key', "rss_pi"); ?></label>
31
+ <?php if ( ! $this->is_key_valid ) : ?>
32
  <p class="description">
33
  <?php _e('Boost Your traffic with Full RSS Content - ', "rss_pi"); ?>
34
  Request a Free 14 Days <a href="http://www.feedsapi.com/?utm_source=rsspi-full-rss-key-here" target="_blank"> Full RSS Key Here !</a>
35
  </p>
36
+ <?php endif; ?>
37
  </td>
38
  <td>
39
  <?php $feeds_api_key = isset($this->options['settings']["feeds_api_key"]) ? $this->options['settings']["feeds_api_key"] : ""; ?>
81
  $disabled = '';
82
  if (!$this->is_key_valid) {
83
  $disabled = ' disabled="disabled"';
 
84
  $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=keywords-filters&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
85
  }
86
  ?>
215
  </ul>
216
  </td>
217
  </tr>
218
+ <tr>
219
+ <td>
220
+ <?php _e('Import already deleted posts?', "rss_pi"); ?>
221
+ <p class="description"><?php _e('Allow imported and later deleted posts to be imported once again.', "rss_pi"); ?></p>
222
+ </td>
223
+ <td>
224
+ <?php
225
+ $disabled = '';
226
+ if (!$this->is_key_valid) {
227
+ $disabled = ' disabled="disabled"';
228
+ $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=import-deleted&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
229
+ }
230
+ ?>
231
+ <ul class="radiolist">
232
+ <li>
233
+ <label class="tooltips"><input type="radio" id="cache_deleted_true" name="cache_deleted" value="false" <?php echo($this->options['settings']['cache_deleted'] == 'false' ? 'checked="checked"' : ''); ?><?php echo $disabled; ?> /> <?php _e('Yes', 'rss_pi'); ?></label>
234
+ </li>
235
+ <li>
236
+ <label><input type="radio" id="cache_deleted_false" name="cache_deleted" value="true" <?php echo($this->options['settings']['cache_deleted'] == 'true' || $this->options['settings']['cache_deleted'] == '' ? 'checked="checked"' : ''); ?><?php echo $disabled; ?> /> <?php _e('No', 'rss_pi'); ?></label>
237
+ </li>
238
+ </ul>
239
+ </td>
240
+ </tr>
241
+ <?php if ( isset($this->options['upgraded']['deleted_posts']) ) { ?>
242
+ <tr>
243
+ <td>
244
+ <?php _e('Purge deleted posts cache', "rss_pi"); ?>
245
+ <p class="description"><?php _e('This option will allow you to reset the deleted posts cache and re-import posts you have deleted in the past.', "rss_pi"); ?></p>
246
+ </td>
247
+ <td>
248
+ <?php
249
+ $disabled = '';
250
+ if (!$this->is_key_valid) {
251
+ $disabled = ' disabled="disabled"';
252
+ $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=purge-deleted-cache&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
253
+ }
254
+ ?>
255
+ <?php $rss_pi_deleted_posts = count( get_option( 'rss_pi_deleted_posts', array() ) ); ?>
256
+ <p><?php printf( _n('Cached: <strong>%d</strong> deleted post', 'Cached: <strong>%d</strong> deleted posts', $rss_pi_deleted_posts, 'rss_pi'), $rss_pi_deleted_posts ); ?></p>
257
+ <input type="submit" value="Purge Cache" name="purge_deleted_cache" class="button button-primary button-large"<?php echo $disabled; ?> />
258
+ </td>
259
+ </tr>
260
+ <?php } ?>
261
+ <tr>
262
+ <td>
263
+ <?php _e('Export and backup your Feeds and setting as CSV File', "rss_pi"); ?>
264
+ <p class="description"><?php _e('This option will help you download a csv file with all your feeds setting , you can upload it back later.', "rss_pi"); ?></p>
265
+ </td>
266
+ <td>
267
+ <?php
268
+ $disabled = '';
269
+ if (!$this->is_key_valid) {
270
+ $disabled = ' disabled="disabled"';
271
+ $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=export-feeds&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
272
+ }
273
  ?>
274
+ <input type="submit" value="Export your Feeds and Setting as CSV File" name="csv_download" class="button button-primary button-large"<?php echo $disabled; ?> />
275
+ </td>
276
 
277
+ </tr>
278
+ <tr>
279
+ <td>
280
+ <?php _e('Import your CSV file with your feeds\' settings', "rss_pi"); ?>
281
+ <p class="description"><?php _e('Create and Import a CSV file with your Feeds\' Setting with the following Structure and heading:<br/>
282
+ <br/>
283
+ url , name, max_posts, author_id, category_id, tags, keywords, strip_html<br/>
284
+ <br/>
285
+ url = your feed url<br/>
286
+ name = the name you gives to your feed<br/>
287
+ max_posts = the number of posts to simultaneously import<br/>
288
+ author_id = your author ID, this is a number<br/>
289
+ category_id = the Category IDs - number(s) separated with comma (,)<br/>
290
+ tags = the Tag IDs - number(s) separated with comma (,)<br/>
291
+ keywords = the filter keywords - string(s) separated with comma (,)<br/>
292
+ strip_html = strip html tags - "true" or "false"', "rss_pi"); ?></p>
293
+ </td>
294
+ <td>
 
 
 
 
 
 
 
 
 
295
  <?php
296
+ $disabled = '';
297
+ if (!$this->is_key_valid) {
298
+ $disabled = ' disabled="disabled"';
299
+ // $this->key_error($this->key_prompt, true);
300
+ $this->key_error( sprintf( $this->key_prompt, '', 'http://www.feedsapi.com/?utm_source=rsspostimporter&utm_medium=upgrade&utm_term=import-feeds&utm_content=rsspi-full-rss-key-here&utm_campaign=wordpress' ), true );
301
+ }
302
+ ?>
303
+ <input type="file" name="import_csv"<?php echo $disabled; ?> />
304
+ </td>
305
+ </tr>
306
  </table>
307
  </td>
308
  </tr>
app/templates/stats-placeholder.php CHANGED
@@ -1,4 +1,4 @@
1
- <table class="widefat rss_pi-table" id="rss_pi-table">
2
  <thead>
3
  <tr>
4
  <th><?php _e('Stats', 'rss_pi'); ?></th>
1
+ <table class="widefat rss_pi-table" id="rss_pi-stats-table">
2
  <thead>
3
  <tr>
4
  <th><?php _e('Stats', 'rss_pi'); ?></th>
index.php CHANGED
@@ -5,7 +5,7 @@
5
  Plugin URI: https://wordpress.org/plugins/rss-post-importer/
6
  Description: This plugin lets you set up an import posts from one or several rss-feeds and save them as posts on your site, simple and flexible.
7
  Author: feedsapi
8
- Version: 2.1.1
9
  Author URI: https://www.feedsapi.org/
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -27,7 +27,7 @@ if (!defined('RSS_PI_BASENAME')) {
27
  }
28
 
29
  if (!defined('RSS_PI_VERSION')) {
30
- define('RSS_PI_VERSION', '2.1.1');
31
  }
32
 
33
  if (!defined('RSS_PI_LOG_PATH')) {
@@ -42,6 +42,7 @@ if (!is_dir(RSS_PI_LOG_PATH)) {
42
  include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-log.php';
43
  include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-featured-image.php';
44
  include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-parser.php';
 
45
 
46
  // admin classes
47
  include_once RSS_PI_PATH . 'app/classes/admin/class-rss-pi-admin-processor.php';
5
  Plugin URI: https://wordpress.org/plugins/rss-post-importer/
6
  Description: This plugin lets you set up an import posts from one or several rss-feeds and save them as posts on your site, simple and flexible.
7
  Author: feedsapi
8
+ Version: 2.1.2
9
  Author URI: https://www.feedsapi.org/
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
27
  }
28
 
29
  if (!defined('RSS_PI_VERSION')) {
30
+ define('RSS_PI_VERSION', '2.1.2');
31
  }
32
 
33
  if (!defined('RSS_PI_LOG_PATH')) {
42
  include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-log.php';
43
  include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-featured-image.php';
44
  include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-parser.php';
45
+ include_once RSS_PI_PATH . 'app/classes/helpers/rss-pi-functions.php';
46
 
47
  // admin classes
48
  include_once RSS_PI_PATH . 'app/classes/admin/class-rss-pi-admin-processor.php';
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: feedsapi
3
  Donate link: https://www.feedsapi.org/
4
  Tags: rss, feeds, import, feed, autoblog, feed aggregation, rss-feed, aggregation, atom, feed, rss, syndication, FeedWordPress, autoblog aggregator, Autoblogger, autoblogging, feed import, rss multi importer, feed reader, feed to post, multi feed import, multi feed importer, multi import, multi rss feeds, multiple feed import, multiple feeds, multiple rss feeds, rss, rss aggregator, rss feader, RSS import, rss to post, content curation, RSS Retriever, RSS fetch feed, WP RSS Aggregator, AutoPost, RSS Feed to Post, RSSImport, yahoo pipes, WP Pipes, Import XML feed , FeedSyndicate, RSSpost, RSS in Page
5
  Requires at least: 3.5
6
- Tested up to: 4.1
7
- Stable tag: 2.1.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -59,6 +59,10 @@ Not only does this WordPress RSS Aggregator Plugin import a snippet of the rss f
59
  * Assign Imported Posts to as many Tags as you want , the sky is the limit.
60
  * Assign Imported Post to as many categories as you want , the sky is the limit.
61
  * Export/import your Feeds and setting as CSV File.
 
 
 
 
62
 
63
  **Don't take my word for it, here's how easy to use it is:**
64
 
@@ -72,7 +76,7 @@ When you start importing rss feeds as a part of your content backup, autobloggin
72
 
73
  **PS**: By the way, this RSS Aggregator plugin is not a shortcode for just displaying a bunch of links from an rss feeds like some of the following plugins:
74
 
75
- WP-o-Matic, WP-o-Matic, RSSImport, FeedWordPress, Syndicate Press, FeedWeb, RSS Just Better, CyberSyn, CSV 2 Post, Simple Feed Copyright, WP Syndicate, HungryFEED, WP Pipes and many other I can't list here. **RSS Post Importer imports data from a feed and saves it as full stand alone posts.**
76
 
77
 
78
  == Installation ==
@@ -86,6 +90,30 @@ WP-o-Matic, WP-o-Matic, RSSImport, FeedWordPress, Syndicate Press, FeedWeb, RSS
86
 
87
  [vimeo https://vimeo.com/113134777]
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
  == Screenshots ==
91
 
@@ -95,6 +123,15 @@ WP-o-Matic, WP-o-Matic, RSSImport, FeedWordPress, Syndicate Press, FeedWeb, RSS
95
 
96
  == Change Log ==
97
 
 
 
 
 
 
 
 
 
 
98
  = Version 2.1.1 =
99
  * Jquery Bug fix
100
 
3
  Donate link: https://www.feedsapi.org/
4
  Tags: rss, feeds, import, feed, autoblog, feed aggregation, rss-feed, aggregation, atom, feed, rss, syndication, FeedWordPress, autoblog aggregator, Autoblogger, autoblogging, feed import, rss multi importer, feed reader, feed to post, multi feed import, multi feed importer, multi import, multi rss feeds, multiple feed import, multiple feeds, multiple rss feeds, rss, rss aggregator, rss feader, RSS import, rss to post, content curation, RSS Retriever, RSS fetch feed, WP RSS Aggregator, AutoPost, RSS Feed to Post, RSSImport, yahoo pipes, WP Pipes, Import XML feed , FeedSyndicate, RSSpost, RSS in Page
5
  Requires at least: 3.5
6
+ Tested up to: 4.2.1
7
+ Stable tag: 2.1.2
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
59
  * Assign Imported Posts to as many Tags as you want , the sky is the limit.
60
  * Assign Imported Post to as many categories as you want , the sky is the limit.
61
  * Export/import your Feeds and setting as CSV File.
62
+ * Disable Banner for a valid Full Text RSS Key
63
+ * Purge Deleted Posts from the Memory to re-import old posts
64
+ * Option to re-import the same articles several times and disable the protection
65
+ * Import Static Websites Content. **Supports: html or php single page or single article **
66
 
67
  **Don't take my word for it, here's how easy to use it is:**
68
 
76
 
77
  **PS**: By the way, this RSS Aggregator plugin is not a shortcode for just displaying a bunch of links from an rss feeds like some of the following plugins:
78
 
79
+ WP-o-Matic, WP-o-Matic, RSSImport, FeedWordPress, Syndicate Press, FeedWeb, RSS Just Better, CyberSyn, CSV 2 Post, Simple Feed Copyright, WP Syndicate, HungryFEED, Feedzy , WP Pipes and many other I can't list here. **RSS Post Importer imports data from a feed and saves it as full stand alone posts.**
80
 
81
 
82
  == Installation ==
90
 
91
  [vimeo https://vimeo.com/113134777]
92
 
93
+ == Frequently Asked Questions ==
94
+
95
+ = I've already installed RSS Post Importer, but not all features are enable, what's going on? =
96
+
97
+ RSS Post Importer requires a Full Text RSS Key [Try it Free for 14 Days](http://www.feedsapi.org/register.htm?utm_source=rss-post-importer_upgrade-free-trial) to enable all premium features. It comes with a 14 day free trial and will save you several hours of manual work.
98
+
99
+ = How do I upgrade RSS Post Importer? =
100
+
101
+ You need a Full Text RSS Key to upgrade your RSS Post Importer Plugin and boost your traffic and revenues, you simply need to go to [Boost my Traffic](http://www.feedsapi.org/register.htm?utm_source=rss-post-importer_upgrade) and create a premium account , then use the key you receive with your RSS Post Importer
102
+
103
+ = How do I view my stats? =
104
+
105
+ Once you've installed RSS Post Importer, your stats will be available via the "Setting" menu which appears in the RSS Post Importer "Stats" block UI (under the RSS Post Importer settings block).
106
+
107
+ = How do I contribute to RSS Post Importer? =
108
+
109
+ Easy! There are opportunities for developers and non-developers at all levels to contribute:
110
+
111
+ * Join our Beta Test group.
112
+ * Give us a hand answering questions in our [support forum](https://wordpress.org/support/plugin/rss-post-importer).
113
+ * Report bugs, with reproduction steps, to [Support](rsspostimporter@feedsapi.com).
114
+
115
+ Learn more (and get detailed instructions) in our [contribute guide](http://jetpack.me/contribute/).
116
+
117
 
118
  == Screenshots ==
119
 
123
 
124
  == Change Log ==
125
 
126
+ = Version 2.1.2 =
127
+ * Interactive Feedback when adding/editing new feeds
128
+ * Disable Banner for Premium users
129
+ * Option to purge deleted posts from the memory, so you can re-import deleted posts.
130
+ * Import/Export Feeds + Feeds Settings as CSV file
131
+ * Improved Charts and Statistics
132
+ * Option to Import already imported or deleted Posts
133
+ * Several code improvements & Bug fixes for better stability
134
+
135
  = Version 2.1.1 =
136
  * Jquery Bug fix
137