RSS Post Importer - Version 2.0.2

Version Description

Download this release

Release Info

Developer phpaddicted
Plugin Icon 128x128 RSS Post Importer
Version 2.0.2
Comparing to
See all releases

Code changes from version 2.0.1 to 2.0.2

app/assets/css/style.css CHANGED
@@ -1,25 +1,36 @@
1
- /*!
2
- * Font Awesome 3.2.1
3
- * the iconic font designed for Bootstrap
4
- * ------------------------------------------------------------------------------
5
- * The full suite of pictographic icons, examples, and documentation can be
6
- * found at http://fontawesome.io. Stay up to date on Twitter at
7
- * http://twitter.com/fontawesome.
8
- *
9
- * License
10
- * ------------------------------------------------------------------------------
11
- * - The Font Awesome font is licensed under SIL OFL 1.1 -
12
- * http://scripts.sil.org/OFL
13
- * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
14
- * http://opensource.org/licenses/mit-license.html
15
- * - Font Awesome documentation licensed under CC BY 3.0 -
16
- * http://creativecommons.org/licenses/by/3.0/
17
- * - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
18
- * "Font Awesome by Dave Gandy - http://fontawesome.io"
19
- *
20
- * Author - Dave Gandy
21
- * ------------------------------------------------------------------------------
22
- * Email: dave@fontawesome.io
23
- * Twitter: http://twitter.com/davegandy
24
- * Work: Lead Product Designer @ Kyruus - http://kyruus.com
25
- */@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"}#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;}
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Font Awesome 3.2.1
3
+ * the iconic font designed for Bootstrap
4
+ * ------------------------------------------------------------------------------
5
+ * The full suite of pictographic icons, examples, and documentation can be
6
+ * found at http://fontawesome.io. Stay up to date on Twitter at
7
+ * http://twitter.com/fontawesome.
8
+ *
9
+ * License
10
+ * ------------------------------------------------------------------------------
11
+ * - The Font Awesome font is licensed under SIL OFL 1.1 -
12
+ * http://scripts.sil.org/OFL
13
+ * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
14
+ * http://opensource.org/licenses/mit-license.html
15
+ * - Font Awesome documentation licensed under CC BY 3.0 -
16
+ * http://creativecommons.org/licenses/by/3.0/
17
+ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
18
+ * "Font Awesome by Dave Gandy - http://fontawesome.io"
19
+ *
20
+ * Author - Dave Gandy
21
+ * ------------------------------------------------------------------------------
22
+ * Email: dave@fontawesome.io
23
+ * Twitter: http://twitter.com/davegandy
24
+ * Work: Lead Product Designer @ Kyruus - http://kyruus.com
25
+ */@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"}#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 {
26
+ width: 4% !important;
27
+ }
28
+ label.selectit{ color:#555555 !important; font-weight: normal !important; }
29
+ div.category_container ul.children{
30
+ margin-bottom: 6px;
31
+ margin-top: 7px;
32
+ }
33
+ div.category_container{
34
+ height: 205px;
35
+ overflow: auto;
36
+ }
app/class-rss-post-importer.php CHANGED
@@ -1,123 +1,127 @@
1
- <?php
2
- /**
3
- * One class to rule them all
4
- *
5
- * @author Saurabh Shukla <saurabh@yapapaya.com>
6
- */
7
- class rssPostImporter {
8
-
9
- /**
10
- * A var to store the options in
11
- * @var array
12
- */
13
- public $options = array();
14
-
15
- /**
16
- * To initialise the admin and cron classes
17
- *
18
- * @var object
19
- */
20
- private $admin, $cron;
21
-
22
- /**
23
- * Start
24
- */
25
- function __construct() {
26
-
27
- // populate the options first
28
- $this->load_options();
29
-
30
- // hook translations
31
- add_action('plugins_loaded', array($this, 'localize'));
32
-
33
- add_filter( 'plugin_action_links_' . RSS_PI_BASENAME, array($this, 'settings_link') );
34
- }
35
-
36
- /**
37
- * Load options from the db
38
- */
39
- public function load_options() {
40
-
41
- $default_settings = array(
42
- 'enable_logging' => false,
43
- 'feeds_api_key' => false,
44
- 'frequency' => 0,
45
- 'post_template' => "{\$content}\nSource: {\$feed_title}",
46
- 'post_status' => 'publish',
47
- 'author_id' => 1,
48
- 'allow_comments' => true,
49
- 'keywords' => array()
50
- );
51
-
52
- $options = get_option('rss_pi_feeds', array());
53
-
54
- if (!isset($options['settings'])) {
55
- $options['settings'] = array();
56
- }
57
-
58
- $options['settings'] = wp_parse_args($options['settings'], $default_settings);
59
-
60
- if (!array_key_exists('imports', $options)) {
61
- $options['imports'] = 0;
62
- }
63
-
64
- $this->options = $options;
65
- }
66
-
67
- /**
68
- * Load translations
69
- */
70
- public function localize() {
71
-
72
- load_plugin_textdomain('rss_pi', false, RSS_PI_PATH . 'app/lang/');
73
- }
74
-
75
- /**
76
- * Initialise
77
- */
78
- public function init() {
79
-
80
- // initialise admin and cron
81
- $this->cron = new rssPICron();
82
- $this->cron->init();
83
-
84
- $this->admin = new rssPIAdmin();
85
- $this->admin->init();
86
- }
87
-
88
- /**
89
- * Check if a given API key is valid
90
- *
91
- * @param string $key
92
- * @return boolean
93
- */
94
- public function is_valid_key($key) {
95
-
96
- if (empty($key)) {
97
- return false;
98
- }
99
-
100
- $url = "http://www.feedsapi.org/fetch.php?key=$key&url=http://dummyurl.com";
101
- $content = file_get_contents($url);
102
-
103
- if (trim($content) == "A valid key must be supplied") {
104
- return false;
105
- }
106
-
107
- return true;
108
- }
109
-
110
- /**
111
- * Adds a settings link
112
- *
113
- * @param array $links EXisting links
114
- * @return type
115
- */
116
- public function settings_link($links) {
117
- $settings_link = array(
118
- '<a href="' . admin_url('options-general.php?page=rss_pi') . '">Settings</a>',
119
- );
120
- return array_merge($settings_link, $links);
121
- }
122
-
123
- }
 
 
 
 
1
+ <?php
2
+ /**
3
+ * One class to rule them all
4
+ *
5
+ * @author Saurabh Shukla <saurabh@yapapaya.com>
6
+ */
7
+ class rssPostImporter {
8
+
9
+ /**
10
+ * A var to store the options in
11
+ * @var array
12
+ */
13
+ public $options = array();
14
+
15
+ /**
16
+ * To initialise the admin and cron classes
17
+ *
18
+ * @var object
19
+ */
20
+ private $admin, $cron;
21
+
22
+ /**
23
+ * Start
24
+ */
25
+ function __construct() {
26
+
27
+ // populate the options first
28
+ $this->load_options();
29
+
30
+ // hook translations
31
+ add_action('plugins_loaded', array($this, 'localize'));
32
+
33
+ add_filter( 'plugin_action_links_' . RSS_PI_BASENAME, array($this, 'settings_link') );
34
+ }
35
+
36
+ /**
37
+ * Load options from the db
38
+ */
39
+ public function load_options() {
40
+
41
+ $default_settings = array(
42
+ 'enable_logging' => false,
43
+ 'feeds_api_key' => false,
44
+ 'frequency' => 0,
45
+ 'post_template' => "{\$content}\nSource: {\$feed_title}",
46
+ 'post_status' => 'publish',
47
+ 'author_id' => 1,
48
+ 'allow_comments' => true,
49
+ 'block_indexing' => false,
50
+ 'keywords' => array()
51
+ );
52
+
53
+ $options = get_option('rss_pi_feeds', array());
54
+
55
+ if (!isset($options['settings'])) {
56
+ $options['settings'] = array();
57
+ }
58
+
59
+ $options['settings'] = wp_parse_args($options['settings'], $default_settings);
60
+
61
+ if (!array_key_exists('imports', $options)) {
62
+ $options['imports'] = 0;
63
+ }
64
+
65
+ $this->options = $options;
66
+ }
67
+
68
+ /**
69
+ * Load translations
70
+ */
71
+ public function localize() {
72
+
73
+ load_plugin_textdomain('rss_pi', false, RSS_PI_PATH . 'app/lang/');
74
+ }
75
+
76
+ /**
77
+ * Initialise
78
+ */
79
+ public function init() {
80
+
81
+ // initialise admin and cron
82
+ $this->cron = new rssPICron();
83
+ $this->cron->init();
84
+
85
+ $this->admin = new rssPIAdmin();
86
+ $this->admin->init();
87
+
88
+ $this->front = new rssPIFront();
89
+ $this->front->init();
90
+ }
91
+
92
+ /**
93
+ * Check if a given API key is valid
94
+ *
95
+ * @param string $key
96
+ * @return boolean
97
+ */
98
+ public function is_valid_key($key) {
99
+
100
+ if (empty($key)) {
101
+ return false;
102
+ }
103
+
104
+ $url = "http://www.feedsapi.org/fetch.php?key=$key&url=http://dummyurl.com";
105
+ $content = file_get_contents($url);
106
+
107
+ if (trim($content) == "A valid key must be supplied") {
108
+ return false;
109
+ }
110
+
111
+ return true;
112
+ }
113
+
114
+ /**
115
+ * Adds a settings link
116
+ *
117
+ * @param array $links EXisting links
118
+ * @return type
119
+ */
120
+ public function settings_link($links) {
121
+ $settings_link = array(
122
+ '<a href="' . admin_url('options-general.php?page=rss_pi') . '">Settings</a>',
123
+ );
124
+ return array_merge($settings_link, $links);
125
+ }
126
+
127
+ }
app/classes/admin/class-rss-pi-admin-processor.php CHANGED
@@ -1,213 +1,214 @@
1
- <?php
2
-
3
- /**
4
- * Processes the admin screen form submissions
5
- *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
- */
8
- class rssPIAdminProcessor {
9
-
10
- /**
11
- * If we have a valid api key
12
- *
13
- * @var boolean
14
- */
15
- var $is_key_valid;
16
-
17
- /**
18
- * Process the form result
19
- *
20
- * @return null
21
- */
22
- function process() {
23
-
24
- // if there's nothing for processing or invalid data, bail
25
- if (!isset($_POST['info_update']) || !wp_verify_nonce($_POST['rss_pi_nonce'], 'settings_page')) {
26
- return;
27
- }
28
-
29
- // Get ids of feed-rows
30
- $ids = explode(",", $_POST['ids']);
31
-
32
- // formulate the settings array
33
- $settings = $this->process_settings();
34
-
35
- // update cron settings
36
- $this->update_cron($settings['frequency']);
37
-
38
- // formulate the feeds array
39
- $feeds = $this->process_feeds($ids);
40
-
41
- // save and reload the options
42
- $this->save_reload_options($settings, $feeds);
43
-
44
- // display a success message
45
- ?>
46
- <div id="message" class="updated">
47
- <p><strong><?php _e('Settings saved.', 'rss_pi') ?></strong></p>
48
- </div>
49
- <?php
50
- // check if we need to and import feeds
51
- $this->import();
52
- }
53
-
54
- /**
55
- * Process submitted data to formulate settings array
56
- *
57
- * @global object $rss_post_importer
58
- * @return array
59
- */
60
- private function process_settings() {
61
-
62
- // Get selected settings for all imported posts
63
- $settings = array(
64
- 'frequency' => $_POST['frequency'],
65
- 'feeds_api_key' => $_POST['feeds_api_key'],
66
- 'post_template' => stripslashes_deep($_POST['post_template']),
67
- 'post_status' => $_POST['post_status'],
68
- 'author_id' => $_POST['author_id'],
69
- 'allow_comments' => $_POST['allow_comments'],
70
- 'enable_logging' => $_POST['enable_logging'],
71
- 'keywords' => array()
72
- );
73
-
74
- global $rss_post_importer;
75
-
76
- // check if submitted api key is valid
77
- $this->is_key_valid = $rss_post_importer->is_valid_key($settings['feeds_api_key']);
78
-
79
- // filter the settings and then send them back for saving
80
- return $this->filter($settings);
81
- }
82
-
83
- /**
84
- * Update the frequency of the import cron job
85
- *
86
- * @param string $frequency
87
- */
88
- private function update_cron($frequency) {
89
-
90
- // If cron settings have changed
91
- if (wp_get_schedule('rss_pi_cron') != $frequency) {
92
-
93
- // Reset cron
94
- wp_clear_scheduled_hook('rss_pi_cron');
95
- wp_schedule_event(time(), $frequency, 'rss_pi_cron');
96
- }
97
- }
98
-
99
- /**
100
- * Forms the feeds array from submitted data
101
- *
102
- * @param array $ids feeds ids
103
- * @return array
104
- */
105
- private function process_feeds($ids) {
106
-
107
- $feeds = array();
108
-
109
- foreach ($ids as $id) {
110
- if ($id) {
111
- array_push($feeds, array(
112
- 'id' => $id,
113
- 'url' => strtolower($_POST[$id . '-url']),
114
- 'name' => $_POST[$id . '-name'],
115
- 'max_posts' => $_POST[$id . '-max_posts'],
116
- // different author ids depending on valid API keys
117
- 'author_id' => $this->is_key_valid ? $_POST[$id . '-author_id'] : $_POST['author_id'],
118
- 'category_id' => $_POST[$id . '-category_id'],
119
- 'strip_html' => $_POST[$id . '-strip_html']
120
- ));
121
- }
122
- }
123
-
124
- return $feeds;
125
- }
126
-
127
- /**
128
- * Update options and reload global options
129
- *
130
- * @global type $rss_post_importer
131
- * @param array $settings
132
- * @param array $feeds
133
- */
134
- private function save_reload_options($settings, $feeds) {
135
-
136
- global $rss_post_importer;
137
-
138
- // existing options
139
- $options = $rss_post_importer->options;
140
-
141
- // new data
142
- $new_options = array(
143
- 'feeds' => $feeds,
144
- 'settings' => $settings,
145
- 'latest_import' => $options['latest_import'],
146
- 'imports' => $options['imports']
147
- );
148
-
149
- // update in db
150
- update_option('rss_pi_feeds', $new_options);
151
-
152
- // reload so that the new options are used henceforth
153
- $rss_post_importer->load_options();
154
- }
155
-
156
- /**
157
- * Import feeds
158
- *
159
- * @return null
160
- */
161
- private function import() {
162
-
163
- // if we don't need to import anything, bail
164
- if ($_POST['save_to_db'] != 'true') {
165
- return;
166
- }
167
-
168
- // initialise the engine and import
169
- $engine = new rssPIEngine();
170
- $imported = $engine->import_feed();
171
- ?>
172
- <div id="message" class="updated">
173
- <p><strong><?php echo($imported); ?> <?php _e('new posts imported.', 'rss_pi') ?></strong></p>
174
- </div>
175
- <?php
176
- }
177
-
178
- /**
179
- * Filter settings for API key vs non-API key installs
180
- *
181
- * @param array $settings
182
- * @return array
183
- */
184
- private function filter($settings) {
185
-
186
- // if the key is not fine
187
- if (!empty($settings['feeds_api_key']) && !$this->is_key_valid) {
188
-
189
- // unset from settings
190
- unset($settings['feeds_api_key']);
191
- echo '<div class="error">
192
- <p>' . __('Invalid API key!', 'rss_api') . '</p>
193
- </div>';
194
- }
195
-
196
- // if the key is valid
197
- if ($this->is_key_valid) {
198
-
199
- // set up keywords (otherwise don't)
200
- $keyword_str = $_POST['keyword_filter'];
201
-
202
- $keywords = array();
203
-
204
- if (!empty($keyword_str)) {
205
- $keywords = explode(',', $keyword_str);
206
- }
207
- $settings['keywords'] = $keywords;
208
- }
209
-
210
- return $settings;
211
- }
212
-
213
- }
 
1
+ <?php
2
+
3
+ /**
4
+ * Processes the admin screen form submissions
5
+ *
6
+ * @author Saurabh Shukla <saurabh@yapapaya.com>
7
+ */
8
+ class rssPIAdminProcessor {
9
+
10
+ /**
11
+ * If we have a valid api key
12
+ *
13
+ * @var boolean
14
+ */
15
+ var $is_key_valid;
16
+
17
+ /**
18
+ * Process the form result
19
+ *
20
+ * @return null
21
+ */
22
+ function process() {
23
+
24
+ // if there's nothing for processing or invalid data, bail
25
+ if (!isset($_POST['info_update']) || !wp_verify_nonce($_POST['rss_pi_nonce'], 'settings_page')) {
26
+ return;
27
+ }
28
+
29
+ // Get ids of feed-rows
30
+ $ids = explode(",", $_POST['ids']);
31
+
32
+ // formulate the settings array
33
+ $settings = $this->process_settings();
34
+
35
+ // update cron settings
36
+ $this->update_cron($settings['frequency']);
37
+
38
+ // formulate the feeds array
39
+ $feeds = $this->process_feeds($ids);
40
+
41
+ // save and reload the options
42
+ $this->save_reload_options($settings, $feeds);
43
+
44
+ // display a success message
45
+ ?>
46
+ <div id="message" class="updated">
47
+ <p><strong><?php _e('Settings saved.', 'rss_pi') ?></strong></p>
48
+ </div>
49
+ <?php
50
+ // check if we need to and import feeds
51
+ $this->import();
52
+ }
53
+
54
+ /**
55
+ * Process submitted data to formulate settings array
56
+ *
57
+ * @global object $rss_post_importer
58
+ * @return array
59
+ */
60
+ private function process_settings() {
61
+
62
+ // Get selected settings for all imported posts
63
+ $settings = array(
64
+ 'frequency' => $_POST['frequency'],
65
+ 'feeds_api_key' => $_POST['feeds_api_key'],
66
+ 'post_template' => stripslashes_deep($_POST['post_template']),
67
+ 'post_status' => $_POST['post_status'],
68
+ 'author_id' => $_POST['author_id'],
69
+ 'allow_comments' => $_POST['allow_comments'],
70
+ 'block_indexing' => $_POST['block_indexing'],
71
+ 'enable_logging' => $_POST['enable_logging'],
72
+ 'keywords' => array()
73
+ );
74
+
75
+ global $rss_post_importer;
76
+
77
+ // check if submitted api key is valid
78
+ $this->is_key_valid = $rss_post_importer->is_valid_key($settings['feeds_api_key']);
79
+
80
+ // filter the settings and then send them back for saving
81
+ return $this->filter($settings);
82
+ }
83
+
84
+ /**
85
+ * Update the frequency of the import cron job
86
+ *
87
+ * @param string $frequency
88
+ */
89
+ private function update_cron($frequency) {
90
+
91
+ // If cron settings have changed
92
+ if (wp_get_schedule('rss_pi_cron') != $frequency) {
93
+
94
+ // Reset cron
95
+ wp_clear_scheduled_hook('rss_pi_cron');
96
+ wp_schedule_event(time(), $frequency, 'rss_pi_cron');
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Forms the feeds array from submitted data
102
+ *
103
+ * @param array $ids feeds ids
104
+ * @return array
105
+ */
106
+ private function process_feeds($ids) {
107
+
108
+ $feeds = array();
109
+
110
+ foreach ($ids as $id) {
111
+ if ($id) {
112
+ array_push($feeds, array(
113
+ 'id' => $id,
114
+ 'url' => strtolower($_POST[$id . '-url']),
115
+ 'name' => $_POST[$id . '-name'],
116
+ 'max_posts' => $_POST[$id . '-max_posts'],
117
+ // different author ids depending on valid API keys
118
+ 'author_id' => $this->is_key_valid ? $_POST[$id . '-author_id'] : $_POST['author_id'],
119
+ 'category_id' => $_POST[$id . '-category_id'],
120
+ 'strip_html' => $_POST[$id . '-strip_html']
121
+ ));
122
+ }
123
+ }
124
+
125
+ return $feeds;
126
+ }
127
+
128
+ /**
129
+ * Update options and reload global options
130
+ *
131
+ * @global type $rss_post_importer
132
+ * @param array $settings
133
+ * @param array $feeds
134
+ */
135
+ private function save_reload_options($settings, $feeds) {
136
+
137
+ global $rss_post_importer;
138
+
139
+ // existing options
140
+ $options = $rss_post_importer->options;
141
+
142
+ // new data
143
+ $new_options = array(
144
+ 'feeds' => $feeds,
145
+ 'settings' => $settings,
146
+ 'latest_import' => $options['latest_import'],
147
+ 'imports' => $options['imports']
148
+ );
149
+
150
+ // update in db
151
+ update_option('rss_pi_feeds', $new_options);
152
+
153
+ // reload so that the new options are used henceforth
154
+ $rss_post_importer->load_options();
155
+ }
156
+
157
+ /**
158
+ * Import feeds
159
+ *
160
+ * @return null
161
+ */
162
+ private function import() {
163
+
164
+ // if we don't need to import anything, bail
165
+ if ($_POST['save_to_db'] != 'true') {
166
+ return;
167
+ }
168
+
169
+ // initialise the engine and import
170
+ $engine = new rssPIEngine();
171
+ $imported = $engine->import_feed();
172
+ ?>
173
+ <div id="message" class="updated">
174
+ <p><strong><?php echo($imported); ?> <?php _e('new posts imported.', 'rss_pi') ?></strong></p>
175
+ </div>
176
+ <?php
177
+ }
178
+
179
+ /**
180
+ * Filter settings for API key vs non-API key installs
181
+ *
182
+ * @param array $settings
183
+ * @return array
184
+ */
185
+ private function filter($settings) {
186
+
187
+ // if the key is not fine
188
+ if (!empty($settings['feeds_api_key']) && !$this->is_key_valid) {
189
+
190
+ // unset from settings
191
+ unset($settings['feeds_api_key']);
192
+ echo '<div class="error">
193
+ <p>' . __('Invalid API key!', 'rss_api') . '</p>
194
+ </div>';
195
+ }
196
+
197
+ // if the key is valid
198
+ if ($this->is_key_valid) {
199
+
200
+ // set up keywords (otherwise don't)
201
+ $keyword_str = $_POST['keyword_filter'];
202
+
203
+ $keywords = array();
204
+
205
+ if (!empty($keyword_str)) {
206
+ $keywords = explode(',', $keyword_str);
207
+ }
208
+ $settings['keywords'] = $keywords;
209
+ }
210
+
211
+ return $settings;
212
+ }
213
+
214
+ }
app/classes/admin/class-rss-pi-admin.php CHANGED
@@ -1,173 +1,232 @@
1
- <?php
2
-
3
- /**
4
- * The class that handles the admin screen
5
- *
6
- * @author saurabhshukla
7
- */
8
- class rssPIAdmin {
9
-
10
- /**
11
- * Whether the API key is valid
12
- *
13
- * @var boolean
14
- */
15
- var $is_key_valid;
16
-
17
- /**
18
- * The options
19
- *
20
- * @var array
21
- */
22
- var $options;
23
-
24
- /**
25
- * Aprompt for invalid/absent API keys
26
- * @var string
27
- */
28
- var $key_prompt;
29
-
30
- /**
31
- * Start
32
- *
33
- * @global object $rss_post_importer
34
- */
35
- public function __construct() {
36
-
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
-
42
- // initialise logging
43
- $this->log = new rssPILog();
44
- $this->log->init();
45
-
46
- // load the form processor
47
- $this->processor = new rssPIAdminProcessor();
48
- }
49
-
50
- private function load_options(){
51
- global $rss_post_importer;
52
-
53
- // add options
54
- $this->options = $rss_post_importer->options;
55
-
56
- // check if key is valid
57
- $this->is_key_valid = $rss_post_importer->is_valid_key($this->options['settings']['feeds_api_key']);
58
- }
59
-
60
- /**
61
- * Initialise and hook all actions
62
- */
63
- public function init() {
64
-
65
- // add to admin menu
66
- add_action('admin_menu', array($this, 'admin_menu'));
67
-
68
- // load scripts and styles we need
69
- add_action('admin_enqueue_scripts', array($this, 'enqueue'));
70
-
71
- // the ajax for adding new feeds (table rows)
72
- add_action('wp_ajax_rss_pi_add_row', array($this, 'add_row'));
73
-
74
- // disable the feed author dropdown for invalid/absent API keys
75
- add_filter('wp_dropdown_users', array($this, 'disable_user_dropdown'));
76
- }
77
-
78
- /**
79
- * Add to admin menu
80
- */
81
- function admin_menu() {
82
-
83
- add_options_page('Rss Post Importer', 'Rss Post Importer', 'manage_options', 'rss_pi', array($this, 'screen'));
84
- }
85
-
86
- /**
87
- * Enqueue our admin css and js
88
- *
89
- * @param string $hook The current screens hook
90
- * @return null
91
- */
92
- public function enqueue($hook) {
93
-
94
- // don't load if it isn't our screen
95
- if ($hook != 'settings_page_rss_pi') {
96
- return;
97
- }
98
-
99
- // register scripts & styles
100
- wp_enqueue_script('rss-pi', RSS_PI_URL . 'app/assets/js/main.js', array('jquery'), RSS_PI_VERSION);
101
- wp_enqueue_style('rss-pi', RSS_PI_URL . 'app/assets/css/style.css', array(), RSS_PI_VERSION);
102
-
103
- // localise ajaxuel for use
104
- $localise_args = array(
105
- 'ajaxurl' => admin_url('admin-ajax.php')
106
- );
107
- wp_localize_script('rss-pi', 'rss_pi', $localise_args);
108
- }
109
-
110
- /**
111
- * Display the screen/ui
112
- */
113
- function screen() {
114
-
115
- // load the form processor first
116
- $this->processor->process();
117
- // it'll process any submitted form data
118
-
119
- // reload the options just in case
120
- $this->load_options();
121
-
122
- // include the template for the ui
123
- include( RSS_PI_PATH . 'app/templates/admin-ui.php');
124
- }
125
-
126
- /**
127
- * Display errors
128
- *
129
- * @param string $error The error message
130
- * @param boolean $inline Whether the error is inline or shown like regular wp errors
131
- */
132
- function key_error($error, $inline = false) {
133
-
134
- $class = ($inline) ? 'rss-pi-error' : 'error';
135
-
136
- echo '<div class="' . $class . '"><p>' . $error . '</p></div>';
137
- }
138
-
139
- /**
140
- * Add a new row for a new feed
141
- */
142
- function add_row() {
143
-
144
- include( RSS_PI_PATH . 'app/templates/feed-table-row.php');
145
- die();
146
- }
147
-
148
- /**
149
- * Disable the user dropdwon for each feed
150
- *
151
- * @param string $output The html of the select dropdown
152
- * @return string
153
- */
154
- function disable_user_dropdown($output) {
155
-
156
- // if we have a valid key we don't need to disable anything
157
- if ($this->is_key_valid) {
158
- return $output;
159
- }
160
-
161
- // check if this is the feed dropdown (and not any other)
162
- preg_match('/rss-pi-specific-feed-author/i', $output, $matched);
163
-
164
- // this is not our dropdown, no need to disable
165
- if (empty($matched)) {
166
- return $output;
167
- }
168
-
169
- // otherwise just disable the dropdown
170
- return str_replace('<select ', '<select disabled="disabled" ', $output);
171
- }
172
-
173
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The class that handles the admin screen
5
+ *
6
+ * @author saurabhshukla
7
+ */
8
+ class rssPIAdmin {
9
+
10
+ /**
11
+ * Whether the API key is valid
12
+ *
13
+ * @var boolean
14
+ */
15
+ var $is_key_valid;
16
+
17
+ /**
18
+ * The options
19
+ *
20
+ * @var array
21
+ */
22
+ var $options;
23
+
24
+ /**
25
+ * Aprompt for invalid/absent API keys
26
+ * @var string
27
+ */
28
+ var $key_prompt;
29
+
30
+ /**
31
+ * Start
32
+ *
33
+ * @global object $rss_post_importer
34
+ */
35
+ public function __construct() {
36
+
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
+
42
+ $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');
43
+
44
+ // initialise logging
45
+ $this->log = new rssPILog();
46
+ $this->log->init();
47
+
48
+ // load the form processor
49
+ $this->processor = new rssPIAdminProcessor();
50
+ }
51
+
52
+ private function load_options(){
53
+ global $rss_post_importer;
54
+
55
+ // add options
56
+ $this->options = $rss_post_importer->options;
57
+
58
+ // check if key is valid
59
+ $this->is_key_valid = $rss_post_importer->is_valid_key($this->options['settings']['feeds_api_key']);
60
+ }
61
+
62
+ /**
63
+ * Initialise and hook all actions
64
+ */
65
+ public function init() {
66
+
67
+ // add to admin menu
68
+ add_action('admin_menu', array($this, 'admin_menu'));
69
+
70
+ // load scripts and styles we need
71
+ add_action('admin_enqueue_scripts', array($this, 'enqueue'));
72
+
73
+ // the ajax for adding new feeds (table rows)
74
+ add_action('wp_ajax_rss_pi_add_row', array($this, 'add_row'));
75
+
76
+ // disable the feed author dropdown for invalid/absent API keys
77
+ add_filter('wp_dropdown_users', array($this, 'disable_user_dropdown'));
78
+ }
79
+
80
+ /**
81
+ * Add to admin menu
82
+ */
83
+ function admin_menu() {
84
+
85
+ add_options_page('Rss Post Importer', 'Rss Post Importer', 'manage_options', 'rss_pi', array($this, 'screen'));
86
+ }
87
+
88
+ /**
89
+ * Enqueue our admin css and js
90
+ *
91
+ * @param string $hook The current screens hook
92
+ * @return null
93
+ */
94
+ public function enqueue($hook) {
95
+
96
+ // don't load if it isn't our screen
97
+ if ($hook != 'settings_page_rss_pi') {
98
+ return;
99
+ }
100
+
101
+ // register scripts & styles
102
+ wp_enqueue_script('rss-pi', RSS_PI_URL . 'app/assets/js/main.js', array('jquery'), RSS_PI_VERSION);
103
+ wp_enqueue_style('rss-pi', RSS_PI_URL . 'app/assets/css/style.css', array(), RSS_PI_VERSION);
104
+
105
+ // localise ajaxuel for use
106
+ $localise_args = array(
107
+ 'ajaxurl' => admin_url('admin-ajax.php')
108
+ );
109
+ wp_localize_script('rss-pi', 'rss_pi', $localise_args);
110
+ }
111
+
112
+ /**
113
+ * Display the screen/ui
114
+ */
115
+ function screen() {
116
+
117
+ // load the form processor first
118
+ $this->processor->process();
119
+ // it'll process any submitted form data
120
+
121
+ // reload the options just in case
122
+ $this->load_options();
123
+
124
+ // include the template for the ui
125
+ include( RSS_PI_PATH . 'app/templates/admin-ui.php');
126
+ }
127
+
128
+ /**
129
+ * Display errors
130
+ *
131
+ * @param string $error The error message
132
+ * @param boolean $inline Whether the error is inline or shown like regular wp errors
133
+ */
134
+ function key_error($error, $inline = false) {
135
+
136
+ $class = ($inline) ? 'rss-pi-error' : 'error';
137
+
138
+ echo '<div class="' . $class . '"><p>' . $error . '</p></div>';
139
+ }
140
+
141
+ /**
142
+ * Add a new row for a new feed
143
+ */
144
+ function add_row() {
145
+
146
+ include( RSS_PI_PATH . 'app/templates/feed-table-row.php');
147
+ die();
148
+ }
149
+
150
+ /**
151
+ * Disable the user dropdwon for each feed
152
+ *
153
+ * @param string $output The html of the select dropdown
154
+ * @return string
155
+ */
156
+ function disable_user_dropdown($output) {
157
+
158
+ // if we have a valid key we don't need to disable anything
159
+ if ($this->is_key_valid) {
160
+ return $output;
161
+ }
162
+
163
+ // check if this is the feed dropdown (and not any other)
164
+ preg_match('/rss-pi-specific-feed-author/i', $output, $matched);
165
+
166
+ // this is not our dropdown, no need to disable
167
+ if (empty($matched)) {
168
+ return $output;
169
+ }
170
+
171
+ // otherwise just disable the dropdown
172
+ return str_replace('<select ', '<select disabled="disabled" ', $output);
173
+ }
174
+ /**
175
+ * Walker class function for category multiple checkbox
176
+ *
177
+ *
178
+ *
179
+ */
180
+ function wp_category_checklist_rss_pi($post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true)
181
+ {
182
+ $cat = "";
183
+ if (empty($walker) || !is_a($walker, 'Walker'))
184
+ $walker = new Walker_Category_Checklist;
185
+ $descendants_and_self = (int) $descendants_and_self;
186
+ $args = array();
187
+ if (is_array($selected_cats))
188
+ $args['selected_cats'] = $selected_cats;
189
+ elseif ($post_id)
190
+ $args['selected_cats'] = wp_get_post_categories($post_id);
191
+ else
192
+ $args['selected_cats'] = array();
193
+
194
+ if ($descendants_and_self) {
195
+ $categories = get_categories("child_of=$descendants_and_self&hierarchical=0&hide_empty=0");
196
+ $self = get_category($descendants_and_self);
197
+ array_unshift($categories, $self);
198
+ } else {
199
+ $categories = get_categories('get=all');
200
+ }
201
+ if ($checked_ontop) {
202
+ // Post process $categories rather than adding an exclude to the get_terms() query to keep the query the same across all posts (for any query cache)
203
+ $checked_categories = array();
204
+ $keys = array_keys($categories);
205
+ foreach ($keys as $k) {
206
+ if (in_array($categories[$k]->term_id, $args['selected_cats'])) {
207
+ $checked_categories[] = $categories[$k];
208
+ unset($categories[$k]);
209
+ }
210
+ }
211
+ // Put checked cats on top
212
+ $cat = $cat . call_user_func_array(array(
213
+ &$walker,
214
+ 'walk'
215
+ ), array(
216
+ $checked_categories,
217
+ 0,
218
+ $args
219
+ ));
220
+ }
221
+ // Then the rest of them
222
+ $cat = $cat . call_user_func_array(array(
223
+ &$walker,
224
+ 'walk'
225
+ ), array(
226
+ $categories,
227
+ 0,
228
+ $args
229
+ ));
230
+ return $cat;
231
+ }
232
+ }
app/classes/front/class-rss-pi-front.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The class that handles the front screen
5
+ *
6
+ *
7
+ */
8
+ class rssPIFront {
9
+
10
+ /**
11
+ * Whether the API key is valid
12
+ *
13
+ * @var boolean
14
+ */
15
+ var $is_key_valid;
16
+
17
+ /**
18
+ * The options
19
+ *
20
+ * @var array
21
+ */
22
+ var $options;
23
+
24
+ /**
25
+ * Aprompt for invalid/absent API keys
26
+ * @var string
27
+ */
28
+ var $key_prompt;
29
+
30
+ /**
31
+ * Initialise and hook all actions
32
+ */
33
+ public function init() {
34
+ // add noidex to front
35
+ add_action('wp_head', array($this, 'rss_pi_noindex_meta_tag'));
36
+ }
37
+
38
+
39
+ function rss_pi_noindex_meta_tag()
40
+ {
41
+ global $post,$rss_post_importer;
42
+ // Check if single post
43
+ if(is_single())
44
+ {
45
+
46
+ // Get current post id
47
+ $current_post_id = $post->ID;
48
+
49
+ // add options
50
+ $this->options = $rss_post_importer->options;
51
+
52
+ // get value of block indexing
53
+ $block_indexing = $this->options['settings']['block_indexing'];
54
+
55
+ // Check for block indexing
56
+ if($this->options['settings']['block_indexing'] == 'true'){
57
+ $meta_values = get_post_meta( $current_post_id, 'rss_pi_source_url', false );
58
+ // if meta value array is empty it means post is not imported by this plugin.
59
+ if(!empty($meta_values)){
60
+ echo '<meta name="robots" content="noindex">';
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ }
app/classes/import/class-rss-pi-engine.php CHANGED
@@ -1,365 +1,374 @@
1
- <?php
2
-
3
- /**
4
- * Main import engine
5
- *
6
- * @author Saurabh Shukla <saurabh@yapapaya.com>
7
- */
8
- class rssPIEngine {
9
-
10
- /**
11
- * The options
12
- *
13
- * @var array
14
- */
15
- var $options = array();
16
-
17
- /**
18
- * Start the engine
19
- *
20
- * @global type $rss_post_importer
21
- */
22
- public function __construct() {
23
-
24
- global $rss_post_importer;
25
-
26
- // load options
27
- $this->options = $rss_post_importer->options;
28
- }
29
-
30
- /**
31
- * Import feeds
32
- *
33
- * @return int
34
- */
35
- public function import_feed() {
36
-
37
- $post_count = 0;
38
-
39
- // filter cache lifetime
40
- add_filter('wp_feed_cache_transient_lifetime', array($this, 'frequency'));
41
-
42
- foreach ($this->options['feeds'] as $f) {
43
-
44
- // prepare and import each feed
45
- $items = $this->prepare_import($f);
46
- $post_count += count($items);
47
- }
48
-
49
- // reformulate import count
50
- $imports = intval($this->options['imports']) + $post_count;
51
-
52
- // update options
53
- update_option('rss_pi_feeds', array(
54
- 'feeds' => $this->options['feeds'],
55
- 'settings' => $this->options['settings'],
56
- 'latest_import' => date("Y-m-d H:i:s"),
57
- 'imports' => $imports
58
- ));
59
-
60
- global $rss_post_importer;
61
- // reload options
62
- $rss_post_importer->load_options();
63
-
64
- remove_filter('wp_feed_cache_transient_lifetime', array($this, 'frequency'));
65
-
66
- // log this
67
- rssPILog::log($post_count);
68
-
69
- return $post_count;
70
- }
71
-
72
- /**
73
- * Dummy function for filtering because we can't use anon ones yet
74
- * @return string
75
- */
76
- public function frequency() {
77
- return $this->options['settings']['frequency'];
78
- }
79
-
80
- /**
81
- * Prepares arguments and imports
82
- *
83
- * @param array $f feed array
84
- * @return array
85
- */
86
- private function prepare_import($f) {
87
- $args = array(
88
- 'feed_title' => $f['name'],
89
- 'max_posts' => $f['max_posts'],
90
- 'author_id' => $f['author_id'],
91
- 'category_id' => $f['category_id'],
92
- 'strip_html' => $f['strip_html'],
93
- 'save_to_db' => true
94
- );
95
- return $this->_import($f['url'], $args);
96
- }
97
-
98
- /**
99
- * Import feeds from url
100
- *
101
- * @param string $url The remote feed url
102
- * @param array $args Arguments for the import
103
- * @return null|array
104
- */
105
- private function _import($url = '', $args = array()) {
106
-
107
- if (empty($url)) {
108
- return;
109
- }
110
-
111
- $defaults = array(
112
- 'feed_title' => '',
113
- 'max_posts' => 5,
114
- 'author_id' => 1,
115
- 'category_id' => 0,
116
- 'strip_html' => true,
117
- 'save_to_db' => true
118
- );
119
-
120
- $args = wp_parse_args($args, $defaults);
121
-
122
- // include the default WP feed processing functions
123
- include_once( ABSPATH . WPINC . '/feed.php' );
124
-
125
- // get the right url for fetching (premium vs free)
126
- $url = $this->url($url);
127
-
128
- // fetch the feed
129
- $feed = fetch_feed($url);
130
-
131
- // save as posts
132
- $posts = $this->save($feed, $args);
133
-
134
- return $posts;
135
- }
136
-
137
- /**
138
- * Formulate the right url
139
- *
140
- * @param string $url
141
- * @return string
142
- */
143
- private function url($url) {
144
-
145
- $key = $this->options['settings']["feeds_api_key"];
146
-
147
- //if api key has been saved by user and is not empty
148
- if (isset($key) && !empty($key)) {
149
-
150
- $api_url = "http://www.feedsapi.org/fetch.php?key=" . $key . "&url=" . $url;
151
-
152
- return $api_url;
153
- }
154
-
155
- return $url;
156
- }
157
-
158
- /**
159
- * Save the feed
160
- *
161
- * @param object $feed The feed object
162
- * @param array $args The arguments
163
- * @return boolean
164
- */
165
- private function save($feed, $args = array()) {
166
- if (is_wp_error($feed)) {
167
- return false;
168
- }
169
- // filter the feed and get feed items
170
- $feed_items = $this->filter($feed, $args);
171
-
172
- // if we are saving
173
- if ($args['save_to_db']) {
174
- // insert and return
175
- $saved_posts = $this->insert($feed_items, $args);
176
- return $saved_posts;
177
- }
178
-
179
- // otherwsie return the feed items
180
- return $feed_items;
181
- }
182
-
183
- /**
184
- * Filter the feed based on keywords
185
- *
186
- * @param object $feed The feed object
187
- * @param array $args Arguments
188
- * @return array
189
- */
190
- private function filter($feed, $args) {
191
-
192
- // the count of keyword matched items
193
- $got = 0;
194
-
195
- // the current index of the items aray
196
- $index = 0;
197
-
198
- $filtered = array();
199
-
200
- // till we have as many as the posts needed
201
- while ($got < $args['max_posts']) {
202
-
203
- // get only one item at the current index
204
- $feed_item = $feed->get_items($index, 1);
205
-
206
- // if this is empty, get out of the while
207
- if (empty($feed_item)) {
208
- break;
209
- }
210
- // else be in a forever loop
211
- // get the content
212
- $content = $feed_item[0]->get_content();
213
-
214
- // test it against the keywords
215
- $tested = $this->test($content);
216
-
217
- // if this is good for us
218
- if ($tested) {
219
- $got++;
220
-
221
- array_push($filtered, $feed_item[0]);
222
- }
223
- // shift the index
224
- $index++;
225
- }
226
-
227
- return $filtered;
228
- }
229
-
230
- /**
231
- * Test a piece of content against keywords
232
- *
233
- * @param string $content
234
- * @return boolean
235
- */
236
- function test($content) {
237
- $keywords = $this->options['settings']['keywords'];
238
-
239
- if (empty($keywords)) {
240
- return true;
241
- }
242
-
243
- $match = false;
244
-
245
- // loop through keywords
246
- foreach ($keywords as $keyword) {
247
-
248
- // if the keyword is not a regex, make it one
249
- if (!$this->is_regex($keyword)) {
250
- $keyword = '/' . $keyword . '/i';
251
- }
252
-
253
- // look for keyword in content
254
- preg_match($keyword, $content, $tested);
255
-
256
- // if it's there, we are good
257
- if (!empty($tested)) {
258
- $match = true;
259
- // no need to test anymore
260
- break;
261
- }
262
- }
263
-
264
-
265
- return $match;
266
- }
267
-
268
- /**
269
- * Check if a string is regex
270
- *
271
- * @param string $str The string to check
272
- * @return boolean
273
- */
274
- private function is_regex($str) {
275
-
276
- // check regex with a regex!
277
- $regex = "/^\/[\s\S]+\/$/";
278
- preg_match($regex, $str, $matched);
279
- return !empty($matched);
280
- }
281
-
282
- /**
283
- * Insert feed items as posts
284
- *
285
- * @param array $items Fetched feed items
286
- * @param array $args arguments
287
- * @return array
288
- */
289
- private function insert($items, $args = array()) {
290
- $saved_posts = array();
291
-
292
- // Initialise the content parser
293
- $parser = new rssPIParser($this->options);
294
-
295
- // Featured Image setter
296
- $thumbnail = new rssPIFeaturedImage();
297
-
298
- foreach ($items as $item) {
299
- if (!$this->post_exists($item->get_permalink())) {
300
- $post = array(
301
- 'post_title' => $item->get_title(),
302
- // parse the content
303
- 'post_content' => $parser->_parse($item, $args['feed_title'], $args['strip_html']),
304
- 'post_status' => $this->options['settings']['post_status'],
305
- 'post_author' => $args['author_id'],
306
- 'post_category' => array($args['category_id']),
307
- 'comment_status' => $this->options['settings']['allow_comments'],
308
- 'post_date' => $item->get_date('Y-m-d H:i:s')
309
- );
310
-
311
- // insert as post
312
- $post_id = $this->_insert($post, $item->get_permalink());
313
-
314
- // set thumbnail
315
- $thumbnail->_set($item, $post_id);
316
-
317
- array_push($saved_posts, $post);
318
- }
319
- }
320
-
321
- return $saved_posts;
322
- }
323
-
324
- /**
325
- * Check if a feed ite is alreday imported
326
- *
327
- * @param string $permalink
328
- * @return boolean
329
- */
330
- private function post_exists($permalink) {
331
-
332
- // get all posts where the meta is stored
333
- $args = array(
334
- 'post_status' => 'any',
335
- 'meta_key' => 'rss_pi_source_url',
336
- 'meta_value' => esc_url($permalink)
337
- );
338
-
339
- $posts = get_posts($args);
340
-
341
- // Not already imported
342
- return(count($posts) > 0);
343
- }
344
-
345
- /**
346
- * Insert feed item as post
347
- *
348
- * @param array $post Post array
349
- * @param string $url source url meta
350
- * @return int
351
- */
352
- private function _insert($post, $url) {
353
-
354
- $_post = apply_filters('pre_rss_pi_insert_post', $post);
355
-
356
- $post_id = wp_insert_post($_post);
357
-
358
- add_action('save_rss_pi_post', $post_id);
359
-
360
- add_post_meta($post_id, 'rss_pi_source_url', esc_url($url));
361
-
362
- return $post_id;
363
- }
364
-
365
- }
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Main import engine
5
+ *
6
+ * @author Saurabh Shukla <saurabh@yapapaya.com>
7
+ */
8
+ class rssPIEngine {
9
+
10
+ /**
11
+ * The options
12
+ *
13
+ * @var array
14
+ */
15
+ var $options = array();
16
+
17
+ /**
18
+ * Start the engine
19
+ *
20
+ * @global type $rss_post_importer
21
+ */
22
+ public function __construct() {
23
+
24
+ global $rss_post_importer;
25
+
26
+ // load options
27
+ $this->options = $rss_post_importer->options;
28
+ }
29
+
30
+ /**
31
+ * Import feeds
32
+ *
33
+ * @return int
34
+ */
35
+ public function import_feed() {
36
+
37
+ $post_count = 0;
38
+
39
+ // filter cache lifetime
40
+ add_filter('wp_feed_cache_transient_lifetime', array($this, 'frequency'));
41
+
42
+ foreach ($this->options['feeds'] as $f) {
43
+
44
+ // prepare and import each feed
45
+ $items = $this->prepare_import($f);
46
+ $post_count += count($items);
47
+ }
48
+
49
+ // reformulate import count
50
+ $imports = intval($this->options['imports']) + $post_count;
51
+
52
+ // update options
53
+ update_option('rss_pi_feeds', array(
54
+ 'feeds' => $this->options['feeds'],
55
+ 'settings' => $this->options['settings'],
56
+ 'latest_import' => date("Y-m-d H:i:s"),
57
+ 'imports' => $imports
58
+ ));
59
+
60
+ global $rss_post_importer;
61
+ // reload options
62
+ $rss_post_importer->load_options();
63
+
64
+ remove_filter('wp_feed_cache_transient_lifetime', array($this, 'frequency'));
65
+
66
+ // log this
67
+ rssPILog::log($post_count);
68
+
69
+ return $post_count;
70
+ }
71
+
72
+ /**
73
+ * Dummy function for filtering because we can't use anon ones yet
74
+ * @return string
75
+ */
76
+ public function frequency() {
77
+ return $this->options['settings']['frequency'];
78
+ }
79
+
80
+ /**
81
+ * Prepares arguments and imports
82
+ *
83
+ * @param array $f feed array
84
+ * @return array
85
+ */
86
+ private function prepare_import($f) {
87
+ $args = array(
88
+ 'feed_title' => $f['name'],
89
+ 'max_posts' => $f['max_posts'],
90
+ 'author_id' => $f['author_id'],
91
+ 'category_id' => $f['category_id'],
92
+ 'strip_html' => $f['strip_html'],
93
+ 'save_to_db' => true
94
+ );
95
+ return $this->_import($f['url'], $args);
96
+ }
97
+
98
+ /**
99
+ * Import feeds from url
100
+ *
101
+ * @param string $url The remote feed url
102
+ * @param array $args Arguments for the import
103
+ * @return null|array
104
+ */
105
+ private function _import($url = '', $args = array()) {
106
+
107
+ if (empty($url)) {
108
+ return;
109
+ }
110
+
111
+ $defaults = array(
112
+ 'feed_title' => '',
113
+ 'max_posts' => 5,
114
+ 'author_id' => 1,
115
+ 'category_id' => 0,
116
+ 'strip_html' => true,
117
+ 'save_to_db' => true
118
+ );
119
+
120
+ $args = wp_parse_args($args, $defaults);
121
+
122
+ // include the default WP feed processing functions
123
+ include_once( ABSPATH . WPINC . '/feed.php' );
124
+
125
+ // get the right url for fetching (premium vs free)
126
+ $url = $this->url($url);
127
+
128
+ // fetch the feed
129
+ $feed = fetch_feed($url);
130
+
131
+ // save as posts
132
+ $posts = $this->save($feed, $args);
133
+
134
+ return $posts;
135
+ }
136
+
137
+ /**
138
+ * Formulate the right url
139
+ *
140
+ * @param string $url
141
+ * @return string
142
+ */
143
+ private function url($url) {
144
+
145
+ $key = $this->options['settings']["feeds_api_key"];
146
+
147
+ //if api key has been saved by user and is not empty
148
+ if (isset($key) && !empty($key)) {
149
+
150
+ $api_url = "http://www.feedsapi.org/fetch.php?key=" . $key . "&url=" . $url;
151
+
152
+ return $api_url;
153
+ }
154
+
155
+ return $url;
156
+ }
157
+
158
+ /**
159
+ * Save the feed
160
+ *
161
+ * @param object $feed The feed object
162
+ * @param array $args The arguments
163
+ * @return boolean
164
+ */
165
+ private function save($feed, $args = array()) {
166
+ if (is_wp_error($feed)) {
167
+ return false;
168
+ }
169
+ // filter the feed and get feed items
170
+ $feed_items = $this->filter($feed, $args);
171
+
172
+ // if we are saving
173
+ if ($args['save_to_db']) {
174
+ // insert and return
175
+ $saved_posts = $this->insert($feed_items, $args);
176
+ return $saved_posts;
177
+ }
178
+
179
+ // otherwsie return the feed items
180
+ return $feed_items;
181
+ }
182
+
183
+ /**
184
+ * Filter the feed based on keywords
185
+ *
186
+ * @param object $feed The feed object
187
+ * @param array $args Arguments
188
+ * @return array
189
+ */
190
+ private function filter($feed, $args) {
191
+
192
+ // the count of keyword matched items
193
+ $got = 0;
194
+
195
+ // the current index of the items aray
196
+ $index = 0;
197
+
198
+ $filtered = array();
199
+
200
+ // till we have as many as the posts needed
201
+ while ($got < $args['max_posts']) {
202
+
203
+ // get only one item at the current index
204
+ $feed_item = $feed->get_items($index, 1);
205
+
206
+ // if this is empty, get out of the while
207
+ if (empty($feed_item)) {
208
+ break;
209
+ }
210
+ // else be in a forever loop
211
+ // get the content
212
+ $content = $feed_item[0]->get_content();
213
+
214
+ // test it against the keywords
215
+ $tested = $this->test($content);
216
+
217
+ // if this is good for us
218
+ if ($tested) {
219
+ $got++;
220
+
221
+ array_push($filtered, $feed_item[0]);
222
+ }
223
+ // shift the index
224
+ $index++;
225
+ }
226
+
227
+ return $filtered;
228
+ }
229
+
230
+ /**
231
+ * Test a piece of content against keywords
232
+ *
233
+ * @param string $content
234
+ * @return boolean
235
+ */
236
+ function test($content) {
237
+ $keywords = $this->options['settings']['keywords'];
238
+
239
+ if (empty($keywords)) {
240
+ return true;
241
+ }
242
+
243
+ $match = false;
244
+
245
+ // loop through keywords
246
+ foreach ($keywords as $keyword) {
247
+
248
+ // if the keyword is not a regex, make it one
249
+ if (!$this->is_regex($keyword)) {
250
+ $keyword = '/' . $keyword . '/i';
251
+ }
252
+
253
+ // look for keyword in content
254
+ preg_match($keyword, $content, $tested);
255
+
256
+ // if it's there, we are good
257
+ if (!empty($tested)) {
258
+ $match = true;
259
+ // no need to test anymore
260
+ break;
261
+ }
262
+ }
263
+
264
+
265
+ return $match;
266
+ }
267
+
268
+ /**
269
+ * Check if a string is regex
270
+ *
271
+ * @param string $str The string to check
272
+ * @return boolean
273
+ */
274
+ private function is_regex($str) {
275
+
276
+ // check regex with a regex!
277
+ $regex = "/^\/[\s\S]+\/$/";
278
+ preg_match($regex, $str, $matched);
279
+ return !empty($matched);
280
+ }
281
+
282
+ /**
283
+ * Insert feed items as posts
284
+ *
285
+ * @param array $items Fetched feed items
286
+ * @param array $args arguments
287
+ * @return array
288
+ */
289
+ private function insert($items, $args = array()) {
290
+ $saved_posts = array();
291
+
292
+ // Initialise the content parser
293
+ $parser = new rssPIParser($this->options);
294
+
295
+ // Featured Image setter
296
+ $thumbnail = new rssPIFeaturedImage();
297
+
298
+ foreach ($items as $item) {
299
+ if (!$this->post_exists($item->get_permalink())) {
300
+ $post = array(
301
+ 'post_title' => $item->get_title(),
302
+ // parse the content
303
+ 'post_content' => $parser->_parse($item, $args['feed_title'], $args['strip_html']),
304
+ 'post_status' => $this->options['settings']['post_status'],
305
+ 'post_author' => $args['author_id'],
306
+ 'post_category' => array($args['category_id']),
307
+ 'comment_status' => $this->options['settings']['allow_comments'],
308
+ 'post_date' => $item->get_date('Y-m-d H:i:s')
309
+ );
310
+
311
+ // insert as post
312
+ $post_id = $this->_insert($post, $item->get_permalink());
313
+
314
+ // set thumbnail
315
+ $thumbnail->_set($item, $post_id);
316
+
317
+ array_push($saved_posts, $post);
318
+ }
319
+ }
320
+
321
+ return $saved_posts;
322
+ }
323
+
324
+ /**
325
+ * Check if a feed ite is alreday imported
326
+ *
327
+ * @param string $permalink
328
+ * @return boolean
329
+ */
330
+ private function post_exists($permalink) {
331
+
332
+ // get all posts where the meta is stored
333
+ $args = array(
334
+ 'post_status' => 'any',
335
+ 'meta_key' => 'rss_pi_source_url',
336
+ 'meta_value' => esc_url($permalink)
337
+ );
338
+
339
+ $posts = get_posts($args);
340
+
341
+ // Not already imported
342
+ return(count($posts) > 0);
343
+ }
344
+
345
+ /**
346
+ * Insert feed item as post
347
+ *
348
+ * @param array $post Post array
349
+ * @param string $url source url meta
350
+ * @return int
351
+ */
352
+ private function _insert($post, $url) {
353
+
354
+ if($post['post_category'][0] == ""){
355
+ $post['post_category'] = array(1);
356
+ }else{
357
+ if(is_array($post['post_category'][0]))
358
+ $post['post_category']= array_values($post['post_category'][0]);
359
+ else
360
+ $post['post_category']= array_values($post['post_category']);
361
+ }
362
+
363
+ $_post = apply_filters('pre_rss_pi_insert_post', $post);
364
+
365
+ $post_id = wp_insert_post($_post);
366
+
367
+ add_action('save_rss_pi_post', $post_id);
368
+
369
+ add_post_meta($post_id, 'rss_pi_source_url', esc_url($url));
370
+
371
+ return $post_id;
372
+ }
373
+
374
+ }
app/templates/feed-table-row.php CHANGED
@@ -1,94 +1,129 @@
1
- <?php
2
- $show = '';
3
-
4
- if (!isset($f)) {
5
- $f = array(
6
- 'id' => uniqid(),
7
- 'name' => 'New feed',
8
- 'url' => '',
9
- 'max_posts' => 5,
10
- 'author_id' => 1,
11
- 'category_id' => 1,
12
- 'strip_html' => 'false'
13
- );
14
-
15
- $show = 'show';
16
- }
17
-
18
- $category = get_the_category_by_ID(intval($f['category_id']));
19
- ?>
20
-
21
- <tr id="display_<?php echo ($f['id']); ?>" class="data-row <?php echo $show; ?>">
22
- <td>
23
- <strong><a href="#" class="toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php echo $f['name']; ?></a></strong>
24
- <div class="row-options">
25
- <a href="#" class="toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php _e('Edit', 'rss_pi'); ?></a> |
26
- <a href="#" class="delete-row" data-target="<?php echo ($f['id']); ?>"><?php _e('Delete', 'rss_pi'); ?></a>
27
- </div>
28
- </td>
29
- <td><?php echo $f['url']; ?></td>
30
- <td><?php echo $f['max_posts']; ?></td>
31
- <td><?php echo $category; ?></td>
32
- </tr>
33
- <tr id="edit_<?php echo ($f['id']); ?>" class="edit-row <?php echo $show; ?>">
34
- <td colspan="4">
35
- <table class="widefat edit-table">
36
- <tr>
37
- <td><label for="<?php echo ($f['id']); ?>-name"><?php _e("Feed name", 'rss_pi'); ?></label></td>
38
- <td>
39
- <input type="text" name="<?php echo ($f['id']); ?>-name" id="<?php echo ($f['id']); ?>-name" value="<?php echo ($f['name']); ?>" />
40
- </td>
41
- </tr>
42
- <tr>
43
- <td>
44
- <label for="<?php echo ($f['id']); ?>"><?php _e("Feed url", 'rss_pi'); ?></label>
45
- <p class="description">ie "http://news.google.com/?output=rss"</p>
46
- </td>
47
- <td><input type="text" name="<?php echo ($f['id']); ?>-url" id="<?php echo ($f['id']); ?>-url" value="<?php echo ($f['url']); ?>" /></td>
48
- </tr>
49
- <tr>
50
- <td><label for=""><?php _e("Max posts / import", 'rss_pi'); ?></label></td>
51
- <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>
52
- </tr>
53
- <tr>
54
- <td><label for=""><?php _e("Feed Author", 'rss_pi'); ?></label></td>
55
- <td>
56
- <?php
57
- if(!$this->is_key_valid){
58
- $this->key_error($this->key_prompt, true);
59
- }
60
- $args = array(
61
- 'id' => $f['id'] . '-author_id',
62
- 'name' => $f['id'] . '-author_id',
63
- 'selected' => $f['author_id'],
64
- 'class' => 'rss-pi-specific-feed-author'
65
- );
66
- wp_dropdown_users($args);
67
- ?>
68
- </td>
69
- </tr>
70
- <tr>
71
- <td><label for=""><?php _e("Category", 'rss_pi'); ?></label></td>
72
- <td><?php wp_dropdown_categories(array('hide_empty' => 0, 'hierarchical' => true, 'id' => $f['id'] . '-category_id', 'name' => $f['id'] . '-category_id', 'selected' => $f['category_id'])); ?></td>
73
- </tr>
74
- <tr>
75
- <td><label for=""><?php _e("Strip html tags", 'rss_pi'); ?></label></td>
76
- <td>
77
- <ul class="radiolist">
78
- <li>
79
- <label><input type="radio" id="<?php echo($f['id']); ?>-strip_html" name="<?php echo($f['id']); ?>-strip_html" value="true" <?php echo($f['strip_html'] == 'true' ? 'checked="checked"' : ''); ?> /> <?php _e('Yes', 'rss_pi'); ?></label>
80
- </li>
81
- <li>
82
- <label><input type="radio" id="<?php echo($f['id']); ?>-strip_html" name="<?php echo($f['id']); ?>-strip_html" value="false" <?php echo($f['strip_html'] == 'false' ? 'checked="checked"' : ''); ?> /> <?php _e('No', 'rss_pi'); ?></label>
83
- </li>
84
- </ul>
85
- </td>
86
- </tr>
87
- <tr>
88
- <td><input type="hidden" name="id" value="<?php echo($f['id']); ?>" /></td>
89
- <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>
90
- </tr>
91
- </table>
92
-
93
- </td>
94
- </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $show = '';
3
+
4
+ if (!isset($f)) {
5
+ $f = array(
6
+ 'id' => uniqid(),
7
+ 'name' => 'New feed',
8
+ 'url' => '',
9
+ 'max_posts' => 5,
10
+ 'author_id' => 1,
11
+ 'category_id' => 1,
12
+ 'strip_html' => 'false'
13
+ );
14
+
15
+ $show = 'show';
16
+ }
17
+
18
+ if(is_array($f['category_id'])){
19
+ foreach ( $f['category_id'] as $cat ) {
20
+ $catarray[] = get_cat_name($cat);
21
+ }
22
+ $category = join(',', $catarray);
23
+ }else{
24
+ if(empty($f['category_id'])){
25
+ $f['category_id'] = array(1);
26
+ $category = get_the_category_by_ID(1);
27
+ }
28
+ else{
29
+ $f['category_id'] = array($f['category_id']);
30
+ $category = get_the_category_by_ID(intval($f['category_id']));
31
+ }
32
+
33
+ }
34
+
35
+ ?>
36
+
37
+ <tr id="display_<?php echo ($f['id']); ?>" class="data-row <?php echo $show; ?>">
38
+ <td>
39
+ <strong><a href="#" class="toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php echo $f['name']; ?></a></strong>
40
+ <div class="row-options">
41
+ <a href="#" class="toggle-edit" data-target="<?php echo ($f['id']); ?>"><?php _e('Edit', 'rss_pi'); ?></a> |
42
+ <a href="#" class="delete-row" data-target="<?php echo ($f['id']); ?>"><?php _e('Delete', 'rss_pi'); ?></a>
43
+ </div>
44
+ </td>
45
+ <td><?php echo $f['url']; ?></td>
46
+ <td><?php echo $f['max_posts']; ?></td>
47
+ <td width="20%"><?php echo $category; ?></td>
48
+ </tr>
49
+ <tr id="edit_<?php echo ($f['id']); ?>" class="edit-row <?php echo $show; ?>">
50
+ <td colspan="4">
51
+ <table class="widefat edit-table">
52
+ <tr>
53
+ <td><label for="<?php echo ($f['id']); ?>-name"><?php _e("Feed name", 'rss_pi'); ?></label></td>
54
+ <td>
55
+ <input type="text" name="<?php echo ($f['id']); ?>-name" id="<?php echo ($f['id']); ?>-name" value="<?php echo ($f['name']); ?>" />
56
+ </td>
57
+ </tr>
58
+ <tr>
59
+ <td>
60
+ <label for="<?php echo ($f['id']); ?>"><?php _e("Feed url", 'rss_pi'); ?></label>
61
+ <p class="description">ie "http://news.google.com/?output=rss"</p>
62
+ </td>
63
+ <td><input type="text" name="<?php echo ($f['id']); ?>-url" id="<?php echo ($f['id']); ?>-url" value="<?php echo ($f['url']); ?>" /></td>
64
+ </tr>
65
+ <tr>
66
+ <td><label for=""><?php _e("Max posts / import", 'rss_pi'); ?></label></td>
67
+ <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>
68
+ </tr>
69
+ <tr>
70
+ <td><label for=""><?php _e("Feed Author", 'rss_pi'); ?></label></td>
71
+ <td>
72
+ <?php
73
+ if(!$this->is_key_valid){
74
+ $this->key_error($this->key_prompt, true);
75
+ }
76
+ $args = array(
77
+ 'id' => $f['id'] . '-author_id',
78
+ 'name' => $f['id'] . '-author_id',
79
+ 'selected' => $f['author_id'],
80
+ 'class' => 'rss-pi-specific-feed-author'
81
+ );
82
+ wp_dropdown_users($args);
83
+ ?>
84
+ </td>
85
+ </tr>
86
+ <tr>
87
+ <td><label for=""><?php _e("Category", 'rss_pi'); ?></label></td>
88
+ <td>
89
+ <?php
90
+ $disabled = '';
91
+ if (!$this->is_key_valid) {
92
+ $this->key_error($this->key_prompt_multiple_category, true);
93
+ wp_dropdown_categories(array('hide_empty' => 0, 'hierarchical' => true, 'id' => $f['id'] . '-category_id', 'name' => $f['id'] . '-category_id', 'selected' => $f['category_id']));
94
+ }
95
+ else{
96
+ ?>
97
+ <div class="category_container">
98
+ <?php
99
+ $rss_post_pi_admin = new rssPIAdmin();
100
+ $allcats = $rss_post_pi_admin->wp_category_checklist_rss_pi(0, false,$f['category_id']);
101
+ $allcats = str_replace( 'name="post_category[]"', 'name="'.$f['id'].'-category_id[]"', $allcats );
102
+ echo $allcats;
103
+ ?></div>
104
+ <?php
105
+ }
106
+ ?>
107
+ </td>
108
+ </tr>
109
+ <tr>
110
+ <td><label for=""><?php _e("Strip html tags", 'rss_pi'); ?></label></td>
111
+ <td>
112
+ <ul class="radiolist">
113
+ <li>
114
+ <label><input type="radio" id="<?php echo($f['id']); ?>-strip_html" name="<?php echo($f['id']); ?>-strip_html" value="true" <?php echo($f['strip_html'] == 'true' ? 'checked="checked"' : ''); ?> /> <?php _e('Yes', 'rss_pi'); ?></label>
115
+ </li>
116
+ <li>
117
+ <label><input type="radio" id="<?php echo($f['id']); ?>-strip_html" name="<?php echo($f['id']); ?>-strip_html" value="false" <?php echo($f['strip_html'] == 'false' ? 'checked="checked"' : ''); ?> /> <?php _e('No', 'rss_pi'); ?></label>
118
+ </li>
119
+ </ul>
120
+ </td>
121
+ </tr>
122
+ <tr>
123
+ <td><input type="hidden" name="id" value="<?php echo($f['id']); ?>" /></td>
124
+ <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>
125
+ </tr>
126
+ </table>
127
+
128
+ </td>
129
+ </tr>
app/templates/settings-table.php CHANGED
@@ -1,156 +1,172 @@
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>
5
- </tr>
6
- </thead>
7
- <tbody class="setting-rows">
8
- <tr class="edit-row show">
9
- <td colspan="4">
10
- <table class="widefat edit-table">
11
- <tr>
12
- <td>
13
- <label for="frequency"><?php _e('Frequency', "rss_pi"); ?></label>
14
- <p class="description"><?php _e('How often will the import run.', "rss_pi"); ?></p>
15
- </td>
16
- <td>
17
- <select name="frequency" id="frequency">
18
- <?php $x = wp_get_schedules(); ?>
19
- <?php foreach (array_keys($x) as $interval) : ?>
20
- <option value="<?php echo $interval; ?>" <?php
21
- if ($this->options['settings']['frequency'] == $interval) : echo('selected="selected"');
22
- endif;
23
- ?>><?php echo $x[$interval]['display']; ?></option>
24
- <?php endforeach; ?>
25
- </select>
26
- </td>
27
- </tr>
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"] : ""; ?>
38
- <input type="text" name="feeds_api_key" id="feeds_api_key" value="<?php echo $feeds_api_key; ?>" />
39
- </td>
40
- </tr>
41
-
42
- <tr>
43
- <td>
44
- <label for="post_template"><?php _e('Template', 'rss_pi'); ?></label>
45
- <p class="description"><?php _e('This is how the post will be formatted.', "rss_pi"); ?></p>
46
- <p class="description">
47
- <?php _e('Available tags:', "rss_pi"); ?>
48
- <dl>
49
- <dt><code>&lcub;$content&rcub;</code></dt>
50
- <dt><code>&lcub;$permalink&rcub;</code></dt>
51
- <dt><code>&lcub;$title&rcub;</code></dt>
52
- <dt><code>&lcub;$feed_title&rcub;</code></dt>
53
- <dt><code>&lcub;$excerpt:n&rcub;</code></dt>
54
- </dl>
55
- </p>
56
- </td>
57
- <td>
58
- <textarea name="post_template" id="post_template" cols="30" rows="10"><?php
59
- $value = (
60
- $this->options['settings']['post_template'] != '' ? $this->options['settings']['post_template'] : '{$content}' . "\nSource: " . '{$feed_title}'
61
- );
62
-
63
- $value = str_replace(array('\r', '\n'), array(chr(13), chr(10)), $value);
64
-
65
- echo stripslashes($value);
66
- ?></textarea>
67
- </td>
68
- </tr>
69
- <tr>
70
- <td>
71
- <label for="post_template"><?php _e('Keywords Filter', 'rss_pi'); ?></label>
72
- <p class="description"><?php _e('Enter keywords and/or regex, separated by commas', "rss_pi"); ?></p>
73
- <p class="description">
74
- <?php _e('Only posts matching these keywords/regex will be imported', "rss_pi"); ?>
75
- </p>
76
- </td>
77
- <td>
78
- <?php
79
- $disabled = '';
80
- if (!$this->is_key_valid) {
81
- $disabled= ' disabled="disabled"';
82
- $this->key_error($this->key_prompt, true);
83
- }
84
- ?>
85
- <textarea name="keyword_filter" id="post_template" cols="30" rows="10"<?php echo $disabled; ?>><?php
86
- echo implode(', ', $this->options['settings']['keywords']);
87
- ?></textarea>
88
- </td>
89
- </tr>
90
- <tr>
91
- <td><label for="post_status"><?php _e('Post status', "rss_pi"); ?></label></td>
92
- <td>
93
-
94
- <select name="post_status" id="post_status">
95
- <?php
96
- $statuses = get_post_stati('', 'objects');
97
-
98
- foreach ($statuses as $status) {
99
- ?>
100
- <option value="<?php echo($status->name); ?>" <?php
101
- if ($this->options['settings']['post_status'] == $status->name) : echo('selected="selected"');
102
- endif;
103
- ?>><?php echo($status->label); ?></option>
104
- <?php
105
- }
106
- ?>
107
- </select>
108
- </td>
109
- </tr>
110
- <tr>
111
- <td><?php _e('Author', 'rss_pi'); ?></td>
112
- <td>
113
- <?php
114
- $args = array(
115
- 'id' => 'author_id',
116
- 'name' => 'author_id',
117
- 'selected' => $this->options['settings']['author_id']
118
- );
119
- wp_dropdown_users($args);
120
- ?>
121
- </td>
122
- </tr>
123
- <tr>
124
- <td><?php _e('Allow comments', "rss_pi"); ?></td>
125
- <td>
126
- <ul class="radiolist">
127
- <li>
128
- <label><input type="radio" id="allow_comments" name="allow_comments" value="true" <?php echo($this->options['settings']['allow_comments'] == true ? 'checked="checked"' : ''); ?> /> <?php _e('Yes', 'rss_pi'); ?></label>
129
- </li>
130
- <li>
131
- <label><input type="radio" id="allow_comments" name="allow_comments" value="false" <?php echo($this->options['settings']['allow_comments'] == 'false' ? 'checked="checked"' : ''); ?> /> <?php _e('No', 'rss_pi'); ?></label>
132
- </li>
133
- </ul>
134
- </td>
135
- </tr>
136
- <tr>
137
- <td>
138
- <?php _e('Enable logging?', "rss_pi"); ?>
139
- <p class="description"><?php _e('The logfile can be found <a href="#" class="load-log">here</a>.', "rss_pi"); ?></p>
140
- </td>
141
- <td>
142
- <ul class="radiolist">
143
- <li>
144
- <label><input type="radio" id="enable_logging" name="enable_logging" value="true" <?php echo($this->options['settings']['enable_logging'] == 'true' ? 'checked="checked"' : ''); ?> /> <?php _e('Yes', 'rss_pi'); ?></label>
145
- </li>
146
- <li>
147
- <label><input type="radio" id="enable_logging" name="enable_logging" value="false" <?php echo($this->options['settings']['enable_logging'] == 'false' || $this->options['settings']['enable_logging'] == '' ? 'checked="checked"' : ''); ?> /> <?php _e('No', 'rss_pi'); ?></label>
148
- </li>
149
- </ul>
150
- </td>
151
- </tr>
152
- </table>
153
- </td>
154
- </tr>
155
- </tbody>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  </table>
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>
5
+ </tr>
6
+ </thead>
7
+ <tbody class="setting-rows">
8
+ <tr class="edit-row show">
9
+ <td colspan="4">
10
+ <table class="widefat edit-table">
11
+ <tr>
12
+ <td>
13
+ <label for="frequency"><?php _e('Frequency', "rss_pi"); ?></label>
14
+ <p class="description"><?php _e('How often will the import run.', "rss_pi"); ?></p>
15
+ </td>
16
+ <td>
17
+ <select name="frequency" id="frequency">
18
+ <?php $x = wp_get_schedules(); ?>
19
+ <?php foreach (array_keys($x) as $interval) : ?>
20
+ <option value="<?php echo $interval; ?>" <?php
21
+ if ($this->options['settings']['frequency'] == $interval) : echo('selected="selected"');
22
+ endif;
23
+ ?>><?php echo $x[$interval]['display']; ?></option>
24
+ <?php endforeach; ?>
25
+ </select>
26
+ </td>
27
+ </tr>
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"] : ""; ?>
38
+ <input type="text" name="feeds_api_key" id="feeds_api_key" value="<?php echo $feeds_api_key; ?>" />
39
+ </td>
40
+ </tr>
41
+
42
+ <tr>
43
+ <td>
44
+ <label for="post_template"><?php _e('Template', 'rss_pi'); ?></label>
45
+ <p class="description"><?php _e('This is how the post will be formatted.', "rss_pi"); ?></p>
46
+ <p class="description">
47
+ <?php _e('Available tags:', "rss_pi"); ?>
48
+ <dl>
49
+ <dt><code>&lcub;$content&rcub;</code></dt>
50
+ <dt><code>&lcub;$permalink&rcub;</code></dt>
51
+ <dt><code>&lcub;$title&rcub;</code></dt>
52
+ <dt><code>&lcub;$feed_title&rcub;</code></dt>
53
+ <dt><code>&lcub;$excerpt:n&rcub;</code></dt>
54
+ </dl>
55
+ </p>
56
+ </td>
57
+ <td>
58
+ <textarea name="post_template" id="post_template" cols="30" rows="10"><?php
59
+ $value = (
60
+ $this->options['settings']['post_template'] != '' ? $this->options['settings']['post_template'] : '{$content}' . "\nSource: " . '{$feed_title}'
61
+ );
62
+
63
+ $value = str_replace(array('\r', '\n'), array(chr(13), chr(10)), $value);
64
+
65
+ echo stripslashes($value);
66
+ ?></textarea>
67
+ </td>
68
+ </tr>
69
+ <tr>
70
+ <td>
71
+ <label for="post_template"><?php _e('Keywords Filter', 'rss_pi'); ?></label>
72
+ <p class="description"><?php _e('Enter keywords and/or regex, separated by commas', "rss_pi"); ?></p>
73
+ <p class="description">
74
+ <?php _e('Only posts matching these keywords/regex will be imported', "rss_pi"); ?>
75
+ </p>
76
+ </td>
77
+ <td>
78
+ <?php
79
+ $disabled = '';
80
+ if (!$this->is_key_valid) {
81
+ $disabled= ' disabled="disabled"';
82
+ $this->key_error($this->key_prompt, true);
83
+ }
84
+ ?>
85
+ <textarea name="keyword_filter" id="post_template" cols="30" rows="10"<?php echo $disabled; ?>><?php
86
+ echo implode(', ', $this->options['settings']['keywords']);
87
+ ?></textarea>
88
+ </td>
89
+ </tr>
90
+ <tr>
91
+ <td><label for="post_status"><?php _e('Post status', "rss_pi"); ?></label></td>
92
+ <td>
93
+
94
+ <select name="post_status" id="post_status">
95
+ <?php
96
+ $statuses = get_post_stati('', 'objects');
97
+
98
+ foreach ($statuses as $status) {
99
+ ?>
100
+ <option value="<?php echo($status->name); ?>" <?php
101
+ if ($this->options['settings']['post_status'] == $status->name) : echo('selected="selected"');
102
+ endif;
103
+ ?>><?php echo($status->label); ?></option>
104
+ <?php
105
+ }
106
+ ?>
107
+ </select>
108
+ </td>
109
+ </tr>
110
+ <tr>
111
+ <td><?php _e('Author', 'rss_pi'); ?></td>
112
+ <td>
113
+ <?php
114
+ $args = array(
115
+ 'id' => 'author_id',
116
+ 'name' => 'author_id',
117
+ 'selected' => $this->options['settings']['author_id']
118
+ );
119
+ wp_dropdown_users($args);
120
+ ?>
121
+ </td>
122
+ </tr>
123
+ <tr>
124
+ <td><?php _e('Allow comments', "rss_pi"); ?></td>
125
+ <td>
126
+ <ul class="radiolist">
127
+ <li>
128
+ <label><input type="radio" id="allow_comments" name="allow_comments" value="true" <?php echo($this->options['settings']['allow_comments'] == true ? 'checked="checked"' : ''); ?> /> <?php _e('Yes', 'rss_pi'); ?></label>
129
+ </li>
130
+ <li>
131
+ <label><input type="radio" id="allow_comments" name="allow_comments" value="false" <?php echo($this->options['settings']['allow_comments'] == 'false' ? 'checked="checked"' : ''); ?> /> <?php _e('No', 'rss_pi'); ?></label>
132
+ </li>
133
+ </ul>
134
+ </td>
135
+ </tr>
136
+ <tr>
137
+ <td>
138
+ <?php _e('Block search indexing?', "rss_pi"); ?>
139
+ <p class="description"><?php _e('Prevent your content from appearing in search results.', "rss_pi"); ?></p>
140
+ </td>
141
+ <td>
142
+ <ul class="radiolist">
143
+ <li>
144
+ <label><input type="radio" id="block_indexing" name="block_indexing" value="true" <?php echo($this->options['settings']['block_indexing'] == 'true' ? 'checked="checked"' : ''); ?> /> <?php _e('Yes', 'rss_pi'); ?></label>
145
+ </li>
146
+ <li>
147
+ <label><input type="radio" id="block_indexing" name="block_indexing" value="false" <?php echo($this->options['settings']['block_indexing'] == 'false' || $this->options['settings']['block_indexing'] == '' ? 'checked="checked"' : ''); ?> /> <?php _e('No', 'rss_pi'); ?></label>
148
+ </li>
149
+ </ul>
150
+ </td>
151
+ </tr>
152
+ <tr>
153
+ <td>
154
+ <?php _e('Enable logging?', "rss_pi"); ?>
155
+ <p class="description"><?php _e('The logfile can be found <a href="#" class="load-log">here</a>.', "rss_pi"); ?></p>
156
+ </td>
157
+ <td>
158
+ <ul class="radiolist">
159
+ <li>
160
+ <label><input type="radio" id="enable_logging" name="enable_logging" value="true" <?php echo($this->options['settings']['enable_logging'] == 'true' ? 'checked="checked"' : ''); ?> /> <?php _e('Yes', 'rss_pi'); ?></label>
161
+ </li>
162
+ <li>
163
+ <label><input type="radio" id="enable_logging" name="enable_logging" value="false" <?php echo($this->options['settings']['enable_logging'] == 'false' || $this->options['settings']['enable_logging'] == '' ? 'checked="checked"' : ''); ?> /> <?php _e('No', 'rss_pi'); ?></label>
164
+ </li>
165
+ </ul>
166
+ </td>
167
+ </tr>
168
+ </table>
169
+ </td>
170
+ </tr>
171
+ </tbody>
172
  </table>
index.php CHANGED
@@ -1,64 +1,67 @@
1
- <?php
2
-
3
- /*
4
- Plugin Name: Rss Post Importer
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.0.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
12
- Text Domain: rss_pi
13
- Domain Path: /lang/
14
- */
15
-
16
-
17
- // define some constants
18
- if (!defined('RSS_PI_PATH')) {
19
- define('RSS_PI_PATH', trailingslashit(plugin_dir_path(__FILE__)));
20
- }
21
-
22
- if (!defined('RSS_PI_URL')) {
23
- define('RSS_PI_URL', trailingslashit(plugin_dir_url(__FILE__)));
24
- }
25
-
26
- if (!defined('RSS_PI_BASENAME')) {
27
- define('RSS_PI_BASENAME', plugin_basename(__FILE__));
28
- }
29
-
30
- if (!defined('RSS_PI_VERSION')) {
31
- define('RSS_PI_VERSION', '2.0.1');
32
- }
33
-
34
- if (!defined('RSS_PI_LOG_PATH')) {
35
- define('RSS_PI_LOG_PATH', trailingslashit(WP_CONTENT_DIR) . 'rsspi-log/');
36
- }
37
-
38
- if(!is_dir(RSS_PI_LOG_PATH)){
39
- mkdir(RSS_PI_LOG_PATH);
40
- }
41
-
42
- // helper classes
43
- include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-log.php';
44
- include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-featured-image.php';
45
- include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-parser.php';
46
-
47
- // admin classes
48
- include_once RSS_PI_PATH . 'app/classes/admin/class-rss-pi-admin-processor.php';
49
- include_once RSS_PI_PATH . 'app/classes/admin/class-rss-pi-admin.php';
50
-
51
- // main importers
52
- include_once RSS_PI_PATH . 'app/classes/import/class-rss-pi-engine.php';
53
- include_once RSS_PI_PATH . 'app/classes/import/class-rss-pi-cron.php';
54
-
55
- // the main loader class
56
- include_once RSS_PI_PATH . 'app/class-rss-post-importer.php';
57
-
58
-
59
- // initialise plugin as a global var
60
- global $rss_post_importer;
61
-
62
- $rss_post_importer = new rssPostImporter();
63
-
64
- $rss_post_importer->init();
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ Plugin Name: Rss Post Importer
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.0.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
12
+ Text Domain: rss_pi
13
+ Domain Path: /lang/
14
+ */
15
+
16
+
17
+ // define some constants
18
+ if (!defined('RSS_PI_PATH')) {
19
+ define('RSS_PI_PATH', trailingslashit(plugin_dir_path(__FILE__)));
20
+ }
21
+
22
+ if (!defined('RSS_PI_URL')) {
23
+ define('RSS_PI_URL', trailingslashit(plugin_dir_url(__FILE__)));
24
+ }
25
+
26
+ if (!defined('RSS_PI_BASENAME')) {
27
+ define('RSS_PI_BASENAME', plugin_basename(__FILE__));
28
+ }
29
+
30
+ if (!defined('RSS_PI_VERSION')) {
31
+ define('RSS_PI_VERSION', '2.0.2');
32
+ }
33
+
34
+ if (!defined('RSS_PI_LOG_PATH')) {
35
+ define('RSS_PI_LOG_PATH', trailingslashit(WP_CONTENT_DIR) . 'rsspi-log/');
36
+ }
37
+
38
+ if(!is_dir(RSS_PI_LOG_PATH)){
39
+ mkdir(RSS_PI_LOG_PATH);
40
+ }
41
+
42
+ // helper classes
43
+ include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-log.php';
44
+ include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-featured-image.php';
45
+ include_once RSS_PI_PATH . 'app/classes/helpers/class-rss-pi-parser.php';
46
+
47
+ // admin classes
48
+ include_once RSS_PI_PATH . 'app/classes/admin/class-rss-pi-admin-processor.php';
49
+ include_once RSS_PI_PATH . 'app/classes/admin/class-rss-pi-admin.php';
50
+
51
+ // Front classes
52
+ include_once RSS_PI_PATH . 'app/classes/front/class-rss-pi-front.php';
53
+
54
+ // main importers
55
+ include_once RSS_PI_PATH . 'app/classes/import/class-rss-pi-engine.php';
56
+ include_once RSS_PI_PATH . 'app/classes/import/class-rss-pi-cron.php';
57
+
58
+ // the main loader class
59
+ include_once RSS_PI_PATH . 'app/class-rss-post-importer.php';
60
+
61
+
62
+ // initialise plugin as a global var
63
+ global $rss_post_importer;
64
+
65
+ $rss_post_importer = new rssPostImporter();
66
+
67
+ $rss_post_importer->init();
readme.txt CHANGED
@@ -4,8 +4,8 @@ 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,
5
  RSSImport, yahoo pipes, WP Pipes, Import XML feed , FeedSyndicate, RSSpost, RSS in Page
6
  Requires at least: 3.5
7
- Tested up to: 4.0
8
- Stable tag: 2.0.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -13,7 +13,7 @@ RSS Post Importer is the Most Powerful & Easy to use WordPress RSS Aggregator pl
13
 
14
  == Description ==
15
 
16
- **This is the Best WordPress Plugin for Syndicating, Importing, Curating, Merging and Displaying Full Text RSS and Atom feeds with Featured Images on your WordPress Blog.**
17
 
18
 
19
 
@@ -37,6 +37,7 @@ Not only does this WordPress RSS Aggregator Plugin import a snippet of the rss f
37
  * Set number of posts and category per feed.
38
  * Set what author to assign imported content to.
39
  * Simple template for formatting imported content.
 
40
 
41
  **Premium Features include:**
42
 
@@ -47,6 +48,7 @@ Not only does this WordPress RSS Aggregator Plugin import a snippet of the rss f
47
  * Define the number of Words Your Excerpt should have.
48
  * Fetch Full Text Articles + Images from Truncated Feeds.
49
  * Assign Any Imported RSS Feed Stream to a specific Author.
 
50
 
51
  **Don't take my word for it, here's how easy to use it is:**
52
 
@@ -75,6 +77,10 @@ WP-o-Matic , WP-o-Matic, RSSImport, FeedWordPress, Syndicate Press, FeedWeb, RSS
75
 
76
  == Change Log ==
77
 
 
 
 
 
78
  = Version 2.0.1 =
79
  * Fixed cron error
80
  * Fixed permalink placeholder truncation
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,
5
  RSSImport, yahoo pipes, WP Pipes, Import XML feed , FeedSyndicate, RSSpost, RSS in Page
6
  Requires at least: 3.5
7
+ Tested up to: 4.1
8
+ Stable tag: 2.0.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
13
 
14
  == Description ==
15
 
16
+ **This is the Best WordPress Plugin for Syndicating, Importing, Curating, Merging and Displaying Full Text RSS and Atom feeds on your WordPress Blog.**
17
 
18
 
19
 
37
  * Set number of posts and category per feed.
38
  * Set what author to assign imported content to.
39
  * Simple template for formatting imported content.
40
+ * Block search indexing to prevent your content from appearing in search results.
41
 
42
  **Premium Features include:**
43
 
48
  * Define the number of Words Your Excerpt should have.
49
  * Fetch Full Text Articles + Images from Truncated Feeds.
50
  * Assign Any Imported RSS Feed Stream to a specific Author.
51
+ * Multiple category selection when import post.
52
 
53
  **Don't take my word for it, here's how easy to use it is:**
54
 
77
 
78
  == Change Log ==
79
 
80
+ = Version 2.0.2 =
81
+ * Block search indexing
82
+ * Multiple category selection for premium users
83
+
84
  = Version 2.0.1 =
85
  * Fixed cron error
86
  * Fixed permalink placeholder truncation