Plugin Directory

Changeset 2384510


Ignore:
Timestamp:
09/18/2020 02:24:42 PM (5 years ago)
Author:
shoppingfeed
Message:

Update to version 6.0.9 from GitHub

Location:
shopping-feed
Files:
2 deleted
12 edited
1 copied

Legend:

Unmodified
Added
Removed
  • shopping-feed/tags/6.0.9/assets/css/app.css

    r2339808 r2384510  
    102102  .sf__button__logout.button:hover, .sf__button__logout.button:active, .sf__button__logout.button:focus {
    103103    color: #fff;
    104     border-color: #56297b;
    105     background-color: #56297b; }
     104    border-color: #7035a1;
     105    background-color: #7035a1; }
    106106
    107107.sf__requirements .success,
     
    222222      flex-basis: 33%; } }
    223223
    224 /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXMiOlsiYXBwLnNjc3MiLCJtYWluL19taXhpbnMuc2NzcyIsIm1haW4vX2NvbG9ycy5zY3NzIiwibXVsdGkvX211bHRpLnNjc3MiLCJtYWluL19zZi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJtYWluL21peGluc1wiO1xuQGltcG9ydCBcIm1haW4vY29sb3JzXCI7XG5AaW1wb3J0IFwibXVsdGkvbXVsdGlcIjtcbkBpbXBvcnQgXCJtYWluL3NmXCI7IiwiLy8gQm91cmJvbidzIGVzc2VudGlhbHMgbWl4aW5zXG4kZW0tYmFzZTogMTZweCAhZGVmYXVsdDtcbi8vIFN0cmlwIHVuaXRzXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG5cdEByZXR1cm4gKCR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSkpO1xufVxuLy8gUFggdG8gRU1cbkBmdW5jdGlvbiBlbSgkcHh2YWwsICRiYXNlOiAkZW0tYmFzZSkge1xuXHRAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuXHQgICRweHZhbDogc3RyaXAtdW5pdHMoJHB4dmFsKTtcblx0fVxuXHRAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG5cdCAgJGJhc2U6IHN0cmlwLXVuaXRzKCRiYXNlKTtcblx0fVxuXHRAcmV0dXJuICgkcHh2YWwgLyAkYmFzZSkgKiAxZW07XG59XG4vL0JyZWFrcG9pbnRzXG4kYnJlYWtwb2ludHM6IChcbiAgICB4c206IGVtKDQ4MCksXG4gICAgc206IGVtKDc2OCksXG4gICAgbWQ6IGVtKDEwMjQpLFxuICAgIGxnOiBlbSgxMjYwKSxcbiAgICB4bGc6IGVtKDE0NDApXG4pO1xuXG5AbWl4aW4gYnJlYWtwb2ludHMoJGJyZWFrcG9pbnQpIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRtYXA6ICRicmVha3BvaW50cywgJGtleTogJGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cbi8vIEhvdmVyIEFjdGl2ZSBGb2N1cyBwc2V1ZG8gc2VsZWN0b3IgbWl4aW5cbkBtaXhpbiBob3ZlciB7XG5cdCY6aG92ZXIsICY6YWN0aXZlLCAmOmZvY3VzIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuLy8gU21vb3RoIHRleHRcbkBtaXhpbiBzbW9vdGhUZXh0IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn0iLCIkd2hpdGU6ICNmZmY7XG4kYmxhY2s6ICMwMDA7XG4kcHJpbWFyeTogIzYzMkY4RTtcbiRzZWNvbmRhcnk6ICMxQ0I2OUI7XG4kdGV4dGNvbG9yOiAjMjMyODJEO1xuJGdyYXk6ICM5RTlFOUU7XG4kYmx1ZTogIzA0Mjc0RDtcbiRwaW5rOiAjRTkxRTYzO1xuIiwiLm11bHRpLXdyYXBwZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIsXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyMDBweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIHdpZHRoOiA1MCU7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5ub24tc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjO1xufVxuXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLm11bHRpLXdyYXBwZXIgLmhlYWRlciB7XG4gICAgY29sb3I6ICM0ZjRmNGY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ubXVsdGktd3JhcHBlciAuaXRlbS1ncm91cCB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5pdGVtLWdyb3VwIC5ncm91cC1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5zZWFyY2gtaW5wdXQge1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkOmhvdmVyLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xufSIsIi5zZiB7XG5cbiAgJl9fbG9nbyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX2xvZ28uc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXIgbGVmdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWF4LXdpZHRoOiAyOTdweDtcbiAgICBoZWlnaHQ6IDUzcHg7XG4gIH1cblxuICAmX192ZXJzaW9uIHtcbiAgICBjb2xvcjogJGdyYXk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgIG1hcmdpbjogNXB4IDA7XG4gIH1cblxuICAmX19idXR0b24uYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgQGluY2x1ZGUgaG92ZXIge1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRzZWNvbmRhcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkc2Vjb25kYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fYnV0dG9uX19sb2dvdXQuYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJHByaW1hcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkcHJpbWFyeSwgNSUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3JlcXVpcmVtZW50cyB7XG4gICAgLnN1Y2Nlc3MsXG4gICAgLmZhaWxlZCB7XG4gICAgICBAaW5jbHVkZSBzbW9vdGhUZXh0O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuICAgICAgY29sb3I6ICR0ZXh0Y29sb3I7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFxmMTQ3XCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZmFpbGVkIHtcbiAgICAgIGNvbG9yOiAkdGV4dGNvbG9yO1xuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFxmMzM1XCI7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRncmF5O1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgJl9faGVybyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgIzAzMjc0RCAwJSwgIzUyMzA4MSAxMDAlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHBhZGRpbmc6IDMwcHg7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDMwcHg7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX21hcmtldGluZy5zdmdcIikgbm8tcmVwZWF0IGNlbnRlciByaWdodDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgICAmLS10aXRsZXtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcbiAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgfVxuICB9XG5cbiAgJl9fbWFya2V0aW5nIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICRwcmltYXJ5O1xuICAgIHBhZGRpbmctbGVmdDogMjZweDtcblxuICAgICYtLXRpdGxle1xuICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICB9XG4gICAgJi0tc3VidGl0bGV7XG4gICAgICBjb2xvcjogJGdyYXk7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDMuMzNweDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gICAgfVxuICAgICYtLXRleHR7XG4gICAgICBjb2xvcjogJHRleHRjb2xvcjtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgfVxuXG4gICAgJi0tZG93bmxvYWQge1xuICAgICAgcGFkZGluZzogMWVtIDA7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgfVxuXG4gICAgICBhIHtcbiAgICAgICAgQGluY2x1ZGUgc21vb3RoVGV4dDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7XG4gICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xuICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzQ2XCI7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19wbHVnaW57XG4gICAgLnNmX19ub3RpY2UtLXN0YXJ0IGF7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludHMobWQpIHtcbiAgICAmX19jb2x1bW5zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuICAgICZfX2NvbHVtbiB7XG4gICAgICBmbGV4LWJhc2lzOiA2NiU7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDMzJTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBR0FBLEFBQUEsY0FBYyxDQUFDO0VBQ1gsTUFBTSxFQUFFLGNBQWM7RUFDdEIsYUFBYSxFQUFFLEdBQUc7RUFDbEIsS0FBSyxFQUFFLElBQUksR0FDZDs7QUFFRCxBQUFBLGNBQWMsQ0FBQyxxQkFBcUI7QUFDcEMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0VBQzdCLFVBQVUsRUFBRSxVQUFVO0VBQ3RCLE9BQU8sRUFBRSxZQUFZO0VBQ3JCLE1BQU0sRUFBRSxLQUFLO0VBQ2IsVUFBVSxFQUFFLE1BQU07RUFDbEIsT0FBTyxFQUFFLElBQUk7RUFDYixjQUFjLEVBQUUsR0FBRztFQUNuQixLQUFLLEVBQUUsR0FBRyxHQUNiOztBQUVELEFBQUEsY0FBYyxDQUFDLHFCQUFxQixDQUFDO0VBQ2pDLFVBQVUsRUFBRSxPQUFPO0VBQ25CLFlBQVksRUFBRSxjQUFjLEdBQy9COztBQUVELEFBQUEsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0VBQzdCLFVBQVUsRUFBRSxJQUFJLEdBQ25COztBQUVELEFBQUEsY0FBYyxDQUFDLE9BQU8sQ0FBQztFQUNuQixLQUFLLEVBQUUsT0FBTztFQUNkLE1BQU0sRUFBRSxPQUFPO0VBQ2YsV0FBVyxFQUFFLElBQUk7RUFDakIsYUFBYSxFQUFFLEdBQUc7RUFDbEIsT0FBTyxFQUFFLFFBQVEsR0FDcEI7O0FBRUQsQUFBQSxjQUFjLENBQUMsS0FBSyxDQUFDO0VBQ2pCLE1BQU0sRUFBRSxPQUFPO0VBQ2YsT0FBTyxFQUFFLEtBQUs7RUFDZCxPQUFPLEVBQUUsUUFBUSxHQUNwQjs7QUFFRCxBQUFBLGNBQWMsQ0FBQyxLQUFLLEFBQUEsTUFBTSxDQUFDO0VBQ3ZCLFVBQVUsRUFBRSxPQUFPO0VBQ25CLGFBQWEsRUFBRSxHQUFHLEdBQ3JCOztBQUVELEFBQUEsY0FBYyxDQUFDLFdBQVcsQ0FBQztFQUN2QixPQUFPLEVBQUUsUUFBUSxHQUNwQjs7QUFFRCxBQUFBLGNBQWMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO0VBQ3BDLE9BQU8sRUFBRSxLQUFLO0VBQ2QsU0FBUyxFQUFFLFFBQVE7RUFDbkIsT0FBTyxFQUFFLEdBQUc7RUFDWixPQUFPLEVBQUUsS0FBSyxHQUNqQjs7QUFFRCxBQUFBLGNBQWMsQ0FBQyxhQUFhLENBQUM7RUFDekIsTUFBTSxFQUFFLENBQUM7RUFDVCxhQUFhLEVBQUUsY0FBYztFQUM3QixhQUFhLEVBQUUsQ0FBQztFQUNoQixPQUFPLEVBQUUsS0FBSztFQUNkLFNBQVMsRUFBRSxHQUFHO0VBQ2QsTUFBTSxFQUFFLENBQUM7RUFDVCxPQUFPLEVBQUUsQ0FBQztFQUNWLE9BQU8sRUFBRSxTQUFTO0VBQ2xCLEtBQUssRUFBRSxJQUFJO0VBQ1gsVUFBVSxFQUFFLFVBQVUsR0FDekI7O0FBRUQsQUFBQSxjQUFjLENBQUMscUJBQXFCLENBQUMsS0FBSyxBQUFBLFNBQVMsQ0FBQztFQUNoRCxPQUFPLEVBQUUsR0FBRyxHQUNmOztBQUVELEFBQUEsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQUFBQSxTQUFTO0FBQ25ELGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEFBQUEsU0FBUyxDQUFDO0VBQzVDLE9BQU8sRUFBRSxHQUFHO0VBQ1osZUFBZSxFQUFFLFlBQVksR0FDaEM7O0FBRUQsQUFBQSxjQUFjLENBQUMscUJBQXFCLENBQUMsS0FBSyxBQUFBLFNBQVMsQUFBQSxNQUFNO0FBQ3pELGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEFBQUEsU0FBUyxBQUFBLE1BQU0sQ0FBQztFQUNsRCxVQUFVLEVBQUUsT0FBTztFQUNuQixNQUFNLEVBQUUsT0FBTyxHQUNsQjs7QUNqRkUsQUFBRCxTQUFPLENBQUM7RUFDTixRQUFRLEVBQUUsTUFBTTtFQUNoQixXQUFXLEVBQUUsUUFBUTtFQUNyQixVQUFVLEVBQUUsNEJBQTRCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0VBQzlELGVBQWUsRUFBRSxPQUFPO0VBQ3hCLFNBQVMsRUFBRSxLQUFLO0VBQ2hCLE1BQU0sRUFBRSxJQUFJLEdBQ2I7O0FBRUEsQUFBRCxZQUFVLENBQUM7RUFDVCxLQUFLLEVGUEYsT0FBTztFRVFWLFNBQVMsRUFBRSxJQUFJO0VBQ2YsV0FBVyxFQUFFLElBQUk7RUFDakIsTUFBTSxFQUFFLEtBQUssR0FDZDs7QUFFQSxBQUFELFdBQVMsQUFBQSxPQUFPLENBQUM7RUFDZixLQUFLLEVGbkJELElBQUk7RUVvQlIsY0FBYyxFQUFFLFNBQVM7RUFDekIsWUFBWSxFRmxCSixPQUFPO0VFbUJmLGdCQUFnQixFRm5CUixPQUFPLEdFeUJoQjtFQVZBLEFIY0YsV0dkVSxBQUFBLE9BQU8sQUhjaEIsTUFBTSxFR2RMLFdBQVEsQUFBQSxPQUFPLEFIY1AsT0FBTyxFR2RmLFdBQVEsQUFBQSxPQUFPLEFIY0csTUFBTSxDQUFDO0lHUnRCLEtBQUssRUZ4QkgsSUFBSTtJRXlCTixZQUFZLEVBQUUsT0FBc0I7SUFDcEMsZ0JBQWdCLEVBQUUsT0FBc0IsR0hRNUM7O0FHSkMsQUFBRCxtQkFBaUIsQUFBQSxPQUFPLENBQUM7RUFDdkIsS0FBSyxFRi9CRCxJQUFJO0VFZ0NSLGNBQWMsRUFBRSxTQUFTO0VBQ3pCLFlBQVksRUYvQk4sT0FBTztFRWdDYixnQkFBZ0IsRUZoQ1YsT0FBTyxHRXNDZDtFQVZBLEFIRUYsbUJHRmtCLEFBQUEsT0FBTyxBSEV4QixNQUFNLEVHRkwsbUJBQWdCLEFBQUEsT0FBTyxBSEVmLE9BQU8sRUdGZixtQkFBZ0IsQUFBQSxPQUFPLEFIRUwsTUFBTSxDQUFDO0lHSXRCLEtBQUssRUZwQ0gsSUFBSTtJRXFDTixZQUFZLEVBQUUsT0FBb0I7SUFDbEMsZ0JBQWdCLEVBQUUsT0FBb0IsR0hKMUM7O0FHUUMsQUFDQyxpQkFEYSxDQUNiLFFBQVE7QUFEVCxpQkFBYyxDQUViLE9BQU8sQ0FBQztFSE5YLHNCQUFzQixFQUFFLFdBQVc7RUFDaEMsdUJBQXVCLEVBQUUsU0FBUztFR09oQyxRQUFRLEVBQUUsUUFBUTtFQUNsQixZQUFZLEVBQUUsSUFBSTtFQUNsQixLQUFLLEVGNUNDLE9BQU8sR0U4RGQ7RUF4QkYsQUFRRyxpQkFSVyxDQUNiLFFBQVEsQUFPTCxPQUFPO0VBUlgsaUJBQWMsQ0FFYixPQUFPLEFBTUosT0FBTyxDQUFDO0lBQ1AsUUFBUSxFQUFFLFFBQVE7SUFDbEIsR0FBRyxFQUFFLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQztJQUNQLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLE9BQU8sRUFBRSxLQUFLO0lBQ2QsS0FBSyxFQUFFLElBQUk7SUFDWCxNQUFNLEVBQUUsSUFBSTtJQUNaLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsYUFBYSxFQUFFLEdBQUc7SUFDbEIsVUFBVSxFQUFFLE1BQU07SUFDbEIsS0FBSyxFRi9ETCxJQUFJO0lFZ0VKLGdCQUFnQixFRjdEWixPQUFPLEdFOERaOztBQXZCSixBQTBCQyxpQkExQmEsQ0EwQmIsT0FBTyxDQUFDO0VBQ04sS0FBSyxFRmpFQyxPQUFPLEdFdUVkO0VBakNGLEFBNkJHLGlCQTdCVyxDQTBCYixPQUFPLEFBR0osT0FBTyxDQUFDO0lBQ1AsT0FBTyxFQUFFLE9BQU87SUFDaEIsZ0JBQWdCLEVGcEVqQixPQUFPLEdFcUVQOztBQUtKLEFBQUQsU0FBTyxDQUFDO0VBQ04sUUFBUSxFQUFFLFFBQVE7RUFDbEIsTUFBTSxFQUFFLENBQUM7RUFDVCxhQUFhLEVBQUUsR0FBRztFQUNsQixVQUFVLEVBQUUsaURBQWlEO0VBQzdELGVBQWUsRUFBRSxLQUFLO0VBQ3RCLE9BQU8sRUFBRSxJQUFJLEdBc0JkO0VBNUJBLEFBUUMsU0FSSyxBQVFKLE9BQU8sQ0FBQztJQUNQLE9BQU8sRUFBRSxFQUFFO0lBQ1gsT0FBTyxFQUFFLEtBQUs7SUFDZCxPQUFPLEVBQUUsQ0FBQztJQUNWLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLEdBQUcsRUFBRSxDQUFDO0lBQ04sS0FBSyxFQUFFLElBQUk7SUFDWCxNQUFNLEVBQUUsQ0FBQztJQUNULElBQUksRUFBRSxDQUFDO0lBQ1AsVUFBVSxFQUFFLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSztJQUNwRSxjQUFjLEVBQUUsSUFBSSxHQUNyQjtFQUNBLEFBQUQsZ0JBQVEsQ0FBQTtJQUNOLFNBQVMsRUFBRSxJQUFJO0lBQ2YsV0FBVyxFQUFFLElBQUk7SUFDakIsYUFBYSxFQUFFLElBQUk7SUFDbkIsS0FBSyxFRnZHSCxJQUFJO0lFd0dOLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGFBQWEsRUFBRSxJQUFJLEdBQ3BCOztBQUdGLEFBQUQsY0FBWSxDQUFDO0VBQ1gsV0FBVyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENGNUdoQixPQUFPO0VFNkdiLFlBQVksRUFBRSxJQUFJLEdBMkRuQjtFQXpERSxBQUFELHFCQUFRLENBQUE7SUFDTixLQUFLLEVGaEhELE9BQU87SUVpSFgsU0FBUyxFQUFFLEtBQUs7SUFDaEIsTUFBTSxFQUFFLENBQUM7SUFDVCxVQUFVLEVBQUUsR0FBRyxHQUNoQjtFQUNBLEFBQUQsd0JBQVcsQ0FBQTtJQUNULEtBQUssRUZuSEosT0FBTztJRW9IUixTQUFTLEVBQUUsSUFBSTtJQUNmLGNBQWMsRUFBRSxTQUFTO0lBQ3pCLGNBQWMsRUFBRSxNQUFNO0lBQ3RCLE1BQU0sRUFBRSxDQUFDO0lBQ1QsV0FBVyxFQUFFLEdBQUcsR0FDakI7RUFDQSxBQUFELG9CQUFPLENBQUE7SUFDTCxLQUFLLEVGNUhDLE9BQU87SUU2SGIsU0FBUyxFQUFFLElBQUk7SUFDZixjQUFjLEVBQUUsQ0FBQztJQUNqQixXQUFXLEVBQUUsSUFBSSxHQUNsQjtFQUVBLEFBQUQsd0JBQVcsQ0FBQztJQUNWLE9BQU8sRUFBRSxLQUFLLEdBa0NmO0lBbkNBLEFBR0Msd0JBSFMsQ0FHVCxFQUFFLENBQUM7TUFDRCxXQUFXLEVBQUUsS0FBSyxHQUNuQjtJQUxGLEFBT0Msd0JBUFMsQ0FPVCxDQUFDLENBQUM7TUh2R1Asc0JBQXNCLEVBQUUsV0FBVztNQUNoQyx1QkFBdUIsRUFBRSxTQUFTO01Hd0c5QixRQUFRLEVBQUUsUUFBUTtNQUNsQixZQUFZLEVBQUUsSUFBSTtNQUNsQixLQUFLLEVGM0lOLE9BQU87TUU0SU4sV0FBVyxFQUFFLElBQUksR0FzQmxCO01BbENGLEFBY0csd0JBZE8sQ0FPVCxDQUFDLEFBT0UsT0FBTyxDQUFDO1FBQ1AsUUFBUSxFQUFFLFFBQVE7UUFDbEIsR0FBRyxFQUFFLENBQUM7UUFDTixJQUFJLEVBQUUsQ0FBQztRQUNQLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsS0FBSyxFQUFFLElBQUk7UUFDWCxNQUFNLEVBQUUsSUFBSTtRQUNaLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFNBQVMsRUFBRSxJQUFJO1FBQ2YsYUFBYSxFQUFFLEdBQUc7UUFDbEIsVUFBVSxFQUFFLE1BQU07UUFDbEIsS0FBSyxFRmpLUCxJQUFJO1FFa0tGLGdCQUFnQixFRmhLaEIsT0FBTyxHRWlLUjtNQTdCSixBQStCRyx3QkEvQk8sQ0FPVCxDQUFDLEFBd0JFLE1BQU0sQ0FBQztRQUNOLEtBQUssRUZwS0wsT0FBTyxHRXFLUjs7QUFLTixBQUNDLFdBRE8sQ0FDUCxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7RUFDbEIsT0FBTyxFQUFFLElBQUksR0FDZDs7QUhySkQsTUFBTSxDQUFDLE1BQU0sTUFBTSxTQUFTLEVBQUUsSUFBSTtFRzBKakMsQUFBRCxZQUFVLENBQUM7SUFDVCxPQUFPLEVBQUUsSUFBSTtJQUNiLFNBQVMsRUFBRSxJQUFJLEdBQ2hCO0VBQ0EsQUFBRCxXQUFTLENBQUM7SUFDUixVQUFVLEVBQUUsR0FBRyxHQUtoQjtJQU5BLEFBR0MsV0FITyxBQUdOLFdBQVcsQ0FBQztNQUNYLFVBQVUsRUFBRSxHQUFHLEdBQ2hCIn0= */
     224/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXMiOlsiYXBwLnNjc3MiLCJtYWluL19taXhpbnMuc2NzcyIsIm1haW4vX2NvbG9ycy5zY3NzIiwibXVsdGkvX211bHRpLnNjc3MiLCJtYWluL19zZi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJtYWluL21peGluc1wiO1xuQGltcG9ydCBcIm1haW4vY29sb3JzXCI7XG5AaW1wb3J0IFwibXVsdGkvbXVsdGlcIjtcbkBpbXBvcnQgXCJtYWluL3NmXCI7IiwiLy8gQm91cmJvbidzIGVzc2VudGlhbHMgbWl4aW5zXG4kZW0tYmFzZTogMTZweCAhZGVmYXVsdDtcbi8vIFN0cmlwIHVuaXRzXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG5cdEByZXR1cm4gKCR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSkpO1xufVxuLy8gUFggdG8gRU1cbkBmdW5jdGlvbiBlbSgkcHh2YWwsICRiYXNlOiAkZW0tYmFzZSkge1xuXHRAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuXHQgICRweHZhbDogc3RyaXAtdW5pdHMoJHB4dmFsKTtcblx0fVxuXHRAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG5cdCAgJGJhc2U6IHN0cmlwLXVuaXRzKCRiYXNlKTtcblx0fVxuXHRAcmV0dXJuICgkcHh2YWwgLyAkYmFzZSkgKiAxZW07XG59XG4vL0JyZWFrcG9pbnRzXG4kYnJlYWtwb2ludHM6IChcbiAgICB4c206IGVtKDQ4MCksXG4gICAgc206IGVtKDc2OCksXG4gICAgbWQ6IGVtKDEwMjQpLFxuICAgIGxnOiBlbSgxMjYwKSxcbiAgICB4bGc6IGVtKDE0NDApXG4pO1xuXG5AbWl4aW4gYnJlYWtwb2ludHMoJGJyZWFrcG9pbnQpIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRtYXA6ICRicmVha3BvaW50cywgJGtleTogJGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cbi8vIEhvdmVyIEFjdGl2ZSBGb2N1cyBwc2V1ZG8gc2VsZWN0b3IgbWl4aW5cbkBtaXhpbiBob3ZlciB7XG5cdCY6aG92ZXIsICY6YWN0aXZlLCAmOmZvY3VzIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuLy8gU21vb3RoIHRleHRcbkBtaXhpbiBzbW9vdGhUZXh0IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn0iLCIkd2hpdGU6ICNmZmY7XG4kYmxhY2s6ICMwMDA7XG4kcHJpbWFyeTogIzYzMkY4RTtcbiRzZWNvbmRhcnk6ICMxQ0I2OUI7XG4kdGV4dGNvbG9yOiAjMjMyODJEO1xuJGdyYXk6ICM5RTlFOUU7XG4kYmx1ZTogIzA0Mjc0RDtcbiRwaW5rOiAjRTkxRTYzO1xuIiwiLm11bHRpLXdyYXBwZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIsXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyMDBweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIHdpZHRoOiA1MCU7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5ub24tc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjO1xufVxuXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLm11bHRpLXdyYXBwZXIgLmhlYWRlciB7XG4gICAgY29sb3I6ICM0ZjRmNGY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ubXVsdGktd3JhcHBlciAuaXRlbS1ncm91cCB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5pdGVtLWdyb3VwIC5ncm91cC1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5zZWFyY2gtaW5wdXQge1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkOmhvdmVyLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xufSIsIi5zZiB7XG5cbiAgJl9fbG9nbyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX2xvZ28uc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXIgbGVmdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWF4LXdpZHRoOiAyOTdweDtcbiAgICBoZWlnaHQ6IDUzcHg7XG4gIH1cblxuICAmX192ZXJzaW9uIHtcbiAgICBjb2xvcjogJGdyYXk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgIG1hcmdpbjogNXB4IDA7XG4gIH1cblxuICAmX19idXR0b24uYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgQGluY2x1ZGUgaG92ZXIge1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRzZWNvbmRhcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkc2Vjb25kYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fYnV0dG9uX19sb2dvdXQuYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LCA1JSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fcmVxdWlyZW1lbnRzIHtcbiAgICAuc3VjY2VzcyxcbiAgICAuZmFpbGVkIHtcbiAgICAgIEBpbmNsdWRlIHNtb290aFRleHQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7XG4gICAgICBjb2xvcjogJHRleHRjb2xvcjtcblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcbiAgICAgICAgY29udGVudDogXCJcXGYxNDdcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5mYWlsZWQge1xuICAgICAgY29sb3I6ICR0ZXh0Y29sb3I7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCJcXGYzMzVcIjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAmX19oZXJvIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjMDMyNzREIDAlLCAjNTIzMDgxIDEwMCUpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgcGFkZGluZzogMzBweDtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMzBweDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9pbWFnZXMvc2ZfbWFya2V0aW5nLnN2Z1wiKSBuby1yZXBlYXQgY2VudGVyIHJpZ2h0O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICAgICYtLXRpdGxle1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICB9XG4gIH1cblxuICAmX19tYXJrZXRpbmcge1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHByaW1hcnk7XG4gICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuXG4gICAgJi0tdGl0bGV7XG4gICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICBmb250LXNpemU6IDEuNWVtO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbiAgICAmLS1zdWJ0aXRsZXtcbiAgICAgIGNvbG9yOiAkZ3JheTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMy4zM3B4O1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZy10b3A6IDVweDtcbiAgICB9XG4gICAgJi0tdGV4dHtcbiAgICAgIGNvbG9yOiAkdGV4dGNvbG9yO1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICBsaW5lLWhlaWdodDogMTdweDtcbiAgICB9XG5cbiAgICAmLS1kb3dubG9hZCB7XG4gICAgICBwYWRkaW5nOiAxZW0gMDtcblxuICAgICAgbGkge1xuICAgICAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBAaW5jbHVkZSBzbW9vdGhUZXh0O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMjZweDtcbiAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgICAgY29udGVudDogXCJcXGYzNDZcIjtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfX3BsdWdpbntcbiAgICAuc2ZfX25vdGljZS0tc3RhcnQgYXtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cblxuICBAaW5jbHVkZSBicmVha3BvaW50cyhtZCkge1xuICAgICZfX2NvbHVtbnMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG4gICAgJl9fY29sdW1uIHtcbiAgICAgIGZsZXgtYmFzaXM6IDY2JTtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgZmxleC1iYXNpczogMzMlO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFHQUEsQUFBQSxjQUFjLENBQUM7RUFDWCxNQUFNLEVBQUUsY0FBYztFQUN0QixhQUFhLEVBQUUsR0FBRztFQUNsQixLQUFLLEVBQUUsSUFBSSxHQUNkOztBQUVELEFBQUEsY0FBYyxDQUFDLHFCQUFxQjtBQUNwQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7RUFDN0IsVUFBVSxFQUFFLFVBQVU7RUFDdEIsT0FBTyxFQUFFLFlBQVk7RUFDckIsTUFBTSxFQUFFLEtBQUs7RUFDYixVQUFVLEVBQUUsTUFBTTtFQUNsQixPQUFPLEVBQUUsSUFBSTtFQUNiLGNBQWMsRUFBRSxHQUFHO0VBQ25CLEtBQUssRUFBRSxHQUFHLEdBQ2I7O0FBRUQsQUFBQSxjQUFjLENB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 */
  • shopping-feed/tags/6.0.9/readme.txt

    r2384367 r2384510  
    22Contributors: ShoppingFeed, BeAPI
    33Tags: 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.8
    5 Version: 6.0.8
     4Stable tag: 6.0.9
     5Version: 6.0.9
    66Requires PHP: 5.6
    77Requires at least: 5.2
     
    22226.0.7: add weight as attribute + fix phone value
    23236.0.8: add missing commit
     246.0.9  send WC shipping method name once order shipped
    2425
    2526== Description ==
  • shopping-feed/tags/6.0.9/shoppingfeed.php

    r2384367 r2384510  
    88 * Text Domain:     shopping-feed
    99 * Domain Path:     /languages
    10  * Version:         6.0.8
     10 * Version:         6.0.9
    1111 * Requires at least WP: 5.2
    1212 * Requires at least WooCommerce: 3.8 (3.9/4.0)
     
    2626}
    2727
    28 define( 'SF_VERSION', '6.0.8' );
     28define( 'SF_VERSION', '6.0.9' );
    2929define( 'SF_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    3030define( 'SF_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
  • shopping-feed/tags/6.0.9/src/Admin/WoocommerceFilters.php

    r2379551 r2384510  
    5555    }
    5656
     57
    5758    /**
    5859     * Disable Stock change for SF orders already shipped
  • shopping-feed/tags/6.0.9/src/Feed/Generator.php

    r2371116 r2384510  
    1919class Generator {
    2020
     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;
    2129    /** @var Platform */
    2230    private $platform;
    23 
    2431    private $uri;
    25 
    2632    /**
    2733     * @var ProductGenerator
    2834     */
    2935    private $generator;
    30 
    31     /**
    32      * Option name to save last generation date
    33      */
    34     const SF_FEED_LAST_GENERATION_DATE = 'SF_FEED_LAST_GENERATION';
    35 
    36     /**
    37      * @var Generator
    38      */
    39     private static $instance;
    40 
    41     /**
    42      * Get the singleton instance.
    43      *
    44      * @return Generator
    45      */
    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     }
    6536
    6637    /**
     
    7445        $this->set_filters();
    7546        $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;
    76211    }
    77212
     
    128263
    129264    /**
    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() {
    278274    }
    279275}
  • shopping-feed/tags/6.0.9/src/ShoppingFeedHelper.php

    r2339808 r2384510  
    492492        $sf_carrier_id = $sf_shipping['sf_shipping'];
    493493
    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'];
    500511    }
    501512
  • shopping-feed/trunk/assets/css/app.css

    r2339808 r2384510  
    102102  .sf__button__logout.button:hover, .sf__button__logout.button:active, .sf__button__logout.button:focus {
    103103    color: #fff;
    104     border-color: #56297b;
    105     background-color: #56297b; }
     104    border-color: #7035a1;
     105    background-color: #7035a1; }
    106106
    107107.sf__requirements .success,
     
    222222      flex-basis: 33%; } }
    223223
    224 /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXMiOlsiYXBwLnNjc3MiLCJtYWluL19taXhpbnMuc2NzcyIsIm1haW4vX2NvbG9ycy5zY3NzIiwibXVsdGkvX211bHRpLnNjc3MiLCJtYWluL19zZi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJtYWluL21peGluc1wiO1xuQGltcG9ydCBcIm1haW4vY29sb3JzXCI7XG5AaW1wb3J0IFwibXVsdGkvbXVsdGlcIjtcbkBpbXBvcnQgXCJtYWluL3NmXCI7IiwiLy8gQm91cmJvbidzIGVzc2VudGlhbHMgbWl4aW5zXG4kZW0tYmFzZTogMTZweCAhZGVmYXVsdDtcbi8vIFN0cmlwIHVuaXRzXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG5cdEByZXR1cm4gKCR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSkpO1xufVxuLy8gUFggdG8gRU1cbkBmdW5jdGlvbiBlbSgkcHh2YWwsICRiYXNlOiAkZW0tYmFzZSkge1xuXHRAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuXHQgICRweHZhbDogc3RyaXAtdW5pdHMoJHB4dmFsKTtcblx0fVxuXHRAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG5cdCAgJGJhc2U6IHN0cmlwLXVuaXRzKCRiYXNlKTtcblx0fVxuXHRAcmV0dXJuICgkcHh2YWwgLyAkYmFzZSkgKiAxZW07XG59XG4vL0JyZWFrcG9pbnRzXG4kYnJlYWtwb2ludHM6IChcbiAgICB4c206IGVtKDQ4MCksXG4gICAgc206IGVtKDc2OCksXG4gICAgbWQ6IGVtKDEwMjQpLFxuICAgIGxnOiBlbSgxMjYwKSxcbiAgICB4bGc6IGVtKDE0NDApXG4pO1xuXG5AbWl4aW4gYnJlYWtwb2ludHMoJGJyZWFrcG9pbnQpIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRtYXA6ICRicmVha3BvaW50cywgJGtleTogJGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cbi8vIEhvdmVyIEFjdGl2ZSBGb2N1cyBwc2V1ZG8gc2VsZWN0b3IgbWl4aW5cbkBtaXhpbiBob3ZlciB7XG5cdCY6aG92ZXIsICY6YWN0aXZlLCAmOmZvY3VzIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuLy8gU21vb3RoIHRleHRcbkBtaXhpbiBzbW9vdGhUZXh0IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn0iLCIkd2hpdGU6ICNmZmY7XG4kYmxhY2s6ICMwMDA7XG4kcHJpbWFyeTogIzYzMkY4RTtcbiRzZWNvbmRhcnk6ICMxQ0I2OUI7XG4kdGV4dGNvbG9yOiAjMjMyODJEO1xuJGdyYXk6ICM5RTlFOUU7XG4kYmx1ZTogIzA0Mjc0RDtcbiRwaW5rOiAjRTkxRTYzO1xuIiwiLm11bHRpLXdyYXBwZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIsXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyMDBweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIHdpZHRoOiA1MCU7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5ub24tc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjO1xufVxuXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLm11bHRpLXdyYXBwZXIgLmhlYWRlciB7XG4gICAgY29sb3I6ICM0ZjRmNGY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ubXVsdGktd3JhcHBlciAuaXRlbS1ncm91cCB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5pdGVtLWdyb3VwIC5ncm91cC1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5zZWFyY2gtaW5wdXQge1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkOmhvdmVyLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xufSIsIi5zZiB7XG5cbiAgJl9fbG9nbyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX2xvZ28uc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXIgbGVmdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWF4LXdpZHRoOiAyOTdweDtcbiAgICBoZWlnaHQ6IDUzcHg7XG4gIH1cblxuICAmX192ZXJzaW9uIHtcbiAgICBjb2xvcjogJGdyYXk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgIG1hcmdpbjogNXB4IDA7XG4gIH1cblxuICAmX19idXR0b24uYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgQGluY2x1ZGUgaG92ZXIge1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRzZWNvbmRhcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkc2Vjb25kYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fYnV0dG9uX19sb2dvdXQuYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJHByaW1hcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkcHJpbWFyeSwgNSUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3JlcXVpcmVtZW50cyB7XG4gICAgLnN1Y2Nlc3MsXG4gICAgLmZhaWxlZCB7XG4gICAgICBAaW5jbHVkZSBzbW9vdGhUZXh0O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuICAgICAgY29sb3I6ICR0ZXh0Y29sb3I7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFxmMTQ3XCI7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTZweDtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZmFpbGVkIHtcbiAgICAgIGNvbG9yOiAkdGV4dGNvbG9yO1xuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXFxmMzM1XCI7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRncmF5O1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgJl9faGVybyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgIzAzMjc0RCAwJSwgIzUyMzA4MSAxMDAlKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHBhZGRpbmc6IDMwcHg7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB6LWluZGV4OiAxO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDMwcHg7XG4gICAgICBib3R0b206IDA7XG4gICAgICBsZWZ0OiAwO1xuICAgICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX21hcmtldGluZy5zdmdcIikgbm8tcmVwZWF0IGNlbnRlciByaWdodDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIH1cbiAgICAmLS10aXRsZXtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcbiAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgfVxuICB9XG5cbiAgJl9fbWFya2V0aW5nIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICRwcmltYXJ5O1xuICAgIHBhZGRpbmctbGVmdDogMjZweDtcblxuICAgICYtLXRpdGxle1xuICAgICAgY29sb3I6ICRwcmltYXJ5O1xuICAgICAgZm9udC1zaXplOiAxLjVlbTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIG1hcmdpbi10b3A6IDFlbTtcbiAgICB9XG4gICAgJi0tc3VidGl0bGV7XG4gICAgICBjb2xvcjogJGdyYXk7XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDMuMzNweDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gICAgfVxuICAgICYtLXRleHR7XG4gICAgICBjb2xvcjogJHRleHRjb2xvcjtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDE3cHg7XG4gICAgfVxuXG4gICAgJi0tZG93bmxvYWQge1xuICAgICAgcGFkZGluZzogMWVtIDA7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICAgICAgfVxuXG4gICAgICBhIHtcbiAgICAgICAgQGluY2x1ZGUgc21vb3RoVGV4dDtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7XG4gICAgICAgIGNvbG9yOiAkYmx1ZTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICBmb250LWZhbWlseTogZGFzaGljb25zO1xuICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMzQ2XCI7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19wbHVnaW57XG4gICAgLnNmX19ub3RpY2UtLXN0YXJ0IGF7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG5cbiAgQGluY2x1ZGUgYnJlYWtwb2ludHMobWQpIHtcbiAgICAmX19jb2x1bW5zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuICAgICZfX2NvbHVtbiB7XG4gICAgICBmbGV4LWJhc2lzOiA2NiU7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDMzJTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBR0FBLEFBQUEsY0FBYyxDQUFDO0VBQ1gsTUFBTSxFQUFFLGNBQWM7RUFDdEIsYUFBYSxFQUFFLEdBQUc7RUFDbEIsS0FBSyxFQUFFLElBQUksR0FDZDs7QUFFRCxBQUFBLGNBQWMsQ0FBQyxxQkFBcUI7QUFDcEMsY0FBYyxDQUFDLGlCQUFpQixDQUFDO0VBQzdCLFVBQVUsRUFBRSxVQUFVO0VBQ3RCLE9BQU8sRUFBRSxZQUFZO0VBQ3JCLE1BQU0sRUFBRSxLQUFLO0VBQ2IsVUFBVSxFQUFFLE1BQU07RUFDbEIsT0FBTyxFQUFFLElBQUk7RUFDYixjQUFjLEVBQUUsR0FBRztFQUNuQixLQUFLLEVBQUUsR0FBRyxHQUNiOztBQUVELEFBQUEsY0FBYyxDQUFD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 */
     224/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsInNvdXJjZXMiOlsiYXBwLnNjc3MiLCJtYWluL19taXhpbnMuc2NzcyIsIm1haW4vX2NvbG9ycy5zY3NzIiwibXVsdGkvX211bHRpLnNjc3MiLCJtYWluL19zZi5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCJtYWluL21peGluc1wiO1xuQGltcG9ydCBcIm1haW4vY29sb3JzXCI7XG5AaW1wb3J0IFwibXVsdGkvbXVsdGlcIjtcbkBpbXBvcnQgXCJtYWluL3NmXCI7IiwiLy8gQm91cmJvbidzIGVzc2VudGlhbHMgbWl4aW5zXG4kZW0tYmFzZTogMTZweCAhZGVmYXVsdDtcbi8vIFN0cmlwIHVuaXRzXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG5cdEByZXR1cm4gKCR2YWx1ZSAvICgkdmFsdWUgKiAwICsgMSkpO1xufVxuLy8gUFggdG8gRU1cbkBmdW5jdGlvbiBlbSgkcHh2YWwsICRiYXNlOiAkZW0tYmFzZSkge1xuXHRAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuXHQgICRweHZhbDogc3RyaXAtdW5pdHMoJHB4dmFsKTtcblx0fVxuXHRAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG5cdCAgJGJhc2U6IHN0cmlwLXVuaXRzKCRiYXNlKTtcblx0fVxuXHRAcmV0dXJuICgkcHh2YWwgLyAkYmFzZSkgKiAxZW07XG59XG4vL0JyZWFrcG9pbnRzXG4kYnJlYWtwb2ludHM6IChcbiAgICB4c206IGVtKDQ4MCksXG4gICAgc206IGVtKDc2OCksXG4gICAgbWQ6IGVtKDEwMjQpLFxuICAgIGxnOiBlbSgxMjYwKSxcbiAgICB4bGc6IGVtKDE0NDApXG4pO1xuXG5AbWl4aW4gYnJlYWtwb2ludHMoJGJyZWFrcG9pbnQpIHtcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBtYXAtZ2V0KCRtYXA6ICRicmVha3BvaW50cywgJGtleTogJGJyZWFrcG9pbnQpKSB7XG4gICAgICAgIEBjb250ZW50O1xuICAgIH1cbn1cbi8vIEhvdmVyIEFjdGl2ZSBGb2N1cyBwc2V1ZG8gc2VsZWN0b3IgbWl4aW5cbkBtaXhpbiBob3ZlciB7XG5cdCY6aG92ZXIsICY6YWN0aXZlLCAmOmZvY3VzIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuLy8gU21vb3RoIHRleHRcbkBtaXhpbiBzbW9vdGhUZXh0IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn0iLCIkd2hpdGU6ICNmZmY7XG4kYmxhY2s6ICMwMDA7XG4kcHJpbWFyeTogIzYzMkY4RTtcbiRzZWNvbmRhcnk6ICMxQ0I2OUI7XG4kdGV4dGNvbG9yOiAjMjMyODJEO1xuJGdyYXk6ICM5RTlFOUU7XG4kYmx1ZTogIzA0Mjc0RDtcbiRwaW5rOiAjRTkxRTYzO1xuIiwiLm11bHRpLXdyYXBwZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIsXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAyMDBweDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIHdpZHRoOiA1MCU7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5ub24tc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjO1xufVxuXG4ubXVsdGktd3JhcHBlciAuc2VsZWN0ZWQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbn1cblxuLm11bHRpLXdyYXBwZXIgLmhlYWRlciB7XG4gICAgY29sb3I6ICM0ZjRmNGY7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW0ge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLml0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICNlY2VjZWM7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xufVxuXG4ubXVsdGktd3JhcHBlciAuaXRlbS1ncm91cCB7XG4gICAgcGFkZGluZzogNXB4IDEwcHg7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5pdGVtLWdyb3VwIC5ncm91cC1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICBvcGFjaXR5OiAwLjU7XG4gICAgcGFkZGluZzogNXB4IDA7XG59XG5cbi5tdWx0aS13cmFwcGVyIC5zZWFyY2gtaW5wdXQge1xuICAgIGJvcmRlcjogMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4ubXVsdGktd3JhcHBlciAubm9uLXNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uc2VsZWN0ZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcbn1cblxuLm11bHRpLXdyYXBwZXIgLm5vbi1zZWxlY3RlZC13cmFwcGVyIC5pdGVtLmRpc2FibGVkOmhvdmVyLFxuLm11bHRpLXdyYXBwZXIgLnNlbGVjdGVkLXdyYXBwZXIgLml0ZW0uZGlzYWJsZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBpbmhlcml0O1xufSIsIi5zZiB7XG5cbiAgJl9fbG9nbyB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LWluZGVudDogLTk5OTk5cHg7XG4gICAgYmFja2dyb3VuZDogdXJsKFwiLi4vaW1hZ2VzL3NmX2xvZ28uc3ZnXCIpIG5vLXJlcGVhdCBjZW50ZXIgbGVmdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWF4LXdpZHRoOiAyOTdweDtcbiAgICBoZWlnaHQ6IDUzcHg7XG4gIH1cblxuICAmX192ZXJzaW9uIHtcbiAgICBjb2xvcjogJGdyYXk7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxN3B4O1xuICAgIG1hcmdpbjogNXB4IDA7XG4gIH1cblxuICAmX19idXR0b24uYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnk7XG4gICAgQGluY2x1ZGUgaG92ZXIge1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRzZWNvbmRhcnksIDUlKTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkc2Vjb25kYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fYnV0dG9uX19sb2dvdXQuYnV0dG9uIHtcbiAgICBjb2xvcjogJHdoaXRlO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgYm9yZGVyLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICBAaW5jbHVkZSBob3ZlciB7XG4gICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LCA1JSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRwcmltYXJ5LCA1JSk7XG4gICAgfVxuICB9XG5cbiAgJl9fcmVxdWlyZW1lbnRzIHtcbiAgICAuc3VjY2VzcyxcbiAgICAuZmFpbGVkIHtcbiAgICAgIEBpbmNsdWRlIHNtb290aFRleHQ7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7XG4gICAgICBjb2xvcjogJHRleHRjb2xvcjtcblxuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgZm9udC1mYW1pbHk6IGRhc2hpY29ucztcbiAgICAgICAgY29udGVudDogXCJcXGYxNDdcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIC5mYWlsZWQge1xuICAgICAgY29sb3I6ICR0ZXh0Y29sb3I7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCJcXGYzMzVcIjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAmX19oZXJvIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjMDMyNzREIDAlLCAjNTIzMDgxIDEwMCUpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgcGFkZGluZzogMzBweDtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMzBweDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9pbWFnZXMvc2ZfbWFya2V0aW5nLnN2Z1wiKSBuby1yZXBlYXQgY2VudGVyIHJpZ2h0O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICAgICYtLXRpdGxle1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4O1xuICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbiAgICB9XG4gIH1cblxuICAmX19tYXJrZXRpbmcge1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHByaW1hcnk7XG4gICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuXG4gICAgJi0tdGl0bGV7XG4gICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICBmb250LXNpemU6IDEuNWVtO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIH1cbiAgICAmLS1zdWJ0aXRsZXtcbiAgICAgIGNvbG9yOiAkZ3JheTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMy4zM3B4O1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgcGFkZGluZy10b3A6IDVweDtcbiAgICB9XG4gICAgJi0tdGV4dHtcbiAgICAgIGNvbG9yOiAkdGV4dGNvbG9yO1xuICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgICBsaW5lLWhlaWdodDogMTdweDtcbiAgICB9XG5cbiAgICAmLS1kb3dubG9hZCB7XG4gICAgICBwYWRkaW5nOiAxZW0gMDtcblxuICAgICAgbGkge1xuICAgICAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBAaW5jbHVkZSBzbW9vdGhUZXh0O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMjZweDtcbiAgICAgICAgY29sb3I6ICRibHVlO1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiBkYXNoaWNvbnM7XG4gICAgICAgICAgY29udGVudDogXCJcXGYzNDZcIjtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfX3BsdWdpbntcbiAgICAuc2ZfX25vdGljZS0tc3RhcnQgYXtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cblxuICBAaW5jbHVkZSBicmVha3BvaW50cyhtZCkge1xuICAgICZfX2NvbHVtbnMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG4gICAgJl9fY29sdW1uIHtcbiAgICAgIGZsZXgtYmFzaXM6IDY2JTtcblxuICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgZmxleC1iYXNpczogMzMlO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFHQUEsQUFBQSxjQUFjLENBQUM7RUFDWCxNQUFNLEVBQUUsY0FBYztFQUN0QixhQUFhLEVBQUUsR0FBRztFQUNsQixLQUFLLEVBQUUsSUFBSSxHQUNkOztBQUVELEFBQUEsY0FBYyxDQUFDLHFCQUFxQjtBQUNwQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7RUFDN0IsVUFBVSxFQUFFLFVBQVU7RUFDdEIsT0FBTyxFQUFFLFlBQVk7RUFDckIsTUFBTSxFQUFFLEtBQUs7RUFDYixVQUFVLEVBQUUsTUFBTTtFQUNsQixPQUFPLEVBQUUsSUFBSTtFQUNiLGNBQWMsRUFBRSxHQUFHO0VBQ25CLEtBQUssRUFBRSxHQUFHLEdBQ2I7O0FBRUQsQUFBQSxjQUFjLENB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 */
  • shopping-feed/trunk/readme.txt

    r2384367 r2384510  
    22Contributors: ShoppingFeed, BeAPI
    33Tags: 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.8
    5 Version: 6.0.8
     4Stable tag: 6.0.9
     5Version: 6.0.9
    66Requires PHP: 5.6
    77Requires at least: 5.2
     
    22226.0.7: add weight as attribute + fix phone value
    23236.0.8: add missing commit
     246.0.9  send WC shipping method name once order shipped
    2425
    2526== Description ==
  • shopping-feed/trunk/shoppingfeed.php

    r2384367 r2384510  
    88 * Text Domain:     shopping-feed
    99 * Domain Path:     /languages
    10  * Version:         6.0.8
     10 * Version:         6.0.9
    1111 * Requires at least WP: 5.2
    1212 * Requires at least WooCommerce: 3.8 (3.9/4.0)
     
    2626}
    2727
    28 define( 'SF_VERSION', '6.0.8' );
     28define( 'SF_VERSION', '6.0.9' );
    2929define( 'SF_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    3030define( 'SF_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
  • shopping-feed/trunk/src/Admin/WoocommerceFilters.php

    r2379551 r2384510  
    5555    }
    5656
     57
    5758    /**
    5859     * Disable Stock change for SF orders already shipped
  • shopping-feed/trunk/src/Feed/Generator.php

    r2371116 r2384510  
    1919class Generator {
    2020
     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;
    2129    /** @var Platform */
    2230    private $platform;
    23 
    2431    private $uri;
    25 
    2632    /**
    2733     * @var ProductGenerator
    2834     */
    2935    private $generator;
    30 
    31     /**
    32      * Option name to save last generation date
    33      */
    34     const SF_FEED_LAST_GENERATION_DATE = 'SF_FEED_LAST_GENERATION';
    35 
    36     /**
    37      * @var Generator
    38      */
    39     private static $instance;
    40 
    41     /**
    42      * Get the singleton instance.
    43      *
    44      * @return Generator
    45      */
    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     }
    6536
    6637    /**
     
    7445        $this->set_filters();
    7546        $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;
    76211    }
    77212
     
    128263
    129264    /**
    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() {
    278274    }
    279275}
  • shopping-feed/trunk/src/ShoppingFeedHelper.php

    r2339808 r2384510  
    492492        $sf_carrier_id = $sf_shipping['sf_shipping'];
    493493
    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'];
    500511    }
    501512
Note: See TracChangeset for help on using the changeset viewer.