Changeset 2384510
- Timestamp:
- 09/18/2020 02:24:42 PM (5 years ago)
- Location:
- shopping-feed
- Files:
-
- 2 deleted
- 12 edited
- 1 copied
-
tags/6.0.9 (copied) (copied from shopping-feed/trunk)
-
tags/6.0.9/assets/css/app.css (modified) (2 diffs)
-
tags/6.0.9/readme.txt (modified) (2 diffs)
-
tags/6.0.9/shoppingfeed.php (modified) (2 diffs)
-
tags/6.0.9/src/Admin/WoocommerceFilters.php (modified) (1 diff)
-
tags/6.0.9/src/Feed/Generator.php (modified) (3 diffs)
-
tags/6.0.9/src/ShoppingFeedHelper.php (modified) (1 diff)
-
tags/6.0.9/vendor (deleted)
-
trunk/assets/css/app.css (modified) (2 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/shoppingfeed.php (modified) (2 diffs)
-
trunk/src/Admin/WoocommerceFilters.php (modified) (1 diff)
-
trunk/src/Feed/Generator.php (modified) (3 diffs)
-
trunk/src/ShoppingFeedHelper.php (modified) (1 diff)
-
trunk/vendor (deleted)
Legend:
- Unmodified
- Added
- Removed
-
shopping-feed/tags/6.0.9/assets/css/app.css
r2339808 r2384510 102 102 .sf__button__logout.button:hover, .sf__button__logout.button:active, .sf__button__logout.button:focus { 103 103 color: #fff; 104 border-color: # 56297b;105 background-color: # 56297b; }104 border-color: #7035a1; 105 background-color: #7035a1; } 106 106 107 107 .sf__requirements .success, … … 222 222 flex-basis: 33%; } } 223 223 224 /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXMiOlsiYXBwLnNjc3MiLCJtYWluL19taXhpbnMuc2NzcyIsIm1haW4vX2NvbG9ycy5zY3NzIiwibXVsdGkvX211bHRpLnNjc3MiLCJtYWluL19zZi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJtYWluL21peGluc1wiO1xuQGltcG9ydCBcIm1haW4vY29sb3JzXCI7XG5AaW1wb3J0IFwibXVsdGkvbXVsdGlcIjtcbkBpbXBvcnQgXCJtYWluL3NmXCI7IiwiLy8gQm91cmJvbidzIGVzc2VudGlhbHMgbWl4aW5zXG4kZW0tYmFzZTogMTZweCAhZGVmYXVsdDtcbi8vIFN0cmlwIHVuaXRzXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG5cdEByZXR1cm4gKCR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSkpO1xufVxuLy8gUFggdG8gRU1cbkBmdW5jdGlvbiBlbSgkcHh2YWwsICRiYXNlOiAkZW0tYmFzZSkge1xuXHRAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuXHQgICRweHZhbDogc3RyaXAtdW5pdHMoJHB4dmFsKTtcblx0fVxuXHRAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG5cdCAgJGJhc2U6IHN0cmlwLXVuaXRzKCRiYXNlKTtcblx0fVxuXHRAcmV0dXJuICgkcHh2YWwgLyAkYmFzZSkgKiAxZW07XG59XG4vL0JyZWFrcG9pbnRzXG4kYnJlYWtwb2ludHM6IChcbiAgICB4c206IGVtKDQ4MCksXG4gICAgc206IGVtKDc2OCksXG4gICAgbWQ6IGVtKDEwMjQpLFxuICAgIGxnOiBlbSgxMjYwKSxcbiAgICB4bGc6IGVtKDE0NDApXG4pO1xuXG5AbWl4aW4gYnJlYWtwb2ludHMoJGJyZWFrcG9pbnQpIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRtYXA6ICRicmVha3BvaW50cywgJGtleTogJGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cbi8vIEhvdmVyIEFjdGl2ZSBGb2N1cyBwc2V1ZG8gc2VsZWN0b3IgbWl4aW5cbkBtaXhpbiBob3ZlciB7XG5cdCY6aG92ZXIsICY6YWN0aXZlLCAmOmZvY3VzIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuLy8gU21vb3RoIHRleHRcbkBtaXhpbiBzbW9vdGhUZXh0IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn0iLCIkd2hpdGU6ICNmZmY7XG4kYmxhY2s6ICMwMDA7XG4kcHJpbWFyeTogIzYzMkY4RTtcbiRzZWNvbmRhcnk6ICMxQ0I2OUI7XG4kdGV4dGNvbG9yOiAjMjMyODJEO1xuJGdyYXk6ICM5RTlFOUU7XG4kYmx1ZTogIzA0Mjc0RDtcbiRwaW5rOiAjRTkxRTYzO1xuIiwiLm11bHRpLXdyYXBwZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIsXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyMDBweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIHdpZHRoOiA1MCU7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5ub24tc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjO1xufVxuXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLm11bHRpLXdyYXBwZXIgLmhlYWRlciB7XG4gICAgY29sb3I6ICM0ZjRmNGY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ubXVsdGktd3JhcHBlciAuaXRlbS1ncm91cCB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5pdGVtLWdyb3VwIC5ncm91cC1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5zZWFyY2gtaW5wdXQge1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkOmhvdmVyLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xufSIsIi5zZiB7XG5cbiAgJl9fbG9nbyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX2xvZ28uc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXIgbGVmdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWF4LXdpZHRoOiAyOTdweDtcbiAgICBoZWlnaHQ6IDUzcHg7XG4gIH1cblxuICAmX192ZXJzaW9uIHtcbiAgICBjb2xvcjogJGdyYXk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgIG1hcmdpbjogNXB4IDA7XG4gIH1cblxuICAmX19idXR0b24uYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgQGluY2x1ZGUgaG92ZXIge1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRzZWNvbmRhcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkc2Vjb25kYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fYnV0dG9uX19sb2dvdXQuYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgYm9yZGVyLWNvbG9yOiB kYXJrZW4oJHByaW1hcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkcHJpbWFyeSwgNSUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3JlcXVpcmVtZW50cyB7XG4gICAgLnN1Y2Nlc3MsXG4gICAgLmZhaWxlZCB7XG4gICAgICBAaW5jbHVkZSBzbW9vdGhUZXh0O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuICAgICAgY29sb3I6ICR0ZXh0Y29sb3I7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFxmMTQ3XCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZmFpbGVkIHtcbiAgICAgIGNvbG9yOiAkdGV4dGNvbG9yO1xuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFxmMzM1XCI7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRncmF5O1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgJl9faGVybyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgIzAzMjc0RCAwJSwgIzUyMzA4MSAxMDAlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHBhZGRpbmc6IDMwcHg7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDMwcHg7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX21hcmtldGluZy5zdmdcIikgbm8tcmVwZWF0IGNlbnRlciByaWdodDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgICAmLS10aXRsZXtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcbiAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgfVxuICB9XG5cbiAgJl9fbWFya2V0aW5nIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICRwcmltYXJ5O1xuICAgIHBhZGRpbmctbGVmdDogMjZweDtcblxuICAgICYtLXRpdGxle1xuICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICB9XG4gICAgJi0tc3VidGl0bGV7XG4gICAgICBjb2xvcjogJGdyYXk7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDMuMzNweDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gICAgfVxuICAgICYtLXRleHR7XG4gICAgICBjb2xvcjogJHRleHRjb2xvcjtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgfVxuXG4gICAgJi0tZG93bmxvYWQge1xuICAgICAgcGFkZGluZzogMWVtIDA7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgfVxuXG4gICAgICBhIHtcbiAgICAgICAgQGluY2x1ZGUgc21vb3RoVGV4dDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7XG4gICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xuICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzQ2XCI7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19wbHVnaW57XG4gICAgLnNmX19ub3RpY2UtLXN0YXJ0IGF7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludHMobWQpIHtcbiAgICAmX19jb2x1bW5zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuICAgICZfX2NvbHVtbiB7XG4gICAgICBmbGV4LWJhc2lzOiA2NiU7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDMzJTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBR0FBLEFBQUEsY0FBYyxDQUFDO0VBQ1gsTUFBTSxFQUFFLGNBQWM7RUFDdEIsYUFBYSxFQUFFLEdBQUc7RUFDbEIsS0FBSyxFQUFFLElBQUksR0FDZDs7QUFFRCxBQUFBLGNBQWMsQ0FBQyxxQkFBcUI7QUFDcEMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0VBQzdCLFVBQVUsRUFBRSxVQUFVO0VBQ3RCLE9BQU8sRUFBRSxZQUFZO0VBQ3JCLE1BQU0sRUFBRSxLQUFLO0VBQ2IsVUFBVSxFQUFFLE1BQU07RUFDbEIsT0FBTyxFQUFFLElBQUk7RUFDYixjQUFjLEVBQUUsR0FBRztFQUNuQixLQUFLLEVBQUUsR0FBRyxHQUNiOztBQUVELEFBQUEsY0FBYyxDQUFDLHFCQUFxQixDQUFDO0VBQ2pDLFVBQVUsRUFBRSxPQUFPO0VBQ25CLFlBQVksRUFBRSxjQUFjLEdBQy9COztBQUVELEFBQUEsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0VBQzdCLFVBQVUsRUFBRSxJQUFJLEdBQ25COztBQUVELEFBQUEsY0FBYyxDQUFDLE9BQU8sQ0FBQztFQUNuQixLQUFLLEVBQUUsT0FBTztFQUNkLE1BQU0sRUFBRSxPQUFPO0VBQ2YsV0FBVyxFQUFFLElBQUk7RUFDakIsYUFBYSxFQUFFLEd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 */224 /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXMiOlsiYXBwLnNjc3MiLCJtYWluL19taXhpbnMuc2NzcyIsIm1haW4vX2NvbG9ycy5zY3NzIiwibXVsdGkvX211bHRpLnNjc3MiLCJtYWluL19zZi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJtYWluL21peGluc1wiO1xuQGltcG9ydCBcIm1haW4vY29sb3JzXCI7XG5AaW1wb3J0IFwibXVsdGkvbXVsdGlcIjtcbkBpbXBvcnQgXCJtYWluL3NmXCI7IiwiLy8gQm91cmJvbidzIGVzc2VudGlhbHMgbWl4aW5zXG4kZW0tYmFzZTogMTZweCAhZGVmYXVsdDtcbi8vIFN0cmlwIHVuaXRzXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG5cdEByZXR1cm4gKCR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSkpO1xufVxuLy8gUFggdG8gRU1cbkBmdW5jdGlvbiBlbSgkcHh2YWwsICRiYXNlOiAkZW0tYmFzZSkge1xuXHRAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuXHQgICRweHZhbDogc3RyaXAtdW5pdHMoJHB4dmFsKTtcblx0fVxuXHRAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG5cdCAgJGJhc2U6IHN0cmlwLXVuaXRzKCRiYXNlKTtcblx0fVxuXHRAcmV0dXJuICgkcHh2YWwgLyAkYmFzZSkgKiAxZW07XG59XG4vL0JyZWFrcG9pbnRzXG4kYnJlYWtwb2ludHM6IChcbiAgICB4c206IGVtKDQ4MCksXG4gICAgc206IGVtKDc2OCksXG4gICAgbWQ6IGVtKDEwMjQpLFxuICAgIGxnOiBlbSgxMjYwKSxcbiAgICB4bGc6IGVtKDE0NDApXG4pO1xuXG5AbWl4aW4gYnJlYWtwb2ludHMoJGJyZWFrcG9pbnQpIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRtYXA6ICRicmVha3BvaW50cywgJGtleTogJGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cbi8vIEhvdmVyIEFjdGl2ZSBGb2N1cyBwc2V1ZG8gc2VsZWN0b3IgbWl4aW5cbkBtaXhpbiBob3ZlciB7XG5cdCY6aG92ZXIsICY6YWN0aXZlLCAmOmZvY3VzIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuLy8gU21vb3RoIHRleHRcbkBtaXhpbiBzbW9vdGhUZXh0IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn0iLCIkd2hpdGU6ICNmZmY7XG4kYmxhY2s6ICMwMDA7XG4kcHJpbWFyeTogIzYzMkY4RTtcbiRzZWNvbmRhcnk6ICMxQ0I2OUI7XG4kdGV4dGNvbG9yOiAjMjMyODJEO1xuJGdyYXk6ICM5RTlFOUU7XG4kYmx1ZTogIzA0Mjc0RDtcbiRwaW5rOiAjRTkxRTYzO1xuIiwiLm11bHRpLXdyYXBwZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIsXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyMDBweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIHdpZHRoOiA1MCU7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5ub24tc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjO1xufVxuXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLm11bHRpLXdyYXBwZXIgLmhlYWRlciB7XG4gICAgY29sb3I6ICM0ZjRmNGY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ubXVsdGktd3JhcHBlciAuaXRlbS1ncm91cCB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5pdGVtLWdyb3VwIC5ncm91cC1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5zZWFyY2gtaW5wdXQge1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkOmhvdmVyLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xufSIsIi5zZiB7XG5cbiAgJl9fbG9nbyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX2xvZ28uc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXIgbGVmdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWF4LXdpZHRoOiAyOTdweDtcbiAgICBoZWlnaHQ6IDUzcHg7XG4gIH1cblxuICAmX192ZXJzaW9uIHtcbiAgICBjb2xvcjogJGdyYXk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgIG1hcmdpbjogNXB4IDA7XG4gIH1cblxuICAmX19idXR0b24uYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgQGluY2x1ZGUgaG92ZXIge1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRzZWNvbmRhcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkc2Vjb25kYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fYnV0dG9uX19sb2dvdXQuYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LCA1JSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fcmVxdWlyZW1lbnRzIHtcbiAgICAuc3VjY2VzcyxcbiAgICAuZmFpbGVkIHtcbiAgICAgIEBpbmNsdWRlIHNtb290aFRleHQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7XG4gICAgICBjb2xvcjogJHRleHRjb2xvcjtcblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcbiAgICAgICAgY29udGVudDogXCJcXGYxNDdcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5mYWlsZWQge1xuICAgICAgY29sb3I6ICR0ZXh0Y29sb3I7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCJcXGYzMzVcIjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAmX19oZXJvIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjMDMyNzREIDAlLCAjNTIzMDgxIDEwMCUpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgcGFkZGluZzogMzBweDtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMzBweDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9pbWFnZXMvc2ZfbWFya2V0aW5nLnN2Z1wiKSBuby1yZXBlYXQgY2VudGVyIHJpZ2h0O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICAgICYtLXRpdGxle1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICB9XG4gIH1cblxuICAmX19tYXJrZXRpbmcge1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHByaW1hcnk7XG4gICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuXG4gICAgJi0tdGl0bGV7XG4gICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICBmb250LXNpemU6IDEuNWVtO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbiAgICAmLS1zdWJ0aXRsZXtcbiAgICAgIGNvbG9yOiAkZ3JheTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMy4zM3B4O1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZy10b3A6IDVweDtcbiAgICB9XG4gICAgJi0tdGV4dHtcbiAgICAgIGNvbG9yOiAkdGV4dGNvbG9yO1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICBsaW5lLWhlaWdodDogMTdweDtcbiAgICB9XG5cbiAgICAmLS1kb3dubG9hZCB7XG4gICAgICBwYWRkaW5nOiAxZW0gMDtcblxuICAgICAgbGkge1xuICAgICAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBAaW5jbHVkZSBzbW9vdGhUZXh0O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMjZweDtcbiAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgICAgY29udGVudDogXCJcXGYzNDZcIjtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfX3BsdWdpbntcbiAgICAuc2ZfX25vdGljZS0tc3RhcnQgYXtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cblxuICBAaW5jbHVkZSBicmVha3BvaW50cyhtZCkge1xuICAgICZfX2NvbHVtbnMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG4gICAgJl9fY29sdW1uIHtcbiAgICAgIGZsZXgtYmFzaXM6IDY2JTtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgZmxleC1iYXNpczogMzMlO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFHQUEsQUFBQSxjQUFjLENBQUM7RUFDWCxNQUFNLEVBQUUsY0FBYztFQUN0QixhQUFhLEVBQUUsR0FBRztFQUNsQixLQUFLLEVBQUUsSUFBSSxHQUNkOztBQUVELEFBQUEsY0FBYyxDQUFDLHFCQUFxQjtBQUNwQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7RUFDN0IsVUFBVSxFQUFFLFVBQVU7RUFDdEIsT0FBTyxFQUFFLFlBQVk7RUFDckIsTUFBTSxFQUFFLEtBQUs7RUFDYixVQUFVLEVBQUUsTUFBTTtFQUNsQixPQUFPLEVBQUUsSUFBSTtFQUNiLGNBQWMsRUFBRSxHQUFHO0VBQ25CLEtBQUssRUFBRSxHQUFHLEdBQ2I7O0FBRUQsQUFBQSxjQUFjLENB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 */ -
shopping-feed/tags/6.0.9/readme.txt
r2384367 r2384510 2 2 Contributors: ShoppingFeed, BeAPI 3 3 Tags: shoppingfeed, marketplace, woocommerce, woocommerce shoppingfeed, create woocommerce products shoppingfeed, products feed, generate shoppingfeed, amazon, Jet, Walmart, many marketplace, import orders 4 Stable tag: 6.0. 85 Version: 6.0. 84 Stable tag: 6.0.9 5 Version: 6.0.9 6 6 Requires PHP: 5.6 7 7 Requires at least: 5.2 … … 22 22 6.0.7: add weight as attribute + fix phone value 23 23 6.0.8: add missing commit 24 6.0.9 send WC shipping method name once order shipped 24 25 25 26 == Description == -
shopping-feed/tags/6.0.9/shoppingfeed.php
r2384367 r2384510 8 8 * Text Domain: shopping-feed 9 9 * Domain Path: /languages 10 * Version: 6.0. 810 * Version: 6.0.9 11 11 * Requires at least WP: 5.2 12 12 * Requires at least WooCommerce: 3.8 (3.9/4.0) … … 26 26 } 27 27 28 define( 'SF_VERSION', '6.0. 8' );28 define( 'SF_VERSION', '6.0.9' ); 29 29 define( 'SF_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); 30 30 define( 'SF_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); -
shopping-feed/tags/6.0.9/src/Admin/WoocommerceFilters.php
r2379551 r2384510 55 55 } 56 56 57 57 58 /** 58 59 * Disable Stock change for SF orders already shipped -
shopping-feed/tags/6.0.9/src/Feed/Generator.php
r2371116 r2384510 19 19 class Generator { 20 20 21 /** 22 * Option name to save last generation date 23 */ 24 const SF_FEED_LAST_GENERATION_DATE = 'SF_FEED_LAST_GENERATION'; 25 /** 26 * @var Generator 27 */ 28 private static $instance; 21 29 /** @var Platform */ 22 30 private $platform; 23 24 31 private $uri; 25 26 32 /** 27 33 * @var ProductGenerator 28 34 */ 29 35 private $generator; 30 31 /**32 * Option name to save last generation date33 */34 const SF_FEED_LAST_GENERATION_DATE = 'SF_FEED_LAST_GENERATION';35 36 /**37 * @var Generator38 */39 private static $instance;40 41 /**42 * Get the singleton instance.43 *44 * @return Generator45 */46 public static function get_instance() {47 if ( is_null( self::$instance ) ) {48 self::$instance = new static();49 }50 51 return self::$instance;52 }53 54 /**55 * Singleton instance can't be cloned.56 */57 private function __clone() {58 }59 60 /**61 * Singleton instance can't be serialized.62 */63 private function __wakeup() {64 }65 36 66 37 /** … … 74 45 $this->set_filters(); 75 46 $this->set_mappers(); 47 } 48 49 /** 50 * Set the platform 51 */ 52 private function set_platform() { 53 if ( ! isset( $this->platform ) ) { 54 $this->platform = Platform::get_instance(); 55 } 56 } 57 58 /** 59 * Set the uri 60 */ 61 private function set_uri() { 62 if ( ! isset( $this->uri ) ) { 63 $this->uri = ShoppingFeedHelper::get_tmp_uri( Uri::get_instance()->get_uri() ); 64 } 65 } 66 67 /** 68 * Instanciate an instance from ProductGenerator 69 */ 70 private function set_generator() { 71 if ( ! isset( $this->generator ) ) { 72 $this->generator = new ProductGenerator(); 73 $this->generator->setPlatform( $this->platform->get_name(), $this->platform->get_version() ); 74 $this->generator->setUri( $this->uri ); 75 } 76 } 77 78 /** 79 * In some case, you may need to pre-process data before to map them. 80 * This can be achieved in mappers or in your dataset, but sometimes things have to be separated, so you can register processors that are executed before mappers, and prepare your data before the mapping process. 81 */ 82 private function set_processors() { 83 } 84 85 /** 86 * Filters are designed discard some items from the feed. 87 * Filters are executed after processors, because item must be completely filled before to make the decision to keep it or not. 88 */ 89 private function set_filters() { 90 # Ignore all items with undefined price 91 $this->generator->addFilter( 92 function ( 93 array $sf_product 94 ) { 95 $sf_product = reset( $sf_product ); 96 97 /** @var Product $sf_product */ 98 return ! empty( $sf_product->get_price() ); 99 } 100 ); 101 } 102 103 /** 104 * As stated above, at least one mapper must be registered, this is where you populate the Product instance, which is later converted to XML by the library 105 */ 106 private function set_mappers() { 107 //Simple product mapping 108 $this->generator->addMapper( 109 function ( 110 array $sf_product, \ShoppingFeed\Feed\Product\Product $product 111 ) { 112 $sf_product = reset( $sf_product ); 113 /** @var Product $sf_product */ 114 $product->setReference( $sf_product->get_sku() ); 115 $product->setName( $sf_product->get_name() ); 116 $product->setPrice( $sf_product->get_price() ); 117 118 if ( ! empty( $sf_product->get_ean() ) ) { 119 $product->setGtin( $sf_product->get_ean() ); 120 } 121 122 $product->setQuantity( $sf_product->get_quantity() ); 123 124 if ( ! empty( $sf_product->get_link() ) ) { 125 $product->setLink( $sf_product->get_link() ); 126 } 127 if ( ! empty( $sf_product->get_discount() ) ) { 128 $product->addDiscount( $sf_product->get_discount() ); 129 } 130 if ( ! empty( $sf_product->get_image_main() ) ) { 131 $product->setMainImage( $sf_product->get_image_main() ); 132 } 133 134 if ( ! empty( $sf_product->get_full_description() ) || ! empty( $sf_product->get_short_description() ) ) { 135 $product->setDescription( $sf_product->get_full_description(), $sf_product->get_short_description() ); 136 } 137 138 if ( ! empty( $sf_product->get_brand_name() ) ) { 139 $product->setBrand( $sf_product->get_brand_name(), $sf_product->get_brand_link() ); 140 } 141 142 if ( ! empty( $sf_product->get_category_name() ) ) { 143 $product->setCategory( $sf_product->get_category_name(), $sf_product->get_category_link() ); 144 } 145 146 if ( ! empty( $sf_product->get_attributes() ) ) { 147 $product->setAttributes( $sf_product->get_attributes() ); 148 } 149 150 if ( ! empty( $sf_product->get_shipping_methods() ) ) { 151 foreach ( $sf_product->get_shipping_methods() as $shipping_method ) { 152 $product->addShipping( $shipping_method['cost'], $shipping_method['description'] ); 153 } 154 } 155 156 if ( ! empty( $sf_product->get_images() ) ) { 157 $product->setAdditionalImages( $sf_product->get_images() ); 158 } 159 160 } 161 ); 162 163 //Product with variations mapping 164 $this->generator->addMapper( 165 function ( 166 array $sf_product, \ShoppingFeed\Feed\Product\Product $product 167 ) { 168 $sf_product = reset( $sf_product ); 169 /** @var Product $sf_product */ 170 171 if ( empty( $sf_product->get_variations() ) ) { 172 return; 173 } 174 foreach ( $sf_product->get_variations() as $sf_product_variation ) { 175 $variation = $product->createVariation(); 176 177 $variation 178 ->setReference( $sf_product_variation['sku'] ) 179 ->setPrice( $sf_product_variation['price'] ) 180 ->setQuantity( $sf_product_variation['quantity'] ) 181 ->setGtin( $sf_product_variation['ean'] ); 182 183 if ( ! empty( $sf_product_variation['attributes'] ) ) { 184 $variation 185 ->setAttributes( $sf_product_variation['attributes'] ); 186 } 187 if ( ! empty( $sf_product_variation['discount'] ) ) { 188 $variation 189 ->addDiscount( $sf_product_variation['discount'] ); 190 } 191 if ( ! empty( $sf_product_variation['image_main'] ) ) { 192 $variation 193 ->setMainImage( $sf_product_variation['image_main'] ); 194 } 195 } 196 } 197 ); 198 } 199 200 /** 201 * Get the singleton instance. 202 * 203 * @return Generator 204 */ 205 public static function get_instance() { 206 if ( is_null( self::$instance ) ) { 207 self::$instance = new static(); 208 } 209 210 return self::$instance; 76 211 } 77 212 … … 128 263 129 264 /** 130 * In some case, you may need to pre-process data before to map them. 131 * This can be achieved in mappers or in your dataset, but sometimes things have to be separated, so you can register processors that are executed before mappers, and prepare your data before the mapping process. 132 */ 133 private function set_processors() { 134 } 135 136 /** 137 * Filters are designed discard some items from the feed. 138 * Filters are executed after processors, because item must be completely filled before to make the decision to keep it or not. 139 */ 140 private function set_filters() { 141 # Ignore all items with undefined price 142 $this->generator->addFilter( 143 function ( 144 array $sf_product 145 ) { 146 $sf_product = reset( $sf_product ); 147 148 /** @var Product $sf_product */ 149 return ! empty( $sf_product->get_price() ); 150 } 151 ); 152 } 153 154 /** 155 * As stated above, at least one mapper must be registered, this is where you populate the Product instance, which is later converted to XML by the library 156 */ 157 private function set_mappers() { 158 //Simple product mapping 159 $this->generator->addMapper( 160 function ( 161 array $sf_product, \ShoppingFeed\Feed\Product\Product $product 162 ) { 163 $sf_product = reset( $sf_product ); 164 /** @var Product $sf_product */ 165 $product->setReference( $sf_product->get_sku() ); 166 $product->setName( $sf_product->get_name() ); 167 $product->setPrice( $sf_product->get_price() ); 168 169 if ( ! empty( $sf_product->get_ean() ) ) { 170 $product->setGtin( $sf_product->get_ean() ); 171 } 172 173 $product->setQuantity( $sf_product->get_quantity() ); 174 175 if ( ! empty( $sf_product->get_link() ) ) { 176 $product->setLink( $sf_product->get_link() ); 177 } 178 if ( ! empty( $sf_product->get_discount() ) ) { 179 $product->addDiscount( $sf_product->get_discount() ); 180 } 181 if ( ! empty( $sf_product->get_image_main() ) ) { 182 $product->setMainImage( $sf_product->get_image_main() ); 183 } 184 185 if ( ! empty( $sf_product->get_full_description() ) || ! empty( $sf_product->get_short_description() ) ) { 186 $product->setDescription( $sf_product->get_full_description(), $sf_product->get_short_description() ); 187 } 188 189 if ( ! empty( $sf_product->get_brand_name() ) ) { 190 $product->setBrand( $sf_product->get_brand_name(), $sf_product->get_brand_link() ); 191 } 192 193 if ( ! empty( $sf_product->get_category_name() ) ) { 194 $product->setCategory( $sf_product->get_category_name(), $sf_product->get_category_link() ); 195 } 196 197 if ( ! empty( $sf_product->get_attributes() ) ) { 198 $product->setAttributes( $sf_product->get_attributes() ); 199 } 200 201 if ( ! empty( $sf_product->get_shipping_methods() ) ) { 202 foreach ( $sf_product->get_shipping_methods() as $shipping_method ) { 203 $product->addShipping( $shipping_method['cost'], $shipping_method['description'] ); 204 } 205 } 206 207 if ( ! empty( $sf_product->get_images() ) ) { 208 $product->setAdditionalImages( $sf_product->get_images() ); 209 } 210 211 } 212 ); 213 214 //Product with variations mapping 215 $this->generator->addMapper( 216 function ( 217 array $sf_product, \ShoppingFeed\Feed\Product\Product $product 218 ) { 219 $sf_product = reset( $sf_product ); 220 /** @var Product $sf_product */ 221 222 if ( empty( $sf_product->get_variations() ) ) { 223 return; 224 } 225 foreach ( $sf_product->get_variations() as $sf_product_variation ) { 226 $variation = $product->createVariation(); 227 228 $variation 229 ->setReference( $sf_product_variation['sku'] ) 230 ->setPrice( $sf_product_variation['price'] ) 231 ->setQuantity( $sf_product_variation['quantity'] ) 232 ->setGtin( $sf_product_variation['ean'] ); 233 234 if ( ! empty( $sf_product_variation['attributes'] ) ) { 235 $variation 236 ->setAttributes( $sf_product_variation['attributes'] ); 237 } 238 if ( ! empty( $sf_product_variation['discount'] ) ) { 239 $variation 240 ->addDiscount( $sf_product_variation['discount'] ); 241 } 242 if ( ! empty( $sf_product_variation['image_main'] ) ) { 243 $variation 244 ->setMainImage( $sf_product_variation['image_main'] ); 245 } 246 } 247 } 248 ); 249 } 250 251 /** 252 * Set the platform 253 */ 254 private function set_platform() { 255 if ( ! isset( $this->platform ) ) { 256 $this->platform = Platform::get_instance(); 257 } 258 } 259 260 /** 261 * Set the uri 262 */ 263 private function set_uri() { 264 if ( ! isset( $this->uri ) ) { 265 $this->uri = ShoppingFeedHelper::get_tmp_uri( Uri::get_instance()->get_uri() ); 266 } 267 } 268 269 /** 270 * Instanciate an instance from ProductGenerator 271 */ 272 private function set_generator() { 273 if ( ! isset( $this->generator ) ) { 274 $this->generator = new ProductGenerator(); 275 $this->generator->setPlatform( $this->platform->get_name(), $this->platform->get_version() ); 276 $this->generator->setUri( $this->uri ); 277 } 265 * Singleton instance can't be cloned. 266 */ 267 private function __clone() { 268 } 269 270 /** 271 * Singleton instance can't be serialized. 272 */ 273 private function __wakeup() { 278 274 } 279 275 } -
shopping-feed/tags/6.0.9/src/ShoppingFeedHelper.php
r2339808 r2384510 492 492 $sf_carrier_id = $sf_shipping['sf_shipping']; 493 493 494 $sf_carriers = self::get_sf_carriers(); 495 if ( empty( $sf_carriers[ $sf_carrier_id ] ) ) { 496 return $wc_order->get_shipping_method(); 497 } 498 499 return $sf_carriers[ $sf_carrier_id ]; 494 $default_shipping_method = self::get_default_shipping_method(); 495 if ( ! is_array( $default_shipping_method ) || empty( $default_shipping_method ) ) { 496 $default_shipping_method = ''; 497 } 498 $default_shipping_method = ! is_array( $default_shipping_method ) || empty( $default_shipping_method ) ? '' : $default_shipping_method['method_title']; 499 500 $matching_shipping_method_list = self::get_matching_shipping_method_list(); 501 if ( empty( $matching_shipping_method_list[ $sf_carrier_id ] ) ) { 502 return $default_shipping_method; 503 } 504 505 $matching_shipping_method = json_decode( $matching_shipping_method_list[ $sf_carrier_id ], true ); 506 if ( ! is_array( $matching_shipping_method ) && empty( $matching_shipping_method ) ) { 507 return $default_shipping_method; 508 } 509 510 return (string) $matching_shipping_method['method_title']; 500 511 } 501 512 -
shopping-feed/trunk/assets/css/app.css
r2339808 r2384510 102 102 .sf__button__logout.button:hover, .sf__button__logout.button:active, .sf__button__logout.button:focus { 103 103 color: #fff; 104 border-color: # 56297b;105 background-color: # 56297b; }104 border-color: #7035a1; 105 background-color: #7035a1; } 106 106 107 107 .sf__requirements .success, … … 222 222 flex-basis: 33%; } } 223 223 224 /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXMiOlsiYXBwLnNjc3MiLCJtYWluL19taXhpbnMuc2NzcyIsIm1haW4vX2NvbG9ycy5zY3NzIiwibXVsdGkvX211bHRpLnNjc3MiLCJtYWluL19zZi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJtYWluL21peGluc1wiO1xuQGltcG9ydCBcIm1haW4vY29sb3JzXCI7XG5AaW1wb3J0IFwibXVsdGkvbXVsdGlcIjtcbkBpbXBvcnQgXCJtYWluL3NmXCI7IiwiLy8gQm91cmJvbidzIGVzc2VudGlhbHMgbWl4aW5zXG4kZW0tYmFzZTogMTZweCAhZGVmYXVsdDtcbi8vIFN0cmlwIHVuaXRzXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG5cdEByZXR1cm4gKCR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSkpO1xufVxuLy8gUFggdG8gRU1cbkBmdW5jdGlvbiBlbSgkcHh2YWwsICRiYXNlOiAkZW0tYmFzZSkge1xuXHRAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuXHQgICRweHZhbDogc3RyaXAtdW5pdHMoJHB4dmFsKTtcblx0fVxuXHRAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG5cdCAgJGJhc2U6IHN0cmlwLXVuaXRzKCRiYXNlKTtcblx0fVxuXHRAcmV0dXJuICgkcHh2YWwgLyAkYmFzZSkgKiAxZW07XG59XG4vL0JyZWFrcG9pbnRzXG4kYnJlYWtwb2ludHM6IChcbiAgICB4c206IGVtKDQ4MCksXG4gICAgc206IGVtKDc2OCksXG4gICAgbWQ6IGVtKDEwMjQpLFxuICAgIGxnOiBlbSgxMjYwKSxcbiAgICB4bGc6IGVtKDE0NDApXG4pO1xuXG5AbWl4aW4gYnJlYWtwb2ludHMoJGJyZWFrcG9pbnQpIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRtYXA6ICRicmVha3BvaW50cywgJGtleTogJGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cbi8vIEhvdmVyIEFjdGl2ZSBGb2N1cyBwc2V1ZG8gc2VsZWN0b3IgbWl4aW5cbkBtaXhpbiBob3ZlciB7XG5cdCY6aG92ZXIsICY6YWN0aXZlLCAmOmZvY3VzIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuLy8gU21vb3RoIHRleHRcbkBtaXhpbiBzbW9vdGhUZXh0IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn0iLCIkd2hpdGU6ICNmZmY7XG4kYmxhY2s6ICMwMDA7XG4kcHJpbWFyeTogIzYzMkY4RTtcbiRzZWNvbmRhcnk6ICMxQ0I2OUI7XG4kdGV4dGNvbG9yOiAjMjMyODJEO1xuJGdyYXk6ICM5RTlFOUU7XG4kYmx1ZTogIzA0Mjc0RDtcbiRwaW5rOiAjRTkxRTYzO1xuIiwiLm11bHRpLXdyYXBwZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIsXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyMDBweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIHdpZHRoOiA1MCU7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5ub24tc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjO1xufVxuXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLm11bHRpLXdyYXBwZXIgLmhlYWRlciB7XG4gICAgY29sb3I6ICM0ZjRmNGY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ubXVsdGktd3JhcHBlciAuaXRlbS1ncm91cCB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5pdGVtLWdyb3VwIC5ncm91cC1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5zZWFyY2gtaW5wdXQge1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkOmhvdmVyLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xufSIsIi5zZiB7XG5cbiAgJl9fbG9nbyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX2xvZ28uc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXIgbGVmdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWF4LXdpZHRoOiAyOTdweDtcbiAgICBoZWlnaHQ6IDUzcHg7XG4gIH1cblxuICAmX192ZXJzaW9uIHtcbiAgICBjb2xvcjogJGdyYXk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgIG1hcmdpbjogNXB4IDA7XG4gIH1cblxuICAmX19idXR0b24uYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgQGluY2x1ZGUgaG92ZXIge1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRzZWNvbmRhcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkc2Vjb25kYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fYnV0dG9uX19sb2dvdXQuYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgYm9yZGVyLWNvbG9yOiB kYXJrZW4oJHByaW1hcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkcHJpbWFyeSwgNSUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3JlcXVpcmVtZW50cyB7XG4gICAgLnN1Y2Nlc3MsXG4gICAgLmZhaWxlZCB7XG4gICAgICBAaW5jbHVkZSBzbW9vdGhUZXh0O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuICAgICAgY29sb3I6ICR0ZXh0Y29sb3I7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFxmMTQ3XCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZmFpbGVkIHtcbiAgICAgIGNvbG9yOiAkdGV4dGNvbG9yO1xuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFxmMzM1XCI7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRncmF5O1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgJl9faGVybyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgIzAzMjc0RCAwJSwgIzUyMzA4MSAxMDAlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHBhZGRpbmc6IDMwcHg7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDMwcHg7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX21hcmtldGluZy5zdmdcIikgbm8tcmVwZWF0IGNlbnRlciByaWdodDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgICAmLS10aXRsZXtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcbiAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgfVxuICB9XG5cbiAgJl9fbWFya2V0aW5nIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICRwcmltYXJ5O1xuICAgIHBhZGRpbmctbGVmdDogMjZweDtcblxuICAgICYtLXRpdGxle1xuICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICB9XG4gICAgJi0tc3VidGl0bGV7XG4gICAgICBjb2xvcjogJGdyYXk7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDMuMzNweDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gICAgfVxuICAgICYtLXRleHR7XG4gICAgICBjb2xvcjogJHRleHRjb2xvcjtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgfVxuXG4gICAgJi0tZG93bmxvYWQge1xuICAgICAgcGFkZGluZzogMWVtIDA7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgfVxuXG4gICAgICBhIHtcbiAgICAgICAgQGluY2x1ZGUgc21vb3RoVGV4dDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7XG4gICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xuICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzQ2XCI7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19wbHVnaW57XG4gICAgLnNmX19ub3RpY2UtLXN0YXJ0IGF7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludHMobWQpIHtcbiAgICAmX19jb2x1bW5zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuICAgICZfX2NvbHVtbiB7XG4gICAgICBmbGV4LWJhc2lzOiA2NiU7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDMzJTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBR0FBLEFBQUEsY0FBYyxDQUFDO0VBQ1gsTUFBTSxFQUFFLGNBQWM7RUFDdEIsYUFBYSxFQUFFLEdBQUc7RUFDbEIsS0FBSyxFQUFFLElBQUksR0FDZDs7QUFFRCxBQUFBLGNBQWMsQ0FBQyxxQkFBcUI7QUFDcEMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0VBQzdCLFVBQVUsRUFBRSxVQUFVO0VBQ3RCLE9BQU8sRUFBRSxZQUFZO0VBQ3JCLE1BQU0sRUFBRSxLQUFLO0VBQ2IsVUFBVSxFQUFFLE1BQU07RUFDbEIsT0FBTyxFQUFFLElBQUk7RUFDYixjQUFjLEVBQUUsR0FBRztFQUNuQixLQUFLLEVBQUUsR0FBRyxHQUNiOztBQUVELEFBQUEsY0FBYyxDQUFDLHFCQUFxQixDQUFDO0VBQ2pDLFVBQVUsRUFBRSxPQUFPO0VBQ25CLFlBQVksRUFBRSxjQUFjLEdBQy9COztBQUVELEFBQUEsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0VBQzdCLFVBQVUsRUFBRSxJQUFJLEdBQ25COztBQUVELEFBQUEsY0FBYyxDQUFDLE9BQU8sQ0FBQztFQUNuQixLQUFLLEVBQUUsT0FBTztFQUNkLE1BQU0sRUFBRSxPQUFPO0VBQ2YsV0FBVyxFQUFFLElBQUk7RUFDakIsYUFBYSxFQUFFLEd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 */224 /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXMiOlsiYXBwLnNjc3MiLCJtYWluL19taXhpbnMuc2NzcyIsIm1haW4vX2NvbG9ycy5zY3NzIiwibXVsdGkvX211bHRpLnNjc3MiLCJtYWluL19zZi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJtYWluL21peGluc1wiO1xuQGltcG9ydCBcIm1haW4vY29sb3JzXCI7XG5AaW1wb3J0IFwibXVsdGkvbXVsdGlcIjtcbkBpbXBvcnQgXCJtYWluL3NmXCI7IiwiLy8gQm91cmJvbidzIGVzc2VudGlhbHMgbWl4aW5zXG4kZW0tYmFzZTogMTZweCAhZGVmYXVsdDtcbi8vIFN0cmlwIHVuaXRzXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG5cdEByZXR1cm4gKCR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSkpO1xufVxuLy8gUFggdG8gRU1cbkBmdW5jdGlvbiBlbSgkcHh2YWwsICRiYXNlOiAkZW0tYmFzZSkge1xuXHRAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuXHQgICRweHZhbDogc3RyaXAtdW5pdHMoJHB4dmFsKTtcblx0fVxuXHRAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG5cdCAgJGJhc2U6IHN0cmlwLXVuaXRzKCRiYXNlKTtcblx0fVxuXHRAcmV0dXJuICgkcHh2YWwgLyAkYmFzZSkgKiAxZW07XG59XG4vL0JyZWFrcG9pbnRzXG4kYnJlYWtwb2ludHM6IChcbiAgICB4c206IGVtKDQ4MCksXG4gICAgc206IGVtKDc2OCksXG4gICAgbWQ6IGVtKDEwMjQpLFxuICAgIGxnOiBlbSgxMjYwKSxcbiAgICB4bGc6IGVtKDE0NDApXG4pO1xuXG5AbWl4aW4gYnJlYWtwb2ludHMoJGJyZWFrcG9pbnQpIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRtYXA6ICRicmVha3BvaW50cywgJGtleTogJGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cbi8vIEhvdmVyIEFjdGl2ZSBGb2N1cyBwc2V1ZG8gc2VsZWN0b3IgbWl4aW5cbkBtaXhpbiBob3ZlciB7XG5cdCY6aG92ZXIsICY6YWN0aXZlLCAmOmZvY3VzIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuLy8gU21vb3RoIHRleHRcbkBtaXhpbiBzbW9vdGhUZXh0IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn0iLCIkd2hpdGU6ICNmZmY7XG4kYmxhY2s6ICMwMDA7XG4kcHJpbWFyeTogIzYzMkY4RTtcbiRzZWNvbmRhcnk6ICMxQ0I2OUI7XG4kdGV4dGNvbG9yOiAjMjMyODJEO1xuJGdyYXk6ICM5RTlFOUU7XG4kYmx1ZTogIzA0Mjc0RDtcbiRwaW5rOiAjRTkxRTYzO1xuIiwiLm11bHRpLXdyYXBwZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIsXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyMDBweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIHdpZHRoOiA1MCU7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5ub24tc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjO1xufVxuXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLm11bHRpLXdyYXBwZXIgLmhlYWRlciB7XG4gICAgY29sb3I6ICM0ZjRmNGY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ubXVsdGktd3JhcHBlciAuaXRlbS1ncm91cCB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5pdGVtLWdyb3VwIC5ncm91cC1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5zZWFyY2gtaW5wdXQge1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkOmhvdmVyLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xufSIsIi5zZiB7XG5cbiAgJl9fbG9nbyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX2xvZ28uc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXIgbGVmdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWF4LXdpZHRoOiAyOTdweDtcbiAgICBoZWlnaHQ6IDUzcHg7XG4gIH1cblxuICAmX192ZXJzaW9uIHtcbiAgICBjb2xvcjogJGdyYXk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgIG1hcmdpbjogNXB4IDA7XG4gIH1cblxuICAmX19idXR0b24uYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgQGluY2x1ZGUgaG92ZXIge1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRzZWNvbmRhcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkc2Vjb25kYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fYnV0dG9uX19sb2dvdXQuYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LCA1JSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fcmVxdWlyZW1lbnRzIHtcbiAgICAuc3VjY2VzcyxcbiAgICAuZmFpbGVkIHtcbiAgICAgIEBpbmNsdWRlIHNtb290aFRleHQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7XG4gICAgICBjb2xvcjogJHRleHRjb2xvcjtcblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcbiAgICAgICAgY29udGVudDogXCJcXGYxNDdcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5mYWlsZWQge1xuICAgICAgY29sb3I6ICR0ZXh0Y29sb3I7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCJcXGYzMzVcIjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAmX19oZXJvIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjMDMyNzREIDAlLCAjNTIzMDgxIDEwMCUpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgcGFkZGluZzogMzBweDtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMzBweDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9pbWFnZXMvc2ZfbWFya2V0aW5nLnN2Z1wiKSBuby1yZXBlYXQgY2VudGVyIHJpZ2h0O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICAgICYtLXRpdGxle1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICB9XG4gIH1cblxuICAmX19tYXJrZXRpbmcge1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHByaW1hcnk7XG4gICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuXG4gICAgJi0tdGl0bGV7XG4gICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICBmb250LXNpemU6IDEuNWVtO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbiAgICAmLS1zdWJ0aXRsZXtcbiAgICAgIGNvbG9yOiAkZ3JheTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMy4zM3B4O1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZy10b3A6IDVweDtcbiAgICB9XG4gICAgJi0tdGV4dHtcbiAgICAgIGNvbG9yOiAkdGV4dGNvbG9yO1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICBsaW5lLWhlaWdodDogMTdweDtcbiAgICB9XG5cbiAgICAmLS1kb3dubG9hZCB7XG4gICAgICBwYWRkaW5nOiAxZW0gMDtcblxuICAgICAgbGkge1xuICAgICAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBAaW5jbHVkZSBzbW9vdGhUZXh0O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMjZweDtcbiAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgICAgY29udGVudDogXCJcXGYzNDZcIjtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfX3BsdWdpbntcbiAgICAuc2ZfX25vdGljZS0tc3RhcnQgYXtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cblxuICBAaW5jbHVkZSBicmVha3BvaW50cyhtZCkge1xuICAgICZfX2NvbHVtbnMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG4gICAgJl9fY29sdW1uIHtcbiAgICAgIGZsZXgtYmFzaXM6IDY2JTtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgZmxleC1iYXNpczogMzMlO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFHQUEsQUFBQSxjQUFjLENBQUM7RUFDWCxNQUFNLEVBQUUsY0FBYztFQUN0QixhQUFhLEVBQUUsR0FBRztFQUNsQixLQUFLLEVBQUUsSUFBSSxHQUNkOztBQUVELEFBQUEsY0FBYyxDQUFDLHFCQUFxQjtBQUNwQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7RUFDN0IsVUFBVSxFQUFFLFVBQVU7RUFDdEIsT0FBTyxFQUFFLFlBQVk7RUFDckIsTUFBTSxFQUFFLEtBQUs7RUFDYixVQUFVLEVBQUUsTUFBTTtFQUNsQixPQUFPLEVBQUUsSUFBSTtFQUNiLGNBQWMsRUFBRSxHQUFHO0VBQ25CLEtBQUssRUFBRSxHQUFHLEdBQ2I7O0FBRUQsQUFBQSxjQUFjLENB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 */ -
shopping-feed/trunk/readme.txt
r2384367 r2384510 2 2 Contributors: ShoppingFeed, BeAPI 3 3 Tags: shoppingfeed, marketplace, woocommerce, woocommerce shoppingfeed, create woocommerce products shoppingfeed, products feed, generate shoppingfeed, amazon, Jet, Walmart, many marketplace, import orders 4 Stable tag: 6.0. 85 Version: 6.0. 84 Stable tag: 6.0.9 5 Version: 6.0.9 6 6 Requires PHP: 5.6 7 7 Requires at least: 5.2 … … 22 22 6.0.7: add weight as attribute + fix phone value 23 23 6.0.8: add missing commit 24 6.0.9 send WC shipping method name once order shipped 24 25 25 26 == Description == -
shopping-feed/trunk/shoppingfeed.php
r2384367 r2384510 8 8 * Text Domain: shopping-feed 9 9 * Domain Path: /languages 10 * Version: 6.0. 810 * Version: 6.0.9 11 11 * Requires at least WP: 5.2 12 12 * Requires at least WooCommerce: 3.8 (3.9/4.0) … … 26 26 } 27 27 28 define( 'SF_VERSION', '6.0. 8' );28 define( 'SF_VERSION', '6.0.9' ); 29 29 define( 'SF_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); 30 30 define( 'SF_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); -
shopping-feed/trunk/src/Admin/WoocommerceFilters.php
r2379551 r2384510 55 55 } 56 56 57 57 58 /** 58 59 * Disable Stock change for SF orders already shipped -
shopping-feed/trunk/src/Feed/Generator.php
r2371116 r2384510 19 19 class Generator { 20 20 21 /** 22 * Option name to save last generation date 23 */ 24 const SF_FEED_LAST_GENERATION_DATE = 'SF_FEED_LAST_GENERATION'; 25 /** 26 * @var Generator 27 */ 28 private static $instance; 21 29 /** @var Platform */ 22 30 private $platform; 23 24 31 private $uri; 25 26 32 /** 27 33 * @var ProductGenerator 28 34 */ 29 35 private $generator; 30 31 /**32 * Option name to save last generation date33 */34 const SF_FEED_LAST_GENERATION_DATE = 'SF_FEED_LAST_GENERATION';35 36 /**37 * @var Generator38 */39 private static $instance;40 41 /**42 * Get the singleton instance.43 *44 * @return Generator45 */46 public static function get_instance() {47 if ( is_null( self::$instance ) ) {48 self::$instance = new static();49 }50 51 return self::$instance;52 }53 54 /**55 * Singleton instance can't be cloned.56 */57 private function __clone() {58 }59 60 /**61 * Singleton instance can't be serialized.62 */63 private function __wakeup() {64 }65 36 66 37 /** … … 74 45 $this->set_filters(); 75 46 $this->set_mappers(); 47 } 48 49 /** 50 * Set the platform 51 */ 52 private function set_platform() { 53 if ( ! isset( $this->platform ) ) { 54 $this->platform = Platform::get_instance(); 55 } 56 } 57 58 /** 59 * Set the uri 60 */ 61 private function set_uri() { 62 if ( ! isset( $this->uri ) ) { 63 $this->uri = ShoppingFeedHelper::get_tmp_uri( Uri::get_instance()->get_uri() ); 64 } 65 } 66 67 /** 68 * Instanciate an instance from ProductGenerator 69 */ 70 private function set_generator() { 71 if ( ! isset( $this->generator ) ) { 72 $this->generator = new ProductGenerator(); 73 $this->generator->setPlatform( $this->platform->get_name(), $this->platform->get_version() ); 74 $this->generator->setUri( $this->uri ); 75 } 76 } 77 78 /** 79 * In some case, you may need to pre-process data before to map them. 80 * This can be achieved in mappers or in your dataset, but sometimes things have to be separated, so you can register processors that are executed before mappers, and prepare your data before the mapping process. 81 */ 82 private function set_processors() { 83 } 84 85 /** 86 * Filters are designed discard some items from the feed. 87 * Filters are executed after processors, because item must be completely filled before to make the decision to keep it or not. 88 */ 89 private function set_filters() { 90 # Ignore all items with undefined price 91 $this->generator->addFilter( 92 function ( 93 array $sf_product 94 ) { 95 $sf_product = reset( $sf_product ); 96 97 /** @var Product $sf_product */ 98 return ! empty( $sf_product->get_price() ); 99 } 100 ); 101 } 102 103 /** 104 * As stated above, at least one mapper must be registered, this is where you populate the Product instance, which is later converted to XML by the library 105 */ 106 private function set_mappers() { 107 //Simple product mapping 108 $this->generator->addMapper( 109 function ( 110 array $sf_product, \ShoppingFeed\Feed\Product\Product $product 111 ) { 112 $sf_product = reset( $sf_product ); 113 /** @var Product $sf_product */ 114 $product->setReference( $sf_product->get_sku() ); 115 $product->setName( $sf_product->get_name() ); 116 $product->setPrice( $sf_product->get_price() ); 117 118 if ( ! empty( $sf_product->get_ean() ) ) { 119 $product->setGtin( $sf_product->get_ean() ); 120 } 121 122 $product->setQuantity( $sf_product->get_quantity() ); 123 124 if ( ! empty( $sf_product->get_link() ) ) { 125 $product->setLink( $sf_product->get_link() ); 126 } 127 if ( ! empty( $sf_product->get_discount() ) ) { 128 $product->addDiscount( $sf_product->get_discount() ); 129 } 130 if ( ! empty( $sf_product->get_image_main() ) ) { 131 $product->setMainImage( $sf_product->get_image_main() ); 132 } 133 134 if ( ! empty( $sf_product->get_full_description() ) || ! empty( $sf_product->get_short_description() ) ) { 135 $product->setDescription( $sf_product->get_full_description(), $sf_product->get_short_description() ); 136 } 137 138 if ( ! empty( $sf_product->get_brand_name() ) ) { 139 $product->setBrand( $sf_product->get_brand_name(), $sf_product->get_brand_link() ); 140 } 141 142 if ( ! empty( $sf_product->get_category_name() ) ) { 143 $product->setCategory( $sf_product->get_category_name(), $sf_product->get_category_link() ); 144 } 145 146 if ( ! empty( $sf_product->get_attributes() ) ) { 147 $product->setAttributes( $sf_product->get_attributes() ); 148 } 149 150 if ( ! empty( $sf_product->get_shipping_methods() ) ) { 151 foreach ( $sf_product->get_shipping_methods() as $shipping_method ) { 152 $product->addShipping( $shipping_method['cost'], $shipping_method['description'] ); 153 } 154 } 155 156 if ( ! empty( $sf_product->get_images() ) ) { 157 $product->setAdditionalImages( $sf_product->get_images() ); 158 } 159 160 } 161 ); 162 163 //Product with variations mapping 164 $this->generator->addMapper( 165 function ( 166 array $sf_product, \ShoppingFeed\Feed\Product\Product $product 167 ) { 168 $sf_product = reset( $sf_product ); 169 /** @var Product $sf_product */ 170 171 if ( empty( $sf_product->get_variations() ) ) { 172 return; 173 } 174 foreach ( $sf_product->get_variations() as $sf_product_variation ) { 175 $variation = $product->createVariation(); 176 177 $variation 178 ->setReference( $sf_product_variation['sku'] ) 179 ->setPrice( $sf_product_variation['price'] ) 180 ->setQuantity( $sf_product_variation['quantity'] ) 181 ->setGtin( $sf_product_variation['ean'] ); 182 183 if ( ! empty( $sf_product_variation['attributes'] ) ) { 184 $variation 185 ->setAttributes( $sf_product_variation['attributes'] ); 186 } 187 if ( ! empty( $sf_product_variation['discount'] ) ) { 188 $variation 189 ->addDiscount( $sf_product_variation['discount'] ); 190 } 191 if ( ! empty( $sf_product_variation['image_main'] ) ) { 192 $variation 193 ->setMainImage( $sf_product_variation['image_main'] ); 194 } 195 } 196 } 197 ); 198 } 199 200 /** 201 * Get the singleton instance. 202 * 203 * @return Generator 204 */ 205 public static function get_instance() { 206 if ( is_null( self::$instance ) ) { 207 self::$instance = new static(); 208 } 209 210 return self::$instance; 76 211 } 77 212 … … 128 263 129 264 /** 130 * In some case, you may need to pre-process data before to map them. 131 * This can be achieved in mappers or in your dataset, but sometimes things have to be separated, so you can register processors that are executed before mappers, and prepare your data before the mapping process. 132 */ 133 private function set_processors() { 134 } 135 136 /** 137 * Filters are designed discard some items from the feed. 138 * Filters are executed after processors, because item must be completely filled before to make the decision to keep it or not. 139 */ 140 private function set_filters() { 141 # Ignore all items with undefined price 142 $this->generator->addFilter( 143 function ( 144 array $sf_product 145 ) { 146 $sf_product = reset( $sf_product ); 147 148 /** @var Product $sf_product */ 149 return ! empty( $sf_product->get_price() ); 150 } 151 ); 152 } 153 154 /** 155 * As stated above, at least one mapper must be registered, this is where you populate the Product instance, which is later converted to XML by the library 156 */ 157 private function set_mappers() { 158 //Simple product mapping 159 $this->generator->addMapper( 160 function ( 161 array $sf_product, \ShoppingFeed\Feed\Product\Product $product 162 ) { 163 $sf_product = reset( $sf_product ); 164 /** @var Product $sf_product */ 165 $product->setReference( $sf_product->get_sku() ); 166 $product->setName( $sf_product->get_name() ); 167 $product->setPrice( $sf_product->get_price() ); 168 169 if ( ! empty( $sf_product->get_ean() ) ) { 170 $product->setGtin( $sf_product->get_ean() ); 171 } 172 173 $product->setQuantity( $sf_product->get_quantity() ); 174 175 if ( ! empty( $sf_product->get_link() ) ) { 176 $product->setLink( $sf_product->get_link() ); 177 } 178 if ( ! empty( $sf_product->get_discount() ) ) { 179 $product->addDiscount( $sf_product->get_discount() ); 180 } 181 if ( ! empty( $sf_product->get_image_main() ) ) { 182 $product->setMainImage( $sf_product->get_image_main() ); 183 } 184 185 if ( ! empty( $sf_product->get_full_description() ) || ! empty( $sf_product->get_short_description() ) ) { 186 $product->setDescription( $sf_product->get_full_description(), $sf_product->get_short_description() ); 187 } 188 189 if ( ! empty( $sf_product->get_brand_name() ) ) { 190 $product->setBrand( $sf_product->get_brand_name(), $sf_product->get_brand_link() ); 191 } 192 193 if ( ! empty( $sf_product->get_category_name() ) ) { 194 $product->setCategory( $sf_product->get_category_name(), $sf_product->get_category_link() ); 195 } 196 197 if ( ! empty( $sf_product->get_attributes() ) ) { 198 $product->setAttributes( $sf_product->get_attributes() ); 199 } 200 201 if ( ! empty( $sf_product->get_shipping_methods() ) ) { 202 foreach ( $sf_product->get_shipping_methods() as $shipping_method ) { 203 $product->addShipping( $shipping_method['cost'], $shipping_method['description'] ); 204 } 205 } 206 207 if ( ! empty( $sf_product->get_images() ) ) { 208 $product->setAdditionalImages( $sf_product->get_images() ); 209 } 210 211 } 212 ); 213 214 //Product with variations mapping 215 $this->generator->addMapper( 216 function ( 217 array $sf_product, \ShoppingFeed\Feed\Product\Product $product 218 ) { 219 $sf_product = reset( $sf_product ); 220 /** @var Product $sf_product */ 221 222 if ( empty( $sf_product->get_variations() ) ) { 223 return; 224 } 225 foreach ( $sf_product->get_variations() as $sf_product_variation ) { 226 $variation = $product->createVariation(); 227 228 $variation 229 ->setReference( $sf_product_variation['sku'] ) 230 ->setPrice( $sf_product_variation['price'] ) 231 ->setQuantity( $sf_product_variation['quantity'] ) 232 ->setGtin( $sf_product_variation['ean'] ); 233 234 if ( ! empty( $sf_product_variation['attributes'] ) ) { 235 $variation 236 ->setAttributes( $sf_product_variation['attributes'] ); 237 } 238 if ( ! empty( $sf_product_variation['discount'] ) ) { 239 $variation 240 ->addDiscount( $sf_product_variation['discount'] ); 241 } 242 if ( ! empty( $sf_product_variation['image_main'] ) ) { 243 $variation 244 ->setMainImage( $sf_product_variation['image_main'] ); 245 } 246 } 247 } 248 ); 249 } 250 251 /** 252 * Set the platform 253 */ 254 private function set_platform() { 255 if ( ! isset( $this->platform ) ) { 256 $this->platform = Platform::get_instance(); 257 } 258 } 259 260 /** 261 * Set the uri 262 */ 263 private function set_uri() { 264 if ( ! isset( $this->uri ) ) { 265 $this->uri = ShoppingFeedHelper::get_tmp_uri( Uri::get_instance()->get_uri() ); 266 } 267 } 268 269 /** 270 * Instanciate an instance from ProductGenerator 271 */ 272 private function set_generator() { 273 if ( ! isset( $this->generator ) ) { 274 $this->generator = new ProductGenerator(); 275 $this->generator->setPlatform( $this->platform->get_name(), $this->platform->get_version() ); 276 $this->generator->setUri( $this->uri ); 277 } 265 * Singleton instance can't be cloned. 266 */ 267 private function __clone() { 268 } 269 270 /** 271 * Singleton instance can't be serialized. 272 */ 273 private function __wakeup() { 278 274 } 279 275 } -
shopping-feed/trunk/src/ShoppingFeedHelper.php
r2339808 r2384510 492 492 $sf_carrier_id = $sf_shipping['sf_shipping']; 493 493 494 $sf_carriers = self::get_sf_carriers(); 495 if ( empty( $sf_carriers[ $sf_carrier_id ] ) ) { 496 return $wc_order->get_shipping_method(); 497 } 498 499 return $sf_carriers[ $sf_carrier_id ]; 494 $default_shipping_method = self::get_default_shipping_method(); 495 if ( ! is_array( $default_shipping_method ) || empty( $default_shipping_method ) ) { 496 $default_shipping_method = ''; 497 } 498 $default_shipping_method = ! is_array( $default_shipping_method ) || empty( $default_shipping_method ) ? '' : $default_shipping_method['method_title']; 499 500 $matching_shipping_method_list = self::get_matching_shipping_method_list(); 501 if ( empty( $matching_shipping_method_list[ $sf_carrier_id ] ) ) { 502 return $default_shipping_method; 503 } 504 505 $matching_shipping_method = json_decode( $matching_shipping_method_list[ $sf_carrier_id ], true ); 506 if ( ! is_array( $matching_shipping_method ) && empty( $matching_shipping_method ) ) { 507 return $default_shipping_method; 508 } 509 510 return (string) $matching_shipping_method['method_title']; 500 511 } 501 512
Note: See TracChangeset
for help on using the changeset viewer.