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