Post Expirator - Version 2.7.1

Version Description

Download this release

Release Info

Developer andergmartins
Plugin Icon 128x128 Post Expirator
Version 2.7.1
Comparing to
See all releases

Code changes from version 2.7.0 to 2.7.1

assets/css/edit.css CHANGED
@@ -22,3 +22,19 @@ div.pe-qe-fields > div {
22
  .post-expirator-quickedit input {
23
  font-size: 12px;
24
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  .post-expirator-quickedit input {
23
  font-size: 12px;
24
  }
25
+
26
+ .post-expire-col .icon-never {
27
+ color: #dfdfdf;
28
+ }
29
+
30
+ .post-expire-col .icon-scheduled {
31
+ color: #7171d7;
32
+ }
33
+
34
+ .post-expire-col .icon-missed {
35
+ color: #e08f63;
36
+ }
37
+
38
+ .post-expire-col .dashicons {
39
+ cursor: help;
40
+ }
assets/js/gutenberg-panel.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=0)}([function(e,t,a){e.exports=a(1)},function(e,t,a){"use strict";var n,r,o,i,s,c,u,l,p,d,f,g,y,m,b,v,x,h,E,w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},P=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();function T(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}n=window.wp,r=window.postExpiratorPanelConfig,o=n.plugins.registerPlugin,i=n.editPost.PluginDocumentSettingPanel,s=n.components,c=s.PanelRow,u=s.DateTimePicker,l=s.CheckboxControl,p=s.SelectControl,d=s.FormTokenField,f=s.Spinner,g=n.element,y=g.Fragment,m=g.Component,b=n.htmlEntities.decodeEntities,v=lodash,x=v.isEmpty,h=v.keys,E=v.compact,o("postexpirator-sidebar",{render:function(e){function t(){T(this,t);var e=S(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.state={categoriesList:[],catIdVsName:[]},e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),P(t,[{key:"componentWillMount",value:function(){var e=this,t=(this.state.attributes,n.data.select("core/editor").getEditedPostAttribute("meta")),a=n.data.select("core/editor").getCurrentPostType(),o=function(e){return n.data.dispatch("core/editor").editPost({meta:e})},i=1==r.defaults.autoEnable,s=new Date,c=this.getExpireType(t),u=[];c.includes("category")&&(u=this.getCategories(t)),t["_expiration-date-status"]&&"saved"===t["_expiration-date-status"]&&(i=!0);var l=60*s.getTimezoneOffset(),p=60*r.timezone_offset;t["_expiration-date"]?s.setTime(1e3*(t["_expiration-date"]+l+p)):(u=r.default_categories,r.default_date&&s.setTime(1e3*(parseInt(r.default_date)+l+p)));var d=r.defaults.taxonomy||"category";this.setState({enabled:i,date:s,expireAction:c,categories:u,taxonomy:d}),o({"_expiration-date-status":i?"saved":""}),o({"_expiration-date":s.getTime()/1e3}),o({"_expiration-date-type":c}),o({"_expiration-date-categories":u});var f=[],g=[];!d&&"post"===a||"category"===d?n.apiFetch({path:n.url.addQueryArgs("wp/v2/categories",{per_page:-1})}).then((function(t){t.forEach((function(e){f[e.name]=e,g[e.id]=e.name})),e.setState({categoriesList:f,catIdVsName:g,taxonomy:r.strings.category})})):"page"!==a&&n.apiFetch({path:n.url.addQueryArgs("wp/v2/taxonomies/"+d,{context:"edit"})}).then((function(t){n.apiFetch({path:n.url.addQueryArgs("wp/v2/"+t.rest_base,{context:"edit"})}).then((function(a){a.forEach((function(e){f[b(e.name)]=e,g[e.id]=b(e.name)})),e.setState({categoriesList:f,catIdVsName:g,taxonomy:b(t.name)})}))}))}},{key:"componentDidUpdate",value:function(){var e=this.state,t=e.enabled,a=e.date,r=e.expireAction,o=e.categories,i=e.attribute,s=function(e){return n.data.dispatch("core/editor").editPost({meta:e})},c=n.data.select("core/editor").getEditedPostAttribute("meta");switch(i){case"enabled":s({"_expiration-date-status":t?"saved":""}),c["_expiration-date"]||s({"_expiration-date":this.getDate(a)});break;case"date":"string"==typeof a&&s({"_expiration-date":this.getDate(a)});break;case"action":s({"_expiration-date-type":r}),r.includes("category")||s({"_expiration-date-categories":[]});break;case"category":s({"_expiration-date-categories":o})}}},{key:"render",value:function(){var e=this,t=this.state,a=t.categoriesList,o=t.catIdVsName,s=this.state,g=s.enabled,m=s.date,b=s.expireAction,v=s.categories,w=s.taxonomy,P=n.data.select("core/editor").getCurrentPostType(),T=[{label:r.strings.draft,value:"draft"},{label:r.strings.delete,value:"delete"},{label:r.strings.trash,value:"trash"},{label:r.strings.private,value:"private"},{label:r.strings.stick,value:"stick"},{label:r.strings.unstick,value:"unstick"}];"page"!==P&&(T=_.union(T,[{label:r.strings.categoryReplace,value:"category"},{label:r.strings.categoryAdd,value:"category-add"},{label:r.strings.categoryRemove,value:"category-remove"}]));var S=v&&E(v.map((function(e){return o[e]||!1})));return"string"==typeof S&&(S=[]),React.createElement(i,{title:r.strings.postExpirator,icon:"calendar",initialOpen:g,className:"post-expirator-panel"},React.createElement(c,null,React.createElement(l,{label:r.strings.enablePostExpiration,checked:g,onChange:function(t){e.setState({enabled:!g,attribute:"enabled"})}})),g&&React.createElement(y,null,React.createElement(c,null,React.createElement(u,{currentDate:m,onChange:function(t){return e.setState({date:t,attribute:"date"})},is_12_hours:r.is_12_hours})),React.createElement(p,{label:r.strings.howToExpire,value:b,options:T,onChange:function(t){e.setState({expireAction:t,attribute:"action"})}}),b.includes("category")&&(x(h(a))&&React.createElement(y,null,r.strings.loading+" ("+w+")",React.createElement(f,null))||React.createElement(d,{label:r.strings.expirationCategories+" ("+w+")",value:S,suggestions:Object.keys(a),onChange:function(t){e.setState({categories:e.selectCategories(t),attribute:"category"})},maxSuggestions:10}))))}},{key:"getExpireType",value:function(e){var t=e["_expiration-date-type"],a=e["_expiration-date-options"]&&e["_expiration-date-options"].expireType;return t||a||(r&&r.defaults&&r.defaults.expireType?r.defaults.expireType:"draft")}},{key:"getCategories",value:function(e){var t=e["_expiration-date-categories"]&&e["_expiration-date-categories"],a=e["_expiration-date-options"]&&e["_expiration-date-options"].category;return"object"===(void 0===t?"undefined":w(t))&&t.length>0?t:(a&&void 0!==a&&"object"!==(void 0===a?"undefined":w(a))&&(categories=[a]),a)}},{key:"selectCategories",value:function(e){var t=this.state,a=t.categoriesList;if(t.catIdVsName,!e.some((function(e){return"string"==typeof e&&!a[e]})))return e.map((function(e){return"string"==typeof e?a[e]:e})).map((function(e){return e.id}))}},{key:"getDate",value:function(e){var t=new Date,a=60*(new Date).getTimezoneOffset(),n=60*r.timezone_offset;return t.setTime(Date.parse(e)),t.setTime(t.getTime()-1e3*(a+n)),t.getTime()/1e3}}]),t}(m)})}]);
2
  //# sourceMappingURL=gutenberg-panel.js.map
1
+ !function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=0)}([function(e,t,a){e.exports=a(1)},function(e,t,a){"use strict";var n,r,o,i,s,c,u,l,p,d,f,g,y,m,b,v,x,h,E,w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},P=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();function T(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}n=window.wp,r=window.postExpiratorPanelConfig,o=n.plugins.registerPlugin,i=n.editPost.PluginDocumentSettingPanel,s=n.components,c=s.PanelRow,u=s.DateTimePicker,l=s.CheckboxControl,p=s.SelectControl,d=s.FormTokenField,f=s.Spinner,g=n.element,y=g.Fragment,m=g.Component,b=n.htmlEntities.decodeEntities,v=lodash,x=v.isEmpty,h=v.keys,E=v.compact,o("postexpirator-sidebar",{render:function(e){function t(){T(this,t);var e=S(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.state={categoriesList:[],catIdVsName:[]},e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),P(t,[{key:"componentWillMount",value:function(){var e=this,t=(this.state.attributes,n.data.select("core/editor").getEditedPostAttribute("meta")),a=n.data.select("core/editor").getCurrentPostType(),o=function(e){return n.data.dispatch("core/editor").editPost({meta:e})},i=!1,s=new Date,c=this.getExpireType(t),u=[];c.includes("category")&&(u=this.getCategories(t)),t["_expiration-date-status"]&&"saved"===t["_expiration-date-status"]&&(i=!0);var l=60*s.getTimezoneOffset(),p=60*r.timezone_offset;t["_expiration-date"]?s.setTime(1e3*(t["_expiration-date"]+l+p)):(u=r.default_categories,r.default_date&&s.setTime(1e3*(parseInt(r.default_date)+l+p)));var d=r.defaults.taxonomy||"category";this.setState({enabled:i,date:s,expireAction:c,categories:u,taxonomy:d}),o({"_expiration-date-status":i?"saved":""}),o({"_expiration-date":s.getTime()/1e3}),o({"_expiration-date-type":c}),o({"_expiration-date-categories":u});var f=[],g=[];!d&&"post"===a||"category"===d?n.apiFetch({path:n.url.addQueryArgs("wp/v2/categories",{per_page:-1})}).then((function(t){t.forEach((function(e){f[e.name]=e,g[e.id]=e.name})),e.setState({categoriesList:f,catIdVsName:g,taxonomy:r.strings.category})})):"page"!==a&&n.apiFetch({path:n.url.addQueryArgs("wp/v2/taxonomies/"+d,{context:"edit"})}).then((function(t){n.apiFetch({path:n.url.addQueryArgs("wp/v2/"+t.rest_base,{context:"edit"})}).then((function(a){a.forEach((function(e){f[b(e.name)]=e,g[e.id]=b(e.name)})),e.setState({categoriesList:f,catIdVsName:g,taxonomy:b(t.name)})}))}))}},{key:"componentDidUpdate",value:function(){var e=this.state,t=e.enabled,a=e.date,r=e.expireAction,o=e.categories,i=e.attribute,s=function(e){return n.data.dispatch("core/editor").editPost({meta:e})},c=n.data.select("core/editor").getEditedPostAttribute("meta");switch(i){case"enabled":s({"_expiration-date-status":t?"saved":""}),c["_expiration-date"]||s({"_expiration-date":this.getDate(a)});break;case"date":"string"==typeof a&&s({"_expiration-date":this.getDate(a)});break;case"action":s({"_expiration-date-type":r}),r.includes("category")||s({"_expiration-date-categories":[]});break;case"category":s({"_expiration-date-categories":o})}}},{key:"render",value:function(){var e=this,t=this.state,a=t.categoriesList,o=t.catIdVsName,s=this.state,g=s.enabled,m=s.date,b=s.expireAction,v=s.categories,w=s.taxonomy,P=n.data.select("core/editor").getCurrentPostType(),T=[{label:r.strings.draft,value:"draft"},{label:r.strings.delete,value:"delete"},{label:r.strings.trash,value:"trash"},{label:r.strings.private,value:"private"},{label:r.strings.stick,value:"stick"},{label:r.strings.unstick,value:"unstick"}];"page"!==P&&(T=_.union(T,[{label:r.strings.categoryReplace,value:"category"},{label:r.strings.categoryAdd,value:"category-add"},{label:r.strings.categoryRemove,value:"category-remove"}]));var S=v&&E(v.map((function(e){return o[e]||!1})));return"string"==typeof S&&(S=[]),React.createElement(i,{title:r.strings.postExpirator,icon:"calendar",initialOpen:g,className:"post-expirator-panel"},React.createElement(c,null,React.createElement(l,{label:r.strings.enablePostExpiration,checked:g,onChange:function(t){e.setState({enabled:!g,attribute:"enabled"})}})),g&&React.createElement(y,null,React.createElement(c,null,React.createElement(u,{currentDate:m,onChange:function(t){return e.setState({date:t,attribute:"date"})},is_12_hours:r.is_12_hours})),React.createElement(p,{label:r.strings.howToExpire,value:b,options:T,onChange:function(t){e.setState({expireAction:t,attribute:"action"})}}),b.includes("category")&&(x(h(a))&&React.createElement(y,null,r.strings.loading+" ("+w+")",React.createElement(f,null))||React.createElement(d,{label:r.strings.expirationCategories+" ("+w+")",value:S,suggestions:Object.keys(a),onChange:function(t){e.setState({categories:e.selectCategories(t),attribute:"category"})},maxSuggestions:10}))))}},{key:"getExpireType",value:function(e){var t=e["_expiration-date-type"],a=e["_expiration-date-options"]&&e["_expiration-date-options"].expireType;return t||a||(r&&r.defaults&&r.defaults.expireType?r.defaults.expireType:"draft")}},{key:"getCategories",value:function(e){var t=e["_expiration-date-categories"]&&e["_expiration-date-categories"],a=e["_expiration-date-options"]&&e["_expiration-date-options"].category;return"object"===(void 0===t?"undefined":w(t))&&t.length>0?t:(a&&void 0!==a&&"object"!==(void 0===a?"undefined":w(a))&&(categories=[a]),a)}},{key:"selectCategories",value:function(e){var t=this.state,a=t.categoriesList;if(t.catIdVsName,!e.some((function(e){return"string"==typeof e&&!a[e]})))return e.map((function(e){return"string"==typeof e?a[e]:e})).map((function(e){return e.id}))}},{key:"getDate",value:function(e){var t=new Date,a=60*(new Date).getTimezoneOffset(),n=60*r.timezone_offset;return t.setTime(Date.parse(e)),t.setTime(t.getTime()-1e3*(a+n)),t.getTime()/1e3}}]),t}(m)})}]);
2
  //# sourceMappingURL=gutenberg-panel.js.map
assets/js/gutenberg-panel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/jsx/gutenberg-panel.jsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","wp","config","registerPlugin","PluginDocumentSettingPanel","PanelRow","DateTimePicker","CheckboxControl","SelectControl","FormTokenField","Spinner","Fragment","Component","decodeEntities","isEmpty","keys","compact","window","postExpiratorPanelConfig","plugins","editPost","components","element","htmlEntities","lodash","render","arguments","state","categoriesList","catIdVsName","postMeta","this","attributes","data","select","getEditedPostAttribute","postType","getCurrentPostType","setPostMeta","newMeta","dispatch","meta","enabled","defaults","autoEnable","date","Date","expireAction","getExpireType","categories","includes","getCategories","browserTimezoneOffset","getTimezoneOffset","wpTimezoneOffset","timezone_offset","setTime","default_categories","default_date","parseInt","taxonomy","setState","getTime","apiFetch","path","url","addQueryArgs","per_page","then","list","forEach","cat","id","strings","category","context","taxAttributes","rest_base","terms","term","attribute","getDate","actionsList","label","draft","delete","trash","private","stick","unstick","_","union","categoryReplace","categoryAdd","categoryRemove","selectedCats","map","title","postExpirator","icon","initialOpen","className","enablePostExpiration","checked","onChange","currentDate","is_12_hours","howToExpire","options","loading","expirationCategories","suggestions","selectCategories","maxSuggestions","typeNew","typeOld","expireType","categoriesNew","categoriesOld","length","tokens","some","token","newDate","parse"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,mEClF1CC,EAAIC,EAEJC,EACAC,EAHY,EAIZC,EAAUC,EAAgBC,EAAiBC,EAAeC,EAAgBC,EAJ9D,EAKZC,EAAUC,EACVC,EANY,EAOZC,EAASC,EAAMC,E,ksBAPff,EAySRgB,OAAOhB,GAzSKC,EAySDe,OAAOC,yBAvSVf,EAAkBF,EAAGkB,QAArBhB,eACAC,EAA8BH,EAAGmB,SAAjChB,2BAHY,EAIyEH,EAAGoB,WAAxFhB,EAJY,EAIZA,SAAUC,EAJE,EAIFA,eAAgBC,EAJd,EAIcA,gBAAiBC,EAJ/B,EAI+BA,cAAeC,EAJ9C,EAI8CA,eAAgBC,EAJ9D,EAI8DA,QAJ9D,EAKWT,EAAGqB,QAA1BX,EALY,EAKZA,SAAUC,EALE,EAKFA,UACVC,EAAkBZ,EAAGsB,aAArBV,eANY,EAOcW,OAA1BV,EAPY,EAOZA,QAASC,EAPG,EAOHA,KAAMC,EAPH,EAOGA,QA6RtBb,EAAe,wBAAyB,CACpCsB,OArSe,YAUf,aAAc,0EACDC,YADC,OAGV,EAAKC,MAAQ,CACTC,eAAgB,GAChBC,YAAa,IALP,EAVC,O,yTAAA,sDAmBM,WAGXC,GAFeC,KAAKJ,MAAnBK,WAEU/B,EAAGgC,KAAKC,OAAO,eAAeC,uBAAuB,SAChEC,EAAWnC,EAAGgC,KAAKC,OAAO,eAAeG,qBACzCC,EAAc,SAACC,GAAD,OAAatC,EAAGgC,KAAKO,SAAS,eAAepB,SAAS,CAACqB,KAAMF,KAE7EG,EAAwC,GAA9BxC,EAAOyC,SAASC,WAC1BC,EAAO,IAAIC,KAEXC,EAAehB,KAAKiB,cAAclB,GAElCmB,EAAa,GACbF,EAAaG,SAAS,cACtBD,EAAalB,KAAKoB,cAAcrB,IAGhCA,EAAS,4BAAsE,UAAxCA,EAAS,6BAChDY,GAAU,GAGd,IAAIU,EAAmD,GAA3BP,EAAKQ,oBAC7BC,EAA4C,GAAzBpD,EAAOqD,gBAE1BzB,EAAS,oBACTe,EAAKW,QAAoF,KAA3E1B,EAAS,oBAAsBsB,EAAwBE,KAErEL,EAAa/C,EAAOuD,mBAChBvD,EAAOwD,cACPb,EAAKW,QAAqF,KAA5EG,SAASzD,EAAOwD,cAAgBN,EAAwBE,KAI9E,IAAIM,EAAW1D,EAAOyC,SAASiB,UAAY,WAE3C7B,KAAK8B,SAAS,CACVnB,QAASA,EACTG,KAAMA,EACNE,aAAcA,EACdE,WAAYA,EACZW,SAAUA,IAIdtB,EAAY,CAAC,0BAA4BI,EAAU,QAAU,KAC7DJ,EAAY,CAAC,mBAAqBO,EAAKiB,UAAa,MACpDxB,EAAY,CAAC,wBAAyBS,IACtCT,EAAY,CAAC,8BAA+BW,IAE5C,IAAIrB,EAAiB,GACjBC,EAAc,IAEZ+B,GAAyB,SAAbxB,GAAqC,aAAbwB,EACtC3D,EAAG8D,SAAS,CACRC,KAAM/D,EAAGgE,IAAIC,aAAa,mBAAoB,CAACC,UAAW,MAC3DC,MAAK,SAACC,GACLA,EAAKC,SAAQ,SAAAC,GACT3C,EAAe2C,EAAI/F,MAAQ+F,EAC3B1C,EAAY0C,EAAIC,IAAMD,EAAI/F,QAE9B,EAAKqF,SAAS,CAACjC,eAAgBA,EAAgBC,YAAaA,EAAa+B,SAAU1D,EAAOuE,QAAQC,cAElF,SAAbtC,GACPnC,EAAG8D,SAAS,CACRC,KAAM/D,EAAGgE,IAAIC,aAAP,oBAAwCN,EAAY,CAACe,QAAS,WACrEP,MAAK,SAACQ,GAEL3E,EAAG8D,SAAS,CACRC,KAAM/D,EAAGgE,IAAIC,aAAP,SAA6BU,EAAcC,UAAa,CAACF,QAAS,WACzEP,MAAK,SAACU,GACLA,EAAMR,SAAQ,SAAAS,GACVnD,EAAef,EAAekE,EAAKvG,OAASuG,EAC5ClD,EAAYkD,EAAKP,IAAM3D,EAAekE,EAAKvG,SAE/C,EAAKqF,SAAS,CACVjC,eAAgBA,EAChBC,YAAaA,EACb+B,SAAU/C,EAAe+D,EAAcpG,gBAhG5C,2CAwGM,MAC4CuD,KAAKJ,MAA3De,EADU,EACVA,QAASG,EADC,EACDA,KAAME,EADL,EACKA,aAAcE,EADnB,EACmBA,WAAY+B,EAD/B,EAC+BA,UAC1C1C,EAAc,SAACC,GAAD,OAAatC,EAAGgC,KAAKO,SAAS,eAAepB,SAAS,CAACqB,KAAMF,KAC3ET,EAAW7B,EAAGgC,KAAKC,OAAO,eAAeC,uBAAuB,QAEtE,OAAQ6C,GACJ,IAAK,UACD1C,EAAY,CAAC,0BAA4BI,EAAU,QAAU,KAGxDZ,EAAS,qBACVQ,EAAY,CAAC,mBAAoBP,KAAKkD,QAAQpC,KAElD,MACJ,IAAK,OACmB,iBAATA,GACPP,EAAY,CAAC,mBAAoBP,KAAKkD,QAAQpC,KAElD,MACJ,IAAK,SACDP,EAAY,CAAC,wBAAyBS,IACjCA,EAAaG,SAAS,aACvBZ,EAAY,CAAC,8BAA+B,KAEhD,MACJ,IAAK,WACDA,EAAY,CAAC,8BAA+BW,OAlIzC,+BAwIN,aACiClB,KAAKJ,MAApCC,EADF,EACEA,eAAgBC,EADlB,EACkBA,YADlB,EAEuDE,KAAKJ,MAA1De,EAFF,EAEEA,QAASG,EAFX,EAEWA,KAAME,EAFjB,EAEiBA,aAAcE,EAF/B,EAE+BA,WAAYW,EAF3C,EAE2CA,SAE1CxB,EAAWnC,EAAGgC,KAAKC,OAAO,eAAeG,qBAE3C6C,EAAc,CACd,CAACC,MAAOjF,EAAOuE,QAAQW,MAAOlG,MAAO,SACrC,CAACiG,MAAOjF,EAAOuE,QAAQY,OAAQnG,MAAO,UACtC,CAACiG,MAAOjF,EAAOuE,QAAQa,MAAOpG,MAAO,SACrC,CAACiG,MAAOjF,EAAOuE,QAAQc,QAASrG,MAAO,WACvC,CAACiG,MAAOjF,EAAOuE,QAAQe,MAAOtG,MAAO,SACrC,CAACiG,MAAOjF,EAAOuE,QAAQgB,QAASvG,MAAO,YAG1B,SAAbkD,IACA8C,EAAcQ,EAAEC,MAAMT,EAAa,CAC/B,CAACC,MAAOjF,EAAOuE,QAAQmB,gBAAiB1G,MAAO,YAC/C,CAACiG,MAAOjF,EAAOuE,QAAQoB,YAAa3G,MAAO,gBAC3C,CAACiG,MAAOjF,EAAOuE,QAAQqB,eAAgB5G,MAAO,sBAItD,IAAI6G,EAAe9C,GAAcjC,EAAQiC,EAAW+C,KAAI,SAACxB,GAAD,OAAQ3C,EAAY2C,KAAO,MAKnF,MAJ4B,iBAAjBuB,IACPA,EAAe,IAIf,oBAAC3F,EAAD,CAA4B6F,MAAO/F,EAAOuE,QAAQyB,cAAeC,KAAK,WAC1CC,YAAa1D,EAAS2D,UAAW,wBACzD,oBAAChG,EAAD,KACI,oBAACE,EAAD,CACI4E,MAAOjF,EAAOuE,QAAQ6B,qBACtBC,QAAS7D,EACT8D,SAAU,SAACtH,GACP,EAAK2E,SAAS,CAACnB,SAAUA,EAASsC,UAAW,gBAIxDtC,GACG,oBAAC/B,EAAD,KACI,oBAACN,EAAD,KACI,oBAACC,EAAD,CACImG,YAAa5D,EACb2D,SAAU,SAACtH,GAAD,OAAW,EAAK2E,SAAS,CAAChB,KAAM3D,EAAO8F,UAAW,UAC5D0B,YAAaxG,EAAOwG,eAG5B,oBAAClG,EAAD,CACI2E,MAAOjF,EAAOuE,QAAQkC,YACtBzH,MAAO6D,EACP6D,QAAS1B,EACTsB,SAAU,SAACtH,GACP,EAAK2E,SAAS,CAACd,aAAc7D,EAAO8F,UAAW,cAGtDjC,EAAaG,SAAS,cAElBpC,EAAQC,EAAKa,KACV,oBAACjB,EAAD,KACKT,EAAOuE,QAAQoC,QAAf,KAA8BjD,EAA9B,IACD,oBAAClD,EAAD,QAKJ,oBAACD,EAAD,CACI0E,MAAOjF,EAAOuE,QAAQqC,qBAAf,KAA2ClD,EAA3C,IACP1E,MAAO6G,EACPgB,YAAapI,OAAOoC,KAAKa,GACzB4E,SAAU,SAACtH,GACP,EAAK2E,SAAS,CACVZ,WAAY,EAAK+D,iBAAiB9H,GAClC8F,UAAW,cAGnBiC,eAAgB,UArNjC,oCAgODnF,GACV,IAAIoF,EAAUpF,EAAS,yBACnBqF,EAAUrF,EAAS,6BAA+BA,EAAS,4BAAT,WAItD,OAAIoF,GAIAC,IAIAjH,GAAUA,EAAOyC,UAAYzC,EAAOyC,SAASyE,WACtClH,EAAOyC,SAASyE,WAGpB,WAlPI,oCAsPDtF,GACV,IAAIuF,EAAgBvF,EAAS,gCAAkCA,EAAS,+BACpEwF,EAAgBxF,EAAS,6BAA+BA,EAAS,4BAAT,SAE5D,MAA6B,iBAAzB,IAAOuF,EAAP,cAAOA,KAA8BA,EAAcE,OAAS,EACrDF,GAGPC,QAA0C,IAAlBA,GAA0D,iBAAzB,IAAOA,EAAP,cAAOA,MAChErE,WAAa,CAACqE,IAGXA,KAlQI,uCAuQEE,GAAQ,MACiBzF,KAAKJ,MAApCC,EADc,EACdA,eAMP,GAPqB,EACEC,aAED2F,EAAOC,MAAK,SAAUC,GACxC,MAAwB,iBAAVA,IAAuB9F,EAAe8F,MAWxD,OAJiBF,EAAOxB,KAAI,SAAU0B,GAClC,MAAwB,iBAAVA,EAAqB9F,EAAe8F,GAASA,KAG7C1B,KAAI,SAACzB,GAAD,OAASA,EAAIC,QAtRxB,8BAyRP3B,GACJ,IAAI8E,EAAU,IAAI7E,KACdM,EAAyD,IAAjC,IAAIN,MAAOO,oBACnCC,EAA4C,GAAzBpD,EAAOqD,gBAG9B,OAFAoE,EAAQnE,QAAQV,KAAK8E,MAAM/E,IAC3B8E,EAAQnE,QAAQmE,EAAQ7D,UAAyD,KAA5CV,EAAwBE,IACpDqE,EAAQ7D,UAAa,QA/RnB,GASgBlD","file":"gutenberg-panel.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","(function (wp, config) {\n\n const {registerPlugin} = wp.plugins;\n const {PluginDocumentSettingPanel} = wp.editPost;\n const {PanelRow, DateTimePicker, CheckboxControl, SelectControl, FormTokenField, Spinner} = wp.components;\n const {Fragment, Component} = wp.element;\n const {decodeEntities} = wp.htmlEntities;\n const {isEmpty, keys, compact} = lodash;\n\n class PostExpiratorSidebar extends Component {\n constructor() {\n super(...arguments);\n\n this.state = {\n categoriesList: [],\n catIdVsName: [],\n }\n }\n\n componentWillMount() {\n const {attributes} = this.state;\n\n const postMeta = wp.data.select('core/editor').getEditedPostAttribute('meta');\n const postType = wp.data.select('core/editor').getCurrentPostType();\n const setPostMeta = (newMeta) => wp.data.dispatch('core/editor').editPost({meta: newMeta});\n\n let enabled = config.defaults.autoEnable == 1;\n let date = new Date();\n\n let expireAction = this.getExpireType(postMeta);\n\n let categories = [];\n if (expireAction.includes('category')) {\n categories = this.getCategories(postMeta);\n }\n\n if (postMeta['_expiration-date-status'] && postMeta['_expiration-date-status'] === 'saved') {\n enabled = true;\n }\n\n let browserTimezoneOffset = date.getTimezoneOffset() * 60;\n let wpTimezoneOffset = config.timezone_offset * 60;\n\n if (postMeta['_expiration-date']) {\n date.setTime((postMeta['_expiration-date'] + browserTimezoneOffset + wpTimezoneOffset) * 1000);\n } else {\n categories = config.default_categories;\n if (config.default_date) {\n date.setTime((parseInt(config.default_date) + browserTimezoneOffset + wpTimezoneOffset) * 1000);\n }\n }\n\n let taxonomy = config.defaults.taxonomy || 'category';\n\n this.setState({\n enabled: enabled,\n date: date,\n expireAction: expireAction,\n categories: categories,\n taxonomy: taxonomy,\n });\n\n // Force all the metadata to be saved. Required for making sure the default settings are stored correctly.\n setPostMeta({'_expiration-date-status': (enabled ? 'saved' : '')});\n setPostMeta({'_expiration-date': (date.getTime()) / 1000});\n setPostMeta({'_expiration-date-type': expireAction});\n setPostMeta({'_expiration-date-categories': categories});\n\n let categoriesList = [];\n let catIdVsName = [];\n\n if ((!taxonomy && postType === 'post') || taxonomy === 'category') {\n wp.apiFetch({\n path: wp.url.addQueryArgs('wp/v2/categories', {per_page: -1}),\n }).then((list) => {\n list.forEach(cat => {\n categoriesList[cat.name] = cat;\n catIdVsName[cat.id] = cat.name;\n });\n this.setState({categoriesList: categoriesList, catIdVsName: catIdVsName, taxonomy: config.strings.category});\n });\n } else if (postType !== 'page') {\n wp.apiFetch({\n path: wp.url.addQueryArgs(`wp/v2/taxonomies/${taxonomy}`, {context: 'edit'}),\n }).then((taxAttributes) => {\n // fetch all terms\n wp.apiFetch({\n path: wp.url.addQueryArgs(`wp/v2/${taxAttributes.rest_base}`, {context: 'edit'}),\n }).then((terms) => {\n terms.forEach(term => {\n categoriesList[decodeEntities(term.name)] = term;\n catIdVsName[term.id] = decodeEntities(term.name);\n });\n this.setState({\n categoriesList: categoriesList,\n catIdVsName: catIdVsName,\n taxonomy: decodeEntities(taxAttributes.name)\n });\n });\n });\n }\n\n }\n\n componentDidUpdate() {\n const {enabled, date, expireAction, categories, attribute} = this.state;\n const setPostMeta = (newMeta) => wp.data.dispatch('core/editor').editPost({meta: newMeta});\n const postMeta = wp.data.select('core/editor').getEditedPostAttribute('meta');\n\n switch (attribute) {\n case 'enabled':\n setPostMeta({'_expiration-date-status': (enabled ? 'saved' : '')});\n // if date is not set when the checkbox is enabled, set it to the default date\n // this is to prevent the user from having to click the date to set it\n if (!postMeta['_expiration-date']) {\n setPostMeta({'_expiration-date': this.getDate(date)});\n }\n break;\n case 'date':\n if (typeof date === 'string') {\n setPostMeta({'_expiration-date': this.getDate(date)});\n }\n break;\n case 'action':\n setPostMeta({'_expiration-date-type': expireAction});\n if (!expireAction.includes('category')) {\n setPostMeta({'_expiration-date-categories': []});\n }\n break;\n case 'category':\n setPostMeta({'_expiration-date-categories': categories});\n break;\n }\n\n }\n\n render() {\n const {categoriesList, catIdVsName} = this.state;\n const {enabled, date, expireAction, categories, taxonomy} = this.state;\n\n const postType = wp.data.select('core/editor').getCurrentPostType();\n\n let actionsList = [\n {label: config.strings.draft, value: 'draft'},\n {label: config.strings.delete, value: 'delete'},\n {label: config.strings.trash, value: 'trash'},\n {label: config.strings.private, value: 'private'},\n {label: config.strings.stick, value: 'stick'},\n {label: config.strings.unstick, value: 'unstick'},\n ];\n\n if (postType !== 'page') {\n actionsList = _.union(actionsList, [\n {label: config.strings.categoryReplace, value: 'category'},\n {label: config.strings.categoryAdd, value: 'category-add'},\n {label: config.strings.categoryRemove, value: 'category-remove'},\n ]);\n }\n\n let selectedCats = categories && compact(categories.map((id) => catIdVsName[id] || false));\n if (typeof selectedCats === 'string') {\n selectedCats = [];\n }\n\n return (\n <PluginDocumentSettingPanel title={config.strings.postExpirator} icon=\"calendar\"\n initialOpen={enabled} className={'post-expirator-panel'}>\n <PanelRow>\n <CheckboxControl\n label={config.strings.enablePostExpiration}\n checked={enabled}\n onChange={(value) => {\n this.setState({enabled: !enabled, attribute: 'enabled'})\n }}\n />\n </PanelRow>\n {enabled && (\n <Fragment>\n <PanelRow>\n <DateTimePicker\n currentDate={date}\n onChange={(value) => this.setState({date: value, attribute: 'date'})}\n is_12_hours={config.is_12_hours}\n />\n </PanelRow>\n <SelectControl\n label={config.strings.howToExpire}\n value={expireAction}\n options={actionsList}\n onChange={(value) => {\n this.setState({expireAction: value, attribute: 'action'})\n }}\n />\n {expireAction.includes('category') &&\n (\n (isEmpty(keys(categoriesList)) && (\n <Fragment>\n {config.strings.loading + ` (${taxonomy})`}\n <Spinner/>\n </Fragment>\n ))\n ||\n (\n <FormTokenField\n label={config.strings.expirationCategories + ` (${taxonomy})`}\n value={selectedCats}\n suggestions={Object.keys(categoriesList)}\n onChange={(value) => {\n this.setState({\n categories: this.selectCategories(value),\n attribute: 'category'\n })\n }}\n maxSuggestions={10}\n />\n )\n )}\n </Fragment>\n )}\n </PluginDocumentSettingPanel>\n );\n }\n\n // what action to take on expiration\n getExpireType(postMeta) {\n let typeNew = postMeta['_expiration-date-type'];\n let typeOld = postMeta['_expiration-date-options'] && postMeta['_expiration-date-options']['expireType'];\n\n\n\n if (typeNew) {\n return typeNew;\n }\n\n if (typeOld) {\n return typeOld;\n }\n\n if (config && config.defaults && config.defaults.expireType) {\n return config.defaults.expireType;\n }\n\n return 'draft';\n }\n\n // what categories to add/remove/replace\n getCategories(postMeta) {\n let categoriesNew = postMeta['_expiration-date-categories'] && postMeta['_expiration-date-categories'];\n let categoriesOld = postMeta['_expiration-date-options'] && postMeta['_expiration-date-options']['category'];\n\n if (typeof categoriesNew === 'object' && categoriesNew.length > 0) {\n return categoriesNew;\n }\n\n if (categoriesOld && typeof categoriesOld !== 'undefined' && typeof categoriesOld !== 'object') {\n categories = [categoriesOld];\n }\n\n return categoriesOld;\n\n }\n\n // fired for the autocomplete\n selectCategories(tokens) {\n const {categoriesList, catIdVsName} = this.state;\n\n var hasNoSuggestion = tokens.some(function (token) {\n return typeof token === 'string' && !categoriesList[token];\n });\n\n if (hasNoSuggestion) {\n return;\n }\n\n var categories = tokens.map(function (token) {\n return typeof token === 'string' ? categoriesList[token] : token;\n })\n\n return categories.map((cat) => cat.id);\n }\n\n getDate(date) {\n let newDate = new Date();\n let browserTimezoneOffset = new Date().getTimezoneOffset() * 60;\n let wpTimezoneOffset = config.timezone_offset * 60;\n newDate.setTime(Date.parse(date));\n newDate.setTime(newDate.getTime() - (browserTimezoneOffset + wpTimezoneOffset) * 1000);\n return ((newDate.getTime()) / 1000);\n }\n\n }\n\n registerPlugin('postexpirator-sidebar', {\n render: PostExpiratorSidebar\n });\n\n\n})(window.wp, window.postExpiratorPanelConfig);\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/jsx/gutenberg-panel.jsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","wp","config","registerPlugin","PluginDocumentSettingPanel","PanelRow","DateTimePicker","CheckboxControl","SelectControl","FormTokenField","Spinner","Fragment","Component","decodeEntities","isEmpty","keys","compact","window","postExpiratorPanelConfig","plugins","editPost","components","element","htmlEntities","lodash","render","arguments","state","categoriesList","catIdVsName","postMeta","this","attributes","data","select","getEditedPostAttribute","postType","getCurrentPostType","setPostMeta","newMeta","dispatch","meta","enabled","date","Date","expireAction","getExpireType","categories","includes","getCategories","browserTimezoneOffset","getTimezoneOffset","wpTimezoneOffset","timezone_offset","setTime","default_categories","default_date","parseInt","taxonomy","defaults","setState","getTime","apiFetch","path","url","addQueryArgs","per_page","then","list","forEach","cat","id","strings","category","context","taxAttributes","rest_base","terms","term","attribute","getDate","actionsList","label","draft","delete","trash","private","stick","unstick","_","union","categoryReplace","categoryAdd","categoryRemove","selectedCats","map","title","postExpirator","icon","initialOpen","className","enablePostExpiration","checked","onChange","currentDate","is_12_hours","howToExpire","options","loading","expirationCategories","suggestions","selectCategories","maxSuggestions","typeNew","typeOld","expireType","categoriesNew","categoriesOld","length","tokens","some","token","newDate","parse"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,mEClF1CC,EAAIC,EAEJC,EACAC,EAHY,EAIZC,EAAUC,EAAgBC,EAAiBC,EAAeC,EAAgBC,EAJ9D,EAKZC,EAAUC,EACVC,EANY,EAOZC,EAASC,EAAMC,E,ksBAPff,EAySRgB,OAAOhB,GAzSKC,EAySDe,OAAOC,yBAvSVf,EAAkBF,EAAGkB,QAArBhB,eACAC,EAA8BH,EAAGmB,SAAjChB,2BAHY,EAIyEH,EAAGoB,WAAxFhB,EAJY,EAIZA,SAAUC,EAJE,EAIFA,eAAgBC,EAJd,EAIcA,gBAAiBC,EAJ/B,EAI+BA,cAAeC,EAJ9C,EAI8CA,eAAgBC,EAJ9D,EAI8DA,QAJ9D,EAKWT,EAAGqB,QAA1BX,EALY,EAKZA,SAAUC,EALE,EAKFA,UACVC,EAAkBZ,EAAGsB,aAArBV,eANY,EAOcW,OAA1BV,EAPY,EAOZA,QAASC,EAPG,EAOHA,KAAMC,EAPH,EAOGA,QA6RtBb,EAAe,wBAAyB,CACpCsB,OArSe,YAUf,aAAc,0EACDC,YADC,OAGV,EAAKC,MAAQ,CACTC,eAAgB,GAChBC,YAAa,IALP,EAVC,O,yTAAA,sDAmBM,WAGXC,GAFeC,KAAKJ,MAAnBK,WAEU/B,EAAGgC,KAAKC,OAAO,eAAeC,uBAAuB,SAChEC,EAAWnC,EAAGgC,KAAKC,OAAO,eAAeG,qBACzCC,EAAc,SAACC,GAAD,OAAatC,EAAGgC,KAAKO,SAAS,eAAepB,SAAS,CAACqB,KAAMF,KAE7EG,GAAU,EACVC,EAAO,IAAIC,KAEXC,EAAed,KAAKe,cAAchB,GAElCiB,EAAa,GACbF,EAAaG,SAAS,cACtBD,EAAahB,KAAKkB,cAAcnB,IAGhCA,EAAS,4BAAsE,UAAxCA,EAAS,6BAChDY,GAAU,GAGd,IAAIQ,EAAmD,GAA3BP,EAAKQ,oBAC7BC,EAA4C,GAAzBlD,EAAOmD,gBAE1BvB,EAAS,oBACTa,EAAKW,QAAoF,KAA3ExB,EAAS,oBAAsBoB,EAAwBE,KAErEL,EAAa7C,EAAOqD,mBAChBrD,EAAOsD,cACPb,EAAKW,QAAqF,KAA5EG,SAASvD,EAAOsD,cAAgBN,EAAwBE,KAI9E,IAAIM,EAAWxD,EAAOyD,SAASD,UAAY,WAE3C3B,KAAK6B,SAAS,CACVlB,QAASA,EACTC,KAAMA,EACNE,aAAcA,EACdE,WAAYA,EACZW,SAAUA,IAIdpB,EAAY,CAAC,0BAA4BI,EAAU,QAAU,KAC7DJ,EAAY,CAAC,mBAAqBK,EAAKkB,UAAa,MACpDvB,EAAY,CAAC,wBAAyBO,IACtCP,EAAY,CAAC,8BAA+BS,IAE5C,IAAInB,EAAiB,GACjBC,EAAc,IAEZ6B,GAAyB,SAAbtB,GAAqC,aAAbsB,EACtCzD,EAAG6D,SAAS,CACRC,KAAM9D,EAAG+D,IAAIC,aAAa,mBAAoB,CAACC,UAAW,MAC3DC,MAAK,SAACC,GACLA,EAAKC,SAAQ,SAAAC,GACT1C,EAAe0C,EAAI9F,MAAQ8F,EAC3BzC,EAAYyC,EAAIC,IAAMD,EAAI9F,QAE9B,EAAKoF,SAAS,CAAChC,eAAgBA,EAAgBC,YAAaA,EAAa6B,SAAUxD,EAAOsE,QAAQC,cAElF,SAAbrC,GACPnC,EAAG6D,SAAS,CACRC,KAAM9D,EAAG+D,IAAIC,aAAP,oBAAwCP,EAAY,CAACgB,QAAS,WACrEP,MAAK,SAACQ,GAEL1E,EAAG6D,SAAS,CACRC,KAAM9D,EAAG+D,IAAIC,aAAP,SAA6BU,EAAcC,UAAa,CAACF,QAAS,WACzEP,MAAK,SAACU,GACLA,EAAMR,SAAQ,SAAAS,GACVlD,EAAef,EAAeiE,EAAKtG,OAASsG,EAC5CjD,EAAYiD,EAAKP,IAAM1D,EAAeiE,EAAKtG,SAE/C,EAAKoF,SAAS,CACVhC,eAAgBA,EAChBC,YAAaA,EACb6B,SAAU7C,EAAe8D,EAAcnG,gBAhG5C,2CAwGM,MAC4CuD,KAAKJ,MAA3De,EADU,EACVA,QAASC,EADC,EACDA,KAAME,EADL,EACKA,aAAcE,EADnB,EACmBA,WAAYgC,EAD/B,EAC+BA,UAC1CzC,EAAc,SAACC,GAAD,OAAatC,EAAGgC,KAAKO,SAAS,eAAepB,SAAS,CAACqB,KAAMF,KAC3ET,EAAW7B,EAAGgC,KAAKC,OAAO,eAAeC,uBAAuB,QAEtE,OAAQ4C,GACJ,IAAK,UACDzC,EAAY,CAAC,0BAA4BI,EAAU,QAAU,KAGxDZ,EAAS,qBACVQ,EAAY,CAAC,mBAAoBP,KAAKiD,QAAQrC,KAElD,MACJ,IAAK,OACmB,iBAATA,GACPL,EAAY,CAAC,mBAAoBP,KAAKiD,QAAQrC,KAElD,MACJ,IAAK,SACDL,EAAY,CAAC,wBAAyBO,IACjCA,EAAaG,SAAS,aACvBV,EAAY,CAAC,8BAA+B,KAEhD,MACJ,IAAK,WACDA,EAAY,CAAC,8BAA+BS,OAlIzC,+BAwIN,aACiChB,KAAKJ,MAApCC,EADF,EACEA,eAAgBC,EADlB,EACkBA,YADlB,EAEuDE,KAAKJ,MAA1De,EAFF,EAEEA,QAASC,EAFX,EAEWA,KAAME,EAFjB,EAEiBA,aAAcE,EAF/B,EAE+BA,WAAYW,EAF3C,EAE2CA,SAE1CtB,EAAWnC,EAAGgC,KAAKC,OAAO,eAAeG,qBAE3C4C,EAAc,CACd,CAACC,MAAOhF,EAAOsE,QAAQW,MAAOjG,MAAO,SACrC,CAACgG,MAAOhF,EAAOsE,QAAQY,OAAQlG,MAAO,UACtC,CAACgG,MAAOhF,EAAOsE,QAAQa,MAAOnG,MAAO,SACrC,CAACgG,MAAOhF,EAAOsE,QAAQc,QAASpG,MAAO,WACvC,CAACgG,MAAOhF,EAAOsE,QAAQe,MAAOrG,MAAO,SACrC,CAACgG,MAAOhF,EAAOsE,QAAQgB,QAAStG,MAAO,YAG1B,SAAbkD,IACA6C,EAAcQ,EAAEC,MAAMT,EAAa,CAC/B,CAACC,MAAOhF,EAAOsE,QAAQmB,gBAAiBzG,MAAO,YAC/C,CAACgG,MAAOhF,EAAOsE,QAAQoB,YAAa1G,MAAO,gBAC3C,CAACgG,MAAOhF,EAAOsE,QAAQqB,eAAgB3G,MAAO,sBAItD,IAAI4G,EAAe/C,GAAc/B,EAAQ+B,EAAWgD,KAAI,SAACxB,GAAD,OAAQ1C,EAAY0C,KAAO,MAKnF,MAJ4B,iBAAjBuB,IACPA,EAAe,IAIf,oBAAC1F,EAAD,CAA4B4F,MAAO9F,EAAOsE,QAAQyB,cAAeC,KAAK,WAC1CC,YAAazD,EAAS0D,UAAW,wBACzD,oBAAC/F,EAAD,KACI,oBAACE,EAAD,CACI2E,MAAOhF,EAAOsE,QAAQ6B,qBACtBC,QAAS5D,EACT6D,SAAU,SAACrH,GACP,EAAK0E,SAAS,CAAClB,SAAUA,EAASqC,UAAW,gBAIxDrC,GACG,oBAAC/B,EAAD,KACI,oBAACN,EAAD,KACI,oBAACC,EAAD,CACIkG,YAAa7D,EACb4D,SAAU,SAACrH,GAAD,OAAW,EAAK0E,SAAS,CAACjB,KAAMzD,EAAO6F,UAAW,UAC5D0B,YAAavG,EAAOuG,eAG5B,oBAACjG,EAAD,CACI0E,MAAOhF,EAAOsE,QAAQkC,YACtBxH,MAAO2D,EACP8D,QAAS1B,EACTsB,SAAU,SAACrH,GACP,EAAK0E,SAAS,CAACf,aAAc3D,EAAO6F,UAAW,cAGtDlC,EAAaG,SAAS,cAElBlC,EAAQC,EAAKa,KACV,oBAACjB,EAAD,KACKT,EAAOsE,QAAQoC,QAAf,KAA8BlD,EAA9B,IACD,oBAAChD,EAAD,QAKJ,oBAACD,EAAD,CACIyE,MAAOhF,EAAOsE,QAAQqC,qBAAf,KAA2CnD,EAA3C,IACPxE,MAAO4G,EACPgB,YAAanI,OAAOoC,KAAKa,GACzB2E,SAAU,SAACrH,GACP,EAAK0E,SAAS,CACVb,WAAY,EAAKgE,iBAAiB7H,GAClC6F,UAAW,cAGnBiC,eAAgB,UArNjC,oCAgODlF,GACV,IAAImF,EAAUnF,EAAS,yBACnBoF,EAAUpF,EAAS,6BAA+BA,EAAS,4BAAT,WAItD,OAAImF,GAIAC,IAIAhH,GAAUA,EAAOyD,UAAYzD,EAAOyD,SAASwD,WACtCjH,EAAOyD,SAASwD,WAGpB,WAlPI,oCAsPDrF,GACV,IAAIsF,EAAgBtF,EAAS,gCAAkCA,EAAS,+BACpEuF,EAAgBvF,EAAS,6BAA+BA,EAAS,4BAAT,SAE5D,MAA6B,iBAAzB,IAAOsF,EAAP,cAAOA,KAA8BA,EAAcE,OAAS,EACrDF,GAGPC,QAA0C,IAAlBA,GAA0D,iBAAzB,IAAOA,EAAP,cAAOA,MAChEtE,WAAa,CAACsE,IAGXA,KAlQI,uCAuQEE,GAAQ,MACiBxF,KAAKJ,MAApCC,EADc,EACdA,eAMP,GAPqB,EACEC,aAED0F,EAAOC,MAAK,SAAUC,GACxC,MAAwB,iBAAVA,IAAuB7F,EAAe6F,MAWxD,OAJiBF,EAAOxB,KAAI,SAAU0B,GAClC,MAAwB,iBAAVA,EAAqB7F,EAAe6F,GAASA,KAG7C1B,KAAI,SAACzB,GAAD,OAASA,EAAIC,QAtRxB,8BAyRP5B,GACJ,IAAI+E,EAAU,IAAI9E,KACdM,EAAyD,IAAjC,IAAIN,MAAOO,oBACnCC,EAA4C,GAAzBlD,EAAOmD,gBAG9B,OAFAqE,EAAQpE,QAAQV,KAAK+E,MAAMhF,IAC3B+E,EAAQpE,QAAQoE,EAAQ7D,UAAyD,KAA5CX,EAAwBE,IACpDsE,EAAQ7D,UAAa,QA/RnB,GASgBjD","file":"gutenberg-panel.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","(function (wp, config) {\n\n const {registerPlugin} = wp.plugins;\n const {PluginDocumentSettingPanel} = wp.editPost;\n const {PanelRow, DateTimePicker, CheckboxControl, SelectControl, FormTokenField, Spinner} = wp.components;\n const {Fragment, Component} = wp.element;\n const {decodeEntities} = wp.htmlEntities;\n const {isEmpty, keys, compact} = lodash;\n\n class PostExpiratorSidebar extends Component {\n constructor() {\n super(...arguments);\n\n this.state = {\n categoriesList: [],\n catIdVsName: [],\n }\n }\n\n componentWillMount() {\n const {attributes} = this.state;\n\n const postMeta = wp.data.select('core/editor').getEditedPostAttribute('meta');\n const postType = wp.data.select('core/editor').getCurrentPostType();\n const setPostMeta = (newMeta) => wp.data.dispatch('core/editor').editPost({meta: newMeta});\n\n let enabled = false;\n let date = new Date();\n\n let expireAction = this.getExpireType(postMeta);\n\n let categories = [];\n if (expireAction.includes('category')) {\n categories = this.getCategories(postMeta);\n }\n\n if (postMeta['_expiration-date-status'] && postMeta['_expiration-date-status'] === 'saved') {\n enabled = true;\n }\n\n let browserTimezoneOffset = date.getTimezoneOffset() * 60;\n let wpTimezoneOffset = config.timezone_offset * 60;\n\n if (postMeta['_expiration-date']) {\n date.setTime((postMeta['_expiration-date'] + browserTimezoneOffset + wpTimezoneOffset) * 1000);\n } else {\n categories = config.default_categories;\n if (config.default_date) {\n date.setTime((parseInt(config.default_date) + browserTimezoneOffset + wpTimezoneOffset) * 1000);\n }\n }\n\n let taxonomy = config.defaults.taxonomy || 'category';\n\n this.setState({\n enabled: enabled,\n date: date,\n expireAction: expireAction,\n categories: categories,\n taxonomy: taxonomy,\n });\n\n // Force all the metadata to be saved. Required for making sure the default settings are stored correctly.\n setPostMeta({'_expiration-date-status': (enabled ? 'saved' : '')});\n setPostMeta({'_expiration-date': (date.getTime()) / 1000});\n setPostMeta({'_expiration-date-type': expireAction});\n setPostMeta({'_expiration-date-categories': categories});\n\n let categoriesList = [];\n let catIdVsName = [];\n\n if ((!taxonomy && postType === 'post') || taxonomy === 'category') {\n wp.apiFetch({\n path: wp.url.addQueryArgs('wp/v2/categories', {per_page: -1}),\n }).then((list) => {\n list.forEach(cat => {\n categoriesList[cat.name] = cat;\n catIdVsName[cat.id] = cat.name;\n });\n this.setState({categoriesList: categoriesList, catIdVsName: catIdVsName, taxonomy: config.strings.category});\n });\n } else if (postType !== 'page') {\n wp.apiFetch({\n path: wp.url.addQueryArgs(`wp/v2/taxonomies/${taxonomy}`, {context: 'edit'}),\n }).then((taxAttributes) => {\n // fetch all terms\n wp.apiFetch({\n path: wp.url.addQueryArgs(`wp/v2/${taxAttributes.rest_base}`, {context: 'edit'}),\n }).then((terms) => {\n terms.forEach(term => {\n categoriesList[decodeEntities(term.name)] = term;\n catIdVsName[term.id] = decodeEntities(term.name);\n });\n this.setState({\n categoriesList: categoriesList,\n catIdVsName: catIdVsName,\n taxonomy: decodeEntities(taxAttributes.name)\n });\n });\n });\n }\n\n }\n\n componentDidUpdate() {\n const {enabled, date, expireAction, categories, attribute} = this.state;\n const setPostMeta = (newMeta) => wp.data.dispatch('core/editor').editPost({meta: newMeta});\n const postMeta = wp.data.select('core/editor').getEditedPostAttribute('meta');\n\n switch (attribute) {\n case 'enabled':\n setPostMeta({'_expiration-date-status': (enabled ? 'saved' : '')});\n // if date is not set when the checkbox is enabled, set it to the default date\n // this is to prevent the user from having to click the date to set it\n if (!postMeta['_expiration-date']) {\n setPostMeta({'_expiration-date': this.getDate(date)});\n }\n break;\n case 'date':\n if (typeof date === 'string') {\n setPostMeta({'_expiration-date': this.getDate(date)});\n }\n break;\n case 'action':\n setPostMeta({'_expiration-date-type': expireAction});\n if (!expireAction.includes('category')) {\n setPostMeta({'_expiration-date-categories': []});\n }\n break;\n case 'category':\n setPostMeta({'_expiration-date-categories': categories});\n break;\n }\n\n }\n\n render() {\n const {categoriesList, catIdVsName} = this.state;\n const {enabled, date, expireAction, categories, taxonomy} = this.state;\n\n const postType = wp.data.select('core/editor').getCurrentPostType();\n\n let actionsList = [\n {label: config.strings.draft, value: 'draft'},\n {label: config.strings.delete, value: 'delete'},\n {label: config.strings.trash, value: 'trash'},\n {label: config.strings.private, value: 'private'},\n {label: config.strings.stick, value: 'stick'},\n {label: config.strings.unstick, value: 'unstick'},\n ];\n\n if (postType !== 'page') {\n actionsList = _.union(actionsList, [\n {label: config.strings.categoryReplace, value: 'category'},\n {label: config.strings.categoryAdd, value: 'category-add'},\n {label: config.strings.categoryRemove, value: 'category-remove'},\n ]);\n }\n\n let selectedCats = categories && compact(categories.map((id) => catIdVsName[id] || false));\n if (typeof selectedCats === 'string') {\n selectedCats = [];\n }\n\n return (\n <PluginDocumentSettingPanel title={config.strings.postExpirator} icon=\"calendar\"\n initialOpen={enabled} className={'post-expirator-panel'}>\n <PanelRow>\n <CheckboxControl\n label={config.strings.enablePostExpiration}\n checked={enabled}\n onChange={(value) => {\n this.setState({enabled: !enabled, attribute: 'enabled'})\n }}\n />\n </PanelRow>\n {enabled && (\n <Fragment>\n <PanelRow>\n <DateTimePicker\n currentDate={date}\n onChange={(value) => this.setState({date: value, attribute: 'date'})}\n is_12_hours={config.is_12_hours}\n />\n </PanelRow>\n <SelectControl\n label={config.strings.howToExpire}\n value={expireAction}\n options={actionsList}\n onChange={(value) => {\n this.setState({expireAction: value, attribute: 'action'})\n }}\n />\n {expireAction.includes('category') &&\n (\n (isEmpty(keys(categoriesList)) && (\n <Fragment>\n {config.strings.loading + ` (${taxonomy})`}\n <Spinner/>\n </Fragment>\n ))\n ||\n (\n <FormTokenField\n label={config.strings.expirationCategories + ` (${taxonomy})`}\n value={selectedCats}\n suggestions={Object.keys(categoriesList)}\n onChange={(value) => {\n this.setState({\n categories: this.selectCategories(value),\n attribute: 'category'\n })\n }}\n maxSuggestions={10}\n />\n )\n )}\n </Fragment>\n )}\n </PluginDocumentSettingPanel>\n );\n }\n\n // what action to take on expiration\n getExpireType(postMeta) {\n let typeNew = postMeta['_expiration-date-type'];\n let typeOld = postMeta['_expiration-date-options'] && postMeta['_expiration-date-options']['expireType'];\n\n\n\n if (typeNew) {\n return typeNew;\n }\n\n if (typeOld) {\n return typeOld;\n }\n\n if (config && config.defaults && config.defaults.expireType) {\n return config.defaults.expireType;\n }\n\n return 'draft';\n }\n\n // what categories to add/remove/replace\n getCategories(postMeta) {\n let categoriesNew = postMeta['_expiration-date-categories'] && postMeta['_expiration-date-categories'];\n let categoriesOld = postMeta['_expiration-date-options'] && postMeta['_expiration-date-options']['category'];\n\n if (typeof categoriesNew === 'object' && categoriesNew.length > 0) {\n return categoriesNew;\n }\n\n if (categoriesOld && typeof categoriesOld !== 'undefined' && typeof categoriesOld !== 'object') {\n categories = [categoriesOld];\n }\n\n return categoriesOld;\n\n }\n\n // fired for the autocomplete\n selectCategories(tokens) {\n const {categoriesList, catIdVsName} = this.state;\n\n var hasNoSuggestion = tokens.some(function (token) {\n return typeof token === 'string' && !categoriesList[token];\n });\n\n if (hasNoSuggestion) {\n return;\n }\n\n var categories = tokens.map(function (token) {\n return typeof token === 'string' ? categoriesList[token] : token;\n })\n\n return categories.map((cat) => cat.id);\n }\n\n getDate(date) {\n let newDate = new Date();\n let browserTimezoneOffset = new Date().getTimezoneOffset() * 60;\n let wpTimezoneOffset = config.timezone_offset * 60;\n newDate.setTime(Date.parse(date));\n newDate.setTime(newDate.getTime() - (browserTimezoneOffset + wpTimezoneOffset) * 1000);\n return ((newDate.getTime()) / 1000);\n }\n\n }\n\n registerPlugin('postexpirator-sidebar', {\n render: PostExpiratorSidebar\n });\n\n\n})(window.wp, window.postExpiratorPanelConfig);\n"],"sourceRoot":""}
assets/jsx/gutenberg-panel.jsx CHANGED
@@ -24,7 +24,7 @@
24
  const postType = wp.data.select('core/editor').getCurrentPostType();
25
  const setPostMeta = (newMeta) => wp.data.dispatch('core/editor').editPost({meta: newMeta});
26
 
27
- let enabled = config.defaults.autoEnable == 1;
28
  let date = new Date();
29
 
30
  let expireAction = this.getExpireType(postMeta);
24
  const postType = wp.data.select('core/editor').getCurrentPostType();
25
  const setPostMeta = (newMeta) => wp.data.dispatch('core/editor').editPost({meta: newMeta});
26
 
27
+ let enabled = false;
28
  let date = new Date();
29
 
30
  let expireAction = this.getExpireType(postMeta);
classes/Cli.class.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright (c) 2022. PublishPress, All rights reserved.
4
+ */
5
+
6
+ /**
7
+ * Utility functions.
8
+ */
9
+ class PostExpirator_Cli
10
+ {
11
+ const CLI_COMMAND = 'publishpress-future';
12
+
13
+ private static $instance;
14
+
15
+ public function __construct()
16
+ {
17
+ try {
18
+ WP_CLI::add_command(
19
+ self::CLI_COMMAND . ' expire-post',
20
+ [$this, 'expirePostCommand'],
21
+ [
22
+ 'shortdesc' => 'Expire a post passing the post id, ignoring the expiration date',
23
+ 'longdesc' => 'Expire a post passing the post id, ignoring the expiration date',
24
+ ]
25
+ );
26
+ } catch (Exception $e) {
27
+ WP_CLI::warning($e);
28
+ }
29
+ }
30
+
31
+ public static function getInstance()
32
+ {
33
+ if (empty(self::$instance)) {
34
+ self::$instance = new PostExpirator_Cli();
35
+ }
36
+
37
+ return self::$instance;
38
+ }
39
+
40
+ /**
41
+ * Expires a post using the post metadata in PublishPress Future, but ignoring the expiration date.
42
+ *
43
+ * <post-id>
44
+ * : One or more post ids separated by space
45
+ *
46
+ *
47
+ * @param $args
48
+ *
49
+ * @return void
50
+ */
51
+ public function expirePostCommand($args)
52
+ {
53
+ foreach ($args as $postId) {
54
+ $postId = (int)$postId;
55
+
56
+ if (empty($postId)) {
57
+ continue;
58
+ }
59
+
60
+ WP_CLI::log('Expiring the post ' . $postId);
61
+
62
+ postexpirator_expire_post($postId);
63
+ }
64
+
65
+ WP_CLI::success('Done');
66
+ }
67
+ }
classes/CronFacade.class.php CHANGED
@@ -44,4 +44,39 @@ class PostExpirator_CronFacade
44
  'postExpiratorExpire',
45
  ];
46
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  }
44
  'postExpiratorExpire',
45
  ];
46
  }
47
+
48
+ public static function post_has_scheduled_task($post_id)
49
+ {
50
+ $events = self::get_plugin_cron_events();
51
+
52
+ foreach ($events as $time => $value) {
53
+ foreach ($value as $eventkey => $eventvalue) {
54
+ $arrkey = array_keys($eventvalue);
55
+ $firstArgsUid = null;
56
+
57
+ foreach ($arrkey as $eventguid) {
58
+ if (is_null($firstArgsUid)) {
59
+ $firstArgsUid = $eventguid;
60
+ }
61
+ }
62
+
63
+ if (
64
+ isset($eventvalue[$firstArgsUid])
65
+ && isset($eventvalue[$firstArgsUid]['args'])
66
+ && isset($eventvalue[$firstArgsUid]['args'][0])
67
+ && ! empty($eventvalue[$firstArgsUid]['args'][0])
68
+ ) {
69
+ $post = get_post((int)$eventvalue[$firstArgsUid]['args'][0]);
70
+
71
+ if (! empty($post) && ! is_wp_error($post) && is_object($post)) {
72
+ if ($post->ID === $post_id) {
73
+ return true;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+
80
+ return false;
81
+ }
82
  }
classes/Display.class.php CHANGED
@@ -81,6 +81,10 @@ class PostExpirator_Display
81
  */
82
  public function settings_tabs()
83
  {
 
 
 
 
84
  PostExpirator_Facade::load_assets('settings');
85
 
86
  $allowed_tabs = array('general', 'defaults', 'display', 'editor', 'diagnostics', 'viewdebug', 'advanced');
@@ -175,7 +179,7 @@ class PostExpirator_Display
175
  _e('Debugging Enabled', 'post-expirator');
176
  echo '</p></div>';
177
  } elseif (isset($_POST['purge-debug'])) {
178
- require_once(plugin_dir_path(__FILE__) . 'post-expirator-debug.php');
179
  $debug = new PostExpiratorDebug();
180
  $debug->purge();
181
  echo "<div id='message' class='updated fade'><p>";
@@ -195,7 +199,7 @@ class PostExpirator_Display
195
  private function menu_viewdebug()
196
  {
197
  require_once POSTEXPIRATOR_BASEDIR . '/post-expirator-debug.php';
198
- print '<p>' . __(
199
  'Below is a dump of the debugging table, this should be useful for troubleshooting.',
200
  'post-expirator'
201
  ) . '</p>';
@@ -302,6 +306,7 @@ class PostExpirator_Display
302
  continue;
303
  }
304
 
 
305
  if ($role_name === 'administrator' || in_array($role_name, $_POST['allow-user-roles'], true)) {
306
  $role->add_cap(PostExpirator_Facade::DEFAULT_CAPABILITY_EXPIRE_POST);
307
  } else {
@@ -337,7 +342,7 @@ class PostExpirator_Display
337
  $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
338
 
339
  update_option('expirationdateGutenbergSupport', $_POST['gutenberg-support']);
340
- update_option('expirationdatePreserveData', (bool)$_POST['expired-preserve-data-deactivating']);
341
 
342
  if (! isset($_POST['allow-user-roles']) || ! is_array($_POST['allow-user-roles'])) {
343
  $_POST['allow-user-roles'] = array();
@@ -397,7 +402,7 @@ class PostExpirator_Display
397
  rel="noopener noreferrer">
398
  <?php
399
  printf(
400
- __('If you like %s, please leave us a %s rating. Thank you!', 'post-expirator'),
401
  '<strong>PublishPress Future</strong>',
402
  '<span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span>'
403
  );
81
  */
82
  public function settings_tabs()
83
  {
84
+ if (!is_admin() || !current_user_can('manage_options')) {
85
+ wp_die(esc_html__('You do not have permission to configure PublishPress Future.', 'post-expirator'));
86
+ }
87
+
88
  PostExpirator_Facade::load_assets('settings');
89
 
90
  $allowed_tabs = array('general', 'defaults', 'display', 'editor', 'diagnostics', 'viewdebug', 'advanced');
179
  _e('Debugging Enabled', 'post-expirator');
180
  echo '</p></div>';
181
  } elseif (isset($_POST['purge-debug'])) {
182
+ require_once(POSTEXPIRATOR_BASEDIR . '/post-expirator-debug.php');
183
  $debug = new PostExpiratorDebug();
184
  $debug->purge();
185
  echo "<div id='message' class='updated fade'><p>";
199
  private function menu_viewdebug()
200
  {
201
  require_once POSTEXPIRATOR_BASEDIR . '/post-expirator-debug.php';
202
+ print '<p>' . esc_html__(
203
  'Below is a dump of the debugging table, this should be useful for troubleshooting.',
204
  'post-expirator'
205
  ) . '</p>';
306
  continue;
307
  }
308
 
309
+ // TODO: only allow roles that can edit posts. Filter in the form as well, adding a description.
310
  if ($role_name === 'administrator' || in_array($role_name, $_POST['allow-user-roles'], true)) {
311
  $role->add_cap(PostExpirator_Facade::DEFAULT_CAPABILITY_EXPIRE_POST);
312
  } else {
342
  $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
343
 
344
  update_option('expirationdateGutenbergSupport', $_POST['gutenberg-support']);
345
+ update_option('expirationdatePreserveData', (int)$_POST['expired-preserve-data-deactivating']);
346
 
347
  if (! isset($_POST['allow-user-roles']) || ! is_array($_POST['allow-user-roles'])) {
348
  $_POST['allow-user-roles'] = array();
402
  rel="noopener noreferrer">
403
  <?php
404
  printf(
405
+ esc_html__('If you like %s, please leave us a %s rating. Thank you!', 'post-expirator'),
406
  '<strong>PublishPress Future</strong>',
407
  '<span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span>'
408
  );
classes/DummyForAutoloadDetection.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * GNU General Public License, Free Software Foundation <http://creativecommons.org/licenses/GPL/2.0/>
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation, either version 3 of the License, or
8
+ * (at your option) any later version.
9
+ *
10
+ * This program is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ * GNU General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU General Public License
16
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ *
18
+ * @package PublishPress-Future
19
+ * @subpackage Classes
20
+ * @author PublishPress <help@publishpress.com>
21
+ * @copyright Copyright (C) 2021 PublishPress. All rights reserved.
22
+ * @link https://publishpress.com/future/
23
+ * @license GPLv2 or later
24
+ * @since 2.7.1
25
+ */
26
+
27
+ namespace PublishPressFuture;
28
+
29
+ /**
30
+ * Dummy class for detecting if the composer autoload was already loaded.
31
+ * Fixes error with duplicated class for the Composer's autoload_real.php file.
32
+ */
33
+ class DummyForAutoloadDetection
34
+ {
35
+
36
+ }
classes/Facade.class.php CHANGED
@@ -162,7 +162,6 @@ class PostExpirator_Facade
162
 
163
  break;
164
  }
165
- //remove_action('updated_postmeta', array($this, 'updatedmeta'), 10, 4);
166
  }
167
 
168
  /**
@@ -186,7 +185,7 @@ class PostExpirator_Facade
186
  */
187
  public static function get_expire_principles($id)
188
  {
189
- $expireType = $categories = $taxonomyName = '';
190
 
191
  $expireTypeNew = get_post_meta($id, '_expiration-date-type', true);
192
  if (! empty($expireTypeNew)) {
@@ -203,6 +202,11 @@ class PostExpirator_Facade
203
  $taxonomyName = $taxonomyNameNew;
204
  }
205
 
 
 
 
 
 
206
  // _expiration-date-options is deprecated when using block editor
207
  $opts = get_post_meta($id, '_expiration-date-options', true);
208
  if (empty($expireType) && isset($opts['expireType'])) {
@@ -220,6 +224,7 @@ class PostExpirator_Facade
220
  'expireType' => $expireType,
221
  'category' => $categories,
222
  'categoryTaxonomy' => $taxonomyName,
 
223
  );
224
  }
225
 
162
 
163
  break;
164
  }
 
165
  }
166
 
167
  /**
185
  */
186
  public static function get_expire_principles($id)
187
  {
188
+ $expireType = $categories = $taxonomyName = $expireStatus = '';
189
 
190
  $expireTypeNew = get_post_meta($id, '_expiration-date-type', true);
191
  if (! empty($expireTypeNew)) {
202
  $taxonomyName = $taxonomyNameNew;
203
  }
204
 
205
+ $expireStatusNew = get_post_meta($id, '_expiration-date-status', true);
206
+ if (! empty($expireStatusNew)) {
207
+ $expireStatus = $expireStatusNew;
208
+ }
209
+
210
  // _expiration-date-options is deprecated when using block editor
211
  $opts = get_post_meta($id, '_expiration-date-options', true);
212
  if (empty($expireType) && isset($opts['expireType'])) {
224
  'expireType' => $expireType,
225
  'category' => $categories,
226
  'categoryTaxonomy' => $taxonomyName,
227
+ 'enabled' => $expireStatus === 'saved',
228
  );
229
  }
230
 
classes/RenamingWarning.class.php CHANGED
@@ -96,17 +96,17 @@ class PostExpirator_RenamingWarning
96
  url: ajaxurl,
97
  data: {
98
  action: 'publishpress-future-naming-notice-dismiss',
99
- nonce: '<?php echo wp_create_nonce($this->nonceAction); ?>',
100
  reason: reason
101
  }
102
  });
103
  }
104
 
105
  $(document)
106
- .on('click', '.<?php echo $this->pluginSlug; ?>-naming-notice .<?php echo "$this->pluginSlug-dismiss"; ?>', function (event) {
107
  var $this = $(this),
108
  reason = $this.data('reason'),
109
- notice = $this.parents('.<?php echo $this->pluginSlug; ?>-naming-notice');
110
 
111
  notice.fadeTo(100, 0, function () {
112
  notice.slideUp(100, function () {
@@ -118,7 +118,7 @@ class PostExpirator_RenamingWarning
118
  })
119
  .ready(function () {
120
  setTimeout(function () {
121
- $('.<?php echo $this->pluginSlug; ?>-naming-notice button.notice-dismiss').click(function (event) {
122
  dismiss('acknowledge');
123
  });
124
  }, 1000);
@@ -127,23 +127,23 @@ class PostExpirator_RenamingWarning
127
  </script>
128
 
129
  <div class="notice notice-success is-dismissible <?php
130
- echo "$this->pluginSlug-naming-notice"; ?>">
131
  <?php
132
  if (! empty($this->iconUrl)) : ?>
133
  <img src="<?php
134
- echo $this->iconUrl; ?>" class="notice-icon" alt="<?php
135
- echo $this->pluginName; ?> logo"/>
136
  <?php
137
  endif; ?>
138
 
139
  <p><?php echo sprintf(
140
- __('Thanks for using Post Expirator. This plugin has a new name: "PublishPress Future". Nothing else has changed with the plugin. If you have any questions, please %sclick this link and talk with us%s.', 'post-expirator'),
141
  '<a href="mailto:help@publishpress.com">',
142
  '</a>'
143
  ); ?></p>
144
 
145
- <a href="#" class="button <?php echo "$this->pluginSlug-dismiss"; ?>" data-reason="maybe_later">
146
- <?php _e('Dismiss', $this->pluginSlug); ?>
147
  </a>
148
  </div>
149
  <?php
@@ -222,13 +222,6 @@ class PostExpirator_RenamingWarning
222
  */
223
  public function ajaxHandler()
224
  {
225
- $args = wp_parse_args(
226
- $_REQUEST,
227
- [
228
- 'reason' => 'acknowledge',
229
- ]
230
- );
231
-
232
  if (! wp_verify_nonce($_REQUEST['nonce'], $this->nonceAction)) {
233
  wp_send_json_error();
234
  }
96
  url: ajaxurl,
97
  data: {
98
  action: 'publishpress-future-naming-notice-dismiss',
99
+ nonce: '<?php echo esc_attr(wp_create_nonce($this->nonceAction)); ?>',
100
  reason: reason
101
  }
102
  });
103
  }
104
 
105
  $(document)
106
+ .on('click', '.<?php echo esc_attr($this->pluginSlug); ?>-naming-notice .<?php echo esc_attr("$this->pluginSlug-dismiss"); ?>', function (event) {
107
  var $this = $(this),
108
  reason = $this.data('reason'),
109
+ notice = $this.parents('.<?php echo esc_attr($this->pluginSlug); ?>-naming-notice');
110
 
111
  notice.fadeTo(100, 0, function () {
112
  notice.slideUp(100, function () {
118
  })
119
  .ready(function () {
120
  setTimeout(function () {
121
+ $('.<?php echo esc_attr($this->pluginSlug); ?>-naming-notice button.notice-dismiss').click(function (event) {
122
  dismiss('acknowledge');
123
  });
124
  }, 1000);
127
  </script>
128
 
129
  <div class="notice notice-success is-dismissible <?php
130
+ echo esc_attr("$this->pluginSlug-naming-notice"); ?>">
131
  <?php
132
  if (! empty($this->iconUrl)) : ?>
133
  <img src="<?php
134
+ echo esc_url($this->iconUrl); ?>" class="notice-icon" alt="<?php
135
+ echo esc_attr($this->pluginName); ?> logo"/>
136
  <?php
137
  endif; ?>
138
 
139
  <p><?php echo sprintf(
140
+ esc_html__('Thanks for using Post Expirator. This plugin has a new name: "PublishPress Future". Nothing else has changed with the plugin. If you have any questions, please %sclick this link and talk with us%s.', 'post-expirator'),
141
  '<a href="mailto:help@publishpress.com">',
142
  '</a>'
143
  ); ?></p>
144
 
145
+ <a href="#" class="button <?php echo esc_attr("$this->pluginSlug-dismiss"); ?>" data-reason="maybe_later">
146
+ <?php esc_html_e('Dismiss', $this->pluginSlug); ?>
147
  </a>
148
  </div>
149
  <?php
222
  */
223
  public function ajaxHandler()
224
  {
 
 
 
 
 
 
 
225
  if (! wp_verify_nonce($_REQUEST['nonce'], $this->nonceAction)) {
226
  wp_send_json_error();
227
  }
composer.json CHANGED
@@ -25,6 +25,11 @@
25
  "url": "https://github.com/publishpress/PublishPress-Plugin-Builder"
26
  }
27
  ],
 
 
 
 
 
28
  "require-dev": {
29
  "lucatume/wp-browser": "^3",
30
  "codeception/module-asserts": "^1.0",
@@ -35,6 +40,7 @@
35
  "codeception/module-cli": "^1.0",
36
  "codeception/util-universalframework": "^1.0",
37
  "codeception/module-rest": "^1.3",
 
38
  "dealerdirect/phpcodesniffer-composer-installer": "*",
39
  "phpcompatibility/php-compatibility": "*",
40
  "wp-coding-standards/wpcs": "*",
@@ -43,9 +49,12 @@
43
  "squizlabs/php_codesniffer": "^3.5",
44
  "sebastian/phpcpd": "^5.0",
45
  "overtrue/phplint": "^2.1",
46
- "wp-cli/i18n-command": "^2.2"
 
 
 
47
  },
48
  "require": {
49
- "publishpress/wordpress-reviews": "^1.1"
50
  }
51
  }
25
  "url": "https://github.com/publishpress/PublishPress-Plugin-Builder"
26
  }
27
  ],
28
+ "autoload": {
29
+ "files": [
30
+ "classes/DummyForAutoloadDetection.php"
31
+ ]
32
+ },
33
  "require-dev": {
34
  "lucatume/wp-browser": "^3",
35
  "codeception/module-asserts": "^1.0",
40
  "codeception/module-cli": "^1.0",
41
  "codeception/util-universalframework": "^1.0",
42
  "codeception/module-rest": "^1.3",
43
+ "codeception/module-sequence": "^2.0",
44
  "dealerdirect/phpcodesniffer-composer-installer": "*",
45
  "phpcompatibility/php-compatibility": "*",
46
  "wp-coding-standards/wpcs": "*",
49
  "squizlabs/php_codesniffer": "^3.5",
50
  "sebastian/phpcpd": "^5.0",
51
  "overtrue/phplint": "^2.1",
52
+ "wp-cli/i18n-command": "^2.2",
53
+ "vimeo/psalm": "^4.17",
54
+ "friendsofphp/php-cs-fixer": "^3.4",
55
+ "phpstan/phpstan": "^1.3"
56
  },
57
  "require": {
58
+ "publishpress/wordpress-reviews": "^1.1"
59
  }
60
  }
composer.lock CHANGED
@@ -4,20 +4,20 @@
4
  "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
  "This file is @generated automatically"
6
  ],
7
- "content-hash": "fd7abb5de39ada33785fa64b968221d0",
8
  "packages": [
9
  {
10
  "name": "publishpress/wordpress-reviews",
11
- "version": "v1.1.16",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/publishpress/wordpress-reviews.git",
15
- "reference": "2b647f104d7aa64e0c72c028f86e1875035b7a91"
16
  },
17
  "dist": {
18
  "type": "zip",
19
- "url": "https://api.github.com/repos/publishpress/wordpress-reviews/zipball/2b647f104d7aa64e0c72c028f86e1875035b7a91",
20
- "reference": "2b647f104d7aa64e0c72c028f86e1875035b7a91",
21
  "shasum": ""
22
  },
23
  "require": {
@@ -70,12 +70,178 @@
70
  ],
71
  "support": {
72
  "issues": "https://github.com/publishpress/wordpress-reviews/issues",
73
- "source": "https://github.com/publishpress/wordpress-reviews/tree/v1.1.16"
74
  },
75
- "time": "2021-12-01T20:36:26+00:00"
76
  }
77
  ],
78
  "packages-dev": [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  {
80
  "name": "antecedent/patchwork",
81
  "version": "2.1.17",
@@ -245,23 +411,23 @@
245
  },
246
  {
247
  "name": "codeception/codeception",
248
- "version": "4.1.22",
249
  "source": {
250
  "type": "git",
251
  "url": "https://github.com/Codeception/Codeception.git",
252
- "reference": "9777ec3690ceedc4bce2ed13af7af4ca4ee3088f"
253
  },
254
  "dist": {
255
  "type": "zip",
256
- "url": "https://api.github.com/repos/Codeception/Codeception/zipball/9777ec3690ceedc4bce2ed13af7af4ca4ee3088f",
257
- "reference": "9777ec3690ceedc4bce2ed13af7af4ca4ee3088f",
258
  "shasum": ""
259
  },
260
  "require": {
261
  "behat/gherkin": "^4.4.0",
262
- "codeception/lib-asserts": "^1.0",
263
  "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0",
264
- "codeception/stub": "^2.0 | ^3.0",
265
  "ext-curl": "*",
266
  "ext-json": "*",
267
  "ext-mbstring": "*",
@@ -274,11 +440,11 @@
274
  "symfony/yaml": ">=2.7 <6.0"
275
  },
276
  "require-dev": {
277
- "codeception/module-asserts": "1.*@dev",
278
- "codeception/module-cli": "1.*@dev",
279
- "codeception/module-db": "1.*@dev",
280
- "codeception/module-filesystem": "1.*@dev",
281
- "codeception/module-phpbrowser": "1.*@dev",
282
  "codeception/specify": "~0.3",
283
  "codeception/util-universalframework": "*@dev",
284
  "monolog/monolog": "~1.8",
@@ -304,7 +470,10 @@
304
  "psr-4": {
305
  "Codeception\\": "src/Codeception",
306
  "Codeception\\Extension\\": "ext"
307
- }
 
 
 
308
  },
309
  "notification-url": "https://packagist.org/downloads/",
310
  "license": [
@@ -328,7 +497,7 @@
328
  ],
329
  "support": {
330
  "issues": "https://github.com/Codeception/Codeception/issues",
331
- "source": "https://github.com/Codeception/Codeception/tree/4.1.22"
332
  },
333
  "funding": [
334
  {
@@ -336,7 +505,7 @@
336
  "type": "open_collective"
337
  }
338
  ],
339
- "time": "2021-08-06T17:15:34+00:00"
340
  },
341
  {
342
  "name": "codeception/lib-asserts",
@@ -774,6 +943,50 @@
774
  },
775
  "time": "2021-11-18T18:58:15+00:00"
776
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
777
  {
778
  "name": "codeception/module-webdriver",
779
  "version": "1.4.0",
@@ -881,21 +1094,25 @@
881
  },
882
  {
883
  "name": "codeception/stub",
884
- "version": "3.7.0",
885
  "source": {
886
  "type": "git",
887
  "url": "https://github.com/Codeception/Stub.git",
888
- "reference": "468dd5fe659f131fc997f5196aad87512f9b1304"
889
  },
890
  "dist": {
891
  "type": "zip",
892
- "url": "https://api.github.com/repos/Codeception/Stub/zipball/468dd5fe659f131fc997f5196aad87512f9b1304",
893
- "reference": "468dd5fe659f131fc997f5196aad87512f9b1304",
894
  "shasum": ""
895
  },
896
  "require": {
 
897
  "phpunit/phpunit": "^8.4 | ^9.0"
898
  },
 
 
 
899
  "type": "library",
900
  "autoload": {
901
  "psr-4": {
@@ -909,9 +1126,9 @@
909
  "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
910
  "support": {
911
  "issues": "https://github.com/Codeception/Stub/issues",
912
- "source": "https://github.com/Codeception/Stub/tree/3.7.0"
913
  },
914
- "time": "2020-07-03T15:54:43+00:00"
915
  },
916
  {
917
  "name": "codeception/util-universalframework",
@@ -950,18 +1167,162 @@
950
  },
951
  "time": "2019-09-22T06:06:49+00:00"
952
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
953
  {
954
  "name": "composer/semver",
955
- "version": "3.2.6",
956
  "source": {
957
  "type": "git",
958
  "url": "https://github.com/composer/semver.git",
959
- "reference": "83e511e247de329283478496f7a1e114c9517506"
960
  },
961
  "dist": {
962
  "type": "zip",
963
- "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506",
964
- "reference": "83e511e247de329283478496f7a1e114c9517506",
965
  "shasum": ""
966
  },
967
  "require": {
@@ -1013,7 +1374,7 @@
1013
  "support": {
1014
  "irc": "irc://irc.freenode.org/composer",
1015
  "issues": "https://github.com/composer/semver/issues",
1016
- "source": "https://github.com/composer/semver/tree/3.2.6"
1017
  },
1018
  "funding": [
1019
  {
@@ -1029,29 +1390,31 @@
1029
  "type": "tidelift"
1030
  }
1031
  ],
1032
- "time": "2021-10-25T11:34:17+00:00"
1033
  },
1034
  {
1035
  "name": "composer/xdebug-handler",
1036
- "version": "2.0.2",
1037
  "source": {
1038
  "type": "git",
1039
  "url": "https://github.com/composer/xdebug-handler.git",
1040
- "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339"
1041
  },
1042
  "dist": {
1043
  "type": "zip",
1044
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339",
1045
- "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339",
1046
  "shasum": ""
1047
  },
1048
  "require": {
 
1049
  "php": "^5.3.2 || ^7.0 || ^8.0",
1050
  "psr/log": "^1 || ^2 || ^3"
1051
  },
1052
  "require-dev": {
1053
- "phpstan/phpstan": "^0.12.55",
1054
- "symfony/phpunit-bridge": "^4.2 || ^5"
 
1055
  },
1056
  "type": "library",
1057
  "autoload": {
@@ -1077,7 +1440,7 @@
1077
  "support": {
1078
  "irc": "irc://irc.freenode.org/composer",
1079
  "issues": "https://github.com/composer/xdebug-handler/issues",
1080
- "source": "https://github.com/composer/xdebug-handler/tree/2.0.2"
1081
  },
1082
  "funding": [
1083
  {
@@ -1093,31 +1456,32 @@
1093
  "type": "tidelift"
1094
  }
1095
  ],
1096
- "time": "2021-07-31T17:03:58+00:00"
1097
  },
1098
  {
1099
  "name": "consolidation/annotated-command",
1100
- "version": "4.4.0",
1101
  "source": {
1102
  "type": "git",
1103
  "url": "https://github.com/consolidation/annotated-command.git",
1104
- "reference": "308f6ac178566a1ce9aa90ed908dac90a2c1e707"
1105
  },
1106
  "dist": {
1107
  "type": "zip",
1108
- "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/308f6ac178566a1ce9aa90ed908dac90a2c1e707",
1109
- "reference": "308f6ac178566a1ce9aa90ed908dac90a2c1e707",
1110
  "shasum": ""
1111
  },
1112
  "require": {
1113
  "consolidation/output-formatters": "^4.1.1",
1114
  "php": ">=7.1.3",
1115
  "psr/log": "^1|^2",
1116
- "symfony/console": "^4.4.8|~5.1.0",
1117
- "symfony/event-dispatcher": "^4.4.8|^5",
1118
- "symfony/finder": "^4.4.8|^5"
1119
  },
1120
  "require-dev": {
 
1121
  "phpunit/phpunit": "^7.5.20 || ^8 || ^9",
1122
  "squizlabs/php_codesniffer": "^3",
1123
  "yoast/phpunit-polyfills": "^0.2.0"
@@ -1146,22 +1510,22 @@
1146
  "description": "Initialize Symfony Console commands from annotated command class methods.",
1147
  "support": {
1148
  "issues": "https://github.com/consolidation/annotated-command/issues",
1149
- "source": "https://github.com/consolidation/annotated-command/tree/4.4.0"
1150
  },
1151
- "time": "2021-09-30T01:08:15+00:00"
1152
  },
1153
  {
1154
  "name": "consolidation/config",
1155
- "version": "2.0.1",
1156
  "source": {
1157
  "type": "git",
1158
  "url": "https://github.com/consolidation/config.git",
1159
- "reference": "9a2c2a7b2aea1b3525984a4378743a8b74c14e1c"
1160
  },
1161
  "dist": {
1162
  "type": "zip",
1163
- "url": "https://api.github.com/repos/consolidation/config/zipball/9a2c2a7b2aea1b3525984a4378743a8b74c14e1c",
1164
- "reference": "9a2c2a7b2aea1b3525984a4378743a8b74c14e1c",
1165
  "shasum": ""
1166
  },
1167
  "require": {
@@ -1206,28 +1570,28 @@
1206
  "description": "Provide configuration services for a commandline tool.",
1207
  "support": {
1208
  "issues": "https://github.com/consolidation/config/issues",
1209
- "source": "https://github.com/consolidation/config/tree/2.0.1"
1210
  },
1211
- "time": "2020-12-06T00:03:30+00:00"
1212
  },
1213
  {
1214
  "name": "consolidation/log",
1215
- "version": "2.0.2",
1216
  "source": {
1217
  "type": "git",
1218
  "url": "https://github.com/consolidation/log.git",
1219
- "reference": "82a2aaaa621a7b976e50a745a8d249d5085ee2b1"
1220
  },
1221
  "dist": {
1222
  "type": "zip",
1223
- "url": "https://api.github.com/repos/consolidation/log/zipball/82a2aaaa621a7b976e50a745a8d249d5085ee2b1",
1224
- "reference": "82a2aaaa621a7b976e50a745a8d249d5085ee2b1",
1225
  "shasum": ""
1226
  },
1227
  "require": {
1228
  "php": ">=7.1.3",
1229
  "psr/log": "^1.0",
1230
- "symfony/console": "^4|^5"
1231
  },
1232
  "require-dev": {
1233
  "phpunit/phpunit": ">=7.5.20",
@@ -1258,36 +1622,36 @@
1258
  "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
1259
  "support": {
1260
  "issues": "https://github.com/consolidation/log/issues",
1261
- "source": "https://github.com/consolidation/log/tree/2.0.2"
1262
  },
1263
- "time": "2020-12-10T16:26:23+00:00"
1264
  },
1265
  {
1266
  "name": "consolidation/output-formatters",
1267
- "version": "4.1.2",
1268
  "source": {
1269
  "type": "git",
1270
  "url": "https://github.com/consolidation/output-formatters.git",
1271
- "reference": "5821e6ae076bf690058a4de6c94dce97398a69c9"
1272
  },
1273
  "dist": {
1274
  "type": "zip",
1275
- "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/5821e6ae076bf690058a4de6c94dce97398a69c9",
1276
- "reference": "5821e6ae076bf690058a4de6c94dce97398a69c9",
1277
  "shasum": ""
1278
  },
1279
  "require": {
1280
  "dflydev/dot-access-data": "^1.1.0",
1281
  "php": ">=7.1.3",
1282
- "symfony/console": "^4|^5",
1283
- "symfony/finder": "^4|^5"
1284
  },
1285
  "require-dev": {
1286
  "php-coveralls/php-coveralls": "^2.4.2",
1287
  "phpunit/phpunit": ">=7",
1288
  "squizlabs/php_codesniffer": "^3",
1289
- "symfony/var-dumper": "^4",
1290
- "symfony/yaml": "^4",
1291
  "yoast/phpunit-polyfills": "^0.2.0"
1292
  },
1293
  "suggest": {
@@ -1317,38 +1681,38 @@
1317
  "description": "Format text by applying transformations provided by plug-in formatters.",
1318
  "support": {
1319
  "issues": "https://github.com/consolidation/output-formatters/issues",
1320
- "source": "https://github.com/consolidation/output-formatters/tree/4.1.2"
1321
  },
1322
- "time": "2020-12-12T19:04:59+00:00"
1323
  },
1324
  {
1325
  "name": "consolidation/robo",
1326
- "version": "3.0.6",
1327
  "source": {
1328
  "type": "git",
1329
- "url": "https://github.com/consolidation/Robo.git",
1330
- "reference": "36dce2965a67abe5cf91f2bc36d2582a64a11258"
1331
  },
1332
  "dist": {
1333
  "type": "zip",
1334
- "url": "https://api.github.com/repos/consolidation/Robo/zipball/36dce2965a67abe5cf91f2bc36d2582a64a11258",
1335
- "reference": "36dce2965a67abe5cf91f2bc36d2582a64a11258",
1336
  "shasum": ""
1337
  },
1338
  "require": {
1339
  "consolidation/annotated-command": "^4.3",
1340
- "consolidation/config": "^1.2.1|^2.0.1",
1341
- "consolidation/log": "^1.1.1|^2.0.2",
1342
  "consolidation/output-formatters": "^4.1.2",
1343
  "consolidation/self-update": "^2.0",
1344
  "league/container": "^3.3.1",
1345
  "php": ">=7.1.3",
1346
- "symfony/console": "^4.4.19 || ^5",
1347
- "symfony/event-dispatcher": "^4.4.19 || ^5",
1348
- "symfony/filesystem": "^4.4.9 || ^5",
1349
- "symfony/finder": "^4.4.9 || ^5",
1350
  "symfony/process": "^4.4.9 || ^5",
1351
- "symfony/yaml": "^4.4 || ^5"
1352
  },
1353
  "conflict": {
1354
  "codegyre/robo": "*"
@@ -1357,7 +1721,7 @@
1357
  "natxet/cssmin": "3.0.4",
1358
  "patchwork/jsqueeze": "^2",
1359
  "pear/archive_tar": "^1.4.4",
1360
- "phpunit/phpunit": "^7.5.20 | ^8",
1361
  "squizlabs/php_codesniffer": "^3.6",
1362
  "yoast/phpunit-polyfills": "^0.2.0"
1363
  },
@@ -1415,30 +1779,30 @@
1415
  ],
1416
  "description": "Modern task runner",
1417
  "support": {
1418
- "issues": "https://github.com/consolidation/Robo/issues",
1419
- "source": "https://github.com/consolidation/Robo/tree/3.0.6"
1420
  },
1421
- "time": "2021-10-05T23:56:45+00:00"
1422
  },
1423
  {
1424
  "name": "consolidation/self-update",
1425
- "version": "2.0.0",
1426
  "source": {
1427
  "type": "git",
1428
  "url": "https://github.com/consolidation/self-update.git",
1429
- "reference": "7d6877f8006c51069e1469a9c57b1435640f74b7"
1430
  },
1431
  "dist": {
1432
  "type": "zip",
1433
- "url": "https://api.github.com/repos/consolidation/self-update/zipball/7d6877f8006c51069e1469a9c57b1435640f74b7",
1434
- "reference": "7d6877f8006c51069e1469a9c57b1435640f74b7",
1435
  "shasum": ""
1436
  },
1437
  "require": {
1438
  "composer/semver": "^3.2",
1439
  "php": ">=5.5.0",
1440
- "symfony/console": "^2.8|^3|^4|^5",
1441
- "symfony/filesystem": "^2.5|^3|^4|^5"
1442
  },
1443
  "bin": [
1444
  "scripts/release"
@@ -1471,9 +1835,9 @@
1471
  "description": "Provides a self:update command for Symfony Console applications.",
1472
  "support": {
1473
  "issues": "https://github.com/consolidation/self-update/issues",
1474
- "source": "https://github.com/consolidation/self-update/tree/2.0.0"
1475
  },
1476
- "time": "2021-10-05T23:29:47+00:00"
1477
  },
1478
  {
1479
  "name": "dealerdirect/phpcodesniffer-composer-installer",
@@ -1651,6 +2015,115 @@
1651
  },
1652
  "time": "2019-09-10T21:36:25+00:00"
1653
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1654
  {
1655
  "name": "doctrine/inflector",
1656
  "version": "2.0.4",
@@ -1792,24 +2265,294 @@
1792
  "instantiate"
1793
  ],
1794
  "support": {
1795
- "issues": "https://github.com/doctrine/instantiator/issues",
1796
- "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1797
  },
1798
  "funding": [
1799
  {
1800
- "url": "https://www.doctrine-project.org/sponsorship.html",
1801
- "type": "custom"
1802
- },
1803
- {
1804
- "url": "https://www.patreon.com/phpdoctrine",
1805
- "type": "patreon"
1806
- },
1807
- {
1808
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
1809
- "type": "tidelift"
1810
  }
1811
  ],
1812
- "time": "2020-11-10T18:47:58+00:00"
1813
  },
1814
  {
1815
  "name": "gettext/gettext",
@@ -2019,16 +2762,16 @@
2019
  },
2020
  {
2021
  "name": "guzzlehttp/guzzle",
2022
- "version": "7.4.0",
2023
  "source": {
2024
  "type": "git",
2025
  "url": "https://github.com/guzzle/guzzle.git",
2026
- "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94"
2027
  },
2028
  "dist": {
2029
  "type": "zip",
2030
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/868b3571a039f0ebc11ac8f344f4080babe2cb94",
2031
- "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94",
2032
  "shasum": ""
2033
  },
2034
  "require": {
@@ -2037,7 +2780,7 @@
2037
  "guzzlehttp/psr7": "^1.8.3 || ^2.1",
2038
  "php": "^7.2.5 || ^8.0",
2039
  "psr/http-client": "^1.0",
2040
- "symfony/deprecation-contracts": "^2.2"
2041
  },
2042
  "provide": {
2043
  "psr/http-client-implementation": "1.0"
@@ -2123,7 +2866,7 @@
2123
  ],
2124
  "support": {
2125
  "issues": "https://github.com/guzzle/guzzle/issues",
2126
- "source": "https://github.com/guzzle/guzzle/tree/7.4.0"
2127
  },
2128
  "funding": [
2129
  {
@@ -2139,7 +2882,7 @@
2139
  "type": "tidelift"
2140
  }
2141
  ],
2142
- "time": "2021-10-18T09:52:00+00:00"
2143
  },
2144
  {
2145
  "name": "guzzlehttp/promises",
@@ -2342,16 +3085,16 @@
2342
  },
2343
  {
2344
  "name": "illuminate/collections",
2345
- "version": "v8.74.0",
2346
  "source": {
2347
  "type": "git",
2348
  "url": "https://github.com/illuminate/collections.git",
2349
- "reference": "f292b77824b42cd28decc7327e7c2e24c3806371"
2350
  },
2351
  "dist": {
2352
  "type": "zip",
2353
- "url": "https://api.github.com/repos/illuminate/collections/zipball/f292b77824b42cd28decc7327e7c2e24c3806371",
2354
- "reference": "f292b77824b42cd28decc7327e7c2e24c3806371",
2355
  "shasum": ""
2356
  },
2357
  "require": {
@@ -2392,20 +3135,20 @@
2392
  "issues": "https://github.com/laravel/framework/issues",
2393
  "source": "https://github.com/laravel/framework"
2394
  },
2395
- "time": "2021-11-30T14:29:03+00:00"
2396
  },
2397
  {
2398
  "name": "illuminate/contracts",
2399
- "version": "v8.74.0",
2400
  "source": {
2401
  "type": "git",
2402
  "url": "https://github.com/illuminate/contracts.git",
2403
- "reference": "b0886ec05a63b204634d64d0b39d5b78a7c06f81"
2404
  },
2405
  "dist": {
2406
  "type": "zip",
2407
- "url": "https://api.github.com/repos/illuminate/contracts/zipball/b0886ec05a63b204634d64d0b39d5b78a7c06f81",
2408
- "reference": "b0886ec05a63b204634d64d0b39d5b78a7c06f81",
2409
  "shasum": ""
2410
  },
2411
  "require": {
@@ -2440,11 +3183,11 @@
2440
  "issues": "https://github.com/laravel/framework/issues",
2441
  "source": "https://github.com/laravel/framework"
2442
  },
2443
- "time": "2021-11-17T15:04:30+00:00"
2444
  },
2445
  {
2446
  "name": "illuminate/macroable",
2447
- "version": "v8.74.0",
2448
  "source": {
2449
  "type": "git",
2450
  "url": "https://github.com/illuminate/macroable.git",
@@ -2490,16 +3233,16 @@
2490
  },
2491
  {
2492
  "name": "illuminate/support",
2493
- "version": "v8.74.0",
2494
  "source": {
2495
  "type": "git",
2496
  "url": "https://github.com/illuminate/support.git",
2497
- "reference": "79bb5570274d6abbfaac736992c6b5f5cbcc17c1"
2498
  },
2499
  "dist": {
2500
  "type": "zip",
2501
- "url": "https://api.github.com/repos/illuminate/support/zipball/79bb5570274d6abbfaac736992c6b5f5cbcc17c1",
2502
- "reference": "79bb5570274d6abbfaac736992c6b5f5cbcc17c1",
2503
  "shasum": ""
2504
  },
2505
  "require": {
@@ -2554,7 +3297,7 @@
2554
  "issues": "https://github.com/laravel/framework/issues",
2555
  "source": "https://github.com/laravel/framework"
2556
  },
2557
- "time": "2021-11-30T14:13:40+00:00"
2558
  },
2559
  {
2560
  "name": "justinrainbow/json-schema",
@@ -2707,16 +3450,16 @@
2707
  },
2708
  {
2709
  "name": "lucatume/wp-browser",
2710
- "version": "3.0.14",
2711
  "source": {
2712
  "type": "git",
2713
  "url": "https://github.com/lucatume/wp-browser.git",
2714
- "reference": "1dae9e523bddd77c6d242c2033fd5616cdf6d375"
2715
  },
2716
  "dist": {
2717
  "type": "zip",
2718
- "url": "https://api.github.com/repos/lucatume/wp-browser/zipball/1dae9e523bddd77c6d242c2033fd5616cdf6d375",
2719
- "reference": "1dae9e523bddd77c6d242c2033fd5616cdf6d375",
2720
  "shasum": ""
2721
  },
2722
  "require": {
@@ -2734,6 +3477,15 @@
2734
  "wp-cli/wp-cli": ">=2.0 <3.0.0",
2735
  "zordius/lightncandy": "^1.2"
2736
  },
 
 
 
 
 
 
 
 
 
2737
  "require-dev": {
2738
  "erusev/parsedown": "^1.7",
2739
  "gumlet/php-image-resize": "^1.6",
@@ -2744,13 +3496,13 @@
2744
  "wp-cli/wp-cli-bundle": "*"
2745
  },
2746
  "suggest": {
2747
- "codeception/module-asserts": "Codeception 4.0 compatibility.",
2748
- "codeception/module-cli": "Codeception 4.0 compatibility; required by the WPCLI module.",
2749
- "codeception/module-db": "Codeception 4.0 compatibility; required by the WPDb module.",
2750
- "codeception/module-filesystem": "Codeception 4.0 compatibility; required by the WPFilesystem module.",
2751
- "codeception/module-phpbrowser": "Codeception 4.0 compatibility; required by the WPBrowser module.",
2752
- "codeception/module-webdriver": "Codeception 4.0 compatibility; required by the WPWebDriver module.",
2753
- "codeception/util-universalframework": "Codeception 4.0 compatibility; required by the WordPress framework module.",
2754
  "gumlet/php-image-resize": "To handle runtime image modification in the WPDb::haveAttachmentInDatabase method.",
2755
  "vlucas/phpdotenv:^4.0": "To manage more complex environment file based configuration of the suites."
2756
  },
@@ -2788,7 +3540,7 @@
2788
  ],
2789
  "support": {
2790
  "issues": "https://github.com/lucatume/wp-browser/issues",
2791
- "source": "https://github.com/lucatume/wp-browser/tree/3.0.14"
2792
  },
2793
  "funding": [
2794
  {
@@ -2796,23 +3548,24 @@
2796
  "type": "github"
2797
  }
2798
  ],
2799
- "time": "2021-11-26T11:14:22+00:00"
2800
  },
2801
  {
2802
  "name": "mck89/peast",
2803
- "version": "v1.13.9",
2804
  "source": {
2805
  "type": "git",
2806
  "url": "https://github.com/mck89/peast.git",
2807
- "reference": "5329e997fb50e0b82ca8f6e4164f92941f689b47"
2808
  },
2809
  "dist": {
2810
  "type": "zip",
2811
- "url": "https://api.github.com/repos/mck89/peast/zipball/5329e997fb50e0b82ca8f6e4164f92941f689b47",
2812
- "reference": "5329e997fb50e0b82ca8f6e4164f92941f689b47",
2813
  "shasum": ""
2814
  },
2815
  "require": {
 
2816
  "php": ">=5.4.0"
2817
  },
2818
  "require-dev": {
@@ -2821,7 +3574,7 @@
2821
  "type": "library",
2822
  "extra": {
2823
  "branch-alias": {
2824
- "dev-master": "1.13.9-dev"
2825
  }
2826
  },
2827
  "autoload": {
@@ -2843,9 +3596,9 @@
2843
  "description": "Peast is PHP library that generates AST for JavaScript code",
2844
  "support": {
2845
  "issues": "https://github.com/mck89/peast/issues",
2846
- "source": "https://github.com/mck89/peast/tree/v1.13.9"
2847
  },
2848
- "time": "2021-11-12T13:44:49+00:00"
2849
  },
2850
  {
2851
  "name": "mikehaertl/php-shellcommand",
@@ -2963,16 +3716,16 @@
2963
  },
2964
  {
2965
  "name": "mustache/mustache",
2966
- "version": "v2.13.0",
2967
  "source": {
2968
  "type": "git",
2969
  "url": "https://github.com/bobthecow/mustache.php.git",
2970
- "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4"
2971
  },
2972
  "dist": {
2973
  "type": "zip",
2974
- "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/e95c5a008c23d3151d59ea72484d4f72049ab7f4",
2975
- "reference": "e95c5a008c23d3151d59ea72484d4f72049ab7f4",
2976
  "shasum": ""
2977
  },
2978
  "require": {
@@ -3007,9 +3760,9 @@
3007
  ],
3008
  "support": {
3009
  "issues": "https://github.com/bobthecow/mustache.php/issues",
3010
- "source": "https://github.com/bobthecow/mustache.php/tree/master"
3011
  },
3012
- "time": "2019-11-23T21:40:31+00:00"
3013
  },
3014
  {
3015
  "name": "myclabs/deep-copy",
@@ -3181,16 +3934,16 @@
3181
  },
3182
  {
3183
  "name": "nesbot/carbon",
3184
- "version": "2.54.0",
3185
  "source": {
3186
  "type": "git",
3187
  "url": "https://github.com/briannesbitt/Carbon.git",
3188
- "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5"
3189
  },
3190
  "dist": {
3191
  "type": "zip",
3192
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/eed83939f1aed3eee517d03a33f5ec587ac529b5",
3193
- "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5",
3194
  "shasum": ""
3195
  },
3196
  "require": {
@@ -3198,7 +3951,7 @@
3198
  "php": "^7.1.8 || ^8.0",
3199
  "symfony/polyfill-mbstring": "^1.0",
3200
  "symfony/polyfill-php80": "^1.16",
3201
- "symfony/translation": "^3.4 || ^4.0 || ^5.0"
3202
  },
3203
  "require-dev": {
3204
  "doctrine/dbal": "^2.0 || ^3.0",
@@ -3259,6 +4012,7 @@
3259
  "time"
3260
  ],
3261
  "support": {
 
3262
  "issues": "https://github.com/briannesbitt/Carbon/issues",
3263
  "source": "https://github.com/briannesbitt/Carbon"
3264
  },
@@ -3272,7 +4026,167 @@
3272
  "type": "tidelift"
3273
  }
3274
  ],
3275
- "time": "2021-11-01T21:22:20+00:00"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3276
  },
3277
  {
3278
  "name": "overtrue/phplint",
@@ -3561,6 +4475,58 @@
3561
  },
3562
  "time": "2018-07-08T19:19:57+00:00"
3563
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3564
  {
3565
  "name": "php-webdriver/webdriver",
3566
  "version": "1.12.0",
@@ -3800,16 +4766,16 @@
3800
  },
3801
  {
3802
  "name": "phpdocumentor/type-resolver",
3803
- "version": "1.5.1",
3804
  "source": {
3805
  "type": "git",
3806
  "url": "https://github.com/phpDocumentor/TypeResolver.git",
3807
- "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae"
3808
  },
3809
  "dist": {
3810
  "type": "zip",
3811
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae",
3812
- "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae",
3813
  "shasum": ""
3814
  },
3815
  "require": {
@@ -3844,22 +4810,22 @@
3844
  "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
3845
  "support": {
3846
  "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
3847
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1"
3848
  },
3849
- "time": "2021-10-02T14:08:47+00:00"
3850
  },
3851
  {
3852
  "name": "phpmd/phpmd",
3853
- "version": "2.11.0",
3854
  "source": {
3855
  "type": "git",
3856
  "url": "https://github.com/phpmd/phpmd.git",
3857
- "reference": "3637949092e6471aeaeca66bc6c016f45e459e24"
3858
  },
3859
  "dist": {
3860
  "type": "zip",
3861
- "url": "https://api.github.com/repos/phpmd/phpmd/zipball/3637949092e6471aeaeca66bc6c016f45e459e24",
3862
- "reference": "3637949092e6471aeaeca66bc6c016f45e459e24",
3863
  "shasum": ""
3864
  },
3865
  "require": {
@@ -3921,7 +4887,7 @@
3921
  "support": {
3922
  "irc": "irc://irc.freenode.org/phpmd",
3923
  "issues": "https://github.com/phpmd/phpmd/issues",
3924
- "source": "https://github.com/phpmd/phpmd/tree/2.11.0"
3925
  },
3926
  "funding": [
3927
  {
@@ -3929,20 +4895,20 @@
3929
  "type": "tidelift"
3930
  }
3931
  ],
3932
- "time": "2021-11-29T14:05:52+00:00"
3933
  },
3934
  {
3935
  "name": "phpspec/prophecy",
3936
- "version": "1.14.0",
3937
  "source": {
3938
  "type": "git",
3939
  "url": "https://github.com/phpspec/prophecy.git",
3940
- "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e"
3941
  },
3942
  "dist": {
3943
  "type": "zip",
3944
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
3945
- "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
3946
  "shasum": ""
3947
  },
3948
  "require": {
@@ -3994,9 +4960,73 @@
3994
  ],
3995
  "support": {
3996
  "issues": "https://github.com/phpspec/prophecy/issues",
3997
- "source": "https://github.com/phpspec/prophecy/tree/1.14.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3998
  },
3999
- "time": "2021-09-10T09:02:12+00:00"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4000
  },
4001
  {
4002
  "name": "phpunit/php-code-coverage",
@@ -4074,16 +5104,16 @@
4074
  },
4075
  {
4076
  "name": "phpunit/php-file-iterator",
4077
- "version": "3.0.5",
4078
  "source": {
4079
  "type": "git",
4080
  "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
4081
- "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
4082
  },
4083
  "dist": {
4084
  "type": "zip",
4085
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
4086
- "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
4087
  "shasum": ""
4088
  },
4089
  "require": {
@@ -4122,7 +5152,7 @@
4122
  ],
4123
  "support": {
4124
  "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
4125
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
4126
  },
4127
  "funding": [
4128
  {
@@ -4130,7 +5160,7 @@
4130
  "type": "github"
4131
  }
4132
  ],
4133
- "time": "2020-09-28T05:57:25+00:00"
4134
  },
4135
  {
4136
  "name": "phpunit/php-invoker",
@@ -4452,28 +5482,77 @@
4452
  "role": "lead"
4453
  }
4454
  ],
4455
- "description": "The PHP Unit Testing framework.",
4456
- "homepage": "https://phpunit.de/",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4457
  "keywords": [
4458
- "phpunit",
4459
- "testing",
4460
- "xunit"
4461
  ],
4462
  "support": {
4463
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
4464
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.1.5"
4465
  },
4466
- "funding": [
4467
- {
4468
- "url": "https://phpunit.de/donate.html",
4469
- "type": "custom"
4470
- },
4471
- {
4472
- "url": "https://github.com/sebastianbergmann",
4473
- "type": "github"
4474
- }
4475
- ],
4476
- "time": "2020-05-22T13:54:05+00:00"
4477
  },
4478
  {
4479
  "name": "psr/container",
@@ -5938,16 +7017,16 @@
5938
  },
5939
  {
5940
  "name": "squizlabs/php_codesniffer",
5941
- "version": "3.6.1",
5942
  "source": {
5943
  "type": "git",
5944
  "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
5945
- "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e"
5946
  },
5947
  "dist": {
5948
  "type": "zip",
5949
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/f268ca40d54617c6e06757f83f699775c9b3ff2e",
5950
- "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e",
5951
  "shasum": ""
5952
  },
5953
  "require": {
@@ -5990,20 +7069,20 @@
5990
  "source": "https://github.com/squizlabs/PHP_CodeSniffer",
5991
  "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
5992
  },
5993
- "time": "2021-10-11T04:00:11+00:00"
5994
  },
5995
  {
5996
  "name": "symfony/browser-kit",
5997
- "version": "v5.4.0",
5998
  "source": {
5999
  "type": "git",
6000
  "url": "https://github.com/symfony/browser-kit.git",
6001
- "reference": "d250db364a35ba5d60626b2a6f10f2eaf2073bde"
6002
  },
6003
  "dist": {
6004
  "type": "zip",
6005
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/d250db364a35ba5d60626b2a6f10f2eaf2073bde",
6006
- "reference": "d250db364a35ba5d60626b2a6f10f2eaf2073bde",
6007
  "shasum": ""
6008
  },
6009
  "require": {
@@ -6046,7 +7125,7 @@
6046
  "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
6047
  "homepage": "https://symfony.com",
6048
  "support": {
6049
- "source": "https://github.com/symfony/browser-kit/tree/v5.4.0"
6050
  },
6051
  "funding": [
6052
  {
@@ -6062,20 +7141,20 @@
6062
  "type": "tidelift"
6063
  }
6064
  ],
6065
- "time": "2021-10-26T22:29:18+00:00"
6066
  },
6067
  {
6068
  "name": "symfony/config",
6069
- "version": "v5.4.0",
6070
  "source": {
6071
  "type": "git",
6072
  "url": "https://github.com/symfony/config.git",
6073
- "reference": "e39cf688c80fd79ab0a6a2d05a9facac9b2d534b"
6074
  },
6075
  "dist": {
6076
  "type": "zip",
6077
- "url": "https://api.github.com/repos/symfony/config/zipball/e39cf688c80fd79ab0a6a2d05a9facac9b2d534b",
6078
- "reference": "e39cf688c80fd79ab0a6a2d05a9facac9b2d534b",
6079
  "shasum": ""
6080
  },
6081
  "require": {
@@ -6125,7 +7204,7 @@
6125
  "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
6126
  "homepage": "https://symfony.com",
6127
  "support": {
6128
- "source": "https://github.com/symfony/config/tree/v5.4.0"
6129
  },
6130
  "funding": [
6131
  {
@@ -6141,31 +7220,33 @@
6141
  "type": "tidelift"
6142
  }
6143
  ],
6144
- "time": "2021-11-28T15:25:38+00:00"
6145
  },
6146
  {
6147
  "name": "symfony/console",
6148
- "version": "v5.1.11",
6149
  "source": {
6150
  "type": "git",
6151
  "url": "https://github.com/symfony/console.git",
6152
- "reference": "d9a267b621c5082e0a6c659d73633b6fd28a8a08"
6153
  },
6154
  "dist": {
6155
  "type": "zip",
6156
- "url": "https://api.github.com/repos/symfony/console/zipball/d9a267b621c5082e0a6c659d73633b6fd28a8a08",
6157
- "reference": "d9a267b621c5082e0a6c659d73633b6fd28a8a08",
6158
  "shasum": ""
6159
  },
6160
  "require": {
6161
  "php": ">=7.2.5",
 
6162
  "symfony/polyfill-mbstring": "~1.0",
6163
- "symfony/polyfill-php73": "^1.8",
6164
- "symfony/polyfill-php80": "^1.15",
6165
- "symfony/service-contracts": "^1.1|^2",
6166
- "symfony/string": "^5.1"
6167
  },
6168
  "conflict": {
 
6169
  "symfony/dependency-injection": "<4.4",
6170
  "symfony/dotenv": "<5.1",
6171
  "symfony/event-dispatcher": "<4.4",
@@ -6173,16 +7254,16 @@
6173
  "symfony/process": "<4.4"
6174
  },
6175
  "provide": {
6176
- "psr/log-implementation": "1.0"
6177
  },
6178
  "require-dev": {
6179
- "psr/log": "~1.0",
6180
- "symfony/config": "^4.4|^5.0",
6181
- "symfony/dependency-injection": "^4.4|^5.0",
6182
- "symfony/event-dispatcher": "^4.4|^5.0",
6183
- "symfony/lock": "^4.4|^5.0",
6184
- "symfony/process": "^4.4|^5.0",
6185
- "symfony/var-dumper": "^4.4|^5.0"
6186
  },
6187
  "suggest": {
6188
  "psr/log": "For using the console logger",
@@ -6215,8 +7296,14 @@
6215
  ],
6216
  "description": "Eases the creation of beautiful and testable command line interfaces",
6217
  "homepage": "https://symfony.com",
 
 
 
 
 
 
6218
  "support": {
6219
- "source": "https://github.com/symfony/console/tree/v5.1.11"
6220
  },
6221
  "funding": [
6222
  {
@@ -6232,20 +7319,20 @@
6232
  "type": "tidelift"
6233
  }
6234
  ],
6235
- "time": "2021-01-27T10:01:46+00:00"
6236
  },
6237
  {
6238
  "name": "symfony/css-selector",
6239
- "version": "v5.4.0",
6240
  "source": {
6241
  "type": "git",
6242
  "url": "https://github.com/symfony/css-selector.git",
6243
- "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc"
6244
  },
6245
  "dist": {
6246
  "type": "zip",
6247
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/44b933f98bb4b5220d10bed9ce5662f8c2d13dcc",
6248
- "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc",
6249
  "shasum": ""
6250
  },
6251
  "require": {
@@ -6282,7 +7369,7 @@
6282
  "description": "Converts CSS selectors to XPath expressions",
6283
  "homepage": "https://symfony.com",
6284
  "support": {
6285
- "source": "https://github.com/symfony/css-selector/tree/v5.4.0"
6286
  },
6287
  "funding": [
6288
  {
@@ -6298,20 +7385,20 @@
6298
  "type": "tidelift"
6299
  }
6300
  ],
6301
- "time": "2021-09-09T08:06:01+00:00"
6302
  },
6303
  {
6304
  "name": "symfony/dependency-injection",
6305
- "version": "v5.4.0",
6306
  "source": {
6307
  "type": "git",
6308
  "url": "https://github.com/symfony/dependency-injection.git",
6309
- "reference": "69c398723857bb19fdea78496cedea0f756decab"
6310
  },
6311
  "dist": {
6312
  "type": "zip",
6313
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/69c398723857bb19fdea78496cedea0f756decab",
6314
- "reference": "69c398723857bb19fdea78496cedea0f756decab",
6315
  "shasum": ""
6316
  },
6317
  "require": {
@@ -6371,7 +7458,7 @@
6371
  "description": "Allows you to standardize and centralize the way objects are constructed in your application",
6372
  "homepage": "https://symfony.com",
6373
  "support": {
6374
- "source": "https://github.com/symfony/dependency-injection/tree/v5.4.0"
6375
  },
6376
  "funding": [
6377
  {
@@ -6387,7 +7474,7 @@
6387
  "type": "tidelift"
6388
  }
6389
  ],
6390
- "time": "2021-11-29T15:30:56+00:00"
6391
  },
6392
  {
6393
  "name": "symfony/deprecation-contracts",
@@ -6458,16 +7545,16 @@
6458
  },
6459
  {
6460
  "name": "symfony/dom-crawler",
6461
- "version": "v5.4.0",
6462
  "source": {
6463
  "type": "git",
6464
  "url": "https://github.com/symfony/dom-crawler.git",
6465
- "reference": "5b06626e940a3ad54e573511d64d4e00dc8d0fd8"
6466
  },
6467
  "dist": {
6468
  "type": "zip",
6469
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/5b06626e940a3ad54e573511d64d4e00dc8d0fd8",
6470
- "reference": "5b06626e940a3ad54e573511d64d4e00dc8d0fd8",
6471
  "shasum": ""
6472
  },
6473
  "require": {
@@ -6513,7 +7600,7 @@
6513
  "description": "Eases DOM navigation for HTML and XML documents",
6514
  "homepage": "https://symfony.com",
6515
  "support": {
6516
- "source": "https://github.com/symfony/dom-crawler/tree/v5.4.0"
6517
  },
6518
  "funding": [
6519
  {
@@ -6529,7 +7616,7 @@
6529
  "type": "tidelift"
6530
  }
6531
  ],
6532
- "time": "2021-11-23T10:19:22+00:00"
6533
  },
6534
  {
6535
  "name": "symfony/event-dispatcher",
@@ -6761,16 +7848,16 @@
6761
  },
6762
  {
6763
  "name": "symfony/finder",
6764
- "version": "v5.4.0",
6765
  "source": {
6766
  "type": "git",
6767
  "url": "https://github.com/symfony/finder.git",
6768
- "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590"
6769
  },
6770
  "dist": {
6771
  "type": "zip",
6772
- "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590",
6773
- "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590",
6774
  "shasum": ""
6775
  },
6776
  "require": {
@@ -6804,7 +7891,76 @@
6804
  "description": "Finds files and directories via an intuitive fluent interface",
6805
  "homepage": "https://symfony.com",
6806
  "support": {
6807
- "source": "https://github.com/symfony/finder/tree/v5.4.0"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6808
  },
6809
  "funding": [
6810
  {
@@ -6820,25 +7976,28 @@
6820
  "type": "tidelift"
6821
  }
6822
  ],
6823
- "time": "2021-11-28T15:25:38+00:00"
6824
  },
6825
  {
6826
  "name": "symfony/polyfill-ctype",
6827
- "version": "v1.23.0",
6828
  "source": {
6829
  "type": "git",
6830
  "url": "https://github.com/symfony/polyfill-ctype.git",
6831
- "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
6832
  },
6833
  "dist": {
6834
  "type": "zip",
6835
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
6836
- "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
6837
  "shasum": ""
6838
  },
6839
  "require": {
6840
  "php": ">=7.1"
6841
  },
 
 
 
6842
  "suggest": {
6843
  "ext-ctype": "For best performance"
6844
  },
@@ -6883,7 +8042,7 @@
6883
  "portable"
6884
  ],
6885
  "support": {
6886
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
6887
  },
6888
  "funding": [
6889
  {
@@ -6899,20 +8058,20 @@
6899
  "type": "tidelift"
6900
  }
6901
  ],
6902
- "time": "2021-02-19T12:13:01+00:00"
6903
  },
6904
  {
6905
  "name": "symfony/polyfill-intl-grapheme",
6906
- "version": "v1.23.1",
6907
  "source": {
6908
  "type": "git",
6909
  "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
6910
- "reference": "16880ba9c5ebe3642d1995ab866db29270b36535"
6911
  },
6912
  "dist": {
6913
  "type": "zip",
6914
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535",
6915
- "reference": "16880ba9c5ebe3642d1995ab866db29270b36535",
6916
  "shasum": ""
6917
  },
6918
  "require": {
@@ -6964,7 +8123,7 @@
6964
  "shim"
6965
  ],
6966
  "support": {
6967
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1"
6968
  },
6969
  "funding": [
6970
  {
@@ -6980,11 +8139,11 @@
6980
  "type": "tidelift"
6981
  }
6982
  ],
6983
- "time": "2021-05-27T12:26:48+00:00"
6984
  },
6985
  {
6986
  "name": "symfony/polyfill-intl-normalizer",
6987
- "version": "v1.23.0",
6988
  "source": {
6989
  "type": "git",
6990
  "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -7048,7 +8207,7 @@
7048
  "shim"
7049
  ],
7050
  "support": {
7051
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
7052
  },
7053
  "funding": [
7054
  {
@@ -7068,21 +8227,24 @@
7068
  },
7069
  {
7070
  "name": "symfony/polyfill-mbstring",
7071
- "version": "v1.23.1",
7072
  "source": {
7073
  "type": "git",
7074
  "url": "https://github.com/symfony/polyfill-mbstring.git",
7075
- "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6"
7076
  },
7077
  "dist": {
7078
  "type": "zip",
7079
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6",
7080
- "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6",
7081
  "shasum": ""
7082
  },
7083
  "require": {
7084
  "php": ">=7.1"
7085
  },
 
 
 
7086
  "suggest": {
7087
  "ext-mbstring": "For best performance"
7088
  },
@@ -7128,7 +8290,7 @@
7128
  "shim"
7129
  ],
7130
  "support": {
7131
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1"
7132
  },
7133
  "funding": [
7134
  {
@@ -7144,20 +8306,20 @@
7144
  "type": "tidelift"
7145
  }
7146
  ],
7147
- "time": "2021-05-27T12:26:48+00:00"
7148
  },
7149
  {
7150
  "name": "symfony/polyfill-php73",
7151
- "version": "v1.23.0",
7152
  "source": {
7153
  "type": "git",
7154
  "url": "https://github.com/symfony/polyfill-php73.git",
7155
- "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
7156
  },
7157
  "dist": {
7158
  "type": "zip",
7159
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
7160
- "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
7161
  "shasum": ""
7162
  },
7163
  "require": {
@@ -7207,7 +8369,7 @@
7207
  "shim"
7208
  ],
7209
  "support": {
7210
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0"
7211
  },
7212
  "funding": [
7213
  {
@@ -7223,20 +8385,20 @@
7223
  "type": "tidelift"
7224
  }
7225
  ],
7226
- "time": "2021-02-19T12:13:01+00:00"
7227
  },
7228
  {
7229
  "name": "symfony/polyfill-php80",
7230
- "version": "v1.23.1",
7231
  "source": {
7232
  "type": "git",
7233
  "url": "https://github.com/symfony/polyfill-php80.git",
7234
- "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be"
7235
  },
7236
  "dist": {
7237
  "type": "zip",
7238
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be",
7239
- "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be",
7240
  "shasum": ""
7241
  },
7242
  "require": {
@@ -7290,7 +8452,7 @@
7290
  "shim"
7291
  ],
7292
  "support": {
7293
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1"
7294
  },
7295
  "funding": [
7296
  {
@@ -7306,20 +8468,20 @@
7306
  "type": "tidelift"
7307
  }
7308
  ],
7309
- "time": "2021-07-28T13:41:28+00:00"
7310
  },
7311
  {
7312
  "name": "symfony/polyfill-php81",
7313
- "version": "v1.23.0",
7314
  "source": {
7315
  "type": "git",
7316
  "url": "https://github.com/symfony/polyfill-php81.git",
7317
- "reference": "e66119f3de95efc359483f810c4c3e6436279436"
7318
  },
7319
  "dist": {
7320
  "type": "zip",
7321
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436",
7322
- "reference": "e66119f3de95efc359483f810c4c3e6436279436",
7323
  "shasum": ""
7324
  },
7325
  "require": {
@@ -7369,7 +8531,7 @@
7369
  "shim"
7370
  ],
7371
  "support": {
7372
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0"
7373
  },
7374
  "funding": [
7375
  {
@@ -7385,20 +8547,20 @@
7385
  "type": "tidelift"
7386
  }
7387
  ],
7388
- "time": "2021-05-21T13:25:03+00:00"
7389
  },
7390
  {
7391
  "name": "symfony/process",
7392
- "version": "v5.4.0",
7393
  "source": {
7394
  "type": "git",
7395
  "url": "https://github.com/symfony/process.git",
7396
- "reference": "5be20b3830f726e019162b26223110c8f47cf274"
7397
  },
7398
  "dist": {
7399
  "type": "zip",
7400
- "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274",
7401
- "reference": "5be20b3830f726e019162b26223110c8f47cf274",
7402
  "shasum": ""
7403
  },
7404
  "require": {
@@ -7431,7 +8593,7 @@
7431
  "description": "Executes commands in sub-processes",
7432
  "homepage": "https://symfony.com",
7433
  "support": {
7434
- "source": "https://github.com/symfony/process/tree/v5.4.0"
7435
  },
7436
  "funding": [
7437
  {
@@ -7447,7 +8609,7 @@
7447
  "type": "tidelift"
7448
  }
7449
  ],
7450
- "time": "2021-11-28T15:25:38+00:00"
7451
  },
7452
  {
7453
  "name": "symfony/service-contracts",
@@ -7533,17 +8695,79 @@
7533
  "time": "2021-11-04T16:48:04+00:00"
7534
  },
7535
  {
7536
- "name": "symfony/string",
7537
  "version": "v5.4.0",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7538
  "source": {
7539
  "type": "git",
7540
  "url": "https://github.com/symfony/string.git",
7541
- "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d"
7542
  },
7543
  "dist": {
7544
  "type": "zip",
7545
- "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d",
7546
- "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d",
7547
  "shasum": ""
7548
  },
7549
  "require": {
@@ -7600,7 +8824,7 @@
7600
  "utf8"
7601
  ],
7602
  "support": {
7603
- "source": "https://github.com/symfony/string/tree/v5.4.0"
7604
  },
7605
  "funding": [
7606
  {
@@ -7616,31 +8840,32 @@
7616
  "type": "tidelift"
7617
  }
7618
  ],
7619
- "time": "2021-11-24T10:02:00+00:00"
7620
  },
7621
  {
7622
  "name": "symfony/translation",
7623
- "version": "v5.3.11",
7624
  "source": {
7625
  "type": "git",
7626
  "url": "https://github.com/symfony/translation.git",
7627
- "reference": "17a965c8f3b1b348cf15d903ac53942984561f8a"
7628
  },
7629
  "dist": {
7630
  "type": "zip",
7631
- "url": "https://api.github.com/repos/symfony/translation/zipball/17a965c8f3b1b348cf15d903ac53942984561f8a",
7632
- "reference": "17a965c8f3b1b348cf15d903ac53942984561f8a",
7633
  "shasum": ""
7634
  },
7635
  "require": {
7636
  "php": ">=7.2.5",
7637
- "symfony/deprecation-contracts": "^2.1",
7638
  "symfony/polyfill-mbstring": "~1.0",
7639
  "symfony/polyfill-php80": "^1.16",
7640
  "symfony/translation-contracts": "^2.3"
7641
  },
7642
  "conflict": {
7643
  "symfony/config": "<4.4",
 
7644
  "symfony/dependency-injection": "<5.0",
7645
  "symfony/http-kernel": "<5.0",
7646
  "symfony/twig-bundle": "<5.0",
@@ -7651,15 +8876,16 @@
7651
  },
7652
  "require-dev": {
7653
  "psr/log": "^1|^2|^3",
7654
- "symfony/config": "^4.4|^5.0",
7655
- "symfony/console": "^4.4|^5.0",
7656
- "symfony/dependency-injection": "^5.0",
7657
- "symfony/finder": "^4.4|^5.0",
7658
- "symfony/http-kernel": "^5.0",
7659
- "symfony/intl": "^4.4|^5.0",
 
7660
  "symfony/polyfill-intl-icu": "^1.21",
7661
- "symfony/service-contracts": "^1.1.2|^2",
7662
- "symfony/yaml": "^4.4|^5.0"
7663
  },
7664
  "suggest": {
7665
  "psr/log-implementation": "To use logging capability in translator",
@@ -7695,7 +8921,7 @@
7695
  "description": "Provides tools to internationalize your application",
7696
  "homepage": "https://symfony.com",
7697
  "support": {
7698
- "source": "https://github.com/symfony/translation/tree/v5.3.11"
7699
  },
7700
  "funding": [
7701
  {
@@ -7711,7 +8937,7 @@
7711
  "type": "tidelift"
7712
  }
7713
  ],
7714
- "time": "2021-11-04T16:37:19+00:00"
7715
  },
7716
  {
7717
  "name": "symfony/translation-contracts",
@@ -7793,28 +9019,28 @@
7793
  },
7794
  {
7795
  "name": "symfony/yaml",
7796
- "version": "v5.3.11",
7797
  "source": {
7798
  "type": "git",
7799
  "url": "https://github.com/symfony/yaml.git",
7800
- "reference": "226638aa877bc4104e619a15f27d8141cd6b4e4a"
7801
  },
7802
  "dist": {
7803
  "type": "zip",
7804
- "url": "https://api.github.com/repos/symfony/yaml/zipball/226638aa877bc4104e619a15f27d8141cd6b4e4a",
7805
- "reference": "226638aa877bc4104e619a15f27d8141cd6b4e4a",
7806
  "shasum": ""
7807
  },
7808
  "require": {
7809
  "php": ">=7.2.5",
7810
- "symfony/deprecation-contracts": "^2.1",
7811
- "symfony/polyfill-ctype": "~1.8"
7812
  },
7813
  "conflict": {
7814
- "symfony/console": "<4.4"
7815
  },
7816
  "require-dev": {
7817
- "symfony/console": "^4.4|^5.0"
7818
  },
7819
  "suggest": {
7820
  "symfony/console": "For validating YAML files using the lint command"
@@ -7848,7 +9074,7 @@
7848
  "description": "Loads and dumps YAML files",
7849
  "homepage": "https://symfony.com",
7850
  "support": {
7851
- "source": "https://github.com/symfony/yaml/tree/v5.3.11"
7852
  },
7853
  "funding": [
7854
  {
@@ -7864,7 +9090,7 @@
7864
  "type": "tidelift"
7865
  }
7866
  ],
7867
- "time": "2021-11-20T16:42:42+00:00"
7868
  },
7869
  {
7870
  "name": "theseer/fdomdocument",
@@ -7960,6 +9186,112 @@
7960
  ],
7961
  "time": "2021-07-28T10:34:58+00:00"
7962
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7963
  {
7964
  "name": "voku/portable-ascii",
7965
  "version": "1.5.6",
@@ -8145,28 +9477,79 @@
8145
  },
8146
  "time": "2021-03-09T10:59:23+00:00"
8147
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8148
  {
8149
  "name": "wp-cli/i18n-command",
8150
- "version": "v2.2.9",
8151
  "source": {
8152
  "type": "git",
8153
  "url": "https://github.com/wp-cli/i18n-command.git",
8154
- "reference": "26e171c5708060b6d7cede9af934b946f5ec3a59"
8155
  },
8156
  "dist": {
8157
  "type": "zip",
8158
- "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/26e171c5708060b6d7cede9af934b946f5ec3a59",
8159
- "reference": "26e171c5708060b6d7cede9af934b946f5ec3a59",
8160
  "shasum": ""
8161
  },
8162
  "require": {
8163
  "gettext/gettext": "^4.8",
8164
- "mck89/peast": "^1.13",
8165
  "wp-cli/wp-cli": "^2.5"
8166
  },
8167
  "require-dev": {
8168
  "wp-cli/scaffold-command": "^1.2 || ^2",
8169
- "wp-cli/wp-cli-tests": "^3.0.11"
8170
  },
8171
  "suggest": {
8172
  "ext-mbstring": "Used for calculating include/exclude matches in code extraction"
@@ -8205,9 +9588,9 @@
8205
  "homepage": "https://github.com/wp-cli/i18n-command",
8206
  "support": {
8207
  "issues": "https://github.com/wp-cli/i18n-command/issues",
8208
- "source": "https://github.com/wp-cli/i18n-command/tree/v2.2.9"
8209
  },
8210
- "time": "2021-07-20T21:25:54+00:00"
8211
  },
8212
  {
8213
  "name": "wp-cli/mustangostang-spyc",
4
  "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
  "This file is @generated automatically"
6
  ],
7
+ "content-hash": "ac20c70e84aa3ad970f67eb2aa152a00",
8
  "packages": [
9
  {
10
  "name": "publishpress/wordpress-reviews",
11
+ "version": "v1.1.18",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/publishpress/wordpress-reviews.git",
15
+ "reference": "0020705b8f6a7177fc393c6c42c82171bf9e2fbd"
16
  },
17
  "dist": {
18
  "type": "zip",
19
+ "url": "https://api.github.com/repos/publishpress/wordpress-reviews/zipball/0020705b8f6a7177fc393c6c42c82171bf9e2fbd",
20
+ "reference": "0020705b8f6a7177fc393c6c42c82171bf9e2fbd",
21
  "shasum": ""
22
  },
23
  "require": {
70
  ],
71
  "support": {
72
  "issues": "https://github.com/publishpress/wordpress-reviews/issues",
73
+ "source": "https://github.com/publishpress/wordpress-reviews/tree/v1.1.18"
74
  },
75
+ "time": "2021-12-15T00:03:53+00:00"
76
  }
77
  ],
78
  "packages-dev": [
79
+ {
80
+ "name": "amphp/amp",
81
+ "version": "v2.6.1",
82
+ "source": {
83
+ "type": "git",
84
+ "url": "https://github.com/amphp/amp.git",
85
+ "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae"
86
+ },
87
+ "dist": {
88
+ "type": "zip",
89
+ "url": "https://api.github.com/repos/amphp/amp/zipball/c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae",
90
+ "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae",
91
+ "shasum": ""
92
+ },
93
+ "require": {
94
+ "php": ">=7.1"
95
+ },
96
+ "require-dev": {
97
+ "amphp/php-cs-fixer-config": "dev-master",
98
+ "amphp/phpunit-util": "^1",
99
+ "ext-json": "*",
100
+ "jetbrains/phpstorm-stubs": "^2019.3",
101
+ "phpunit/phpunit": "^7 | ^8 | ^9",
102
+ "psalm/phar": "^3.11@dev",
103
+ "react/promise": "^2"
104
+ },
105
+ "type": "library",
106
+ "extra": {
107
+ "branch-alias": {
108
+ "dev-master": "2.x-dev"
109
+ }
110
+ },
111
+ "autoload": {
112
+ "psr-4": {
113
+ "Amp\\": "lib"
114
+ },
115
+ "files": [
116
+ "lib/functions.php",
117
+ "lib/Internal/functions.php"
118
+ ]
119
+ },
120
+ "notification-url": "https://packagist.org/downloads/",
121
+ "license": [
122
+ "MIT"
123
+ ],
124
+ "authors": [
125
+ {
126
+ "name": "Daniel Lowrey",
127
+ "email": "rdlowrey@php.net"
128
+ },
129
+ {
130
+ "name": "Aaron Piotrowski",
131
+ "email": "aaron@trowski.com"
132
+ },
133
+ {
134
+ "name": "Bob Weinand",
135
+ "email": "bobwei9@hotmail.com"
136
+ },
137
+ {
138
+ "name": "Niklas Keller",
139
+ "email": "me@kelunik.com"
140
+ }
141
+ ],
142
+ "description": "A non-blocking concurrency framework for PHP applications.",
143
+ "homepage": "http://amphp.org/amp",
144
+ "keywords": [
145
+ "async",
146
+ "asynchronous",
147
+ "awaitable",
148
+ "concurrency",
149
+ "event",
150
+ "event-loop",
151
+ "future",
152
+ "non-blocking",
153
+ "promise"
154
+ ],
155
+ "support": {
156
+ "irc": "irc://irc.freenode.org/amphp",
157
+ "issues": "https://github.com/amphp/amp/issues",
158
+ "source": "https://github.com/amphp/amp/tree/v2.6.1"
159
+ },
160
+ "funding": [
161
+ {
162
+ "url": "https://github.com/amphp",
163
+ "type": "github"
164
+ }
165
+ ],
166
+ "time": "2021-09-23T18:43:08+00:00"
167
+ },
168
+ {
169
+ "name": "amphp/byte-stream",
170
+ "version": "v1.8.1",
171
+ "source": {
172
+ "type": "git",
173
+ "url": "https://github.com/amphp/byte-stream.git",
174
+ "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd"
175
+ },
176
+ "dist": {
177
+ "type": "zip",
178
+ "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd",
179
+ "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd",
180
+ "shasum": ""
181
+ },
182
+ "require": {
183
+ "amphp/amp": "^2",
184
+ "php": ">=7.1"
185
+ },
186
+ "require-dev": {
187
+ "amphp/php-cs-fixer-config": "dev-master",
188
+ "amphp/phpunit-util": "^1.4",
189
+ "friendsofphp/php-cs-fixer": "^2.3",
190
+ "jetbrains/phpstorm-stubs": "^2019.3",
191
+ "phpunit/phpunit": "^6 || ^7 || ^8",
192
+ "psalm/phar": "^3.11.4"
193
+ },
194
+ "type": "library",
195
+ "extra": {
196
+ "branch-alias": {
197
+ "dev-master": "1.x-dev"
198
+ }
199
+ },
200
+ "autoload": {
201
+ "psr-4": {
202
+ "Amp\\ByteStream\\": "lib"
203
+ },
204
+ "files": [
205
+ "lib/functions.php"
206
+ ]
207
+ },
208
+ "notification-url": "https://packagist.org/downloads/",
209
+ "license": [
210
+ "MIT"
211
+ ],
212
+ "authors": [
213
+ {
214
+ "name": "Aaron Piotrowski",
215
+ "email": "aaron@trowski.com"
216
+ },
217
+ {
218
+ "name": "Niklas Keller",
219
+ "email": "me@kelunik.com"
220
+ }
221
+ ],
222
+ "description": "A stream abstraction to make working with non-blocking I/O simple.",
223
+ "homepage": "http://amphp.org/byte-stream",
224
+ "keywords": [
225
+ "amp",
226
+ "amphp",
227
+ "async",
228
+ "io",
229
+ "non-blocking",
230
+ "stream"
231
+ ],
232
+ "support": {
233
+ "irc": "irc://irc.freenode.org/amphp",
234
+ "issues": "https://github.com/amphp/byte-stream/issues",
235
+ "source": "https://github.com/amphp/byte-stream/tree/v1.8.1"
236
+ },
237
+ "funding": [
238
+ {
239
+ "url": "https://github.com/amphp",
240
+ "type": "github"
241
+ }
242
+ ],
243
+ "time": "2021-03-30T17:13:30+00:00"
244
+ },
245
  {
246
  "name": "antecedent/patchwork",
247
  "version": "2.1.17",
411
  },
412
  {
413
  "name": "codeception/codeception",
414
+ "version": "4.1.27",
415
  "source": {
416
  "type": "git",
417
  "url": "https://github.com/Codeception/Codeception.git",
418
+ "reference": "2d9a11e6f487e3bcc17e22b7552fb6a10cec5c7c"
419
  },
420
  "dist": {
421
  "type": "zip",
422
+ "url": "https://api.github.com/repos/Codeception/Codeception/zipball/2d9a11e6f487e3bcc17e22b7552fb6a10cec5c7c",
423
+ "reference": "2d9a11e6f487e3bcc17e22b7552fb6a10cec5c7c",
424
  "shasum": ""
425
  },
426
  "require": {
427
  "behat/gherkin": "^4.4.0",
428
+ "codeception/lib-asserts": "^1.0 | 2.0.*@dev",
429
  "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0",
430
+ "codeception/stub": "^2.0 | ^3.0 | ^4.0",
431
  "ext-curl": "*",
432
  "ext-json": "*",
433
  "ext-mbstring": "*",
440
  "symfony/yaml": ">=2.7 <6.0"
441
  },
442
  "require-dev": {
443
+ "codeception/module-asserts": "^1.0 | 2.0.*@dev",
444
+ "codeception/module-cli": "^1.0 | 2.0.*@dev",
445
+ "codeception/module-db": "^1.0 | 2.0.*@dev",
446
+ "codeception/module-filesystem": "^1.0 | 2.0.*@dev",
447
+ "codeception/module-phpbrowser": "^1.0 | 2.0.*@dev",
448
  "codeception/specify": "~0.3",
449
  "codeception/util-universalframework": "*@dev",
450
  "monolog/monolog": "~1.8",
470
  "psr-4": {
471
  "Codeception\\": "src/Codeception",
472
  "Codeception\\Extension\\": "ext"
473
+ },
474
+ "files": [
475
+ "functions.php"
476
+ ]
477
  },
478
  "notification-url": "https://packagist.org/downloads/",
479
  "license": [
497
  ],
498
  "support": {
499
  "issues": "https://github.com/Codeception/Codeception/issues",
500
+ "source": "https://github.com/Codeception/Codeception/tree/4.1.27"
501
  },
502
  "funding": [
503
  {
505
  "type": "open_collective"
506
  }
507
  ],
508
+ "time": "2021-12-22T06:40:46+00:00"
509
  },
510
  {
511
  "name": "codeception/lib-asserts",
943
  },
944
  "time": "2021-11-18T18:58:15+00:00"
945
  },
946
+ {
947
+ "name": "codeception/module-sequence",
948
+ "version": "2.0.0",
949
+ "source": {
950
+ "type": "git",
951
+ "url": "https://github.com/Codeception/module-sequence.git",
952
+ "reference": "60607ad04949806d15d18d1639cd3614b338f07a"
953
+ },
954
+ "dist": {
955
+ "type": "zip",
956
+ "url": "https://api.github.com/repos/Codeception/module-sequence/zipball/60607ad04949806d15d18d1639cd3614b338f07a",
957
+ "reference": "60607ad04949806d15d18d1639cd3614b338f07a",
958
+ "shasum": ""
959
+ },
960
+ "require": {
961
+ "codeception/codeception": "^4.0",
962
+ "php": "^7.4 | ^8.0"
963
+ },
964
+ "type": "library",
965
+ "autoload": {
966
+ "classmap": [
967
+ "src/"
968
+ ]
969
+ },
970
+ "notification-url": "https://packagist.org/downloads/",
971
+ "license": [
972
+ "MIT"
973
+ ],
974
+ "authors": [
975
+ {
976
+ "name": "Michael Bodnarchuk"
977
+ }
978
+ ],
979
+ "description": "Sequence module for Codeception",
980
+ "homepage": "http://codeception.com/",
981
+ "keywords": [
982
+ "codeception"
983
+ ],
984
+ "support": {
985
+ "issues": "https://github.com/Codeception/module-sequence/issues",
986
+ "source": "https://github.com/Codeception/module-sequence/tree/2.0.0"
987
+ },
988
+ "time": "2021-11-30T02:02:52+00:00"
989
+ },
990
  {
991
  "name": "codeception/module-webdriver",
992
  "version": "1.4.0",
1094
  },
1095
  {
1096
  "name": "codeception/stub",
1097
+ "version": "4.0.0",
1098
  "source": {
1099
  "type": "git",
1100
  "url": "https://github.com/Codeception/Stub.git",
1101
+ "reference": "4c9cf3e19bd5f064e08e7f3ba6be651c218dc6ae"
1102
  },
1103
  "dist": {
1104
  "type": "zip",
1105
+ "url": "https://api.github.com/repos/Codeception/Stub/zipball/4c9cf3e19bd5f064e08e7f3ba6be651c218dc6ae",
1106
+ "reference": "4c9cf3e19bd5f064e08e7f3ba6be651c218dc6ae",
1107
  "shasum": ""
1108
  },
1109
  "require": {
1110
+ "php": "^7.4 | ^8.0",
1111
  "phpunit/phpunit": "^8.4 | ^9.0"
1112
  },
1113
+ "require-dev": {
1114
+ "consolidation/robo": "^3.0"
1115
+ },
1116
  "type": "library",
1117
  "autoload": {
1118
  "psr-4": {
1126
  "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
1127
  "support": {
1128
  "issues": "https://github.com/Codeception/Stub/issues",
1129
+ "source": "https://github.com/Codeception/Stub/tree/4.0.0"
1130
  },
1131
+ "time": "2021-12-07T14:39:17+00:00"
1132
  },
1133
  {
1134
  "name": "codeception/util-universalframework",
1167
  },
1168
  "time": "2019-09-22T06:06:49+00:00"
1169
  },
1170
+ {
1171
+ "name": "composer/package-versions-deprecated",
1172
+ "version": "1.11.99.4",
1173
+ "source": {
1174
+ "type": "git",
1175
+ "url": "https://github.com/composer/package-versions-deprecated.git",
1176
+ "reference": "b174585d1fe49ceed21928a945138948cb394600"
1177
+ },
1178
+ "dist": {
1179
+ "type": "zip",
1180
+ "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600",
1181
+ "reference": "b174585d1fe49ceed21928a945138948cb394600",
1182
+ "shasum": ""
1183
+ },
1184
+ "require": {
1185
+ "composer-plugin-api": "^1.1.0 || ^2.0",
1186
+ "php": "^7 || ^8"
1187
+ },
1188
+ "replace": {
1189
+ "ocramius/package-versions": "1.11.99"
1190
+ },
1191
+ "require-dev": {
1192
+ "composer/composer": "^1.9.3 || ^2.0@dev",
1193
+ "ext-zip": "^1.13",
1194
+ "phpunit/phpunit": "^6.5 || ^7"
1195
+ },
1196
+ "type": "composer-plugin",
1197
+ "extra": {
1198
+ "class": "PackageVersions\\Installer",
1199
+ "branch-alias": {
1200
+ "dev-master": "1.x-dev"
1201
+ }
1202
+ },
1203
+ "autoload": {
1204
+ "psr-4": {
1205
+ "PackageVersions\\": "src/PackageVersions"
1206
+ }
1207
+ },
1208
+ "notification-url": "https://packagist.org/downloads/",
1209
+ "license": [
1210
+ "MIT"
1211
+ ],
1212
+ "authors": [
1213
+ {
1214
+ "name": "Marco Pivetta",
1215
+ "email": "ocramius@gmail.com"
1216
+ },
1217
+ {
1218
+ "name": "Jordi Boggiano",
1219
+ "email": "j.boggiano@seld.be"
1220
+ }
1221
+ ],
1222
+ "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
1223
+ "support": {
1224
+ "issues": "https://github.com/composer/package-versions-deprecated/issues",
1225
+ "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.4"
1226
+ },
1227
+ "funding": [
1228
+ {
1229
+ "url": "https://packagist.com",
1230
+ "type": "custom"
1231
+ },
1232
+ {
1233
+ "url": "https://github.com/composer",
1234
+ "type": "github"
1235
+ },
1236
+ {
1237
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
1238
+ "type": "tidelift"
1239
+ }
1240
+ ],
1241
+ "time": "2021-09-13T08:41:34+00:00"
1242
+ },
1243
+ {
1244
+ "name": "composer/pcre",
1245
+ "version": "1.0.0",
1246
+ "source": {
1247
+ "type": "git",
1248
+ "url": "https://github.com/composer/pcre.git",
1249
+ "reference": "3d322d715c43a1ac36c7fe215fa59336265500f2"
1250
+ },
1251
+ "dist": {
1252
+ "type": "zip",
1253
+ "url": "https://api.github.com/repos/composer/pcre/zipball/3d322d715c43a1ac36c7fe215fa59336265500f2",
1254
+ "reference": "3d322d715c43a1ac36c7fe215fa59336265500f2",
1255
+ "shasum": ""
1256
+ },
1257
+ "require": {
1258
+ "php": "^5.3.2 || ^7.0 || ^8.0"
1259
+ },
1260
+ "require-dev": {
1261
+ "phpstan/phpstan": "^1",
1262
+ "phpstan/phpstan-strict-rules": "^1.1",
1263
+ "symfony/phpunit-bridge": "^4.2 || ^5"
1264
+ },
1265
+ "type": "library",
1266
+ "extra": {
1267
+ "branch-alias": {
1268
+ "dev-main": "1.x-dev"
1269
+ }
1270
+ },
1271
+ "autoload": {
1272
+ "psr-4": {
1273
+ "Composer\\Pcre\\": "src"
1274
+ }
1275
+ },
1276
+ "notification-url": "https://packagist.org/downloads/",
1277
+ "license": [
1278
+ "MIT"
1279
+ ],
1280
+ "authors": [
1281
+ {
1282
+ "name": "Jordi Boggiano",
1283
+ "email": "j.boggiano@seld.be",
1284
+ "homepage": "http://seld.be"
1285
+ }
1286
+ ],
1287
+ "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
1288
+ "keywords": [
1289
+ "PCRE",
1290
+ "preg",
1291
+ "regex",
1292
+ "regular expression"
1293
+ ],
1294
+ "support": {
1295
+ "issues": "https://github.com/composer/pcre/issues",
1296
+ "source": "https://github.com/composer/pcre/tree/1.0.0"
1297
+ },
1298
+ "funding": [
1299
+ {
1300
+ "url": "https://packagist.com",
1301
+ "type": "custom"
1302
+ },
1303
+ {
1304
+ "url": "https://github.com/composer",
1305
+ "type": "github"
1306
+ },
1307
+ {
1308
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
1309
+ "type": "tidelift"
1310
+ }
1311
+ ],
1312
+ "time": "2021-12-06T15:17:27+00:00"
1313
+ },
1314
  {
1315
  "name": "composer/semver",
1316
+ "version": "3.2.7",
1317
  "source": {
1318
  "type": "git",
1319
  "url": "https://github.com/composer/semver.git",
1320
+ "reference": "deac27056b57e46faf136fae7b449eeaa71661ee"
1321
  },
1322
  "dist": {
1323
  "type": "zip",
1324
+ "url": "https://api.github.com/repos/composer/semver/zipball/deac27056b57e46faf136fae7b449eeaa71661ee",
1325
+ "reference": "deac27056b57e46faf136fae7b449eeaa71661ee",
1326
  "shasum": ""
1327
  },
1328
  "require": {
1374
  "support": {
1375
  "irc": "irc://irc.freenode.org/composer",
1376
  "issues": "https://github.com/composer/semver/issues",
1377
+ "source": "https://github.com/composer/semver/tree/3.2.7"
1378
  },
1379
  "funding": [
1380
  {
1390
  "type": "tidelift"
1391
  }
1392
  ],
1393
+ "time": "2022-01-04T09:57:54+00:00"
1394
  },
1395
  {
1396
  "name": "composer/xdebug-handler",
1397
+ "version": "2.0.4",
1398
  "source": {
1399
  "type": "git",
1400
  "url": "https://github.com/composer/xdebug-handler.git",
1401
+ "reference": "0c1a3925ec58a4ec98e992b9c7d171e9e184be0a"
1402
  },
1403
  "dist": {
1404
  "type": "zip",
1405
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/0c1a3925ec58a4ec98e992b9c7d171e9e184be0a",
1406
+ "reference": "0c1a3925ec58a4ec98e992b9c7d171e9e184be0a",
1407
  "shasum": ""
1408
  },
1409
  "require": {
1410
+ "composer/pcre": "^1",
1411
  "php": "^5.3.2 || ^7.0 || ^8.0",
1412
  "psr/log": "^1 || ^2 || ^3"
1413
  },
1414
  "require-dev": {
1415
+ "phpstan/phpstan": "^1.0",
1416
+ "phpstan/phpstan-strict-rules": "^1.1",
1417
+ "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0"
1418
  },
1419
  "type": "library",
1420
  "autoload": {
1440
  "support": {
1441
  "irc": "irc://irc.freenode.org/composer",
1442
  "issues": "https://github.com/composer/xdebug-handler/issues",
1443
+ "source": "https://github.com/composer/xdebug-handler/tree/2.0.4"
1444
  },
1445
  "funding": [
1446
  {
1456
  "type": "tidelift"
1457
  }
1458
  ],
1459
+ "time": "2022-01-04T17:06:45+00:00"
1460
  },
1461
  {
1462
  "name": "consolidation/annotated-command",
1463
+ "version": "4.5.1",
1464
  "source": {
1465
  "type": "git",
1466
  "url": "https://github.com/consolidation/annotated-command.git",
1467
+ "reference": "701a7abe8505abe89520837be798e15a3953a367"
1468
  },
1469
  "dist": {
1470
  "type": "zip",
1471
+ "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/701a7abe8505abe89520837be798e15a3953a367",
1472
+ "reference": "701a7abe8505abe89520837be798e15a3953a367",
1473
  "shasum": ""
1474
  },
1475
  "require": {
1476
  "consolidation/output-formatters": "^4.1.1",
1477
  "php": ">=7.1.3",
1478
  "psr/log": "^1|^2",
1479
+ "symfony/console": "^4.4.8|^5|^6",
1480
+ "symfony/event-dispatcher": "^4.4.8|^5|^6",
1481
+ "symfony/finder": "^4.4.8|^5|^6"
1482
  },
1483
  "require-dev": {
1484
+ "composer-runtime-api": "^2.0",
1485
  "phpunit/phpunit": "^7.5.20 || ^8 || ^9",
1486
  "squizlabs/php_codesniffer": "^3",
1487
  "yoast/phpunit-polyfills": "^0.2.0"
1510
  "description": "Initialize Symfony Console commands from annotated command class methods.",
1511
  "support": {
1512
  "issues": "https://github.com/consolidation/annotated-command/issues",
1513
+ "source": "https://github.com/consolidation/annotated-command/tree/4.5.1"
1514
  },
1515
+ "time": "2021-12-30T04:00:37+00:00"
1516
  },
1517
  {
1518
  "name": "consolidation/config",
1519
+ "version": "2.0.2",
1520
  "source": {
1521
  "type": "git",
1522
  "url": "https://github.com/consolidation/config.git",
1523
+ "reference": "ce6a96fe858df4cc4252e2f48503151dc20a1559"
1524
  },
1525
  "dist": {
1526
  "type": "zip",
1527
+ "url": "https://api.github.com/repos/consolidation/config/zipball/ce6a96fe858df4cc4252e2f48503151dc20a1559",
1528
+ "reference": "ce6a96fe858df4cc4252e2f48503151dc20a1559",
1529
  "shasum": ""
1530
  },
1531
  "require": {
1570
  "description": "Provide configuration services for a commandline tool.",
1571
  "support": {
1572
  "issues": "https://github.com/consolidation/config/issues",
1573
+ "source": "https://github.com/consolidation/config/tree/2.0.2"
1574
  },
1575
+ "time": "2021-12-30T03:53:15+00:00"
1576
  },
1577
  {
1578
  "name": "consolidation/log",
1579
+ "version": "2.0.4",
1580
  "source": {
1581
  "type": "git",
1582
  "url": "https://github.com/consolidation/log.git",
1583
+ "reference": "fc9ec5476ba13a31778695bd2d4f2fa0b0684356"
1584
  },
1585
  "dist": {
1586
  "type": "zip",
1587
+ "url": "https://api.github.com/repos/consolidation/log/zipball/fc9ec5476ba13a31778695bd2d4f2fa0b0684356",
1588
+ "reference": "fc9ec5476ba13a31778695bd2d4f2fa0b0684356",
1589
  "shasum": ""
1590
  },
1591
  "require": {
1592
  "php": ">=7.1.3",
1593
  "psr/log": "^1.0",
1594
+ "symfony/console": "^4 || ^5 || ^6"
1595
  },
1596
  "require-dev": {
1597
  "phpunit/phpunit": ">=7.5.20",
1622
  "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.",
1623
  "support": {
1624
  "issues": "https://github.com/consolidation/log/issues",
1625
+ "source": "https://github.com/consolidation/log/tree/2.0.4"
1626
  },
1627
+ "time": "2021-12-30T19:05:18+00:00"
1628
  },
1629
  {
1630
  "name": "consolidation/output-formatters",
1631
+ "version": "4.2.1",
1632
  "source": {
1633
  "type": "git",
1634
  "url": "https://github.com/consolidation/output-formatters.git",
1635
+ "reference": "4413d7c732afb5d7bdac565c41aa9c8c49c48888"
1636
  },
1637
  "dist": {
1638
  "type": "zip",
1639
+ "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/4413d7c732afb5d7bdac565c41aa9c8c49c48888",
1640
+ "reference": "4413d7c732afb5d7bdac565c41aa9c8c49c48888",
1641
  "shasum": ""
1642
  },
1643
  "require": {
1644
  "dflydev/dot-access-data": "^1.1.0",
1645
  "php": ">=7.1.3",
1646
+ "symfony/console": "^4|^5|^6",
1647
+ "symfony/finder": "^4|^5|^6"
1648
  },
1649
  "require-dev": {
1650
  "php-coveralls/php-coveralls": "^2.4.2",
1651
  "phpunit/phpunit": ">=7",
1652
  "squizlabs/php_codesniffer": "^3",
1653
+ "symfony/var-dumper": "^4|^5|^6",
1654
+ "symfony/yaml": "^4|^5|^6",
1655
  "yoast/phpunit-polyfills": "^0.2.0"
1656
  },
1657
  "suggest": {
1681
  "description": "Format text by applying transformations provided by plug-in formatters.",
1682
  "support": {
1683
  "issues": "https://github.com/consolidation/output-formatters/issues",
1684
+ "source": "https://github.com/consolidation/output-formatters/tree/4.2.1"
1685
  },
1686
+ "time": "2021-12-30T03:58:00+00:00"
1687
  },
1688
  {
1689
  "name": "consolidation/robo",
1690
+ "version": "3.0.7",
1691
  "source": {
1692
  "type": "git",
1693
+ "url": "https://github.com/consolidation/robo.git",
1694
+ "reference": "57012db2a93c904ed0a7b9d8676c0325c0366bc8"
1695
  },
1696
  "dist": {
1697
  "type": "zip",
1698
+ "url": "https://api.github.com/repos/consolidation/robo/zipball/57012db2a93c904ed0a7b9d8676c0325c0366bc8",
1699
+ "reference": "57012db2a93c904ed0a7b9d8676c0325c0366bc8",
1700
  "shasum": ""
1701
  },
1702
  "require": {
1703
  "consolidation/annotated-command": "^4.3",
1704
+ "consolidation/config": "^1.2.1 || ^2.0.1",
1705
+ "consolidation/log": "^1.1.1 || ^2.0.2",
1706
  "consolidation/output-formatters": "^4.1.2",
1707
  "consolidation/self-update": "^2.0",
1708
  "league/container": "^3.3.1",
1709
  "php": ">=7.1.3",
1710
+ "symfony/console": "^4.4.19 || ^5 || ^6",
1711
+ "symfony/event-dispatcher": "^4.4.19 || ^5 || ^6",
1712
+ "symfony/filesystem": "^4.4.9 || ^5 || ^6",
1713
+ "symfony/finder": "^4.4.9 || ^5 || ^6",
1714
  "symfony/process": "^4.4.9 || ^5",
1715
+ "symfony/yaml": "^4.4 || ^5 || ^6"
1716
  },
1717
  "conflict": {
1718
  "codegyre/robo": "*"
1721
  "natxet/cssmin": "3.0.4",
1722
  "patchwork/jsqueeze": "^2",
1723
  "pear/archive_tar": "^1.4.4",
1724
+ "phpunit/phpunit": "^7.5.20 || ^8",
1725
  "squizlabs/php_codesniffer": "^3.6",
1726
  "yoast/phpunit-polyfills": "^0.2.0"
1727
  },
1779
  ],
1780
  "description": "Modern task runner",
1781
  "support": {
1782
+ "issues": "https://github.com/consolidation/robo/issues",
1783
+ "source": "https://github.com/consolidation/robo/tree/3.0.7"
1784
  },
1785
+ "time": "2021-12-31T01:01:31+00:00"
1786
  },
1787
  {
1788
  "name": "consolidation/self-update",
1789
+ "version": "2.0.3",
1790
  "source": {
1791
  "type": "git",
1792
  "url": "https://github.com/consolidation/self-update.git",
1793
+ "reference": "117dcc9494dc970a6ae307103c41d654e6253bc4"
1794
  },
1795
  "dist": {
1796
  "type": "zip",
1797
+ "url": "https://api.github.com/repos/consolidation/self-update/zipball/117dcc9494dc970a6ae307103c41d654e6253bc4",
1798
+ "reference": "117dcc9494dc970a6ae307103c41d654e6253bc4",
1799
  "shasum": ""
1800
  },
1801
  "require": {
1802
  "composer/semver": "^3.2",
1803
  "php": ">=5.5.0",
1804
+ "symfony/console": "^2.8 || ^3 || ^4 || ^5 || ^6",
1805
+ "symfony/filesystem": "^2.5 || ^3 || ^4 || ^5 || ^6"
1806
  },
1807
  "bin": [
1808
  "scripts/release"
1835
  "description": "Provides a self:update command for Symfony Console applications.",
1836
  "support": {
1837
  "issues": "https://github.com/consolidation/self-update/issues",
1838
+ "source": "https://github.com/consolidation/self-update/tree/2.0.3"
1839
  },
1840
+ "time": "2021-12-30T19:08:32+00:00"
1841
  },
1842
  {
1843
  "name": "dealerdirect/phpcodesniffer-composer-installer",
2015
  },
2016
  "time": "2019-09-10T21:36:25+00:00"
2017
  },
2018
+ {
2019
+ "name": "dnoegel/php-xdg-base-dir",
2020
+ "version": "v0.1.1",
2021
+ "source": {
2022
+ "type": "git",
2023
+ "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
2024
+ "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
2025
+ },
2026
+ "dist": {
2027
+ "type": "zip",
2028
+ "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
2029
+ "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
2030
+ "shasum": ""
2031
+ },
2032
+ "require": {
2033
+ "php": ">=5.3.2"
2034
+ },
2035
+ "require-dev": {
2036
+ "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
2037
+ },
2038
+ "type": "library",
2039
+ "autoload": {
2040
+ "psr-4": {
2041
+ "XdgBaseDir\\": "src/"
2042
+ }
2043
+ },
2044
+ "notification-url": "https://packagist.org/downloads/",
2045
+ "license": [
2046
+ "MIT"
2047
+ ],
2048
+ "description": "implementation of xdg base directory specification for php",
2049
+ "support": {
2050
+ "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
2051
+ "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
2052
+ },
2053
+ "time": "2019-12-04T15:06:13+00:00"
2054
+ },
2055
+ {
2056
+ "name": "doctrine/annotations",
2057
+ "version": "1.13.2",
2058
+ "source": {
2059
+ "type": "git",
2060
+ "url": "https://github.com/doctrine/annotations.git",
2061
+ "reference": "5b668aef16090008790395c02c893b1ba13f7e08"
2062
+ },
2063
+ "dist": {
2064
+ "type": "zip",
2065
+ "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08",
2066
+ "reference": "5b668aef16090008790395c02c893b1ba13f7e08",
2067
+ "shasum": ""
2068
+ },
2069
+ "require": {
2070
+ "doctrine/lexer": "1.*",
2071
+ "ext-tokenizer": "*",
2072
+ "php": "^7.1 || ^8.0",
2073
+ "psr/cache": "^1 || ^2 || ^3"
2074
+ },
2075
+ "require-dev": {
2076
+ "doctrine/cache": "^1.11 || ^2.0",
2077
+ "doctrine/coding-standard": "^6.0 || ^8.1",
2078
+ "phpstan/phpstan": "^0.12.20",
2079
+ "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5",
2080
+ "symfony/cache": "^4.4 || ^5.2"
2081
+ },
2082
+ "type": "library",
2083
+ "autoload": {
2084
+ "psr-4": {
2085
+ "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
2086
+ }
2087
+ },
2088
+ "notification-url": "https://packagist.org/downloads/",
2089
+ "license": [
2090
+ "MIT"
2091
+ ],
2092
+ "authors": [
2093
+ {
2094
+ "name": "Guilherme Blanco",
2095
+ "email": "guilhermeblanco@gmail.com"
2096
+ },
2097
+ {
2098
+ "name": "Roman Borschel",
2099
+ "email": "roman@code-factory.org"
2100
+ },
2101
+ {
2102
+ "name": "Benjamin Eberlei",
2103
+ "email": "kontakt@beberlei.de"
2104
+ },
2105
+ {
2106
+ "name": "Jonathan Wage",
2107
+ "email": "jonwage@gmail.com"
2108
+ },
2109
+ {
2110
+ "name": "Johannes Schmitt",
2111
+ "email": "schmittjoh@gmail.com"
2112
+ }
2113
+ ],
2114
+ "description": "Docblock Annotations Parser",
2115
+ "homepage": "https://www.doctrine-project.org/projects/annotations.html",
2116
+ "keywords": [
2117
+ "annotations",
2118
+ "docblock",
2119
+ "parser"
2120
+ ],
2121
+ "support": {
2122
+ "issues": "https://github.com/doctrine/annotations/issues",
2123
+ "source": "https://github.com/doctrine/annotations/tree/1.13.2"
2124
+ },
2125
+ "time": "2021-08-05T19:00:23+00:00"
2126
+ },
2127
  {
2128
  "name": "doctrine/inflector",
2129
  "version": "2.0.4",
2265
  "instantiate"
2266
  ],
2267
  "support": {
2268
+ "issues": "https://github.com/doctrine/instantiator/issues",
2269
+ "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
2270
+ },
2271
+ "funding": [
2272
+ {
2273
+ "url": "https://www.doctrine-project.org/sponsorship.html",
2274
+ "type": "custom"
2275
+ },
2276
+ {
2277
+ "url": "https://www.patreon.com/phpdoctrine",
2278
+ "type": "patreon"
2279
+ },
2280
+ {
2281
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
2282
+ "type": "tidelift"
2283
+ }
2284
+ ],
2285
+ "time": "2020-11-10T18:47:58+00:00"
2286
+ },
2287
+ {
2288
+ "name": "doctrine/lexer",
2289
+ "version": "1.2.1",
2290
+ "source": {
2291
+ "type": "git",
2292
+ "url": "https://github.com/doctrine/lexer.git",
2293
+ "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
2294
+ },
2295
+ "dist": {
2296
+ "type": "zip",
2297
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
2298
+ "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
2299
+ "shasum": ""
2300
+ },
2301
+ "require": {
2302
+ "php": "^7.2 || ^8.0"
2303
+ },
2304
+ "require-dev": {
2305
+ "doctrine/coding-standard": "^6.0",
2306
+ "phpstan/phpstan": "^0.11.8",
2307
+ "phpunit/phpunit": "^8.2"
2308
+ },
2309
+ "type": "library",
2310
+ "extra": {
2311
+ "branch-alias": {
2312
+ "dev-master": "1.2.x-dev"
2313
+ }
2314
+ },
2315
+ "autoload": {
2316
+ "psr-4": {
2317
+ "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
2318
+ }
2319
+ },
2320
+ "notification-url": "https://packagist.org/downloads/",
2321
+ "license": [
2322
+ "MIT"
2323
+ ],
2324
+ "authors": [
2325
+ {
2326
+ "name": "Guilherme Blanco",
2327
+ "email": "guilhermeblanco@gmail.com"
2328
+ },
2329
+ {
2330
+ "name": "Roman Borschel",
2331
+ "email": "roman@code-factory.org"
2332
+ },
2333
+ {
2334
+ "name": "Johannes Schmitt",
2335
+ "email": "schmittjoh@gmail.com"
2336
+ }
2337
+ ],
2338
+ "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
2339
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
2340
+ "keywords": [
2341
+ "annotations",
2342
+ "docblock",
2343
+ "lexer",
2344
+ "parser",
2345
+ "php"
2346
+ ],
2347
+ "support": {
2348
+ "issues": "https://github.com/doctrine/lexer/issues",
2349
+ "source": "https://github.com/doctrine/lexer/tree/1.2.1"
2350
+ },
2351
+ "funding": [
2352
+ {
2353
+ "url": "https://www.doctrine-project.org/sponsorship.html",
2354
+ "type": "custom"
2355
+ },
2356
+ {
2357
+ "url": "https://www.patreon.com/phpdoctrine",
2358
+ "type": "patreon"
2359
+ },
2360
+ {
2361
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
2362
+ "type": "tidelift"
2363
+ }
2364
+ ],
2365
+ "time": "2020-05-25T17:44:05+00:00"
2366
+ },
2367
+ {
2368
+ "name": "felixfbecker/advanced-json-rpc",
2369
+ "version": "v3.2.1",
2370
+ "source": {
2371
+ "type": "git",
2372
+ "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
2373
+ "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447"
2374
+ },
2375
+ "dist": {
2376
+ "type": "zip",
2377
+ "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447",
2378
+ "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447",
2379
+ "shasum": ""
2380
+ },
2381
+ "require": {
2382
+ "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
2383
+ "php": "^7.1 || ^8.0",
2384
+ "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
2385
+ },
2386
+ "require-dev": {
2387
+ "phpunit/phpunit": "^7.0 || ^8.0"
2388
+ },
2389
+ "type": "library",
2390
+ "autoload": {
2391
+ "psr-4": {
2392
+ "AdvancedJsonRpc\\": "lib/"
2393
+ }
2394
+ },
2395
+ "notification-url": "https://packagist.org/downloads/",
2396
+ "license": [
2397
+ "ISC"
2398
+ ],
2399
+ "authors": [
2400
+ {
2401
+ "name": "Felix Becker",
2402
+ "email": "felix.b@outlook.com"
2403
+ }
2404
+ ],
2405
+ "description": "A more advanced JSONRPC implementation",
2406
+ "support": {
2407
+ "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
2408
+ "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1"
2409
+ },
2410
+ "time": "2021-06-11T22:34:44+00:00"
2411
+ },
2412
+ {
2413
+ "name": "felixfbecker/language-server-protocol",
2414
+ "version": "1.5.1",
2415
+ "source": {
2416
+ "type": "git",
2417
+ "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
2418
+ "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730"
2419
+ },
2420
+ "dist": {
2421
+ "type": "zip",
2422
+ "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
2423
+ "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
2424
+ "shasum": ""
2425
+ },
2426
+ "require": {
2427
+ "php": ">=7.1"
2428
+ },
2429
+ "require-dev": {
2430
+ "phpstan/phpstan": "*",
2431
+ "squizlabs/php_codesniffer": "^3.1",
2432
+ "vimeo/psalm": "^4.0"
2433
+ },
2434
+ "type": "library",
2435
+ "extra": {
2436
+ "branch-alias": {
2437
+ "dev-master": "1.x-dev"
2438
+ }
2439
+ },
2440
+ "autoload": {
2441
+ "psr-4": {
2442
+ "LanguageServerProtocol\\": "src/"
2443
+ }
2444
+ },
2445
+ "notification-url": "https://packagist.org/downloads/",
2446
+ "license": [
2447
+ "ISC"
2448
+ ],
2449
+ "authors": [
2450
+ {
2451
+ "name": "Felix Becker",
2452
+ "email": "felix.b@outlook.com"
2453
+ }
2454
+ ],
2455
+ "description": "PHP classes for the Language Server Protocol",
2456
+ "keywords": [
2457
+ "language",
2458
+ "microsoft",
2459
+ "php",
2460
+ "server"
2461
+ ],
2462
+ "support": {
2463
+ "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
2464
+ "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1"
2465
+ },
2466
+ "time": "2021-02-22T14:02:09+00:00"
2467
+ },
2468
+ {
2469
+ "name": "friendsofphp/php-cs-fixer",
2470
+ "version": "v3.4.0",
2471
+ "source": {
2472
+ "type": "git",
2473
+ "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
2474
+ "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad"
2475
+ },
2476
+ "dist": {
2477
+ "type": "zip",
2478
+ "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/47177af1cfb9dab5d1cc4daf91b7179c2efe7fad",
2479
+ "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad",
2480
+ "shasum": ""
2481
+ },
2482
+ "require": {
2483
+ "composer/semver": "^3.2",
2484
+ "composer/xdebug-handler": "^2.0",
2485
+ "doctrine/annotations": "^1.12",
2486
+ "ext-json": "*",
2487
+ "ext-tokenizer": "*",
2488
+ "php": "^7.2.5 || ^8.0",
2489
+ "php-cs-fixer/diff": "^2.0",
2490
+ "symfony/console": "^4.4.20 || ^5.1.3 || ^6.0",
2491
+ "symfony/event-dispatcher": "^4.4.20 || ^5.0 || ^6.0",
2492
+ "symfony/filesystem": "^4.4.20 || ^5.0 || ^6.0",
2493
+ "symfony/finder": "^4.4.20 || ^5.0 || ^6.0",
2494
+ "symfony/options-resolver": "^4.4.20 || ^5.0 || ^6.0",
2495
+ "symfony/polyfill-mbstring": "^1.23",
2496
+ "symfony/polyfill-php80": "^1.23",
2497
+ "symfony/polyfill-php81": "^1.23",
2498
+ "symfony/process": "^4.4.20 || ^5.0 || ^6.0",
2499
+ "symfony/stopwatch": "^4.4.20 || ^5.0 || ^6.0"
2500
+ },
2501
+ "require-dev": {
2502
+ "justinrainbow/json-schema": "^5.2",
2503
+ "keradus/cli-executor": "^1.5",
2504
+ "mikey179/vfsstream": "^1.6.8",
2505
+ "php-coveralls/php-coveralls": "^2.5.2",
2506
+ "php-cs-fixer/accessible-object": "^1.1",
2507
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2",
2508
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1",
2509
+ "phpspec/prophecy": "^1.15",
2510
+ "phpspec/prophecy-phpunit": "^1.1 || ^2.0",
2511
+ "phpunit/phpunit": "^8.5.21 || ^9.5",
2512
+ "phpunitgoodpractices/polyfill": "^1.5",
2513
+ "phpunitgoodpractices/traits": "^1.9.1",
2514
+ "symfony/phpunit-bridge": "^5.2.4 || ^6.0",
2515
+ "symfony/yaml": "^4.4.20 || ^5.0 || ^6.0"
2516
+ },
2517
+ "suggest": {
2518
+ "ext-dom": "For handling output formats in XML",
2519
+ "ext-mbstring": "For handling non-UTF8 characters."
2520
+ },
2521
+ "bin": [
2522
+ "php-cs-fixer"
2523
+ ],
2524
+ "type": "application",
2525
+ "autoload": {
2526
+ "psr-4": {
2527
+ "PhpCsFixer\\": "src/"
2528
+ }
2529
+ },
2530
+ "notification-url": "https://packagist.org/downloads/",
2531
+ "license": [
2532
+ "MIT"
2533
+ ],
2534
+ "authors": [
2535
+ {
2536
+ "name": "Fabien Potencier",
2537
+ "email": "fabien@symfony.com"
2538
+ },
2539
+ {
2540
+ "name": "Dariusz Rumiński",
2541
+ "email": "dariusz.ruminski@gmail.com"
2542
+ }
2543
+ ],
2544
+ "description": "A tool to automatically fix PHP code style",
2545
+ "support": {
2546
+ "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
2547
+ "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.4.0"
2548
  },
2549
  "funding": [
2550
  {
2551
+ "url": "https://github.com/keradus",
2552
+ "type": "github"
 
 
 
 
 
 
 
 
2553
  }
2554
  ],
2555
+ "time": "2021-12-11T16:25:08+00:00"
2556
  },
2557
  {
2558
  "name": "gettext/gettext",
2762
  },
2763
  {
2764
  "name": "guzzlehttp/guzzle",
2765
+ "version": "7.4.1",
2766
  "source": {
2767
  "type": "git",
2768
  "url": "https://github.com/guzzle/guzzle.git",
2769
+ "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79"
2770
  },
2771
  "dist": {
2772
  "type": "zip",
2773
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79",
2774
+ "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79",
2775
  "shasum": ""
2776
  },
2777
  "require": {
2780
  "guzzlehttp/psr7": "^1.8.3 || ^2.1",
2781
  "php": "^7.2.5 || ^8.0",
2782
  "psr/http-client": "^1.0",
2783
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
2784
  },
2785
  "provide": {
2786
  "psr/http-client-implementation": "1.0"
2866
  ],
2867
  "support": {
2868
  "issues": "https://github.com/guzzle/guzzle/issues",
2869
+ "source": "https://github.com/guzzle/guzzle/tree/7.4.1"
2870
  },
2871
  "funding": [
2872
  {
2882
  "type": "tidelift"
2883
  }
2884
  ],
2885
+ "time": "2021-12-06T18:43:05+00:00"
2886
  },
2887
  {
2888
  "name": "guzzlehttp/promises",
3085
  },
3086
  {
3087
  "name": "illuminate/collections",
3088
+ "version": "v8.78.1",
3089
  "source": {
3090
  "type": "git",
3091
  "url": "https://github.com/illuminate/collections.git",
3092
+ "reference": "e8c1cbd7a4cc8fb0e6a8978a55ef6d49c90bea59"
3093
  },
3094
  "dist": {
3095
  "type": "zip",
3096
+ "url": "https://api.github.com/repos/illuminate/collections/zipball/e8c1cbd7a4cc8fb0e6a8978a55ef6d49c90bea59",
3097
+ "reference": "e8c1cbd7a4cc8fb0e6a8978a55ef6d49c90bea59",
3098
  "shasum": ""
3099
  },
3100
  "require": {
3135
  "issues": "https://github.com/laravel/framework/issues",
3136
  "source": "https://github.com/laravel/framework"
3137
  },
3138
+ "time": "2022-01-04T18:54:15+00:00"
3139
  },
3140
  {
3141
  "name": "illuminate/contracts",
3142
+ "version": "v8.78.1",
3143
  "source": {
3144
  "type": "git",
3145
  "url": "https://github.com/illuminate/contracts.git",
3146
+ "reference": "9baa9f781071e67d7b171775bd3be7ead13ddd29"
3147
  },
3148
  "dist": {
3149
  "type": "zip",
3150
+ "url": "https://api.github.com/repos/illuminate/contracts/zipball/9baa9f781071e67d7b171775bd3be7ead13ddd29",
3151
+ "reference": "9baa9f781071e67d7b171775bd3be7ead13ddd29",
3152
  "shasum": ""
3153
  },
3154
  "require": {
3183
  "issues": "https://github.com/laravel/framework/issues",
3184
  "source": "https://github.com/laravel/framework"
3185
  },
3186
+ "time": "2021-12-14T14:40:44+00:00"
3187
  },
3188
  {
3189
  "name": "illuminate/macroable",
3190
+ "version": "v8.78.1",
3191
  "source": {
3192
  "type": "git",
3193
  "url": "https://github.com/illuminate/macroable.git",
3233
  },
3234
  {
3235
  "name": "illuminate/support",
3236
+ "version": "v8.78.1",
3237
  "source": {
3238
  "type": "git",
3239
  "url": "https://github.com/illuminate/support.git",
3240
+ "reference": "0c2a4db0c60b33d30af0ae6bc2b31159d6c49361"
3241
  },
3242
  "dist": {
3243
  "type": "zip",
3244
+ "url": "https://api.github.com/repos/illuminate/support/zipball/0c2a4db0c60b33d30af0ae6bc2b31159d6c49361",
3245
+ "reference": "0c2a4db0c60b33d30af0ae6bc2b31159d6c49361",
3246
  "shasum": ""
3247
  },
3248
  "require": {
3297
  "issues": "https://github.com/laravel/framework/issues",
3298
  "source": "https://github.com/laravel/framework"
3299
  },
3300
+ "time": "2022-01-04T16:02:54+00:00"
3301
  },
3302
  {
3303
  "name": "justinrainbow/json-schema",
3450
  },
3451
  {
3452
  "name": "lucatume/wp-browser",
3453
+ "version": "3.0.18",
3454
  "source": {
3455
  "type": "git",
3456
  "url": "https://github.com/lucatume/wp-browser.git",
3457
+ "reference": "eff4b188a7f651ab857cbb452d49235eedbc55f1"
3458
  },
3459
  "dist": {
3460
  "type": "zip",
3461
+ "url": "https://api.github.com/repos/lucatume/wp-browser/zipball/eff4b188a7f651ab857cbb452d49235eedbc55f1",
3462
+ "reference": "eff4b188a7f651ab857cbb452d49235eedbc55f1",
3463
  "shasum": ""
3464
  },
3465
  "require": {
3477
  "wp-cli/wp-cli": ">=2.0 <3.0.0",
3478
  "zordius/lightncandy": "^1.2"
3479
  },
3480
+ "conflict": {
3481
+ "codeception/module-asserts": ">=2.0",
3482
+ "codeception/module-cli": ">=2.0",
3483
+ "codeception/module-db": ">=2.0",
3484
+ "codeception/module-filesystem": ">=2.0",
3485
+ "codeception/module-phpbrowser": ">=2.0",
3486
+ "codeception/module-webdriver": ">=2.0",
3487
+ "codeception/util-universalframework": ">=2.0"
3488
+ },
3489
  "require-dev": {
3490
  "erusev/parsedown": "^1.7",
3491
  "gumlet/php-image-resize": "^1.6",
3496
  "wp-cli/wp-cli-bundle": "*"
3497
  },
3498
  "suggest": {
3499
+ "codeception/module-asserts:^1.0": "Codeception 4.0 compatibility.",
3500
+ "codeception/module-cli:^1.0": "Codeception 4.0 compatibility; required by the WPCLI module.",
3501
+ "codeception/module-db:^1.0": "Codeception 4.0 compatibility; required by the WPDb module, PHP 5.6 compatible version.",
3502
+ "codeception/module-filesystem:^1.0": "Codeception 4.0 compatibility; required by the WPFilesystem module.",
3503
+ "codeception/module-phpbrowser:^1.0": "Codeception 4.0 compatibility; required by the WPBrowser module.",
3504
+ "codeception/module-webdriver:^1.0": "Codeception 4.0 compatibility; required by the WPWebDriver module.",
3505
+ "codeception/util-universalframework:^1.0": "Codeception 4.0 compatibility; required by the WordPress framework module.",
3506
  "gumlet/php-image-resize": "To handle runtime image modification in the WPDb::haveAttachmentInDatabase method.",
3507
  "vlucas/phpdotenv:^4.0": "To manage more complex environment file based configuration of the suites."
3508
  },
3540
  ],
3541
  "support": {
3542
  "issues": "https://github.com/lucatume/wp-browser/issues",
3543
+ "source": "https://github.com/lucatume/wp-browser/tree/3.0.18"
3544
  },
3545
  "funding": [
3546
  {
3548
  "type": "github"
3549
  }
3550
  ],
3551
+ "time": "2022-01-05T09:25:36+00:00"
3552
  },
3553
  {
3554
  "name": "mck89/peast",
3555
+ "version": "v1.13.10",
3556
  "source": {
3557
  "type": "git",
3558
  "url": "https://github.com/mck89/peast.git",
3559
+ "reference": "05ad3e6f66e6b35aa2247ef69b1a0c23c45a567b"
3560
  },
3561
  "dist": {
3562
  "type": "zip",
3563
+ "url": "https://api.github.com/repos/mck89/peast/zipball/05ad3e6f66e6b35aa2247ef69b1a0c23c45a567b",
3564
+ "reference": "05ad3e6f66e6b35aa2247ef69b1a0c23c45a567b",
3565
  "shasum": ""
3566
  },
3567
  "require": {
3568
+ "ext-mbstring": "*",
3569
  "php": ">=5.4.0"
3570
  },
3571
  "require-dev": {
3574
  "type": "library",
3575
  "extra": {
3576
  "branch-alias": {
3577
+ "dev-master": "1.13.10-dev"
3578
  }
3579
  },
3580
  "autoload": {
3596
  "description": "Peast is PHP library that generates AST for JavaScript code",
3597
  "support": {
3598
  "issues": "https://github.com/mck89/peast/issues",
3599
+ "source": "https://github.com/mck89/peast/tree/v1.13.10"
3600
  },
3601
+ "time": "2021-12-24T10:38:18+00:00"
3602
  },
3603
  {
3604
  "name": "mikehaertl/php-shellcommand",
3716
  },
3717
  {
3718
  "name": "mustache/mustache",
3719
+ "version": "v2.14.0",
3720
  "source": {
3721
  "type": "git",
3722
  "url": "https://github.com/bobthecow/mustache.php.git",
3723
+ "reference": "4e2724dd40ae9499a55e7db7df82665be0ab7e34"
3724
  },
3725
  "dist": {
3726
  "type": "zip",
3727
+ "url": "https://api.github.com/repos/bobthecow/mustache.php/zipball/4e2724dd40ae9499a55e7db7df82665be0ab7e34",
3728
+ "reference": "4e2724dd40ae9499a55e7db7df82665be0ab7e34",
3729
  "shasum": ""
3730
  },
3731
  "require": {
3760
  ],
3761
  "support": {
3762
  "issues": "https://github.com/bobthecow/mustache.php/issues",
3763
+ "source": "https://github.com/bobthecow/mustache.php/tree/v2.14.0"
3764
  },
3765
+ "time": "2021-12-14T14:42:17+00:00"
3766
  },
3767
  {
3768
  "name": "myclabs/deep-copy",
3934
  },
3935
  {
3936
  "name": "nesbot/carbon",
3937
+ "version": "2.55.2",
3938
  "source": {
3939
  "type": "git",
3940
  "url": "https://github.com/briannesbitt/Carbon.git",
3941
+ "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2"
3942
  },
3943
  "dist": {
3944
  "type": "zip",
3945
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8c2a18ce3e67c34efc1b29f64fe61304368259a2",
3946
+ "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2",
3947
  "shasum": ""
3948
  },
3949
  "require": {
3951
  "php": "^7.1.8 || ^8.0",
3952
  "symfony/polyfill-mbstring": "^1.0",
3953
  "symfony/polyfill-php80": "^1.16",
3954
+ "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
3955
  },
3956
  "require-dev": {
3957
  "doctrine/dbal": "^2.0 || ^3.0",
4012
  "time"
4013
  ],
4014
  "support": {
4015
+ "docs": "https://carbon.nesbot.com/docs",
4016
  "issues": "https://github.com/briannesbitt/Carbon/issues",
4017
  "source": "https://github.com/briannesbitt/Carbon"
4018
  },
4026
  "type": "tidelift"
4027
  }
4028
  ],
4029
+ "time": "2021-12-03T14:59:52+00:00"
4030
+ },
4031
+ {
4032
+ "name": "netresearch/jsonmapper",
4033
+ "version": "v4.0.0",
4034
+ "source": {
4035
+ "type": "git",
4036
+ "url": "https://github.com/cweiske/jsonmapper.git",
4037
+ "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d"
4038
+ },
4039
+ "dist": {
4040
+ "type": "zip",
4041
+ "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d",
4042
+ "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d",
4043
+ "shasum": ""
4044
+ },
4045
+ "require": {
4046
+ "ext-json": "*",
4047
+ "ext-pcre": "*",
4048
+ "ext-reflection": "*",
4049
+ "ext-spl": "*",
4050
+ "php": ">=7.1"
4051
+ },
4052
+ "require-dev": {
4053
+ "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0",
4054
+ "squizlabs/php_codesniffer": "~3.5"
4055
+ },
4056
+ "type": "library",
4057
+ "autoload": {
4058
+ "psr-0": {
4059
+ "JsonMapper": "src/"
4060
+ }
4061
+ },
4062
+ "notification-url": "https://packagist.org/downloads/",
4063
+ "license": [
4064
+ "OSL-3.0"
4065
+ ],
4066
+ "authors": [
4067
+ {
4068
+ "name": "Christian Weiske",
4069
+ "email": "cweiske@cweiske.de",
4070
+ "homepage": "http://github.com/cweiske/jsonmapper/",
4071
+ "role": "Developer"
4072
+ }
4073
+ ],
4074
+ "description": "Map nested JSON structures onto PHP classes",
4075
+ "support": {
4076
+ "email": "cweiske@cweiske.de",
4077
+ "issues": "https://github.com/cweiske/jsonmapper/issues",
4078
+ "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0"
4079
+ },
4080
+ "time": "2020-12-01T19:48:11+00:00"
4081
+ },
4082
+ {
4083
+ "name": "nikic/php-parser",
4084
+ "version": "v4.13.2",
4085
+ "source": {
4086
+ "type": "git",
4087
+ "url": "https://github.com/nikic/PHP-Parser.git",
4088
+ "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
4089
+ },
4090
+ "dist": {
4091
+ "type": "zip",
4092
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
4093
+ "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
4094
+ "shasum": ""
4095
+ },
4096
+ "require": {
4097
+ "ext-tokenizer": "*",
4098
+ "php": ">=7.0"
4099
+ },
4100
+ "require-dev": {
4101
+ "ircmaxell/php-yacc": "^0.0.7",
4102
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
4103
+ },
4104
+ "bin": [
4105
+ "bin/php-parse"
4106
+ ],
4107
+ "type": "library",
4108
+ "extra": {
4109
+ "branch-alias": {
4110
+ "dev-master": "4.9-dev"
4111
+ }
4112
+ },
4113
+ "autoload": {
4114
+ "psr-4": {
4115
+ "PhpParser\\": "lib/PhpParser"
4116
+ }
4117
+ },
4118
+ "notification-url": "https://packagist.org/downloads/",
4119
+ "license": [
4120
+ "BSD-3-Clause"
4121
+ ],
4122
+ "authors": [
4123
+ {
4124
+ "name": "Nikita Popov"
4125
+ }
4126
+ ],
4127
+ "description": "A PHP parser written in PHP",
4128
+ "keywords": [
4129
+ "parser",
4130
+ "php"
4131
+ ],
4132
+ "support": {
4133
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
4134
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
4135
+ },
4136
+ "time": "2021-11-30T19:35:32+00:00"
4137
+ },
4138
+ {
4139
+ "name": "openlss/lib-array2xml",
4140
+ "version": "1.0.0",
4141
+ "source": {
4142
+ "type": "git",
4143
+ "url": "https://github.com/nullivex/lib-array2xml.git",
4144
+ "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90"
4145
+ },
4146
+ "dist": {
4147
+ "type": "zip",
4148
+ "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
4149
+ "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
4150
+ "shasum": ""
4151
+ },
4152
+ "require": {
4153
+ "php": ">=5.3.2"
4154
+ },
4155
+ "type": "library",
4156
+ "autoload": {
4157
+ "psr-0": {
4158
+ "LSS": ""
4159
+ }
4160
+ },
4161
+ "notification-url": "https://packagist.org/downloads/",
4162
+ "license": [
4163
+ "Apache-2.0"
4164
+ ],
4165
+ "authors": [
4166
+ {
4167
+ "name": "Bryan Tong",
4168
+ "email": "bryan@nullivex.com",
4169
+ "homepage": "https://www.nullivex.com"
4170
+ },
4171
+ {
4172
+ "name": "Tony Butler",
4173
+ "email": "spudz76@gmail.com",
4174
+ "homepage": "https://www.nullivex.com"
4175
+ }
4176
+ ],
4177
+ "description": "Array2XML conversion library credit to lalit.org",
4178
+ "homepage": "https://www.nullivex.com",
4179
+ "keywords": [
4180
+ "array",
4181
+ "array conversion",
4182
+ "xml",
4183
+ "xml conversion"
4184
+ ],
4185
+ "support": {
4186
+ "issues": "https://github.com/nullivex/lib-array2xml/issues",
4187
+ "source": "https://github.com/nullivex/lib-array2xml/tree/master"
4188
+ },
4189
+ "time": "2019-03-29T20:06:56+00:00"
4190
  },
4191
  {
4192
  "name": "overtrue/phplint",
4475
  },
4476
  "time": "2018-07-08T19:19:57+00:00"
4477
  },
4478
+ {
4479
+ "name": "php-cs-fixer/diff",
4480
+ "version": "v2.0.2",
4481
+ "source": {
4482
+ "type": "git",
4483
+ "url": "https://github.com/PHP-CS-Fixer/diff.git",
4484
+ "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3"
4485
+ },
4486
+ "dist": {
4487
+ "type": "zip",
4488
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3",
4489
+ "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3",
4490
+ "shasum": ""
4491
+ },
4492
+ "require": {
4493
+ "php": "^5.6 || ^7.0 || ^8.0"
4494
+ },
4495
+ "require-dev": {
4496
+ "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0",
4497
+ "symfony/process": "^3.3"
4498
+ },
4499
+ "type": "library",
4500
+ "autoload": {
4501
+ "classmap": [
4502
+ "src/"
4503
+ ]
4504
+ },
4505
+ "notification-url": "https://packagist.org/downloads/",
4506
+ "license": [
4507
+ "BSD-3-Clause"
4508
+ ],
4509
+ "authors": [
4510
+ {
4511
+ "name": "Sebastian Bergmann",
4512
+ "email": "sebastian@phpunit.de"
4513
+ },
4514
+ {
4515
+ "name": "Kore Nordmann",
4516
+ "email": "mail@kore-nordmann.de"
4517
+ }
4518
+ ],
4519
+ "description": "sebastian/diff v3 backport support for PHP 5.6+",
4520
+ "homepage": "https://github.com/PHP-CS-Fixer",
4521
+ "keywords": [
4522
+ "diff"
4523
+ ],
4524
+ "support": {
4525
+ "issues": "https://github.com/PHP-CS-Fixer/diff/issues",
4526
+ "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2"
4527
+ },
4528
+ "time": "2020-10-14T08:32:19+00:00"
4529
+ },
4530
  {
4531
  "name": "php-webdriver/webdriver",
4532
  "version": "1.12.0",
4766
  },
4767
  {
4768
  "name": "phpdocumentor/type-resolver",
4769
+ "version": "1.6.0",
4770
  "source": {
4771
  "type": "git",
4772
  "url": "https://github.com/phpDocumentor/TypeResolver.git",
4773
+ "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
4774
  },
4775
  "dist": {
4776
  "type": "zip",
4777
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
4778
+ "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
4779
  "shasum": ""
4780
  },
4781
  "require": {
4810
  "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
4811
  "support": {
4812
  "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
4813
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
4814
  },
4815
+ "time": "2022-01-04T19:58:01+00:00"
4816
  },
4817
  {
4818
  "name": "phpmd/phpmd",
4819
+ "version": "2.11.1",
4820
  "source": {
4821
  "type": "git",
4822
  "url": "https://github.com/phpmd/phpmd.git",
4823
+ "reference": "08b60a2eb7e14c23f46ff8865b510ae08b75d0fd"
4824
  },
4825
  "dist": {
4826
  "type": "zip",
4827
+ "url": "https://api.github.com/repos/phpmd/phpmd/zipball/08b60a2eb7e14c23f46ff8865b510ae08b75d0fd",
4828
+ "reference": "08b60a2eb7e14c23f46ff8865b510ae08b75d0fd",
4829
  "shasum": ""
4830
  },
4831
  "require": {
4887
  "support": {
4888
  "irc": "irc://irc.freenode.org/phpmd",
4889
  "issues": "https://github.com/phpmd/phpmd/issues",
4890
+ "source": "https://github.com/phpmd/phpmd/tree/2.11.1"
4891
  },
4892
  "funding": [
4893
  {
4895
  "type": "tidelift"
4896
  }
4897
  ],
4898
+ "time": "2021-12-17T11:25:43+00:00"
4899
  },
4900
  {
4901
  "name": "phpspec/prophecy",
4902
+ "version": "v1.15.0",
4903
  "source": {
4904
  "type": "git",
4905
  "url": "https://github.com/phpspec/prophecy.git",
4906
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
4907
  },
4908
  "dist": {
4909
  "type": "zip",
4910
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
4911
+ "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
4912
  "shasum": ""
4913
  },
4914
  "require": {
4960
  ],
4961
  "support": {
4962
  "issues": "https://github.com/phpspec/prophecy/issues",
4963
+ "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
4964
+ },
4965
+ "time": "2021-12-08T12:19:24+00:00"
4966
+ },
4967
+ {
4968
+ "name": "phpstan/phpstan",
4969
+ "version": "1.3.1",
4970
+ "source": {
4971
+ "type": "git",
4972
+ "url": "https://github.com/phpstan/phpstan.git",
4973
+ "reference": "c3e7a5837829b3cd5907b895da73a4da084a9f8f"
4974
+ },
4975
+ "dist": {
4976
+ "type": "zip",
4977
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c3e7a5837829b3cd5907b895da73a4da084a9f8f",
4978
+ "reference": "c3e7a5837829b3cd5907b895da73a4da084a9f8f",
4979
+ "shasum": ""
4980
+ },
4981
+ "require": {
4982
+ "php": "^7.1|^8.0"
4983
+ },
4984
+ "conflict": {
4985
+ "phpstan/phpstan-shim": "*"
4986
+ },
4987
+ "bin": [
4988
+ "phpstan",
4989
+ "phpstan.phar"
4990
+ ],
4991
+ "type": "library",
4992
+ "extra": {
4993
+ "branch-alias": {
4994
+ "dev-master": "1.3-dev"
4995
+ }
4996
+ },
4997
+ "autoload": {
4998
+ "files": [
4999
+ "bootstrap.php"
5000
+ ]
5001
+ },
5002
+ "notification-url": "https://packagist.org/downloads/",
5003
+ "license": [
5004
+ "MIT"
5005
+ ],
5006
+ "description": "PHPStan - PHP Static Analysis Tool",
5007
+ "support": {
5008
+ "issues": "https://github.com/phpstan/phpstan/issues",
5009
+ "source": "https://github.com/phpstan/phpstan/tree/1.3.1"
5010
  },
5011
+ "funding": [
5012
+ {
5013
+ "url": "https://github.com/ondrejmirtes",
5014
+ "type": "github"
5015
+ },
5016
+ {
5017
+ "url": "https://github.com/phpstan",
5018
+ "type": "github"
5019
+ },
5020
+ {
5021
+ "url": "https://www.patreon.com/phpstan",
5022
+ "type": "patreon"
5023
+ },
5024
+ {
5025
+ "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
5026
+ "type": "tidelift"
5027
+ }
5028
+ ],
5029
+ "time": "2022-01-04T17:12:37+00:00"
5030
  },
5031
  {
5032
  "name": "phpunit/php-code-coverage",
5104
  },
5105
  {
5106
  "name": "phpunit/php-file-iterator",
5107
+ "version": "3.0.6",
5108
  "source": {
5109
  "type": "git",
5110
  "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
5111
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
5112
  },
5113
  "dist": {
5114
  "type": "zip",
5115
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
5116
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
5117
  "shasum": ""
5118
  },
5119
  "require": {
5152
  ],
5153
  "support": {
5154
  "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
5155
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
5156
  },
5157
  "funding": [
5158
  {
5160
  "type": "github"
5161
  }
5162
  ],
5163
+ "time": "2021-12-02T12:48:52+00:00"
5164
  },
5165
  {
5166
  "name": "phpunit/php-invoker",
5482
  "role": "lead"
5483
  }
5484
  ],
5485
+ "description": "The PHP Unit Testing framework.",
5486
+ "homepage": "https://phpunit.de/",
5487
+ "keywords": [
5488
+ "phpunit",
5489
+ "testing",
5490
+ "xunit"
5491
+ ],
5492
+ "support": {
5493
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
5494
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.1.5"
5495
+ },
5496
+ "funding": [
5497
+ {
5498
+ "url": "https://phpunit.de/donate.html",
5499
+ "type": "custom"
5500
+ },
5501
+ {
5502
+ "url": "https://github.com/sebastianbergmann",
5503
+ "type": "github"
5504
+ }
5505
+ ],
5506
+ "time": "2020-05-22T13:54:05+00:00"
5507
+ },
5508
+ {
5509
+ "name": "psr/cache",
5510
+ "version": "1.0.1",
5511
+ "source": {
5512
+ "type": "git",
5513
+ "url": "https://github.com/php-fig/cache.git",
5514
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
5515
+ },
5516
+ "dist": {
5517
+ "type": "zip",
5518
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
5519
+ "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
5520
+ "shasum": ""
5521
+ },
5522
+ "require": {
5523
+ "php": ">=5.3.0"
5524
+ },
5525
+ "type": "library",
5526
+ "extra": {
5527
+ "branch-alias": {
5528
+ "dev-master": "1.0.x-dev"
5529
+ }
5530
+ },
5531
+ "autoload": {
5532
+ "psr-4": {
5533
+ "Psr\\Cache\\": "src/"
5534
+ }
5535
+ },
5536
+ "notification-url": "https://packagist.org/downloads/",
5537
+ "license": [
5538
+ "MIT"
5539
+ ],
5540
+ "authors": [
5541
+ {
5542
+ "name": "PHP-FIG",
5543
+ "homepage": "http://www.php-fig.org/"
5544
+ }
5545
+ ],
5546
+ "description": "Common interface for caching libraries",
5547
  "keywords": [
5548
+ "cache",
5549
+ "psr",
5550
+ "psr-6"
5551
  ],
5552
  "support": {
5553
+ "source": "https://github.com/php-fig/cache/tree/master"
 
5554
  },
5555
+ "time": "2016-08-06T20:24:11+00:00"
 
 
 
 
 
 
 
 
 
 
5556
  },
5557
  {
5558
  "name": "psr/container",
7017
  },
7018
  {
7019
  "name": "squizlabs/php_codesniffer",
7020
+ "version": "3.6.2",
7021
  "source": {
7022
  "type": "git",
7023
  "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
7024
+ "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a"
7025
  },
7026
  "dist": {
7027
  "type": "zip",
7028
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a",
7029
+ "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a",
7030
  "shasum": ""
7031
  },
7032
  "require": {
7069
  "source": "https://github.com/squizlabs/PHP_CodeSniffer",
7070
  "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
7071
  },
7072
+ "time": "2021-12-12T21:44:58+00:00"
7073
  },
7074
  {
7075
  "name": "symfony/browser-kit",
7076
+ "version": "v5.4.2",
7077
  "source": {
7078
  "type": "git",
7079
  "url": "https://github.com/symfony/browser-kit.git",
7080
+ "reference": "1fb93b0aab42392aa0a742db205173b49afaf80f"
7081
  },
7082
  "dist": {
7083
  "type": "zip",
7084
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/1fb93b0aab42392aa0a742db205173b49afaf80f",
7085
+ "reference": "1fb93b0aab42392aa0a742db205173b49afaf80f",
7086
  "shasum": ""
7087
  },
7088
  "require": {
7125
  "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
7126
  "homepage": "https://symfony.com",
7127
  "support": {
7128
+ "source": "https://github.com/symfony/browser-kit/tree/v5.4.2"
7129
  },
7130
  "funding": [
7131
  {
7141
  "type": "tidelift"
7142
  }
7143
  ],
7144
+ "time": "2021-12-16T21:58:21+00:00"
7145
  },
7146
  {
7147
  "name": "symfony/config",
7148
+ "version": "v5.4.2",
7149
  "source": {
7150
  "type": "git",
7151
  "url": "https://github.com/symfony/config.git",
7152
+ "reference": "2e082dae50da563c639119b7b52347a2a3db4ba5"
7153
  },
7154
  "dist": {
7155
  "type": "zip",
7156
+ "url": "https://api.github.com/repos/symfony/config/zipball/2e082dae50da563c639119b7b52347a2a3db4ba5",
7157
+ "reference": "2e082dae50da563c639119b7b52347a2a3db4ba5",
7158
  "shasum": ""
7159
  },
7160
  "require": {
7204
  "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
7205
  "homepage": "https://symfony.com",
7206
  "support": {
7207
+ "source": "https://github.com/symfony/config/tree/v5.4.2"
7208
  },
7209
  "funding": [
7210
  {
7220
  "type": "tidelift"
7221
  }
7222
  ],
7223
+ "time": "2021-12-15T11:06:13+00:00"
7224
  },
7225
  {
7226
  "name": "symfony/console",
7227
+ "version": "v5.4.2",
7228
  "source": {
7229
  "type": "git",
7230
  "url": "https://github.com/symfony/console.git",
7231
+ "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e"
7232
  },
7233
  "dist": {
7234
  "type": "zip",
7235
+ "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e",
7236
+ "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e",
7237
  "shasum": ""
7238
  },
7239
  "require": {
7240
  "php": ">=7.2.5",
7241
+ "symfony/deprecation-contracts": "^2.1|^3",
7242
  "symfony/polyfill-mbstring": "~1.0",
7243
+ "symfony/polyfill-php73": "^1.9",
7244
+ "symfony/polyfill-php80": "^1.16",
7245
+ "symfony/service-contracts": "^1.1|^2|^3",
7246
+ "symfony/string": "^5.1|^6.0"
7247
  },
7248
  "conflict": {
7249
+ "psr/log": ">=3",
7250
  "symfony/dependency-injection": "<4.4",
7251
  "symfony/dotenv": "<5.1",
7252
  "symfony/event-dispatcher": "<4.4",
7254
  "symfony/process": "<4.4"
7255
  },
7256
  "provide": {
7257
+ "psr/log-implementation": "1.0|2.0"
7258
  },
7259
  "require-dev": {
7260
+ "psr/log": "^1|^2",
7261
+ "symfony/config": "^4.4|^5.0|^6.0",
7262
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
7263
+ "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
7264
+ "symfony/lock": "^4.4|^5.0|^6.0",
7265
+ "symfony/process": "^4.4|^5.0|^6.0",
7266
+ "symfony/var-dumper": "^4.4|^5.0|^6.0"
7267
  },
7268
  "suggest": {
7269
  "psr/log": "For using the console logger",
7296
  ],
7297
  "description": "Eases the creation of beautiful and testable command line interfaces",
7298
  "homepage": "https://symfony.com",
7299
+ "keywords": [
7300
+ "cli",
7301
+ "command line",
7302
+ "console",
7303
+ "terminal"
7304
+ ],
7305
  "support": {
7306
+ "source": "https://github.com/symfony/console/tree/v5.4.2"
7307
  },
7308
  "funding": [
7309
  {
7319
  "type": "tidelift"
7320
  }
7321
  ],
7322
+ "time": "2021-12-20T16:11:12+00:00"
7323
  },
7324
  {
7325
  "name": "symfony/css-selector",
7326
+ "version": "v5.4.2",
7327
  "source": {
7328
  "type": "git",
7329
  "url": "https://github.com/symfony/css-selector.git",
7330
+ "reference": "cfcbee910e159df402603502fe387e8b677c22fd"
7331
  },
7332
  "dist": {
7333
  "type": "zip",
7334
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/cfcbee910e159df402603502fe387e8b677c22fd",
7335
+ "reference": "cfcbee910e159df402603502fe387e8b677c22fd",
7336
  "shasum": ""
7337
  },
7338
  "require": {
7369
  "description": "Converts CSS selectors to XPath expressions",
7370
  "homepage": "https://symfony.com",
7371
  "support": {
7372
+ "source": "https://github.com/symfony/css-selector/tree/v5.4.2"
7373
  },
7374
  "funding": [
7375
  {
7385
  "type": "tidelift"
7386
  }
7387
  ],
7388
+ "time": "2021-12-16T21:58:21+00:00"
7389
  },
7390
  {
7391
  "name": "symfony/dependency-injection",
7392
+ "version": "v5.4.2",
7393
  "source": {
7394
  "type": "git",
7395
  "url": "https://github.com/symfony/dependency-injection.git",
7396
+ "reference": "ba94559be9738d77cd29e24b5d81cf3b89b7d628"
7397
  },
7398
  "dist": {
7399
  "type": "zip",
7400
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ba94559be9738d77cd29e24b5d81cf3b89b7d628",
7401
+ "reference": "ba94559be9738d77cd29e24b5d81cf3b89b7d628",
7402
  "shasum": ""
7403
  },
7404
  "require": {
7458
  "description": "Allows you to standardize and centralize the way objects are constructed in your application",
7459
  "homepage": "https://symfony.com",
7460
  "support": {
7461
+ "source": "https://github.com/symfony/dependency-injection/tree/v5.4.2"
7462
  },
7463
  "funding": [
7464
  {
7474
  "type": "tidelift"
7475
  }
7476
  ],
7477
+ "time": "2021-12-29T10:10:35+00:00"
7478
  },
7479
  {
7480
  "name": "symfony/deprecation-contracts",
7545
  },
7546
  {
7547
  "name": "symfony/dom-crawler",
7548
+ "version": "v5.4.2",
7549
  "source": {
7550
  "type": "git",
7551
  "url": "https://github.com/symfony/dom-crawler.git",
7552
+ "reference": "bb3bc3699779fc6d9646270789026a7e2cec7ec7"
7553
  },
7554
  "dist": {
7555
  "type": "zip",
7556
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bb3bc3699779fc6d9646270789026a7e2cec7ec7",
7557
+ "reference": "bb3bc3699779fc6d9646270789026a7e2cec7ec7",
7558
  "shasum": ""
7559
  },
7560
  "require": {
7600
  "description": "Eases DOM navigation for HTML and XML documents",
7601
  "homepage": "https://symfony.com",
7602
  "support": {
7603
+ "source": "https://github.com/symfony/dom-crawler/tree/v5.4.2"
7604
  },
7605
  "funding": [
7606
  {
7616
  "type": "tidelift"
7617
  }
7618
  ],
7619
+ "time": "2021-12-28T17:15:56+00:00"
7620
  },
7621
  {
7622
  "name": "symfony/event-dispatcher",
7848
  },
7849
  {
7850
  "name": "symfony/finder",
7851
+ "version": "v5.4.2",
7852
  "source": {
7853
  "type": "git",
7854
  "url": "https://github.com/symfony/finder.git",
7855
+ "reference": "e77046c252be48c48a40816187ed527703c8f76c"
7856
  },
7857
  "dist": {
7858
  "type": "zip",
7859
+ "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c",
7860
+ "reference": "e77046c252be48c48a40816187ed527703c8f76c",
7861
  "shasum": ""
7862
  },
7863
  "require": {
7891
  "description": "Finds files and directories via an intuitive fluent interface",
7892
  "homepage": "https://symfony.com",
7893
  "support": {
7894
+ "source": "https://github.com/symfony/finder/tree/v5.4.2"
7895
+ },
7896
+ "funding": [
7897
+ {
7898
+ "url": "https://symfony.com/sponsor",
7899
+ "type": "custom"
7900
+ },
7901
+ {
7902
+ "url": "https://github.com/fabpot",
7903
+ "type": "github"
7904
+ },
7905
+ {
7906
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
7907
+ "type": "tidelift"
7908
+ }
7909
+ ],
7910
+ "time": "2021-12-15T11:06:13+00:00"
7911
+ },
7912
+ {
7913
+ "name": "symfony/options-resolver",
7914
+ "version": "v5.4.0",
7915
+ "source": {
7916
+ "type": "git",
7917
+ "url": "https://github.com/symfony/options-resolver.git",
7918
+ "reference": "b0fb78576487af19c500aaddb269fd36701d4847"
7919
+ },
7920
+ "dist": {
7921
+ "type": "zip",
7922
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b0fb78576487af19c500aaddb269fd36701d4847",
7923
+ "reference": "b0fb78576487af19c500aaddb269fd36701d4847",
7924
+ "shasum": ""
7925
+ },
7926
+ "require": {
7927
+ "php": ">=7.2.5",
7928
+ "symfony/deprecation-contracts": "^2.1|^3",
7929
+ "symfony/polyfill-php73": "~1.0",
7930
+ "symfony/polyfill-php80": "^1.16"
7931
+ },
7932
+ "type": "library",
7933
+ "autoload": {
7934
+ "psr-4": {
7935
+ "Symfony\\Component\\OptionsResolver\\": ""
7936
+ },
7937
+ "exclude-from-classmap": [
7938
+ "/Tests/"
7939
+ ]
7940
+ },
7941
+ "notification-url": "https://packagist.org/downloads/",
7942
+ "license": [
7943
+ "MIT"
7944
+ ],
7945
+ "authors": [
7946
+ {
7947
+ "name": "Fabien Potencier",
7948
+ "email": "fabien@symfony.com"
7949
+ },
7950
+ {
7951
+ "name": "Symfony Community",
7952
+ "homepage": "https://symfony.com/contributors"
7953
+ }
7954
+ ],
7955
+ "description": "Provides an improved replacement for the array_replace PHP function",
7956
+ "homepage": "https://symfony.com",
7957
+ "keywords": [
7958
+ "config",
7959
+ "configuration",
7960
+ "options"
7961
+ ],
7962
+ "support": {
7963
+ "source": "https://github.com/symfony/options-resolver/tree/v5.4.0"
7964
  },
7965
  "funding": [
7966
  {
7976
  "type": "tidelift"
7977
  }
7978
  ],
7979
+ "time": "2021-11-23T10:19:22+00:00"
7980
  },
7981
  {
7982
  "name": "symfony/polyfill-ctype",
7983
+ "version": "v1.24.0",
7984
  "source": {
7985
  "type": "git",
7986
  "url": "https://github.com/symfony/polyfill-ctype.git",
7987
+ "reference": "30885182c981ab175d4d034db0f6f469898070ab"
7988
  },
7989
  "dist": {
7990
  "type": "zip",
7991
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
7992
+ "reference": "30885182c981ab175d4d034db0f6f469898070ab",
7993
  "shasum": ""
7994
  },
7995
  "require": {
7996
  "php": ">=7.1"
7997
  },
7998
+ "provide": {
7999
+ "ext-ctype": "*"
8000
+ },
8001
  "suggest": {
8002
  "ext-ctype": "For best performance"
8003
  },
8042
  "portable"
8043
  ],
8044
  "support": {
8045
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
8046
  },
8047
  "funding": [
8048
  {
8058
  "type": "tidelift"
8059
  }
8060
  ],
8061
+ "time": "2021-10-20T20:35:02+00:00"
8062
  },
8063
  {
8064
  "name": "symfony/polyfill-intl-grapheme",
8065
+ "version": "v1.24.0",
8066
  "source": {
8067
  "type": "git",
8068
  "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
8069
+ "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
8070
  },
8071
  "dist": {
8072
  "type": "zip",
8073
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
8074
+ "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
8075
  "shasum": ""
8076
  },
8077
  "require": {
8123
  "shim"
8124
  ],
8125
  "support": {
8126
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0"
8127
  },
8128
  "funding": [
8129
  {
8139
  "type": "tidelift"
8140
  }
8141
  ],
8142
+ "time": "2021-11-23T21:10:46+00:00"
8143
  },
8144
  {
8145
  "name": "symfony/polyfill-intl-normalizer",
8146
+ "version": "v1.24.0",
8147
  "source": {
8148
  "type": "git",
8149
  "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
8207
  "shim"
8208
  ],
8209
  "support": {
8210
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
8211
  },
8212
  "funding": [
8213
  {
8227
  },
8228
  {
8229
  "name": "symfony/polyfill-mbstring",
8230
+ "version": "v1.24.0",
8231
  "source": {
8232
  "type": "git",
8233
  "url": "https://github.com/symfony/polyfill-mbstring.git",
8234
+ "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
8235
  },
8236
  "dist": {
8237
  "type": "zip",
8238
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
8239
+ "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
8240
  "shasum": ""
8241
  },
8242
  "require": {
8243
  "php": ">=7.1"
8244
  },
8245
+ "provide": {
8246
+ "ext-mbstring": "*"
8247
+ },
8248
  "suggest": {
8249
  "ext-mbstring": "For best performance"
8250
  },
8290
  "shim"
8291
  ],
8292
  "support": {
8293
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0"
8294
  },
8295
  "funding": [
8296
  {
8306
  "type": "tidelift"
8307
  }
8308
  ],
8309
+ "time": "2021-11-30T18:21:41+00:00"
8310
  },
8311
  {
8312
  "name": "symfony/polyfill-php73",
8313
+ "version": "v1.24.0",
8314
  "source": {
8315
  "type": "git",
8316
  "url": "https://github.com/symfony/polyfill-php73.git",
8317
+ "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
8318
  },
8319
  "dist": {
8320
  "type": "zip",
8321
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
8322
+ "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
8323
  "shasum": ""
8324
  },
8325
  "require": {
8369
  "shim"
8370
  ],
8371
  "support": {
8372
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0"
8373
  },
8374
  "funding": [
8375
  {
8385
  "type": "tidelift"
8386
  }
8387
  ],
8388
+ "time": "2021-06-05T21:20:04+00:00"
8389
  },
8390
  {
8391
  "name": "symfony/polyfill-php80",
8392
+ "version": "v1.24.0",
8393
  "source": {
8394
  "type": "git",
8395
  "url": "https://github.com/symfony/polyfill-php80.git",
8396
+ "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
8397
  },
8398
  "dist": {
8399
  "type": "zip",
8400
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
8401
+ "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
8402
  "shasum": ""
8403
  },
8404
  "require": {
8452
  "shim"
8453
  ],
8454
  "support": {
8455
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
8456
  },
8457
  "funding": [
8458
  {
8468
  "type": "tidelift"
8469
  }
8470
  ],
8471
+ "time": "2021-09-13T13:58:33+00:00"
8472
  },
8473
  {
8474
  "name": "symfony/polyfill-php81",
8475
+ "version": "v1.24.0",
8476
  "source": {
8477
  "type": "git",
8478
  "url": "https://github.com/symfony/polyfill-php81.git",
8479
+ "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
8480
  },
8481
  "dist": {
8482
  "type": "zip",
8483
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
8484
+ "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
8485
  "shasum": ""
8486
  },
8487
  "require": {
8531
  "shim"
8532
  ],
8533
  "support": {
8534
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0"
8535
  },
8536
  "funding": [
8537
  {
8547
  "type": "tidelift"
8548
  }
8549
  ],
8550
+ "time": "2021-09-13T13:58:11+00:00"
8551
  },
8552
  {
8553
  "name": "symfony/process",
8554
+ "version": "v5.4.2",
8555
  "source": {
8556
  "type": "git",
8557
  "url": "https://github.com/symfony/process.git",
8558
+ "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4"
8559
  },
8560
  "dist": {
8561
  "type": "zip",
8562
+ "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4",
8563
+ "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4",
8564
  "shasum": ""
8565
  },
8566
  "require": {
8593
  "description": "Executes commands in sub-processes",
8594
  "homepage": "https://symfony.com",
8595
  "support": {
8596
+ "source": "https://github.com/symfony/process/tree/v5.4.2"
8597
  },
8598
  "funding": [
8599
  {
8609
  "type": "tidelift"
8610
  }
8611
  ],
8612
+ "time": "2021-12-27T21:01:00+00:00"
8613
  },
8614
  {
8615
  "name": "symfony/service-contracts",
8695
  "time": "2021-11-04T16:48:04+00:00"
8696
  },
8697
  {
8698
+ "name": "symfony/stopwatch",
8699
  "version": "v5.4.0",
8700
+ "source": {
8701
+ "type": "git",
8702
+ "url": "https://github.com/symfony/stopwatch.git",
8703
+ "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe"
8704
+ },
8705
+ "dist": {
8706
+ "type": "zip",
8707
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/208ef96122bfed82a8f3a61458a07113a08bdcfe",
8708
+ "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe",
8709
+ "shasum": ""
8710
+ },
8711
+ "require": {
8712
+ "php": ">=7.2.5",
8713
+ "symfony/service-contracts": "^1|^2|^3"
8714
+ },
8715
+ "type": "library",
8716
+ "autoload": {
8717
+ "psr-4": {
8718
+ "Symfony\\Component\\Stopwatch\\": ""
8719
+ },
8720
+ "exclude-from-classmap": [
8721
+ "/Tests/"
8722
+ ]
8723
+ },
8724
+ "notification-url": "https://packagist.org/downloads/",
8725
+ "license": [
8726
+ "MIT"
8727
+ ],
8728
+ "authors": [
8729
+ {
8730
+ "name": "Fabien Potencier",
8731
+ "email": "fabien@symfony.com"
8732
+ },
8733
+ {
8734
+ "name": "Symfony Community",
8735
+ "homepage": "https://symfony.com/contributors"
8736
+ }
8737
+ ],
8738
+ "description": "Provides a way to profile code",
8739
+ "homepage": "https://symfony.com",
8740
+ "support": {
8741
+ "source": "https://github.com/symfony/stopwatch/tree/v5.4.0"
8742
+ },
8743
+ "funding": [
8744
+ {
8745
+ "url": "https://symfony.com/sponsor",
8746
+ "type": "custom"
8747
+ },
8748
+ {
8749
+ "url": "https://github.com/fabpot",
8750
+ "type": "github"
8751
+ },
8752
+ {
8753
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
8754
+ "type": "tidelift"
8755
+ }
8756
+ ],
8757
+ "time": "2021-11-23T10:19:22+00:00"
8758
+ },
8759
+ {
8760
+ "name": "symfony/string",
8761
+ "version": "v5.4.2",
8762
  "source": {
8763
  "type": "git",
8764
  "url": "https://github.com/symfony/string.git",
8765
+ "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d"
8766
  },
8767
  "dist": {
8768
  "type": "zip",
8769
+ "url": "https://api.github.com/repos/symfony/string/zipball/e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d",
8770
+ "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d",
8771
  "shasum": ""
8772
  },
8773
  "require": {
8824
  "utf8"
8825
  ],
8826
  "support": {
8827
+ "source": "https://github.com/symfony/string/tree/v5.4.2"
8828
  },
8829
  "funding": [
8830
  {
8840
  "type": "tidelift"
8841
  }
8842
  ],
8843
+ "time": "2021-12-16T21:52:00+00:00"
8844
  },
8845
  {
8846
  "name": "symfony/translation",
8847
+ "version": "v5.4.2",
8848
  "source": {
8849
  "type": "git",
8850
  "url": "https://github.com/symfony/translation.git",
8851
+ "reference": "ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca"
8852
  },
8853
  "dist": {
8854
  "type": "zip",
8855
+ "url": "https://api.github.com/repos/symfony/translation/zipball/ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca",
8856
+ "reference": "ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca",
8857
  "shasum": ""
8858
  },
8859
  "require": {
8860
  "php": ">=7.2.5",
8861
+ "symfony/deprecation-contracts": "^2.1|^3",
8862
  "symfony/polyfill-mbstring": "~1.0",
8863
  "symfony/polyfill-php80": "^1.16",
8864
  "symfony/translation-contracts": "^2.3"
8865
  },
8866
  "conflict": {
8867
  "symfony/config": "<4.4",
8868
+ "symfony/console": "<5.3",
8869
  "symfony/dependency-injection": "<5.0",
8870
  "symfony/http-kernel": "<5.0",
8871
  "symfony/twig-bundle": "<5.0",
8876
  },
8877
  "require-dev": {
8878
  "psr/log": "^1|^2|^3",
8879
+ "symfony/config": "^4.4|^5.0|^6.0",
8880
+ "symfony/console": "^5.4|^6.0",
8881
+ "symfony/dependency-injection": "^5.0|^6.0",
8882
+ "symfony/finder": "^4.4|^5.0|^6.0",
8883
+ "symfony/http-client-contracts": "^1.1|^2.0|^3.0",
8884
+ "symfony/http-kernel": "^5.0|^6.0",
8885
+ "symfony/intl": "^4.4|^5.0|^6.0",
8886
  "symfony/polyfill-intl-icu": "^1.21",
8887
+ "symfony/service-contracts": "^1.1.2|^2|^3",
8888
+ "symfony/yaml": "^4.4|^5.0|^6.0"
8889
  },
8890
  "suggest": {
8891
  "psr/log-implementation": "To use logging capability in translator",
8921
  "description": "Provides tools to internationalize your application",
8922
  "homepage": "https://symfony.com",
8923
  "support": {
8924
+ "source": "https://github.com/symfony/translation/tree/v5.4.2"
8925
  },
8926
  "funding": [
8927
  {
8937
  "type": "tidelift"
8938
  }
8939
  ],
8940
+ "time": "2021-12-25T19:45:36+00:00"
8941
  },
8942
  {
8943
  "name": "symfony/translation-contracts",
9019
  },
9020
  {
9021
  "name": "symfony/yaml",
9022
+ "version": "v5.4.2",
9023
  "source": {
9024
  "type": "git",
9025
  "url": "https://github.com/symfony/yaml.git",
9026
+ "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58"
9027
  },
9028
  "dist": {
9029
  "type": "zip",
9030
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/b9eb163846a61bb32dfc147f7859e274fab38b58",
9031
+ "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58",
9032
  "shasum": ""
9033
  },
9034
  "require": {
9035
  "php": ">=7.2.5",
9036
+ "symfony/deprecation-contracts": "^2.1|^3",
9037
+ "symfony/polyfill-ctype": "^1.8"
9038
  },
9039
  "conflict": {
9040
+ "symfony/console": "<5.3"
9041
  },
9042
  "require-dev": {
9043
+ "symfony/console": "^5.3|^6.0"
9044
  },
9045
  "suggest": {
9046
  "symfony/console": "For validating YAML files using the lint command"
9074
  "description": "Loads and dumps YAML files",
9075
  "homepage": "https://symfony.com",
9076
  "support": {
9077
+ "source": "https://github.com/symfony/yaml/tree/v5.4.2"
9078
  },
9079
  "funding": [
9080
  {
9090
  "type": "tidelift"
9091
  }
9092
  ],
9093
+ "time": "2021-12-16T21:58:21+00:00"
9094
  },
9095
  {
9096
  "name": "theseer/fdomdocument",
9186
  ],
9187
  "time": "2021-07-28T10:34:58+00:00"
9188
  },
9189
+ {
9190
+ "name": "vimeo/psalm",
9191
+ "version": "4.17.0",
9192
+ "source": {
9193
+ "type": "git",
9194
+ "url": "https://github.com/vimeo/psalm.git",
9195
+ "reference": "6f4707aa41c9174353a6434bba3fc8840f981d9c"
9196
+ },
9197
+ "dist": {
9198
+ "type": "zip",
9199
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/6f4707aa41c9174353a6434bba3fc8840f981d9c",
9200
+ "reference": "6f4707aa41c9174353a6434bba3fc8840f981d9c",
9201
+ "shasum": ""
9202
+ },
9203
+ "require": {
9204
+ "amphp/amp": "^2.4.2",
9205
+ "amphp/byte-stream": "^1.5",
9206
+ "composer/package-versions-deprecated": "^1.8.0",
9207
+ "composer/semver": "^1.4 || ^2.0 || ^3.0",
9208
+ "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0",
9209
+ "dnoegel/php-xdg-base-dir": "^0.1.1",
9210
+ "ext-ctype": "*",
9211
+ "ext-dom": "*",
9212
+ "ext-json": "*",
9213
+ "ext-libxml": "*",
9214
+ "ext-mbstring": "*",
9215
+ "ext-simplexml": "*",
9216
+ "ext-tokenizer": "*",
9217
+ "felixfbecker/advanced-json-rpc": "^3.0.3",
9218
+ "felixfbecker/language-server-protocol": "^1.5",
9219
+ "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
9220
+ "nikic/php-parser": "^4.13",
9221
+ "openlss/lib-array2xml": "^1.0",
9222
+ "php": "^7.1|^8",
9223
+ "sebastian/diff": "^3.0 || ^4.0",
9224
+ "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0",
9225
+ "webmozart/path-util": "^2.3"
9226
+ },
9227
+ "provide": {
9228
+ "psalm/psalm": "self.version"
9229
+ },
9230
+ "require-dev": {
9231
+ "bamarni/composer-bin-plugin": "^1.2",
9232
+ "brianium/paratest": "^4.0||^6.0",
9233
+ "ext-curl": "*",
9234
+ "php-parallel-lint/php-parallel-lint": "^1.2",
9235
+ "phpdocumentor/reflection-docblock": "^5",
9236
+ "phpmyadmin/sql-parser": "5.1.0||dev-master",
9237
+ "phpspec/prophecy": ">=1.9.0",
9238
+ "phpunit/phpunit": "^9.0",
9239
+ "psalm/plugin-phpunit": "^0.16",
9240
+ "slevomat/coding-standard": "^7.0",
9241
+ "squizlabs/php_codesniffer": "^3.5",
9242
+ "symfony/process": "^4.3 || ^5.0 || ^6.0",
9243
+ "weirdan/prophecy-shim": "^1.0 || ^2.0"
9244
+ },
9245
+ "suggest": {
9246
+ "ext-curl": "In order to send data to shepherd",
9247
+ "ext-igbinary": "^2.0.5 is required, used to serialize caching data"
9248
+ },
9249
+ "bin": [
9250
+ "psalm",
9251
+ "psalm-language-server",
9252
+ "psalm-plugin",
9253
+ "psalm-refactor",
9254
+ "psalter"
9255
+ ],
9256
+ "type": "library",
9257
+ "extra": {
9258
+ "branch-alias": {
9259
+ "dev-master": "4.x-dev",
9260
+ "dev-3.x": "3.x-dev",
9261
+ "dev-2.x": "2.x-dev",
9262
+ "dev-1.x": "1.x-dev"
9263
+ }
9264
+ },
9265
+ "autoload": {
9266
+ "psr-4": {
9267
+ "Psalm\\": "src/Psalm/"
9268
+ },
9269
+ "files": [
9270
+ "src/functions.php",
9271
+ "src/spl_object_id.php"
9272
+ ]
9273
+ },
9274
+ "notification-url": "https://packagist.org/downloads/",
9275
+ "license": [
9276
+ "MIT"
9277
+ ],
9278
+ "authors": [
9279
+ {
9280
+ "name": "Matthew Brown"
9281
+ }
9282
+ ],
9283
+ "description": "A static analysis tool for finding errors in PHP applications",
9284
+ "keywords": [
9285
+ "code",
9286
+ "inspection",
9287
+ "php"
9288
+ ],
9289
+ "support": {
9290
+ "issues": "https://github.com/vimeo/psalm/issues",
9291
+ "source": "https://github.com/vimeo/psalm/tree/4.17.0"
9292
+ },
9293
+ "time": "2022-01-01T18:39:47+00:00"
9294
+ },
9295
  {
9296
  "name": "voku/portable-ascii",
9297
  "version": "1.5.6",
9477
  },
9478
  "time": "2021-03-09T10:59:23+00:00"
9479
  },
9480
+ {
9481
+ "name": "webmozart/path-util",
9482
+ "version": "2.3.0",
9483
+ "source": {
9484
+ "type": "git",
9485
+ "url": "https://github.com/webmozart/path-util.git",
9486
+ "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
9487
+ },
9488
+ "dist": {
9489
+ "type": "zip",
9490
+ "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
9491
+ "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
9492
+ "shasum": ""
9493
+ },
9494
+ "require": {
9495
+ "php": ">=5.3.3",
9496
+ "webmozart/assert": "~1.0"
9497
+ },
9498
+ "require-dev": {
9499
+ "phpunit/phpunit": "^4.6",
9500
+ "sebastian/version": "^1.0.1"
9501
+ },
9502
+ "type": "library",
9503
+ "extra": {
9504
+ "branch-alias": {
9505
+ "dev-master": "2.3-dev"
9506
+ }
9507
+ },
9508
+ "autoload": {
9509
+ "psr-4": {
9510
+ "Webmozart\\PathUtil\\": "src/"
9511
+ }
9512
+ },
9513
+ "notification-url": "https://packagist.org/downloads/",
9514
+ "license": [
9515
+ "MIT"
9516
+ ],
9517
+ "authors": [
9518
+ {
9519
+ "name": "Bernhard Schussek",
9520
+ "email": "bschussek@gmail.com"
9521
+ }
9522
+ ],
9523
+ "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
9524
+ "support": {
9525
+ "issues": "https://github.com/webmozart/path-util/issues",
9526
+ "source": "https://github.com/webmozart/path-util/tree/2.3.0"
9527
+ },
9528
+ "abandoned": "symfony/filesystem",
9529
+ "time": "2015-12-17T08:42:14+00:00"
9530
+ },
9531
  {
9532
  "name": "wp-cli/i18n-command",
9533
+ "version": "v2.2.10",
9534
  "source": {
9535
  "type": "git",
9536
  "url": "https://github.com/wp-cli/i18n-command.git",
9537
+ "reference": "e9eef8aab4b5e43c3aa09bf60e1e7a9d6d30d302"
9538
  },
9539
  "dist": {
9540
  "type": "zip",
9541
+ "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/e9eef8aab4b5e43c3aa09bf60e1e7a9d6d30d302",
9542
+ "reference": "e9eef8aab4b5e43c3aa09bf60e1e7a9d6d30d302",
9543
  "shasum": ""
9544
  },
9545
  "require": {
9546
  "gettext/gettext": "^4.8",
9547
+ "mck89/peast": "^1.13.9",
9548
  "wp-cli/wp-cli": "^2.5"
9549
  },
9550
  "require-dev": {
9551
  "wp-cli/scaffold-command": "^1.2 || ^2",
9552
+ "wp-cli/wp-cli-tests": "^3.1"
9553
  },
9554
  "suggest": {
9555
  "ext-mbstring": "Used for calculating include/exclude matches in code extraction"
9588
  "homepage": "https://github.com/wp-cli/i18n-command",
9589
  "support": {
9590
  "issues": "https://github.com/wp-cli/i18n-command/issues",
9591
+ "source": "https://github.com/wp-cli/i18n-command/tree/v2.2.10"
9592
  },
9593
+ "time": "2021-12-03T22:10:38+00:00"
9594
  },
9595
  {
9596
  "name": "wp-cli/mustangostang-spyc",
legacy-functions.php CHANGED
@@ -61,3 +61,24 @@ if (! function_exists('_postExpiratorExpireType')) {
61
  return ob_get_clean();
62
  }
63
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  return ob_get_clean();
62
  }
63
  }
64
+
65
+ /**
66
+ * Get correct URL (HTTP or HTTPS)
67
+ *
68
+ * @internal
69
+ * @access private
70
+ *
71
+ * @deprecated 2.7.1
72
+ */
73
+ function expirationdate_get_blog_url()
74
+ {
75
+ _deprecated_function(__FUNCTION__, '2.7.1');
76
+
77
+ if (is_multisite()) {
78
+ $url = network_home_url('/');
79
+ } else {
80
+ $url = home_url('/');
81
+ }
82
+
83
+ echo esc_url($url);
84
+ }
post-expirator-debug.php CHANGED
@@ -74,16 +74,16 @@ class PostExpiratorDebug
74
  global $wpdb;
75
  $results = $wpdb->get_results("SELECT * FROM {$this->debug_table} ORDER BY `id` DESC");
76
  if (empty($results)) {
77
- print '<p>' . __('Debugging table is currently empty.', 'post-expirator') . '</p>';
78
 
79
  return;
80
  }
81
  print '<table class="post-expirator-debug">';
82
- print '<tr><th class="post-expirator-timestamp">' . __('Timestamp', 'post-expirator') . '</th>';
83
- print '<th>' . __('Message', 'post-expirator') . '</th></tr>';
84
  foreach ($results as $result) {
85
- print '<tr><td>' . $result->timestamp . '</td>';
86
- print '<td>' . $result->message . '</td></tr>';
87
  }
88
  print '</table>';
89
  }
74
  global $wpdb;
75
  $results = $wpdb->get_results("SELECT * FROM {$this->debug_table} ORDER BY `id` DESC");
76
  if (empty($results)) {
77
+ print '<p>' . esc_html__('Debugging table is currently empty.', 'post-expirator') . '</p>';
78
 
79
  return;
80
  }
81
  print '<table class="post-expirator-debug">';
82
+ print '<tr><th class="post-expirator-timestamp">' . esc_html__('Timestamp', 'post-expirator') . '</th>';
83
+ print '<th>' . esc_html__('Message', 'post-expirator') . '</th></tr>';
84
  foreach ($results as $result) {
85
+ print '<tr><td>' . esc_html($result->timestamp) . '</td>';
86
+ print '<td>' . esc_html($result->message) . '</td></tr>';
87
  }
88
  print '</table>';
89
  }
post-expirator.php CHANGED
@@ -4,14 +4,14 @@ Plugin Name: PublishPress Future
4
  Plugin URI: http://wordpress.org/extend/plugins/post-expirator/
5
  Description: Allows you to add an expiration date (minute) to posts which you can configure to either delete the post, change it to a draft, or update the post categories at expiration time.
6
  Author: PublishPress
7
- Version: 2.7.0
8
  Author URI: http://publishpress.com
9
  Text Domain: post-expirator
10
  Domain Path: /languages
11
  */
12
 
13
  // Default Values
14
- define('POSTEXPIRATOR_VERSION', '2.7.0');
15
  define('POSTEXPIRATOR_DATEFORMAT', __('l F jS, Y', 'post-expirator'));
16
  define('POSTEXPIRATOR_TIMEFORMAT', __('g:ia', 'post-expirator'));
17
  define('POSTEXPIRATOR_FOOTERCONTENTS', __('Post expires at EXPIRATIONTIME on EXPIRATIONDATE', 'post-expirator'));
@@ -27,7 +27,13 @@ define('POSTEXPIRATOR_BASENAME', basename(__FILE__));
27
  define('POSTEXPIRATOR_BASEURL', plugins_url('/', __FILE__));
28
 
29
  require_once POSTEXPIRATOR_BASEDIR . '/functions.php';
30
- require_once POSTEXPIRATOR_BASEDIR . '/vendor/autoload.php';
 
 
 
 
 
 
31
 
32
  /**
33
  * Adds links to the plugin listing screen.
@@ -61,6 +67,12 @@ function postexpirator_init()
61
  load_plugin_textdomain('post-expirator', null, $plugin_dir . '/languages/');
62
 
63
  PostExpirator_Reviews::init();
 
 
 
 
 
 
64
  }
65
 
66
  add_action('plugins_loaded', 'postexpirator_init');
@@ -105,7 +117,7 @@ function postexpirator_manage_sortable_columns()
105
  }
106
  }
107
 
108
- add_action('init', 'postexpirator_manage_sortable_columns', 100);
109
 
110
  /**
111
  * Adds an 'Expires' column to the post display table.
@@ -368,59 +380,92 @@ add_action('add_meta_boxes', 'postexpirator_meta_custom');
368
  */
369
  function postexpirator_meta_box($post)
370
  {
371
- // Get default month
372
- $expirationdatets = get_post_meta($post->ID, '_expiration-date', true);
373
- $firstsave = get_post_meta($post->ID, '_expiration-date-status', true);
374
 
375
- $default = $expireType = $enabled = $defaultmonth = $defaultday = $defaulthour = $defaultyear = $defaultminute = $categories = '';
376
- $defaults = get_option('expirationdateDefaults' . ucfirst($post->post_type));
377
- if (empty($expirationdatets)) {
378
- $default_expiry = PostExpirator_Facade::get_default_expiry($post->post_type);
379
 
380
- $defaultmonth = $default_expiry['month'];
381
- $defaultday = $default_expiry['day'];
382
- $defaulthour = $default_expiry['hour'];
383
- $defaultyear = $default_expiry['year'];
384
- $defaultminute = $default_expiry['minute'];
385
 
386
- $enabled = '';
387
  $categories = get_option('expirationdateCategoryDefaults');
388
 
389
- if (isset($defaults['expireType'])) {
390
- $expireType = $defaults['expireType'];
391
- }
392
-
393
- // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
394
- if (isset($defaults['autoEnable']) && ($firstsave !== 'saved') && ($defaults['autoEnable'] === true || $defaults['autoEnable'] == 1)) {
395
- $enabled = ' checked="checked"';
396
  }
397
  } else {
398
- $defaultmonth = get_date_from_gmt(gmdate('Y-m-d H:i:s', $expirationdatets), 'm');
399
- $defaultday = get_date_from_gmt(gmdate('Y-m-d H:i:s', $expirationdatets), 'd');
400
- $defaultyear = get_date_from_gmt(gmdate('Y-m-d H:i:s', $expirationdatets), 'Y');
401
- $defaulthour = get_date_from_gmt(gmdate('Y-m-d H:i:s', $expirationdatets), 'H');
402
- $defaultminute = get_date_from_gmt(gmdate('Y-m-d H:i:s', $expirationdatets), 'i');
403
- $enabled = ' checked="checked"';
404
 
405
  $attributes = PostExpirator_Facade::get_expire_principles($post->ID);
406
  $expireType = $attributes['expireType'];
407
  $categories = $attributes['category'];
408
  }
409
 
 
 
 
 
410
  PostExpirator_Display::getInstance()->render_template(
411
- 'classic-metabox', array(
412
  'post' => $post,
413
  'enabled' => $enabled,
414
  'default' => $default,
415
- 'defaults' => $defaults,
416
- 'defaultmonth' => $defaultmonth,
417
- 'defaultday' => $defaultday,
418
- 'defaulthour' => $defaulthour,
419
- 'defaultyear' => $defaultyear,
420
- 'defaultminute' => $defaultminute,
421
  'categories' => $categories,
422
  'expireType' => $expireType,
423
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
  );
425
  }
426
 
@@ -471,22 +516,6 @@ function postexpirator_js_admin_header()
471
 
472
  add_action('admin_head', 'postexpirator_js_admin_header');
473
 
474
- /**
475
- * Get correct URL (HTTP or HTTPS)
476
- *
477
- * @internal
478
- *
479
- * @access private
480
- */
481
- function expirationdate_get_blog_url()
482
- {
483
- if (is_multisite()) {
484
- echo network_home_url('/');
485
- } else {
486
- echo home_url('/');
487
- }
488
- }
489
-
490
  /**
491
  * Called when post is saved - stores expiration-date meta value
492
  *
@@ -502,12 +531,12 @@ function postexpirator_update_post_meta($id)
502
  }
503
 
504
  // don't run the echo if the function is called for saving revision.
505
- $posttype = get_post_type($id);
506
  if ($posttype === 'revision') {
507
  return;
508
  }
509
 
510
- // Do not process Bulk edit here
511
  if (isset($_GET['postexpirator_view']) && $_GET['postexpirator_view'] === 'bulk-edit') {
512
  return;
513
  }
@@ -523,6 +552,12 @@ function postexpirator_update_post_meta($id)
523
  $opts = [];
524
 
525
  if (isset($_POST['postexpirator_view'])) {
 
 
 
 
 
 
526
  // Classic editor, quick edit
527
  $shouldSchedule = isset($_POST['enable-expirationdate']);
528
 
@@ -578,7 +613,7 @@ function postexpirator_update_post_meta($id)
578
  }
579
  }
580
  } else {
581
- // Gutenberg or script
582
  $payload = @file_get_contents('php://input');
583
 
584
  if (empty($payload)) {
@@ -734,6 +769,8 @@ function postexpirator_expire_post($id)
734
  {
735
  $debug = postexpirator_debug(); // check for/load debug
736
 
 
 
737
  if (empty($id)) {
738
  if (POSTEXPIRATOR_DEBUG) {
739
  $debug->save(array('message' => 'No Post ID found - exiting'));
@@ -750,11 +787,20 @@ function postexpirator_expire_post($id)
750
  return false;
751
  }
752
 
 
 
 
 
 
 
 
 
 
 
753
  $posttype = get_post_type($id);
754
  $posttitle = get_the_title($id);
755
  $postlink = get_post_permalink($id);
756
 
757
- $postoptions = PostExpirator_Facade::get_expire_principles($id);
758
  $expireType = $category = $categoryTaxonomy = null;
759
 
760
  if (isset($postoptions['expireType'])) {
@@ -792,6 +838,8 @@ function postexpirator_expire_post($id)
792
  // we are only changing the post status/meta information and not touching the content.
793
  kses_remove_filters();
794
 
 
 
795
  // Do Work
796
  if ($expireType === 'draft') {
797
  if (wp_update_post(array('ID' => $id, 'post_status' => 'draft')) === 0) {
@@ -814,6 +862,8 @@ function postexpirator_expire_post($id)
814
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
815
  );
816
  }
 
 
817
  }
818
  } elseif ($expireType === 'private') {
819
  if (wp_update_post(array('ID' => $id, 'post_status' => 'private')) === 0) {
@@ -836,6 +886,8 @@ function postexpirator_expire_post($id)
836
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
837
  );
838
  }
 
 
839
  }
840
  } elseif ($expireType === 'delete') {
841
  if (wp_delete_post($id) === false) {
@@ -858,6 +910,8 @@ function postexpirator_expire_post($id)
858
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
859
  );
860
  }
 
 
861
  }
862
  } elseif ($expireType === 'trash') {
863
  if (wp_trash_post($id) === false) {
@@ -880,6 +934,8 @@ function postexpirator_expire_post($id)
880
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
881
  );
882
  }
 
 
883
  }
884
  } elseif ($expireType === 'stick') {
885
  if (stick_post($id) === false) {
@@ -899,6 +955,8 @@ function postexpirator_expire_post($id)
899
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
900
  );
901
  }
 
 
902
  }
903
  } elseif ($expireType === 'unstick') {
904
  if (unstick_post($id) === false) {
@@ -921,6 +979,8 @@ function postexpirator_expire_post($id)
921
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
922
  );
923
  }
 
 
924
  }
925
  } elseif ($expireType === 'category') {
926
  if (! empty($category)) {
@@ -964,6 +1024,8 @@ function postexpirator_expire_post($id)
964
  )
965
  );
966
  }
 
 
967
  }
968
  } else {
969
  $terms = array_map('intval', $category);
@@ -1006,6 +1068,8 @@ function postexpirator_expire_post($id)
1006
  )
1007
  );
1008
  }
 
 
1009
  }
1010
  }
1011
  } else {
@@ -1065,6 +1129,8 @@ function postexpirator_expire_post($id)
1065
  )
1066
  );
1067
  }
 
 
1068
  }
1069
  } else {
1070
  $terms = array_map('intval', $category);
@@ -1108,6 +1174,8 @@ function postexpirator_expire_post($id)
1108
  )
1109
  );
1110
  }
 
 
1111
  }
1112
  }
1113
  } else {
@@ -1173,6 +1241,8 @@ function postexpirator_expire_post($id)
1173
  )
1174
  );
1175
  }
 
 
1176
  }
1177
  } else {
1178
  $terms = wp_get_object_terms($id, $categoryTaxonomy, array('fields' => 'ids'));
@@ -1223,6 +1293,8 @@ function postexpirator_expire_post($id)
1223
  )
1224
  );
1225
  }
 
 
1226
  }
1227
  }
1228
  } else {
@@ -1241,6 +1313,7 @@ function postexpirator_expire_post($id)
1241
 
1242
  // Process Email
1243
  $emailenabled = get_option('expirationdateEmailNotification', POSTEXPIRATOR_EMAILNOTIFICATION);
 
1244
  // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
1245
  if ($emailenabled == 1 && isset($emailBody)) {
1246
  $subj = sprintf(__('Post Expiration Complete "%s"', 'post-expirator'), $posttitle);
@@ -1297,6 +1370,10 @@ function postexpirator_expire_post($id)
1297
  }
1298
  }
1299
  }
 
 
 
 
1300
  }
1301
 
1302
  add_action('postExpiratorExpire', 'postexpirator_expire_post');
@@ -1717,7 +1794,6 @@ function expirationdate_deactivate()
1717
  return;
1718
  }
1719
 
1720
- global $current_blog;
1721
  delete_option('expirationdateExpiredPostStatus');
1722
  delete_option('expirationdateExpiredPageStatus');
1723
  delete_option('expirationdateDefaultDateFormat');
@@ -1737,8 +1813,11 @@ function expirationdate_deactivate()
1737
  delete_option('expirationdateDefaultsPost');
1738
  delete_option('expirationdateGutenbergSupport');
1739
  delete_option('expirationdatePreserveData');
1740
- // what about custom post types? - how to cleanup?
 
1741
  if (is_multisite()) {
 
 
1742
  wp_clear_scheduled_hook('expirationdate_delete_' . $current_blog->blog_id);
1743
  } else {
1744
  wp_clear_scheduled_hook('expirationdate_delete');
@@ -1928,18 +2007,18 @@ function _postexpirator_taxonomy($opts)
1928
  $rv = array();
1929
  if ($taxonomies) {
1930
  // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
1931
- $rv[] = '<select name="' . $name . '" id="' . $id . '"' . ($disabled == true ? ' disabled="disabled"' : '') . ' onchange="' . $onchange . '">';
1932
  foreach ($taxonomies as $taxonomy) {
1933
- $rv[] = '<option value="' . $taxonomy->name . '" ' . ($selected === $taxonomy->name ? 'selected="selected"' : '') . '>' . $taxonomy->label . '</option>';
1934
  }
1935
 
1936
  $rv[] = '</select>';
1937
- $rv[] = '<p class="description">' . __(
1938
  'Select the hierarchical taxonomy to be used for "category" based expiration.',
1939
  'post-expirator'
1940
  ) . '</p>';
1941
  } else {
1942
- $rv[] = __('No taxonomies found', 'post-expirator');
1943
  }
1944
 
1945
  return implode("<br/>\n", $rv);
@@ -1986,8 +2065,8 @@ function postexpirator_date_save_bulk_edit()
1986
 
1987
  if (! $facade->current_user_can_expire_posts()) {
1988
  wp_die(
1989
- __('You\'re not allowed to set posts to expire', 'post-expirator'),
1990
- __('Forbidden', 'post-expirator'),
1991
  403
1992
  );
1993
  }
4
  Plugin URI: http://wordpress.org/extend/plugins/post-expirator/
5
  Description: Allows you to add an expiration date (minute) to posts which you can configure to either delete the post, change it to a draft, or update the post categories at expiration time.
6
  Author: PublishPress
7
+ Version: 2.7.1
8
  Author URI: http://publishpress.com
9
  Text Domain: post-expirator
10
  Domain Path: /languages
11
  */
12
 
13
  // Default Values
14
+ define('POSTEXPIRATOR_VERSION', '2.7.1');
15
  define('POSTEXPIRATOR_DATEFORMAT', __('l F jS, Y', 'post-expirator'));
16
  define('POSTEXPIRATOR_TIMEFORMAT', __('g:ia', 'post-expirator'));
17
  define('POSTEXPIRATOR_FOOTERCONTENTS', __('Post expires at EXPIRATIONTIME on EXPIRATIONDATE', 'post-expirator'));
27
  define('POSTEXPIRATOR_BASEURL', plugins_url('/', __FILE__));
28
 
29
  require_once POSTEXPIRATOR_BASEDIR . '/functions.php';
30
+
31
+ $autoloadPath = POSTEXPIRATOR_BASEDIR . '/vendor/autoload.php';
32
+ if (false === class_exists('PublishPressFuture\\DummyForAutoloadDetection')
33
+ && true === file_exists($autoloadPath)
34
+ ) {
35
+ include_once $autoloadPath;
36
+ }
37
 
38
  /**
39
  * Adds links to the plugin listing screen.
67
  load_plugin_textdomain('post-expirator', null, $plugin_dir . '/languages/');
68
 
69
  PostExpirator_Reviews::init();
70
+
71
+ if (class_exists('WP_CLI')) {
72
+ PostExpirator_Cli::getInstance();
73
+ }
74
+
75
+ add_action('wp_insert_post', 'postexpirator_set_default_meta_for_post', 10, 3);
76
  }
77
 
78
  add_action('plugins_loaded', 'postexpirator_init');
117
  }
118
  }
119
 
120
+ add_action('admin_init', 'postexpirator_manage_sortable_columns', 100);
121
 
122
  /**
123
  * Adds an 'Expires' column to the post display table.
380
  */
381
  function postexpirator_meta_box($post)
382
  {
383
+ $postMetaDate = get_post_meta($post->ID, '_expiration-date', true);
384
+ $postMetaStatus = get_post_meta($post->ID, '_expiration-date-status', true);
 
385
 
386
+ $expireType = $default = $enabled = '';
387
+ $defaultsOption = get_option('expirationdateDefaults' . ucfirst($post->post_type));
388
+ if (empty($postMetaDate)) {
389
+ $defaultExpire = PostExpirator_Facade::get_default_expiry($post->post_type);
390
 
391
+ $defaultMonth = $defaultExpire['month'];
392
+ $defaultDay = $defaultExpire['day'];
393
+ $defaultHour = $defaultExpire['hour'];
394
+ $defaultYear = $defaultExpire['year'];
395
+ $defaultMinute = $defaultExpire['minute'];
396
 
 
397
  $categories = get_option('expirationdateCategoryDefaults');
398
 
399
+ if (isset($defaultsOption['expireType'])) {
400
+ $expireType = $defaultsOption['expireType'];
 
 
 
 
 
401
  }
402
  } else {
403
+ $defaultMonth = get_date_from_gmt(gmdate('Y-m-d H:i:s', $postMetaDate), 'm');
404
+ $defaultDay = get_date_from_gmt(gmdate('Y-m-d H:i:s', $postMetaDate), 'd');
405
+ $defaultYear = get_date_from_gmt(gmdate('Y-m-d H:i:s', $postMetaDate), 'Y');
406
+ $defaultHour = get_date_from_gmt(gmdate('Y-m-d H:i:s', $postMetaDate), 'H');
407
+ $defaultMinute = get_date_from_gmt(gmdate('Y-m-d H:i:s', $postMetaDate), 'i');
 
408
 
409
  $attributes = PostExpirator_Facade::get_expire_principles($post->ID);
410
  $expireType = $attributes['expireType'];
411
  $categories = $attributes['category'];
412
  }
413
 
414
+ if ($postMetaStatus === 'saved') {
415
+ $enabled = ' checked="checked"';
416
+ }
417
+
418
  PostExpirator_Display::getInstance()->render_template(
419
+ 'classic-metabox', [
420
  'post' => $post,
421
  'enabled' => $enabled,
422
  'default' => $default,
423
+ 'defaultsOption' => $defaultsOption,
424
+ 'defaultmonth' => $defaultMonth,
425
+ 'defaultday' => $defaultDay,
426
+ 'defaulthour' => $defaultHour,
427
+ 'defaultyear' => $defaultYear,
428
+ 'defaultminute' => $defaultMinute,
429
  'categories' => $categories,
430
  'expireType' => $expireType,
431
+ ]
432
+ );
433
+ }
434
+
435
+ function postexpirator_set_default_meta_for_post($postId, $post, $update)
436
+ {
437
+ if ($update) {
438
+ return;
439
+ }
440
+
441
+ $postTypeDefaults = get_option('expirationdateDefaults' . ucfirst($post->post_type));
442
+
443
+ if (empty($postTypeDefaults) || (int)$postTypeDefaults['autoEnable'] !== 1) {
444
+ return;
445
+ }
446
+
447
+ $defaultExpire = PostExpirator_Facade::get_default_expiry($post->post_type);
448
+
449
+ $categories = get_option('expirationdateCategoryDefaults');
450
+
451
+ $status = ! empty($defaultExpire['ts']) ? 'saved' : '';
452
+
453
+ $opts = [
454
+ 'expireType' => $postTypeDefaults['expireType'],
455
+ 'category' => $categories,
456
+ 'categoryTaxonomy' => '',
457
+ 'enabled' => $status === 'saved',
458
+ ];
459
+
460
+ update_post_meta($post->ID, '_expiration-date', $defaultExpire['ts']);
461
+ update_post_meta($post->ID, '_expiration-date-status', $status);
462
+ update_post_meta($post->ID, '_expiration-date-options', $opts);
463
+ update_post_meta($post->ID, '_expiration-date-type', $postTypeDefaults['expireType']);
464
+ update_post_meta($post->ID, '_expiration-date-categories', (array)$categories);
465
+ update_post_meta(
466
+ $post->ID,
467
+ '_expiration-date-taxonomy',
468
+ $opts['categoryTaxonomy']
469
  );
470
  }
471
 
516
 
517
  add_action('admin_head', 'postexpirator_js_admin_header');
518
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
519
  /**
520
  * Called when post is saved - stores expiration-date meta value
521
  *
531
  }
532
 
533
  // don't run the echo if the function is called for saving revision.
534
+ $posttype = get_post_type((int) $id);
535
  if ($posttype === 'revision') {
536
  return;
537
  }
538
 
539
+ // Do not process Bulk edit here. It is processed on the function "postexpirator_date_save_bulk_edit"
540
  if (isset($_GET['postexpirator_view']) && $_GET['postexpirator_view'] === 'bulk-edit') {
541
  return;
542
  }
552
  $opts = [];
553
 
554
  if (isset($_POST['postexpirator_view'])) {
555
+ if (defined('DOING_AJAX') && DOING_AJAX) {
556
+ check_ajax_referer('__postexpirator', '_postexpiratornonce');
557
+ } else {
558
+ check_admin_referer('__postexpirator', '_postexpiratornonce');
559
+ }
560
+
561
  // Classic editor, quick edit
562
  $shouldSchedule = isset($_POST['enable-expirationdate']);
563
 
613
  }
614
  }
615
  } else {
616
+ // Gutenberg or script request
617
  $payload = @file_get_contents('php://input');
618
 
619
  if (empty($payload)) {
769
  {
770
  $debug = postexpirator_debug(); // check for/load debug
771
 
772
+ $id = (int)$id;
773
+
774
  if (empty($id)) {
775
  if (POSTEXPIRATOR_DEBUG) {
776
  $debug->save(array('message' => 'No Post ID found - exiting'));
787
  return false;
788
  }
789
 
790
+ $postoptions = PostExpirator_Facade::get_expire_principles($id);
791
+
792
+ if ($postoptions['enabled'] === false) {
793
+ if (POSTEXPIRATOR_DEBUG) {
794
+ $debug->save(array('message' => $id . ' -> Post expire data exist but is not activated'));
795
+ }
796
+
797
+ return false;
798
+ }
799
+
800
  $posttype = get_post_type($id);
801
  $posttitle = get_the_title($id);
802
  $postlink = get_post_permalink($id);
803
 
 
804
  $expireType = $category = $categoryTaxonomy = null;
805
 
806
  if (isset($postoptions['expireType'])) {
838
  // we are only changing the post status/meta information and not touching the content.
839
  kses_remove_filters();
840
 
841
+ $postWasExpired = false;
842
+
843
  // Do Work
844
  if ($expireType === 'draft') {
845
  if (wp_update_post(array('ID' => $id, 'post_status' => 'draft')) === 0) {
862
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
863
  );
864
  }
865
+
866
+ $postWasExpired = true;
867
  }
868
  } elseif ($expireType === 'private') {
869
  if (wp_update_post(array('ID' => $id, 'post_status' => 'private')) === 0) {
886
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
887
  );
888
  }
889
+
890
+ $postWasExpired = true;
891
  }
892
  } elseif ($expireType === 'delete') {
893
  if (wp_delete_post($id) === false) {
910
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
911
  );
912
  }
913
+
914
+ $postWasExpired = true;
915
  }
916
  } elseif ($expireType === 'trash') {
917
  if (wp_trash_post($id) === false) {
934
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
935
  );
936
  }
937
+
938
+ $postWasExpired = true;
939
  }
940
  } elseif ($expireType === 'stick') {
941
  if (stick_post($id) === false) {
955
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
956
  );
957
  }
958
+
959
+ $postWasExpired = true;
960
  }
961
  } elseif ($expireType === 'unstick') {
962
  if (unstick_post($id) === false) {
979
  array('message' => $id . ' -> PROCESSED ' . $expireType . ' ' . print_r($postoptions, true))
980
  );
981
  }
982
+
983
+ $postWasExpired = true;
984
  }
985
  } elseif ($expireType === 'category') {
986
  if (! empty($category)) {
1024
  )
1025
  );
1026
  }
1027
+
1028
+ $postWasExpired = true;
1029
  }
1030
  } else {
1031
  $terms = array_map('intval', $category);
1068
  )
1069
  );
1070
  }
1071
+
1072
+ $postWasExpired = true;
1073
  }
1074
  }
1075
  } else {
1129
  )
1130
  );
1131
  }
1132
+
1133
+ $postWasExpired = true;
1134
  }
1135
  } else {
1136
  $terms = array_map('intval', $category);
1174
  )
1175
  );
1176
  }
1177
+
1178
+ $postWasExpired = true;
1179
  }
1180
  }
1181
  } else {
1241
  )
1242
  );
1243
  }
1244
+
1245
+ $postWasExpired = true;
1246
  }
1247
  } else {
1248
  $terms = wp_get_object_terms($id, $categoryTaxonomy, array('fields' => 'ids'));
1293
  )
1294
  );
1295
  }
1296
+
1297
+ $postWasExpired = true;
1298
  }
1299
  }
1300
  } else {
1313
 
1314
  // Process Email
1315
  $emailenabled = get_option('expirationdateEmailNotification', POSTEXPIRATOR_EMAILNOTIFICATION);
1316
+
1317
  // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
1318
  if ($emailenabled == 1 && isset($emailBody)) {
1319
  $subj = sprintf(__('Post Expiration Complete "%s"', 'post-expirator'), $posttitle);
1370
  }
1371
  }
1372
  }
1373
+
1374
+ if (true === $postWasExpired) {
1375
+ postexpirator_unschedule_event($id);
1376
+ }
1377
  }
1378
 
1379
  add_action('postExpiratorExpire', 'postexpirator_expire_post');
1794
  return;
1795
  }
1796
 
 
1797
  delete_option('expirationdateExpiredPostStatus');
1798
  delete_option('expirationdateExpiredPageStatus');
1799
  delete_option('expirationdateDefaultDateFormat');
1813
  delete_option('expirationdateDefaultsPost');
1814
  delete_option('expirationdateGutenbergSupport');
1815
  delete_option('expirationdatePreserveData');
1816
+
1817
+ // what about custom post types? - how to clean up?
1818
  if (is_multisite()) {
1819
+ global $current_blog;
1820
+
1821
  wp_clear_scheduled_hook('expirationdate_delete_' . $current_blog->blog_id);
1822
  } else {
1823
  wp_clear_scheduled_hook('expirationdate_delete');
2007
  $rv = array();
2008
  if ($taxonomies) {
2009
  // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
2010
+ $rv[] = '<select name="' . esc_attr($name) . '" id="' . esc_attr($id) . '"' . ($disabled == true ? ' disabled="disabled"' : '') . ' onchange="' . esc_attr($onchange) . '">';
2011
  foreach ($taxonomies as $taxonomy) {
2012
+ $rv[] = '<option value="' . esc_attr($taxonomy->name) . '" ' . ($selected === esc_attr($taxonomy->name) ? 'selected="selected"' : '') . '>' . esc_html($taxonomy->label) . '</option>';
2013
  }
2014
 
2015
  $rv[] = '</select>';
2016
+ $rv[] = '<p class="description">' . esc_html(
2017
  'Select the hierarchical taxonomy to be used for "category" based expiration.',
2018
  'post-expirator'
2019
  ) . '</p>';
2020
  } else {
2021
+ $rv[] = esc_html__('No taxonomies found', 'post-expirator');
2022
  }
2023
 
2024
  return implode("<br/>\n", $rv);
2065
 
2066
  if (! $facade->current_user_can_expire_posts()) {
2067
  wp_die(
2068
+ esc_html__('You\'re not allowed to set posts to expire', 'post-expirator'),
2069
+ esc_html__('Forbidden', 'post-expirator'),
2070
  403
2071
  );
2072
  }
readme.txt CHANGED
@@ -1,11 +1,11 @@
1
- === PublishPress Future: Automatically Unpublish Posts and Pages on a Future Date ===
2
- Contributors: publishpress, kevinB, stevejburge, andergmartins
3
  Author: publishpress
4
  Author URI: https://publishpress.com
5
- Tags: expire, posts, pages, schedule, unpublish
6
- Requires at least: 5.0
7
  Tested up to: 5.8
8
- Stable tag: 2.7.0
9
 
10
  Add an expiration date to posts. When your post is automatically unpublished, you can delete the post, change the status, or update the post categories.
11
 
@@ -22,8 +22,6 @@ Here's an overview of what you can do with PublishPress Future:
22
  * Receive email notifications when your content expires.
23
  * Show expiry dates in your content, automatically or with shortcodes.
24
 
25
- This plugin was previously known as "Post Expirator".
26
-
27
  ## Options for Expiring Posts
28
 
29
  When your posts expire, you can perform these changes on your content:
@@ -42,7 +40,7 @@ When your posts expire, you can perform these changes on your content:
42
 
43
  ## Display the Expiry Date in Your Content
44
 
45
- PublishPress Future allows you to automatically show the expiry date inside your articles. The expiry will be added at the bottom of your post.
46
 
47
  [Click here to see the Footer Display options](https://publishpress.com/knowledge-base/footer-display/).
48
 
@@ -64,7 +62,7 @@ The PublishPress Future plugin can send you email notifications when your conten
64
 
65
  ## Details on How Post Expiry Works
66
 
67
- For each expiration event, a custom cron job is scheduled. This can help reduce server overhead for busy sites. This plugin REQUIRES that WP-CRON is set up and functional on your webhost. Some hosts do not support this, so please check and confirm if you run into issues using the plugin.
68
 
69
  [Click here to see the technical details for this plugin](https://publishpress.com/knowledge-base/scheduling-cron-jobs/).
70
 
@@ -83,6 +81,30 @@ This section describes how to install the plugin and get it working.
83
 
84
  == Changelog ==
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  = [2.7.0] - 02 Dec 2021 =
87
 
88
  * Changed: Rename the plugin from Post Expirator to PublishpPress Future, #14;
1
+ === PublishPress Future: Automatically Unpublish WordPress Posts ===
2
+ Contributors: publishpress, kevinB, stevejburge, andergmartins, rozroz
3
  Author: publishpress
4
  Author URI: https://publishpress.com
5
+ Tags: expire, posts, pages, schedule
6
+ Requires at least: 5.3
7
  Tested up to: 5.8
8
+ Stable tag: 2.7.1
9
 
10
  Add an expiration date to posts. When your post is automatically unpublished, you can delete the post, change the status, or update the post categories.
11
 
22
  * Receive email notifications when your content expires.
23
  * Show expiry dates in your content, automatically or with shortcodes.
24
 
 
 
25
  ## Options for Expiring Posts
26
 
27
  When your posts expire, you can perform these changes on your content:
40
 
41
  ## Display the Expiry Date in Your Content
42
 
43
+ PublishPress Future allows you to place automatically show the expiry date inside your articles. The expiry will be added at the bottom of your post.
44
 
45
  [Click here to see the Footer Display options](https://publishpress.com/knowledge-base/footer-display/).
46
 
62
 
63
  ## Details on How Post Expiry Works
64
 
65
+ For each expiration event, a custom cron job is scheduled. This can help reduce server overhead for busy sites. This plugin REQUIRES that WP-CRON is setup and functional on your webhost. Some hosts do not support this, so please check and confirm if you run into issues using the plugin.
66
 
67
  [Click here to see the technical details for this plugin](https://publishpress.com/knowledge-base/scheduling-cron-jobs/).
68
 
81
 
82
  == Changelog ==
83
 
84
+ = [2.7.1] - 12 Jan 2021 =
85
+
86
+ * Added: Add visual indicator to the cron event status in the settings page, #155;
87
+ * Added: Add small help text to the Expires column icon to say if the event is scheduled or not;
88
+ * Added: Add additional permission check before loading the settings page;
89
+ * Added: Add CLI command to expire a post, #206;
90
+ * Changed: Remove the plugin description from the settings page, #194;
91
+ * Changed: Deprecated a not used function called "expirationdate_get_blog_url";
92
+ * Changed: Updated the min required WP to 5.3 due to the requirement of using the function 'wp_date';
93
+ * Fixed: Fix PHP error while purging the debug log, #135;
94
+ * Fixed: Fix composer's autoloader path;
95
+ * Fixed: Code cleanup. Removed comments and dead code;
96
+ * Fixed: Fixed the block for direct access to view files;
97
+ * Fixed: Added check for is_admin before checking if the user has permission to see the settings page;
98
+ * Fixed: Avoid running sortable column code if not in the admin;
99
+ * Fixed: Cross-site scripting (XSS) was possible if a third party allowed html or javascript into a database setting or language file;
100
+ * Fixed: Fix the URL for the View Debug Log admin page, #196;
101
+ * Fixed: Removed unopened span tag from a form;
102
+ * Fixed: Added a secondary admin and ajax referer check when saving expiration post data;
103
+ * Fixed: Fix the option "Preserve data after deactivating the plugin" that was not saving the setting, #198;
104
+ * Fixed: Fix the post expiration function to make sure a post is not expired if the checkbox is not checked on it, #199;
105
+ * Fixed: Fix the post expiration meta not being cleanup after a post expires, #207;
106
+ * Fixed: Fix the post expiration checkbox status when post type is set configured to check it by default;
107
+
108
  = [2.7.0] - 02 Dec 2021 =
109
 
110
  * Changed: Rename the plugin from Post Expirator to PublishpPress Future, #14;
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitb4c7c32b9bcab4f54643f778f077efdc::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit1d63918176b7b346c50a6bf376bce514::getLoader();
vendor/composer/InstalledVersions.php CHANGED
@@ -24,8 +24,21 @@ use Composer\Semver\VersionParser;
24
  */
25
  class InstalledVersions
26
  {
 
 
 
 
27
  private static $installed;
 
 
 
 
28
  private static $canGetVendors;
 
 
 
 
 
29
  private static $installedByVendor = array();
30
 
31
  /**
24
  */
25
  class InstalledVersions
26
  {
27
+ /**
28
+ * @var mixed[]|null
29
+ * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
30
+ */
31
  private static $installed;
32
+
33
+ /**
34
+ * @var bool|null
35
+ */
36
  private static $canGetVendors;
37
+
38
+ /**
39
+ * @var array[]
40
+ * @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
41
+ */
42
  private static $installedByVendor = array();
43
 
44
  /**
vendor/composer/autoload_files.php CHANGED
@@ -7,4 +7,5 @@ $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
  '41c664bd04a95c2d6a2f2a3e00f06593' => $vendorDir . '/publishpress/wordpress-reviews/ReviewsController.php',
 
10
  );
7
 
8
  return array(
9
  '41c664bd04a95c2d6a2f2a3e00f06593' => $vendorDir . '/publishpress/wordpress-reviews/ReviewsController.php',
10
+ '042dd0ae2433f2c5951d75563af2394e' => $baseDir . '/classes/DummyForAutoloadDetection.php',
11
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitb4c7c32b9bcab4f54643f778f077efdc
6
  {
7
  private static $loader;
8
 
@@ -24,15 +24,15 @@ class ComposerAutoloaderInitb4c7c32b9bcab4f54643f778f077efdc
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInitb4c7c32b9bcab4f54643f778f077efdc', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
- spl_autoload_unregister(array('ComposerAutoloaderInitb4c7c32b9bcab4f54643f778f077efdc', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
- call_user_func(\Composer\Autoload\ComposerStaticInitb4c7c32b9bcab4f54643f778f077efdc::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
@@ -53,19 +53,19 @@ class ComposerAutoloaderInitb4c7c32b9bcab4f54643f778f077efdc
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
- $includeFiles = Composer\Autoload\ComposerStaticInitb4c7c32b9bcab4f54643f778f077efdc::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
- composerRequireb4c7c32b9bcab4f54643f778f077efdc($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
- function composerRequireb4c7c32b9bcab4f54643f778f077efdc($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit1d63918176b7b346c50a6bf376bce514
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInit1d63918176b7b346c50a6bf376bce514', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInit1d63918176b7b346c50a6bf376bce514', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\Composer\Autoload\ComposerStaticInit1d63918176b7b346c50a6bf376bce514::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
+ $includeFiles = Composer\Autoload\ComposerStaticInit1d63918176b7b346c50a6bf376bce514::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
+ composerRequire1d63918176b7b346c50a6bf376bce514($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
+ function composerRequire1d63918176b7b346c50a6bf376bce514($fileIdentifier, $file)
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,10 +4,11 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitb4c7c32b9bcab4f54643f778f077efdc
8
  {
9
  public static $files = array (
10
  '41c664bd04a95c2d6a2f2a3e00f06593' => __DIR__ . '/..' . '/publishpress/wordpress-reviews/ReviewsController.php',
 
11
  );
12
 
13
  public static $classMap = array (
@@ -17,7 +18,7 @@ class ComposerStaticInitb4c7c32b9bcab4f54643f778f077efdc
17
  public static function getInitializer(ClassLoader $loader)
18
  {
19
  return \Closure::bind(function () use ($loader) {
20
- $loader->classMap = ComposerStaticInitb4c7c32b9bcab4f54643f778f077efdc::$classMap;
21
 
22
  }, null, ClassLoader::class);
23
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit1d63918176b7b346c50a6bf376bce514
8
  {
9
  public static $files = array (
10
  '41c664bd04a95c2d6a2f2a3e00f06593' => __DIR__ . '/..' . '/publishpress/wordpress-reviews/ReviewsController.php',
11
+ '042dd0ae2433f2c5951d75563af2394e' => __DIR__ . '/../..' . '/classes/DummyForAutoloadDetection.php',
12
  );
13
 
14
  public static $classMap = array (
18
  public static function getInitializer(ClassLoader $loader)
19
  {
20
  return \Closure::bind(function () use ($loader) {
21
+ $loader->classMap = ComposerStaticInit1d63918176b7b346c50a6bf376bce514::$classMap;
22
 
23
  }, null, ClassLoader::class);
24
  }
vendor/composer/installed.json CHANGED
@@ -2,17 +2,17 @@
2
  "packages": [
3
  {
4
  "name": "publishpress/wordpress-reviews",
5
- "version": "v1.1.16",
6
- "version_normalized": "1.1.16.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/publishpress/wordpress-reviews.git",
10
- "reference": "2b647f104d7aa64e0c72c028f86e1875035b7a91"
11
  },
12
  "dist": {
13
  "type": "zip",
14
- "url": "https://api.github.com/repos/publishpress/wordpress-reviews/zipball/2b647f104d7aa64e0c72c028f86e1875035b7a91",
15
- "reference": "2b647f104d7aa64e0c72c028f86e1875035b7a91",
16
  "shasum": ""
17
  },
18
  "require": {
@@ -36,7 +36,7 @@
36
  "wp-cli/i18n-command": "^2.2",
37
  "wp-cli/wp-cli": "^2.5"
38
  },
39
- "time": "2021-12-01T20:36:26+00:00",
40
  "type": "library",
41
  "installation-source": "dist",
42
  "autoload": {
@@ -67,7 +67,7 @@
67
  ],
68
  "support": {
69
  "issues": "https://github.com/publishpress/wordpress-reviews/issues",
70
- "source": "https://github.com/publishpress/wordpress-reviews/tree/v1.1.16"
71
  },
72
  "install-path": "../publishpress/wordpress-reviews"
73
  }
2
  "packages": [
3
  {
4
  "name": "publishpress/wordpress-reviews",
5
+ "version": "v1.1.18",
6
+ "version_normalized": "1.1.18.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/publishpress/wordpress-reviews.git",
10
+ "reference": "0020705b8f6a7177fc393c6c42c82171bf9e2fbd"
11
  },
12
  "dist": {
13
  "type": "zip",
14
+ "url": "https://api.github.com/repos/publishpress/wordpress-reviews/zipball/0020705b8f6a7177fc393c6c42c82171bf9e2fbd",
15
+ "reference": "0020705b8f6a7177fc393c6c42c82171bf9e2fbd",
16
  "shasum": ""
17
  },
18
  "require": {
36
  "wp-cli/i18n-command": "^2.2",
37
  "wp-cli/wp-cli": "^2.5"
38
  },
39
+ "time": "2021-12-15T00:03:53+00:00",
40
  "type": "library",
41
  "installation-source": "dist",
42
  "autoload": {
67
  ],
68
  "support": {
69
  "issues": "https://github.com/publishpress/wordpress-reviews/issues",
70
+ "source": "https://github.com/publishpress/wordpress-reviews/tree/v1.1.18"
71
  },
72
  "install-path": "../publishpress/wordpress-reviews"
73
  }
vendor/composer/installed.php CHANGED
@@ -5,7 +5,7 @@
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
- 'reference' => '727fb5ed7cf1e94811eb97ba2b36a80b81085371',
9
  'name' => 'publishpress/post-expirator',
10
  'dev' => false,
11
  ),
@@ -16,16 +16,16 @@
16
  'type' => 'wordpress-plugin',
17
  'install_path' => __DIR__ . '/../../',
18
  'aliases' => array(),
19
- 'reference' => '727fb5ed7cf1e94811eb97ba2b36a80b81085371',
20
  'dev_requirement' => false,
21
  ),
22
  'publishpress/wordpress-reviews' => array(
23
- 'pretty_version' => 'v1.1.16',
24
- 'version' => '1.1.16.0',
25
  'type' => 'library',
26
  'install_path' => __DIR__ . '/../publishpress/wordpress-reviews',
27
  'aliases' => array(),
28
- 'reference' => '2b647f104d7aa64e0c72c028f86e1875035b7a91',
29
  'dev_requirement' => false,
30
  ),
31
  ),
5
  'type' => 'wordpress-plugin',
6
  'install_path' => __DIR__ . '/../../',
7
  'aliases' => array(),
8
+ 'reference' => 'ac0b7c2907e628fbe2025d0736f2475461b598b3',
9
  'name' => 'publishpress/post-expirator',
10
  'dev' => false,
11
  ),
16
  'type' => 'wordpress-plugin',
17
  'install_path' => __DIR__ . '/../../',
18
  'aliases' => array(),
19
+ 'reference' => 'ac0b7c2907e628fbe2025d0736f2475461b598b3',
20
  'dev_requirement' => false,
21
  ),
22
  'publishpress/wordpress-reviews' => array(
23
+ 'pretty_version' => 'v1.1.18',
24
+ 'version' => '1.1.18.0',
25
  'type' => 'library',
26
  'install_path' => __DIR__ . '/../publishpress/wordpress-reviews',
27
  'aliases' => array(),
28
+ 'reference' => '0020705b8f6a7177fc393c6c42c82171bf9e2fbd',
29
  'dev_requirement' => false,
30
  ),
31
  ),
vendor/publishpress/wordpress-reviews/ReviewsController.php CHANGED
@@ -56,11 +56,6 @@ class ReviewsController
56
  */
57
  private $pluginName;
58
 
59
- /**
60
- * @var string
61
- */
62
- private $apiUrl = '';
63
-
64
  /**
65
  * @var array
66
  */
@@ -265,7 +260,7 @@ class ReviewsController
265
  $selected = [];
266
  }
267
 
268
- if (! isset($selected[$this->pluginSlug])) {
269
  $dismissedTriggers = $this->getDismissedTriggerGroups();
270
 
271
  $triggers = $this->getTriggers();
@@ -283,7 +278,7 @@ class ReviewsController
283
  }
284
  }
285
 
286
- if (isset($selected[$this->pluginSlug])) {
287
  break;
288
  }
289
  }
@@ -332,7 +327,7 @@ class ReviewsController
332
  $triggers = [];
333
  }
334
 
335
- if (! isset($triggers[$this->pluginSlug])) {
336
  $timeMessage = __(
337
  'Hey, you\'ve been using %1$s for %2$s on your site. We hope the plugin has been useful. Please could you quickly leave a 5-star rating on WordPress.org? It really does help to keep %1$s growing.',
338
  $this->pluginSlug
@@ -387,13 +382,14 @@ class ReviewsController
387
  }
388
 
389
  if (isset($group)) {
390
- if (! isset($triggers[$this->pluginSlug][$group])) {
 
391
  return false;
392
  }
393
 
394
  if (! isset($code)) {
395
  $return = $triggers[$this->pluginSlug][$group];
396
- } elseif (isset($triggers[$this->pluginSlug][$group]['triggers'][$code])) {
397
  $return = $triggers[$this->pluginSlug][$group]['triggers'][$code];
398
  } else {
399
  $return = false;
@@ -416,7 +412,7 @@ class ReviewsController
416
  $selected = [];
417
  }
418
 
419
- if (! isset($selected[$this->pluginSlug])) {
420
  $dismissedTriggers = $this->getDismissedTriggerGroups();
421
 
422
  foreach ($this->getTriggers() as $g => $group) {
@@ -432,13 +428,13 @@ class ReviewsController
432
  }
433
  }
434
 
435
- if (isset($selected[$this->pluginSlug])) {
436
  break;
437
  }
438
  }
439
  }
440
 
441
- if (! isset($selected[$this->pluginSlug])) {
442
  return false;
443
  }
444
 
@@ -463,7 +459,7 @@ class ReviewsController
463
 
464
  if (empty($key)) {
465
  $return = $trigger;
466
- } elseif (isset($trigger[$key])) {
467
  $return = $trigger[$key];
468
  } else {
469
  $return = false;
@@ -569,20 +565,6 @@ class ReviewsController
569
  reason: reason
570
  }
571
  });
572
-
573
- <?php if (! empty($this->apiUrl)) : ?>
574
- $.ajax({
575
- method: "POST",
576
- dataType: "json",
577
- url: '<?php echo $this->apiUrl; ?>',
578
- data: {
579
- trigger_group: trigger.group,
580
- trigger_code: trigger.code,
581
- reason: reason,
582
- uuid: '<?php echo $uuid; ?>'
583
- }
584
- });
585
- <?php endif; ?>
586
  }
587
 
588
  $(document)
@@ -616,7 +598,7 @@ class ReviewsController
616
  <img src="<?php
617
  echo $this->iconUrl; ?>" class="notice-icon" alt="<?php
618
  echo $this->pluginName; ?> logo"/>
619
- <?php
620
  endif; ?>
621
 
622
  <p><?php
@@ -626,7 +608,7 @@ class ReviewsController
626
  echo "$this->pluginSlug-dismiss"; ?>"
627
  target="_blank"
628
  href="<?php
629
- echo $trigger['link']; ?>"
630
  data-reason="am_now"
631
  >
632
  <strong><?php
56
  */
57
  private $pluginName;
58
 
 
 
 
 
 
59
  /**
60
  * @var array
61
  */
260
  $selected = [];
261
  }
262
 
263
+ if (! array_key_exists($this->pluginSlug, $selected)) {
264
  $dismissedTriggers = $this->getDismissedTriggerGroups();
265
 
266
  $triggers = $this->getTriggers();
278
  }
279
  }
280
 
281
+ if (array_key_exists($this->pluginSlug, $selected)) {
282
  break;
283
  }
284
  }
327
  $triggers = [];
328
  }
329
 
330
+ if (! array_key_exists($this->pluginSlug, $triggers)) {
331
  $timeMessage = __(
332
  'Hey, you\'ve been using %1$s for %2$s on your site. We hope the plugin has been useful. Please could you quickly leave a 5-star rating on WordPress.org? It really does help to keep %1$s growing.',
333
  $this->pluginSlug
382
  }
383
 
384
  if (isset($group)) {
385
+ if (! array_key_exists($this->pluginSlug, $triggers)
386
+ || ! array_key_exists($group, $triggers[$this->pluginSlug])) {
387
  return false;
388
  }
389
 
390
  if (! isset($code)) {
391
  $return = $triggers[$this->pluginSlug][$group];
392
+ } elseif (array_key_exists($code, $triggers[$this->pluginSlug][$group]['triggers'])) {
393
  $return = $triggers[$this->pluginSlug][$group]['triggers'][$code];
394
  } else {
395
  $return = false;
412
  $selected = [];
413
  }
414
 
415
+ if (! array_key_exists($this->pluginSlug, $selected)) {
416
  $dismissedTriggers = $this->getDismissedTriggerGroups();
417
 
418
  foreach ($this->getTriggers() as $g => $group) {
428
  }
429
  }
430
 
431
+ if (array_key_exists($this->pluginSlug, $selected)) {
432
  break;
433
  }
434
  }
435
  }
436
 
437
+ if (! array_key_exists($this->pluginSlug, $selected)) {
438
  return false;
439
  }
440
 
459
 
460
  if (empty($key)) {
461
  $return = $trigger;
462
+ } elseif (array_key_exists($key, $trigger)) {
463
  $return = $trigger[$key];
464
  } else {
465
  $return = false;
565
  reason: reason
566
  }
567
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
568
  }
569
 
570
  $(document)
598
  <img src="<?php
599
  echo $this->iconUrl; ?>" class="notice-icon" alt="<?php
600
  echo $this->pluginName; ?> logo"/>
601
+ <?php
602
  endif; ?>
603
 
604
  <p><?php
608
  echo "$this->pluginSlug-dismiss"; ?>"
609
  target="_blank"
610
  href="<?php
611
+ echo $trigger['link']; ?>"
612
  data-reason="am_now"
613
  >
614
  <strong><?php
views/bulk-edit.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  $defaults = PostExpirator_Facade::get_default_expiry($post_type);
4
 
5
  $year = $defaults['year'];
@@ -13,40 +15,40 @@ $minute = $defaults['minute'];
13
  <div class="inline-edit-col">
14
  <div class="inline-edit-group">
15
  <legend class="inline-edit-legend"><?php
16
- _e('PublishPress Future', 'post-expirator'); ?></legend>
17
  <fieldset class="inline-edit-date">
18
  <div class="pe-qe-fields">
19
  <div>
20
  <legend><span class="title"><?php
21
- _e('Date', 'post-expirator'); ?></span></legend>
22
  <label>
23
  <span class="screen-reader-text"><?php
24
- _e('Enable Post Expiration', 'post-expirator'); ?></span>
25
  <select name="expirationdate_status">
26
  <option value="no-change" data-show-fields="false" selected>
27
  --<?php
28
- _e('No Change', 'post-expirator'); ?>--
29
  </option>
30
  <option value="change-only" data-show-fields="true"
31
  title="<?php
32
- _e('Change expiry date if enabled on posts', 'post-expirator'); ?>"><?php
33
- _e('Change on posts', 'post-expirator'); ?></option>
34
  <option value="add-only" data-show-fields="true"
35
  title="<?php
36
- _e('Add expiry date if not enabled on posts', 'post-expirator'); ?>"><?php
37
- _e('Add to posts', 'post-expirator'); ?></option>
38
  <option value="change-add"
39
  data-show-fields="true"><?php
40
- _e('Change & Add', 'post-expirator'); ?></option>
41
  <option value="remove-only"
42
  data-show-fields="false"><?php
43
- _e('Remove from posts', 'post-expirator'); ?></option>
44
  </select>
45
  </label>
46
  <span class="post-expirator-date-fields">
47
  <label>
48
  <span class="screen-reader-text"><?php
49
- _e('Month', 'post-expirator'); ?></span>
50
  <select name="expirationdate_month">
51
  <?php
52
  for ($x = 1; $x <= 12; $x++) {
@@ -57,12 +59,12 @@ $minute = $defaults['minute'];
57
  $selected = $monthNumeric == $defaults['month'] ? 'selected' : '';
58
  ?>
59
  <option value="<?php
60
- echo $monthNumeric; ?>"
61
  data-text="<?php
62
- echo $monthStr; ?>" <?php
63
- echo $selected; ?>><?php
64
- echo $monthNumeric; ?>-<?php
65
- echo $monthStr; ?></option>
66
  <?php
67
  } ?>
68
 
@@ -70,43 +72,43 @@ $minute = $defaults['minute'];
70
  </label>
71
  <label>
72
  <span class="screen-reader-text"><?php
73
- _e('Day', 'post-expirator'); ?></span>
74
  <input name="expirationdate_day" placeholder="<?php
75
- echo $day; ?>" value="" size="2"
76
  maxlength="2" autocomplete="off" type="text">
77
  </label>,
78
  <label>
79
  <span class="screen-reader-text"><?php
80
- _e('Year', 'post-expirator'); ?></span>
81
  <input name="expirationdate_year" placeholder="<?php
82
- echo $year; ?>" value="" size="4"
83
  maxlength="4" autocomplete="off" type="text">
84
  </label> @
85
  <label>
86
  <span class="screen-reader-text"><?php
87
- _e('Hour', 'post-expirator'); ?></span>
88
  <input name="expirationdate_hour" placeholder="<?php
89
- echo $hour; ?>" value="" size="2"
90
  maxlength="2" autocomplete="off" type="text">
91
  </label> :
92
  <label>
93
  <span class="screen-reader-text"><?php
94
- _e('Minute', 'post-expirator'); ?></span>
95
  <input name="expirationdate_minute" placeholder="<?php
96
- echo $minute; ?>" value=""
97
  size="2" maxlength="2" autocomplete="off" type="text">
98
  </label>
99
 
100
  <?php
101
- echo PostExpirator_Util::wp_timezone_string(); ?>
102
  </span>
103
  </div>
104
  <div class="post-expirator-date-fields">
105
  <legend>
106
  <span class="title"><?php
107
- _e('Type', 'post-expirator'); ?></span>
108
  <span class="screen-reader-text"><?php
109
- _e('How to expire', 'post-expirator'); ?></span>
110
  </legend>
111
  <label>
112
  <?php
@@ -122,9 +124,9 @@ $minute = $defaults['minute'];
122
  <div class="pe-category-list">
123
  <legend>
124
  <span class="title"><?php
125
- echo $tax_label; ?></span>
126
  <span class="screen-reader-text"><?php
127
- _e('Expiration Categories', 'post-expirator'); ?></span>
128
  </legend>
129
  <ul id="categorychecklist"
130
  class="list:category categorychecklist cat-checklist category-checklist">
@@ -140,7 +142,6 @@ $minute = $defaults['minute'];
140
  ?>
141
  </ul>
142
  </div>
143
- </span>
144
  </div>
145
  <input name="expirationdate_quickedit" value="true" type="hidden"/>
146
  <input name="postexpirator_view" value="bulk-edit" type="hidden"/>
1
  <?php
2
 
3
+ defined('ABSPATH') or die('Direct access not allowed.');
4
+
5
  $defaults = PostExpirator_Facade::get_default_expiry($post_type);
6
 
7
  $year = $defaults['year'];
15
  <div class="inline-edit-col">
16
  <div class="inline-edit-group">
17
  <legend class="inline-edit-legend"><?php
18
+ esc_html_e('PublishPress Future', 'post-expirator'); ?></legend>
19
  <fieldset class="inline-edit-date">
20
  <div class="pe-qe-fields">
21
  <div>
22
  <legend><span class="title"><?php
23
+ esc_html_e('Date', 'post-expirator'); ?></span></legend>
24
  <label>
25
  <span class="screen-reader-text"><?php
26
+ esc_html_e('Enable Post Expiration', 'post-expirator'); ?></span>
27
  <select name="expirationdate_status">
28
  <option value="no-change" data-show-fields="false" selected>
29
  --<?php
30
+ esc_html_e('No Change', 'post-expirator'); ?>--
31
  </option>
32
  <option value="change-only" data-show-fields="true"
33
  title="<?php
34
+ esc_html_e('Change expiry date if enabled on posts', 'post-expirator'); ?>"><?php
35
+ esc_html_e('Change on posts', 'post-expirator'); ?></option>
36
  <option value="add-only" data-show-fields="true"
37
  title="<?php
38
+ esc_html_e('Add expiry date if not enabled on posts', 'post-expirator'); ?>"><?php
39
+ esc_html_e('Add to posts', 'post-expirator'); ?></option>
40
  <option value="change-add"
41
  data-show-fields="true"><?php
42
+ esc_html_e('Change & Add', 'post-expirator'); ?></option>
43
  <option value="remove-only"
44
  data-show-fields="false"><?php
45
+ esc_html_e('Remove from posts', 'post-expirator'); ?></option>
46
  </select>
47
  </label>
48
  <span class="post-expirator-date-fields">
49
  <label>
50
  <span class="screen-reader-text"><?php
51
+ esc_html_e('Month', 'post-expirator'); ?></span>
52
  <select name="expirationdate_month">
53
  <?php
54
  for ($x = 1; $x <= 12; $x++) {
59
  $selected = $monthNumeric == $defaults['month'] ? 'selected' : '';
60
  ?>
61
  <option value="<?php
62
+ echo esc_attr($monthNumeric); ?>"
63
  data-text="<?php
64
+ echo esc_attr($monthStr); ?>" <?php
65
+ echo esc_attr($selected); ?>><?php
66
+ echo esc_html($monthNumeric); ?>-<?php
67
+ echo esc_html($monthStr); ?></option>
68
  <?php
69
  } ?>
70
 
72
  </label>
73
  <label>
74
  <span class="screen-reader-text"><?php
75
+ esc_html_e('Day', 'post-expirator'); ?></span>
76
  <input name="expirationdate_day" placeholder="<?php
77
+ echo esc_attr($day); ?>" value="" size="2"
78
  maxlength="2" autocomplete="off" type="text">
79
  </label>,
80
  <label>
81
  <span class="screen-reader-text"><?php
82
+ esc_html_e('Year', 'post-expirator'); ?></span>
83
  <input name="expirationdate_year" placeholder="<?php
84
+ echo esc_attr($year); ?>" value="" size="4"
85
  maxlength="4" autocomplete="off" type="text">
86
  </label> @
87
  <label>
88
  <span class="screen-reader-text"><?php
89
+ esc_html_e('Hour', 'post-expirator'); ?></span>
90
  <input name="expirationdate_hour" placeholder="<?php
91
+ echo esc_attr($hour); ?>" value="" size="2"
92
  maxlength="2" autocomplete="off" type="text">
93
  </label> :
94
  <label>
95
  <span class="screen-reader-text"><?php
96
+ esc_html_e('Minute', 'post-expirator'); ?></span>
97
  <input name="expirationdate_minute" placeholder="<?php
98
+ echo esc_attr($minute); ?>" value=""
99
  size="2" maxlength="2" autocomplete="off" type="text">
100
  </label>
101
 
102
  <?php
103
+ echo esc_html(PostExpirator_Util::wp_timezone_string()); ?>
104
  </span>
105
  </div>
106
  <div class="post-expirator-date-fields">
107
  <legend>
108
  <span class="title"><?php
109
+ esc_html_e('Type', 'post-expirator'); ?></span>
110
  <span class="screen-reader-text"><?php
111
+ esc_html_e('How to expire', 'post-expirator'); ?></span>
112
  </legend>
113
  <label>
114
  <?php
124
  <div class="pe-category-list">
125
  <legend>
126
  <span class="title"><?php
127
+ echo esc_html($tax_label); ?></span>
128
  <span class="screen-reader-text"><?php
129
+ esc_html_e('Expiration Categories', 'post-expirator'); ?></span>
130
  </legend>
131
  <ul id="categorychecklist"
132
  class="list:category categorychecklist cat-checklist category-checklist">
142
  ?>
143
  </ul>
144
  </div>
 
145
  </div>
146
  <input name="expirationdate_quickedit" value="true" type="hidden"/>
147
  <input name="postexpirator_view" value="bulk-edit" type="hidden"/>
views/classic-metabox.php CHANGED
@@ -1,16 +1,21 @@
 
 
 
 
1
  <p>
2
- <input type="checkbox" name="enable-expirationdate" id="enable-expirationdate" value="checked"'
3
- . <?php
 
4
  echo $enabled; ?>/>
5
  <label for="enable-expirationdate"><?php
6
- _e('Enable Post Expiration', 'post-expirator'); ?></label>
7
  </p>
8
 
9
  <?php
10
  if ($default === 'publish') {
11
  ?>
12
  <em><?php
13
- _e('The published date/time will be used as the expiration value', 'post-expirator'); ?></em>
14
  <?php
15
  return;
16
  }
@@ -19,7 +24,7 @@ if ($default === 'publish') {
19
  echo empty($enabled) ? 'none' : 'flex'; ?>">
20
  <div>
21
  <label><?php
22
- _e('Year', 'post-expirator'); ?></label>
23
  <select name="expirationdate_year" id="expirationdate_year">
24
  <?php
25
  $currentyear = date('Y');
@@ -37,9 +42,10 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
37
  }
38
  ?>
39
  <option <?php
 
40
  echo $selected; ?> value="<?php
41
- echo $i; ?>"><?php
42
- echo $i; ?></option>
43
  <?php
44
  }
45
  ?>
@@ -47,7 +53,7 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
47
  </div>
48
  <div>
49
  <label><?php
50
- _e('Month', 'post-expirator'); ?></label>
51
  <select name="expirationdate_month" id="expirationdate_month">
52
  <?php
53
  for ($i = 1; $i <= 12; $i++) {
@@ -58,9 +64,10 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
58
  }
59
  ?>
60
  <option value="<?php
61
- echo date_i18n('m', mktime(0, 0, 0, $i, 1, date_i18n('Y'))); ?>" <?php
 
62
  echo $selected; ?>><?php
63
- echo date_i18n('F', mktime(0, 0, 0, $i, 1, date_i18n('Y'))); ?></option>
64
  <?php
65
  }
66
  ?>
@@ -68,16 +75,16 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
68
  </div>
69
  <div>
70
  <label><?php
71
- _e('Day', 'post-expirator'); ?></label>
72
  <input type="text" id="expirationdate_day" name="expirationdate_day" value="<?php
73
- echo $defaultday; ?>"
74
  size="2"/>
75
  </div>
76
  <div>
77
  <label><?php
78
- _e('Hour', 'post-expirator'); ?>
79
  (<?php
80
- echo date_i18n('T', mktime(0, 0, 0, $i, 1, date_i18n('Y'))); ?>)</label>
81
  <select name="expirationdate_hour" id="expirationdate_hour">
82
  <?php
83
  for ($i = 1; $i <= 24; $i++) {
@@ -89,9 +96,10 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
89
  }
90
  ?>
91
  <option value="<?php
92
- echo $hour; ?>" <?php
 
93
  echo $selected; ?>><?php
94
- echo $hour; ?></option>
95
  <?php
96
  }
97
  ?>
@@ -99,14 +107,14 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
99
  </div>
100
  <div>
101
  <label><?php
102
- _e('Minute', 'post-expirator'); ?></label>
103
  <input type="text" id="expirationdate_minute" name="expirationdate_minute" value="<?php
104
- echo $defaultminute; ?>"
105
  size="2"/>
106
  </div>
107
  <div>
108
  <label><?php
109
- _e('How to expire', 'post-expirator'); ?></label>
110
  <?php
111
  _postexpirator_expire_type(array(
112
  'type' => $post->post_type,
@@ -123,8 +131,8 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
123
  $catdisplay = 'none';
124
  }
125
 
126
- echo '<div id="expired-category-selection" style="display: ' . $catdisplay . '">';
127
- echo '<br/>' . __('Expiration Categories', 'post-expirator') . ':<br/>';
128
 
129
  echo '<div class="wp-tab-panel" id="post-expirator-cat-list">';
130
  echo '<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">';
@@ -132,33 +140,33 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
132
  $taxonomies = get_object_taxonomies($post->post_type, 'object');
133
  $taxonomies = wp_filter_object_list($taxonomies, array('hierarchical' => true));
134
  if (sizeof($taxonomies) === 0) {
135
- echo '<p>' . __(
136
  'You must assign a heirarchical taxonomy to this post type to use this feature.',
137
  'post-expirator'
138
  ) . '</p>';
139
- } elseif (sizeof($taxonomies) > 1 && ! isset($defaults['taxonomy'])) {
140
- echo '<p>' . __(
141
  'More than 1 heirachical taxonomy detected. You must assign a default taxonomy on the settings screen.',
142
  'post-expirator'
143
  ) . '</p>';
144
  } else {
145
  $keys = array_keys($taxonomies);
146
- $taxonomy = isset($defaults['taxonomy']) ? $defaults['taxonomy'] : $keys[0];
147
  wp_terms_checklist(0, array(
148
  'taxonomy' => $taxonomy,
149
  'walker' => $walker,
150
  'selected_cats' => $categories,
151
  'checked_ontop' => false
152
  ));
153
- echo '<input type="hidden" name="taxonomy-heirarchical" value="' . $taxonomy . '" />';
154
  }
155
  echo '</ul>';
156
  echo '</div>';
157
  if (isset($taxonomy)) {
158
- echo '<p class="post-expirator-taxonomy-name">' . __(
159
  'Taxonomy Name',
160
  'post-expirator'
161
- ) . ': ' . $taxonomy . '</p>';
162
  }
163
  echo '</div>';
164
  }
@@ -168,4 +176,4 @@ echo empty($enabled) ? 'none' : 'flex'; ?>">
168
  <input name="expirationdate_formcheck" value="true" type="hidden"/>
169
  <input name="postexpirator_view" value="classic-metabox" type="hidden"/>
170
  <?php
171
- wp_nonce_field('__postexpirator', '_postexpiratornonce'); ?>
1
+ <?php
2
+ defined('ABSPATH') or die('Direct access not allowed.');
3
+ ?>
4
+
5
  <p>
6
+ <input type="checkbox" name="enable-expirationdate" id="enable-expirationdate" value="checked"
7
+ <?php
8
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
9
  echo $enabled; ?>/>
10
  <label for="enable-expirationdate"><?php
11
+ esc_html_e('Enable Post Expiration', 'post-expirator'); ?></label>
12
  </p>
13
 
14
  <?php
15
  if ($default === 'publish') {
16
  ?>
17
  <em><?php
18
+ esc_html_e('The published date/time will be used as the expiration value', 'post-expirator'); ?></em>
19
  <?php
20
  return;
21
  }
24
  echo empty($enabled) ? 'none' : 'flex'; ?>">
25
  <div>
26
  <label><?php
27
+ esc_html_e('Year', 'post-expirator'); ?></label>
28
  <select name="expirationdate_year" id="expirationdate_year">
29
  <?php
30
  $currentyear = date('Y');
42
  }
43
  ?>
44
  <option <?php
45
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
46
  echo $selected; ?> value="<?php
47
+ echo esc_attr($i); ?>"><?php
48
+ echo esc_html($i); ?></option>
49
  <?php
50
  }
51
  ?>
53
  </div>
54
  <div>
55
  <label><?php
56
+ esc_html_e('Month', 'post-expirator'); ?></label>
57
  <select name="expirationdate_month" id="expirationdate_month">
58
  <?php
59
  for ($i = 1; $i <= 12; $i++) {
64
  }
65
  ?>
66
  <option value="<?php
67
+ echo esc_attr(date_i18n('m', mktime(0, 0, 0, $i, 1, date_i18n('Y')))); ?>" <?php
68
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
69
  echo $selected; ?>><?php
70
+ echo esc_html(date_i18n('F', mktime(0, 0, 0, $i, 1, date_i18n('Y')))); ?></option>
71
  <?php
72
  }
73
  ?>
75
  </div>
76
  <div>
77
  <label><?php
78
+ esc_html_e('Day', 'post-expirator'); ?></label>
79
  <input type="text" id="expirationdate_day" name="expirationdate_day" value="<?php
80
+ echo esc_attr($defaultday); ?>"
81
  size="2"/>
82
  </div>
83
  <div>
84
  <label><?php
85
+ esc_html_e('Hour', 'post-expirator'); ?>
86
  (<?php
87
+ echo esc_html(date_i18n('T', mktime(0, 0, 0, $i, 1, date_i18n('Y')))); ?>)</label>
88
  <select name="expirationdate_hour" id="expirationdate_hour">
89
  <?php
90
  for ($i = 1; $i <= 24; $i++) {
96
  }
97
  ?>
98
  <option value="<?php
99
+ echo esc_attr($hour); ?>" <?php
100
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
101
  echo $selected; ?>><?php
102
+ echo esc_html($hour); ?></option>
103
  <?php
104
  }
105
  ?>
107
  </div>
108
  <div>
109
  <label><?php
110
+ esc_html_e('Minute', 'post-expirator'); ?></label>
111
  <input type="text" id="expirationdate_minute" name="expirationdate_minute" value="<?php
112
+ echo esc_attr($defaultminute); ?>"
113
  size="2"/>
114
  </div>
115
  <div>
116
  <label><?php
117
+ esc_html_e('How to expire', 'post-expirator'); ?></label>
118
  <?php
119
  _postexpirator_expire_type(array(
120
  'type' => $post->post_type,
131
  $catdisplay = 'none';
132
  }
133
 
134
+ echo '<div id="expired-category-selection" style="display: ' . esc_attr($catdisplay) . '">';
135
+ echo '<br/>' . esc_html__('Expiration Categories', 'post-expirator') . ':<br/>';
136
 
137
  echo '<div class="wp-tab-panel" id="post-expirator-cat-list">';
138
  echo '<ul id="categorychecklist" class="list:category categorychecklist form-no-clear">';
140
  $taxonomies = get_object_taxonomies($post->post_type, 'object');
141
  $taxonomies = wp_filter_object_list($taxonomies, array('hierarchical' => true));
142
  if (sizeof($taxonomies) === 0) {
143
+ echo '<p>' . esc_html__(
144
  'You must assign a heirarchical taxonomy to this post type to use this feature.',
145
  'post-expirator'
146
  ) . '</p>';
147
+ } elseif (sizeof($taxonomies) > 1 && ! isset($defaultsOption['taxonomy'])) {
148
+ echo '<p>' . esc_html__(
149
  'More than 1 heirachical taxonomy detected. You must assign a default taxonomy on the settings screen.',
150
  'post-expirator'
151
  ) . '</p>';
152
  } else {
153
  $keys = array_keys($taxonomies);
154
+ $taxonomy = isset($defaultsOption['taxonomy']) ? $defaultsOption['taxonomy'] : $keys[0];
155
  wp_terms_checklist(0, array(
156
  'taxonomy' => $taxonomy,
157
  'walker' => $walker,
158
  'selected_cats' => $categories,
159
  'checked_ontop' => false
160
  ));
161
+ echo '<input type="hidden" name="taxonomy-heirarchical" value="' . esc_attr($taxonomy) . '" />';
162
  }
163
  echo '</ul>';
164
  echo '</div>';
165
  if (isset($taxonomy)) {
166
+ echo '<p class="post-expirator-taxonomy-name">' . esc_html__(
167
  'Taxonomy Name',
168
  'post-expirator'
169
+ ) . ': ' . esc_html($taxonomy) . '</p>';
170
  }
171
  echo '</div>';
172
  }
176
  <input name="expirationdate_formcheck" value="true" type="hidden"/>
177
  <input name="postexpirator_view" value="classic-metabox" type="hidden"/>
178
  <?php
179
+ wp_nonce_field('__postexpirator', '_postexpiratornonce');
views/expire-column.php CHANGED
@@ -1,15 +1,28 @@
1
- <div class="post-expire-col" data-id="<?php
2
- echo esc_attr($id); ?>"
3
- data-expire-attributes="<?php
4
- echo esc_attr(json_encode($attributes)); ?>">
 
5
  <?php
 
 
 
6
  $expirationEnabled = PostExpirator_Facade::is_expiration_enabled_for_post($id);
7
  $expirationDate = get_post_meta($id, '_expiration-date', true);
 
8
  if ($expirationDate && $expirationEnabled) {
9
  $format = get_option('date_format') . ' ' . get_option('time_format');
10
  $display = PostExpirator_Util::get_wp_date($format, $expirationDate);
 
 
 
 
 
 
 
11
  } else {
12
  $display = __('Never', 'post-expirator');
 
13
  }
14
 
15
  $defaults = get_option('expirationdateDefaults' . ucfirst($post_type));
@@ -52,15 +65,16 @@ echo esc_attr($id); ?>"
52
  }
53
 
54
  // the hidden fields will be used by quick edit
55
-
56
  ?>
 
 
57
  <?php echo esc_html($display); ?>
58
- <input type="hidden" id="expirationdate_year-<?php echo $id; ?>" value="<?php echo $year; ?>" />
59
- <input type="hidden" id="expirationdate_month-<?php echo $id; ?>" value="<?php echo $month; ?>" />
60
- <input type="hidden" id="expirationdate_day-<?php echo $id; ?>" value="<?php echo $day; ?>" />
61
- <input type="hidden" id="expirationdate_hour-<?php echo $id; ?>" value="<?php echo $hour; ?>" />
62
- <input type="hidden" id="expirationdate_minute-<?php echo $id; ?>" value="<?php echo $minute; ?>" />
63
- <input type="hidden" id="expirationdate_enabled-<?php echo $id; ?>" value="<?php echo $enabled; ?>" />
64
- <input type="hidden" id="expirationdate_expireType-<?php echo $id; ?>" value="<?php echo $expireType; ?>" />
65
- <input type="hidden" id="expirationdate_categories-<?php echo $id; ?>" value="<?php echo $categories; ?>" />
66
  </div>
1
+ <?php
2
+ defined('ABSPATH') or die('Direct access not allowed.');
3
+ ?>
4
+ <div class="post-expire-col" data-id="<?php echo esc_attr($id); ?>"
5
+ data-expire-attributes="<?php echo esc_attr(json_encode($attributes)); ?>">
6
  <?php
7
+ $iconClass = '';
8
+ $iconTitle = '';
9
+
10
  $expirationEnabled = PostExpirator_Facade::is_expiration_enabled_for_post($id);
11
  $expirationDate = get_post_meta($id, '_expiration-date', true);
12
+
13
  if ($expirationDate && $expirationEnabled) {
14
  $format = get_option('date_format') . ' ' . get_option('time_format');
15
  $display = PostExpirator_Util::get_wp_date($format, $expirationDate);
16
+ if (PostExpirator_CronFacade::post_has_scheduled_task($id)) {
17
+ $iconClass = 'clock icon-scheduled';
18
+ $iconTitle = __('Cron event scheduled.', 'post-expirator');
19
+ } else {
20
+ $iconClass = 'warning icon-missed';
21
+ $iconTitle = __('Cron event not found!', 'post-expirator');
22
+ }
23
  } else {
24
  $display = __('Never', 'post-expirator');
25
+ $iconClass = 'marker icon-never';
26
  }
27
 
28
  $defaults = get_option('expirationdateDefaults' . ucfirst($post_type));
65
  }
66
 
67
  // the hidden fields will be used by quick edit
 
68
  ?>
69
+ <span class="dashicons dashicons-<?php echo esc_attr($iconClass); ?>" title="<?php echo esc_attr($iconTitle); ?>"></span>
70
+
71
  <?php echo esc_html($display); ?>
72
+ <input type="hidden" id="expirationdate_year-<?php echo esc_attr($id); ?>" value="<?php echo esc_attr($year); ?>" />
73
+ <input type="hidden" id="expirationdate_month-<?php echo esc_attr($id); ?>" value="<?php echo esc_attr($month); ?>" />
74
+ <input type="hidden" id="expirationdate_day-<?php echo esc_attr($id); ?>" value="<?php echo esc_attr($day); ?>" />
75
+ <input type="hidden" id="expirationdate_hour-<?php echo esc_attr($id); ?>" value="<?php echo esc_attr($hour); ?>" />
76
+ <input type="hidden" id="expirationdate_minute-<?php echo esc_attr($id); ?>" value="<?php echo esc_attr($minute); ?>" />
77
+ <input type="hidden" id="expirationdate_enabled-<?php echo esc_attr($id); ?>" value="<?php echo esc_attr($enabled); ?>" />
78
+ <input type="hidden" id="expirationdate_expireType-<?php echo esc_attr($id); ?>" value="<?php echo esc_attr($expireType); ?>" />
79
+ <input type="hidden" id="expirationdate_categories-<?php echo esc_attr($id); ?>" value="<?php echo esc_attr($categories); ?>" />
80
  </div>
views/how-to-expire.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
 
3
  // @TODO remove extract
4
  extract($opts);
@@ -20,37 +21,37 @@ if (empty($type) && isset($opts['post_type'])) {
20
 
21
  ?>
22
  <select name="<?php
23
- echo $name; ?>" id="<?php
24
- echo $id; ?>" class="pe-howtoexpire">
25
  <option value="draft" <?php
26
  echo $selected === 'draft' ? 'selected="selected"' : ''; ?>><?php
27
- _e('Draft', 'post-expirator'); ?></option>
28
  <option value="delete" <?php
29
  echo $selected === 'delete' ? 'selected="selected"' : ''; ?>><?php
30
- _e('Delete', 'post-expirator'); ?></option>
31
  <option value="trash" <?php
32
  echo $selected === 'trash' ? 'selected="selected"' : ''; ?>><?php
33
- _e('Trash', 'post-expirator'); ?></option>
34
  <option value="private" <?php
35
  echo $selected === 'private' ? 'selected="selected"' : ''; ?>><?php
36
- _e('Private', 'post-expirator'); ?></option>
37
  <option value="stick" <?php
38
  echo $selected === 'stick' ? 'selected="selected"' : ''; ?>><?php
39
- _e('Stick', 'post-expirator'); ?></option>
40
  <option value="unstick" <?php
41
  echo $selected === 'unstick' ? 'selected="selected"' : ''; ?>><?php
42
- _e('Unstick', 'post-expirator'); ?></option>
43
  <?php
44
  if ($type !== 'page') { ?>
45
  <option value="category" <?php
46
  echo $selected === 'category' ? 'selected="selected"' : ''; ?>><?php
47
- _e('Category: Replace', 'post-expirator'); ?></option>
48
  <option value="category-add" <?php
49
  echo $selected === 'category-add' ? 'selected="selected"' : ''; ?>><?php
50
- _e('Category: Add', 'post-expirator'); ?></option>
51
  <option value="category-remove" <?php
52
  echo $selected === 'category-remove' ? 'selected="selected"' : ''; ?>><?php
53
- _e('Category: Remove', 'post-expirator'); ?></option>
54
  <?php
55
  } ?>
56
  </select>
1
  <?php
2
+ defined('ABSPATH') or die('Direct access not allowed.');
3
 
4
  // @TODO remove extract
5
  extract($opts);
21
 
22
  ?>
23
  <select name="<?php
24
+ echo esc_attr($name); ?>" id="<?php
25
+ echo esc_attr($id); ?>" class="pe-howtoexpire">
26
  <option value="draft" <?php
27
  echo $selected === 'draft' ? 'selected="selected"' : ''; ?>><?php
28
+ esc_html_e('Draft', 'post-expirator'); ?></option>
29
  <option value="delete" <?php
30
  echo $selected === 'delete' ? 'selected="selected"' : ''; ?>><?php
31
+ esc_html_e('Delete', 'post-expirator'); ?></option>
32
  <option value="trash" <?php
33
  echo $selected === 'trash' ? 'selected="selected"' : ''; ?>><?php
34
+ esc_html_e('Trash', 'post-expirator'); ?></option>
35
  <option value="private" <?php
36
  echo $selected === 'private' ? 'selected="selected"' : ''; ?>><?php
37
+ esc_html_e('Private', 'post-expirator'); ?></option>
38
  <option value="stick" <?php
39
  echo $selected === 'stick' ? 'selected="selected"' : ''; ?>><?php
40
+ esc_html_e('Stick', 'post-expirator'); ?></option>
41
  <option value="unstick" <?php
42
  echo $selected === 'unstick' ? 'selected="selected"' : ''; ?>><?php
43
+ esc_html_e('Unstick', 'post-expirator'); ?></option>
44
  <?php
45
  if ($type !== 'page') { ?>
46
  <option value="category" <?php
47
  echo $selected === 'category' ? 'selected="selected"' : ''; ?>><?php
48
+ esc_html_e('Category: Replace', 'post-expirator'); ?></option>
49
  <option value="category-add" <?php
50
  echo $selected === 'category-add' ? 'selected="selected"' : ''; ?>><?php
51
+ esc_html_e('Category: Add', 'post-expirator'); ?></option>
52
  <option value="category-remove" <?php
53
  echo $selected === 'category-remove' ? 'selected="selected"' : ''; ?>><?php
54
+ esc_html_e('Category: Remove', 'post-expirator'); ?></option>
55
  <?php
56
  } ?>
57
  </select>
views/menu-advanced.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  // Get Option
3
  $preserveData = (bool)get_option('expirationdatePreserveData', true);
4
 
1
  <?php
2
+
3
+ defined('ABSPATH') or die('Direct access not allowed.');
4
+
5
  // Get Option
6
  $preserveData = (bool)get_option('expirationdatePreserveData', true);
7
 
views/menu-defaults.php CHANGED
@@ -1,11 +1,16 @@
 
 
 
 
 
1
  <form method="post">
2
  <?php
3
  wp_nonce_field('postexpirator_menu_defaults', '_postExpiratorMenuDefaults_nonce'); ?>
4
  <h3><?php
5
- _e('Default Expiration Values', 'post-expirator'); ?></h3>
6
 
7
  <p><?php
8
- _e(
9
  'Use the values below to set the default actions/values to be used for each for the corresponding post types. These values can all be overwritten when creating/editing the post/page.',
10
  'post-expirator'
11
  ); ?></p>
@@ -13,8 +18,9 @@
13
  <?php
14
  foreach ($types as $type) {
15
  $post_type_object = get_post_type_object($type);
 
16
  echo '<fieldset>';
17
- echo "<legend>&nbsp;{$post_type_object->labels->singular_name}&nbsp;</legend>";
18
  $defaults = get_option('expirationdateDefaults' . ucfirst($type));
19
 
20
  // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
@@ -55,24 +61,26 @@
55
  <table class="form-table">
56
  <tr valign="top">
57
  <th scope="row"><label for="expirationdate_activemeta-<?php
58
- echo $type; ?>"><?php
59
- _e('Active', 'post-expirator'); ?></label></th>
60
  <td>
61
  <input type="radio" name="expirationdate_activemeta-<?php
62
- echo $type; ?>" id="expirationdate_activemeta-true-<?php
63
- echo $type; ?>" value="active" <?php
 
64
  echo $expiredactivemetaenabled; ?>/> <label for="expirationdate_activemeta-true-<?php
65
- echo $type; ?>"><?php
66
- _e('Active', 'post-expirator'); ?></label>
67
  &nbsp;&nbsp;
68
  <input type="radio" name="expirationdate_activemeta-<?php
69
- echo $type; ?>" id="expirationdate_activemeta-false-<?php
70
- echo $type; ?>" value="inactive" <?php
 
71
  echo $expiredactivemetadisabled; ?>/> <label for="expirationdate_activemeta-false-<?php
72
- echo $type; ?>"><?php
73
- _e('Inactive', 'post-expirator'); ?></label>
74
  <p class="description"><?php
75
- _e(
76
  'Select whether the PublishPress Future meta box is active for this post type.',
77
  'post-expirator'
78
  ); ?></p>
@@ -80,40 +88,42 @@
80
  </tr>
81
  <tr valign="top">
82
  <th scope="row"><label for="expirationdate_expiretype-<?php
83
- echo $type; ?>"><?php
84
- _e('How to expire', 'post-expirator'); ?></label></th>
85
  <td>
86
  <?php
87
  _postexpirator_expire_type(
88
  array(
89
- 'name' => 'expirationdate_expiretype-' . $type,
90
  'selected' => (isset($defaults['expireType']) ? $defaults['expireType'] : '')
91
  )
92
  ); ?>
93
  <p class="description"><?php
94
- _e('Select the default expire action for the post type.', 'post-expirator'); ?></p>
95
  </td>
96
  </tr>
97
  <tr valign="top">
98
  <th scope="row"><label for="expirationdate_autoenable-<?php
99
- echo $type; ?>"><?php
100
- _e('Auto-Enable?', 'post-expirator'); ?></label></th>
101
  <td>
102
  <input type="radio" name="expirationdate_autoenable-<?php
103
- echo $type; ?>" id="expirationdate_autoenable-true-<?php
104
- echo $type; ?>" value="1" <?php
 
105
  echo $expiredautoenabled; ?>/> <label for="expirationdate_autoenable-true-<?php
106
- echo $type; ?>"><?php
107
- _e('Enabled', 'post-expirator'); ?></label>
108
  &nbsp;&nbsp;
109
  <input type="radio" name="expirationdate_autoenable-<?php
110
- echo $type; ?>" id="expirationdate_autoenable-false-<?php
111
- echo $type; ?>" value="0" <?php
 
112
  echo $expiredautodisabled; ?>/> <label for="expirationdate_autoenable-false-<?php
113
- echo $type; ?>"><?php
114
- _e('Disabled', 'post-expirator'); ?></label>
115
  <p class="description"><?php
116
- _e(
117
  'Select whether the PublishPress Future is enabled for all new posts.',
118
  'post-expirator'
119
  ); ?></p>
@@ -121,30 +131,39 @@
121
  </tr>
122
  <tr valign="top">
123
  <th scope="row"><label for="expirationdate_taxonomy-<?php
124
- echo $type; ?>"><?php
125
- _e('Taxonomy (hierarchical)', 'post-expirator'); ?></label></th>
126
  <td>
127
  <?php
128
- echo _postexpirator_taxonomy(
129
- array(
130
- 'type' => $type,
131
- 'name' => 'expirationdate_taxonomy-' . $type,
132
- 'selected' => $defaults['taxonomy']
133
- )
134
- ); ?>
 
 
 
 
 
 
 
 
 
135
  </td>
136
  </tr>
137
  <tr valign="top">
138
  <th scope="row"><label for="expirationdate_emailnotification-<?php
139
- echo $type; ?>"><?php
140
- _e('Who to notify', 'post-expirator'); ?></label></th>
141
  <td>
142
  <input class="large-text" type="text" name="expirationdate_emailnotification-<?php
143
- echo $type; ?>" id="expirationdate_emailnotification-<?php
144
- echo $type; ?>" value="<?php
145
- echo $defaults['emailnotification']; ?>"/>
146
  <p class="description"><?php
147
- _e(
148
  'Enter a comma separate list of emails that you would like to be notified when the post expires.',
149
  'post-expirator'
150
  ); ?></p>
@@ -152,10 +171,10 @@
152
  </tr>
153
  <?php
154
  $values = array(
155
- '' => __('None', 'post-expirator'),
156
- 'inherit' => __('Inherit from General Settings', 'post-expirator'),
157
- 'custom' => __('Custom', 'post-expirator'),
158
- 'publish' => __('Publish Time', 'post-expirator'),
159
  );
160
 
161
  $show = 'none';
@@ -169,40 +188,40 @@
169
 
170
  <tr valign="top">
171
  <th scope="row"><label for="expired-default-date-<?php
172
- echo $type; ?>"><?php
173
- _e('Default Date/Time Duration', 'post-expirator'); ?></label></th>
174
  <td>
175
  <select name="expired-default-date-<?php
176
- echo $type; ?>" id="expired-default-date-<?php
177
- echo $type; ?>" class="pe-custom-date-toggle">
178
  <?php
179
  foreach ($values as $value => $label) { ?>
180
  <option value="<?php
181
- echo $value; ?>" <?php
182
  selected($value, $defaults['default-expire-type']); ?>><?php
183
- echo $label; ?></option>
184
  <?php
185
  } ?>
186
  </select>
187
  <p class="description"><?php
188
- _e(
189
  'Set the default expiration date to be used when creating a new post of this type.',
190
  'post-expirator'
191
  ); ?></p>
192
  <div id="expired-custom-container-<?php
193
- echo $type; ?>" class="pe-custom-date-container" style="display: <?php
194
- echo $show; ?>;">
195
  <br/>
196
  <label for="expired-custom-date-<?php
197
- echo $type; ?>"><?php
198
- _e('Custom', 'post-expirator'); ?>:</label>
199
  <input type="text" value="<?php
200
- echo $customDate; ?>" name="expired-custom-date-<?php
201
- echo $type; ?>" id="expired-custom-date-<?php
202
- echo $type; ?>"/>
203
  <p class="description"><?php
204
  echo sprintf(
205
- __(
206
  'Set the custom value to use for the default expiration date. For information on formatting, see %1$s. For example, you could enter %2$s+1 month%3$s or %4$s+1 week 2 days 4 hours 2 seconds%5$s or %6$snext Thursday%7$s.',
207
  'post-expirator'
208
  ),
@@ -225,6 +244,6 @@
225
  ?>
226
  <p class="submit">
227
  <input type="submit" name="expirationdateSaveDefaults" class="button-primary" value="<?php
228
- _e('Save Changes', 'post-expirator'); ?>"/>
229
  </p>
230
  </form>
1
+ <?php
2
+
3
+ defined('ABSPATH') or die('Direct access not allowed.');
4
+ ?>
5
+
6
  <form method="post">
7
  <?php
8
  wp_nonce_field('postexpirator_menu_defaults', '_postExpiratorMenuDefaults_nonce'); ?>
9
  <h3><?php
10
+ esc_html_e('Default Expiration Values', 'post-expirator'); ?></h3>
11
 
12
  <p><?php
13
+ esc_html_e(
14
  'Use the values below to set the default actions/values to be used for each for the corresponding post types. These values can all be overwritten when creating/editing the post/page.',
15
  'post-expirator'
16
  ); ?></p>
18
  <?php
19
  foreach ($types as $type) {
20
  $post_type_object = get_post_type_object($type);
21
+ $singularName = $post_type_object->labels->singular_name;
22
  echo '<fieldset>';
23
+ echo '<legend>&nbsp;' . esc_html($singularName) . '&nbsp;</legend>';
24
  $defaults = get_option('expirationdateDefaults' . ucfirst($type));
25
 
26
  // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison
61
  <table class="form-table">
62
  <tr valign="top">
63
  <th scope="row"><label for="expirationdate_activemeta-<?php
64
+ echo esc_attr($type); ?>"><?php
65
+ esc_html_e('Active', 'post-expirator'); ?></label></th>
66
  <td>
67
  <input type="radio" name="expirationdate_activemeta-<?php
68
+ echo esc_attr($type); ?>" id="expirationdate_activemeta-true-<?php
69
+ echo esc_attr($type); ?>" value="active" <?php
70
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
71
  echo $expiredactivemetaenabled; ?>/> <label for="expirationdate_activemeta-true-<?php
72
+ echo esc_attr($type); ?>"><?php
73
+ esc_html_e('Active', 'post-expirator'); ?></label>
74
  &nbsp;&nbsp;
75
  <input type="radio" name="expirationdate_activemeta-<?php
76
+ echo esc_attr($type); ?>" id="expirationdate_activemeta-false-<?php
77
+ echo esc_attr($type); ?>" value="inactive" <?php
78
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
79
  echo $expiredactivemetadisabled; ?>/> <label for="expirationdate_activemeta-false-<?php
80
+ echo esc_attr($type); ?>"><?php
81
+ esc_html_e('Inactive', 'post-expirator'); ?></label>
82
  <p class="description"><?php
83
+ esc_html_e(
84
  'Select whether the PublishPress Future meta box is active for this post type.',
85
  'post-expirator'
86
  ); ?></p>
88
  </tr>
89
  <tr valign="top">
90
  <th scope="row"><label for="expirationdate_expiretype-<?php
91
+ echo esc_attr($type); ?>"><?php
92
+ esc_html_e('How to expire', 'post-expirator'); ?></label></th>
93
  <td>
94
  <?php
95
  _postexpirator_expire_type(
96
  array(
97
+ 'name' => 'expirationdate_expiretype-' . esc_attr($type),
98
  'selected' => (isset($defaults['expireType']) ? $defaults['expireType'] : '')
99
  )
100
  ); ?>
101
  <p class="description"><?php
102
+ esc_html_e('Select the default expire action for the post type.', 'post-expirator'); ?></p>
103
  </td>
104
  </tr>
105
  <tr valign="top">
106
  <th scope="row"><label for="expirationdate_autoenable-<?php
107
+ echo esc_attr($type); ?>"><?php
108
+ esc_html_e('Auto-Enable?', 'post-expirator'); ?></label></th>
109
  <td>
110
  <input type="radio" name="expirationdate_autoenable-<?php
111
+ echo esc_attr($type); ?>" id="expirationdate_autoenable-true-<?php
112
+ echo esc_attr($type); ?>" value="1" <?php
113
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
114
  echo $expiredautoenabled; ?>/> <label for="expirationdate_autoenable-true-<?php
115
+ echo esc_attr($type); ?>"><?php
116
+ esc_html_e('Enabled', 'post-expirator'); ?></label>
117
  &nbsp;&nbsp;
118
  <input type="radio" name="expirationdate_autoenable-<?php
119
+ echo esc_attr($type); ?>" id="expirationdate_autoenable-false-<?php
120
+ echo esc_attr($type); ?>" value="0" <?php
121
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
122
  echo $expiredautodisabled; ?>/> <label for="expirationdate_autoenable-false-<?php
123
+ echo esc_attr($type); ?>"><?php
124
+ esc_html_e('Disabled', 'post-expirator'); ?></label>
125
  <p class="description"><?php
126
+ esc_html_e(
127
  'Select whether the PublishPress Future is enabled for all new posts.',
128
  'post-expirator'
129
  ); ?></p>
131
  </tr>
132
  <tr valign="top">
133
  <th scope="row"><label for="expirationdate_taxonomy-<?php
134
+ echo esc_attr($type); ?>"><?php
135
+ esc_html_e('Taxonomy (hierarchical)', 'post-expirator'); ?></label></th>
136
  <td>
137
  <?php
138
+ echo wp_kses(
139
+ _postexpirator_taxonomy(
140
+ [
141
+ 'type' => $type,
142
+ 'name' => 'expirationdate_taxonomy-' . $type,
143
+ 'selected' => $defaults['taxonomy']
144
+ ]
145
+ ),
146
+ [
147
+ 'select' => [],
148
+ 'option' => [],
149
+ 'p' => [],
150
+
151
+ ]
152
+ );
153
+ ?>
154
  </td>
155
  </tr>
156
  <tr valign="top">
157
  <th scope="row"><label for="expirationdate_emailnotification-<?php
158
+ echo esc_attr($type); ?>"><?php
159
+ esc_html_e('Who to notify', 'post-expirator'); ?></label></th>
160
  <td>
161
  <input class="large-text" type="text" name="expirationdate_emailnotification-<?php
162
+ echo esc_attr($type); ?>" id="expirationdate_emailnotification-<?php
163
+ echo esc_attr($type); ?>" value="<?php
164
+ echo esc_attr($defaults['emailnotification']); ?>"/>
165
  <p class="description"><?php
166
+ esc_html_e(
167
  'Enter a comma separate list of emails that you would like to be notified when the post expires.',
168
  'post-expirator'
169
  ); ?></p>
171
  </tr>
172
  <?php
173
  $values = array(
174
+ '' => esc_html__('None', 'post-expirator'),
175
+ 'inherit' => esc_html__('Inherit from General Settings', 'post-expirator'),
176
+ 'custom' => esc_html__('Custom', 'post-expirator'),
177
+ 'publish' => esc_html__('Publish Time', 'post-expirator'),
178
  );
179
 
180
  $show = 'none';
188
 
189
  <tr valign="top">
190
  <th scope="row"><label for="expired-default-date-<?php
191
+ echo esc_attr($type); ?>"><?php
192
+ esc_html_e('Default Date/Time Duration', 'post-expirator'); ?></label></th>
193
  <td>
194
  <select name="expired-default-date-<?php
195
+ echo esc_attr($type); ?>" id="expired-default-date-<?php
196
+ echo esc_attr($type); ?>" class="pe-custom-date-toggle">
197
  <?php
198
  foreach ($values as $value => $label) { ?>
199
  <option value="<?php
200
+ echo esc_attr($value); ?>" <?php
201
  selected($value, $defaults['default-expire-type']); ?>><?php
202
+ echo esc_html($label); ?></option>
203
  <?php
204
  } ?>
205
  </select>
206
  <p class="description"><?php
207
+ esc_html_e(
208
  'Set the default expiration date to be used when creating a new post of this type.',
209
  'post-expirator'
210
  ); ?></p>
211
  <div id="expired-custom-container-<?php
212
+ echo esc_attr($type); ?>" class="pe-custom-date-container" style="display: <?php
213
+ echo esc_attr($show); ?>;">
214
  <br/>
215
  <label for="expired-custom-date-<?php
216
+ echo esc_attr($type); ?>"><?php
217
+ esc_html_e('Custom', 'post-expirator'); ?>:</label>
218
  <input type="text" value="<?php
219
+ echo esc_attr($customDate); ?>" name="expired-custom-date-<?php
220
+ echo esc_attr($type); ?>" id="expired-custom-date-<?php
221
+ echo esc_attr($type); ?>"/>
222
  <p class="description"><?php
223
  echo sprintf(
224
+ esc_html__(
225
  'Set the custom value to use for the default expiration date. For information on formatting, see %1$s. For example, you could enter %2$s+1 month%3$s or %4$s+1 week 2 days 4 hours 2 seconds%5$s or %6$snext Thursday%7$s.',
226
  'post-expirator'
227
  ),
244
  ?>
245
  <p class="submit">
246
  <input type="submit" name="expirationdateSaveDefaults" class="button-primary" value="<?php
247
+ esc_html_e('Save Changes', 'post-expirator'); ?>"/>
248
  </p>
249
  </form>
views/menu-diagnostics.php CHANGED
@@ -1,32 +1,36 @@
 
 
 
 
1
  <form method="post" id="postExpiratorMenuUpgrade">
2
  <?php
3
  wp_nonce_field('postexpirator_menu_diagnostics', '_postExpiratorMenuDiagnostics_nonce'); ?>
4
  <h3><?php
5
- _e('Advanced Diagnostics', 'post-expirator'); ?></h3>
6
  <table class="form-table">
7
  <tr>
8
  <th scope="row"><label for="postexpirator-log"><?php
9
- _e('Debug Logging', 'post-expirator'); ?></label></th>
10
  <td>
11
  <?php
12
  if (defined('POSTEXPIRATOR_DEBUG') && POSTEXPIRATOR_DEBUG) : ?>
13
  <i class="dashicons dashicons-yes-alt pe-status pe-status-enabled"></i> <span><?php
14
- _e('Enabled', 'post-expirator'); ?></span>
15
  <?php
16
- echo '<input type="submit" class="button" name="debugging-disable" id="debugging-disable" value=" ' . __(
17
  'Disable Debugging',
18
  'post-expirator'
19
  ) . '" />'; ?>
20
  <?php
21
- echo '<a href="' . admin_url(
22
- 'options-general.php?page=post-expirator.php&tab=viewdebug'
23
- ) . '">' . __('View Debug Logs', 'post-expirator') . '</a>'; ?>
24
  <?php
25
  else: ?>
26
  <i class="dashicons dashicons-no-alt pe-status pe-status-disabled"></i> <span><?php
27
- _e('Disabled', 'post-expirator'); ?></span>
28
  <?php
29
- echo '<input type="submit" class="button" name="debugging-enable" id="debugging-enable" value=" ' . __(
30
  'Enable Debugging',
31
  'post-expirator'
32
  ) . '" />'; ?>
@@ -37,24 +41,24 @@
37
  </tr>
38
  <tr>
39
  <th scope="row"><?php
40
- _e('Purge Debug Log', 'post-expirator'); ?></th>
41
  <td>
42
  <input type="submit" class="button" name="purge-debug" id="purge-debug" value="<?php
43
- _e('Purge Debug Log', 'post-expirator'); ?>"/>
44
  </td>
45
  </tr>
46
  <tr>
47
  <th scope="row"><?php
48
- _e('WP-Cron Status', 'post-expirator'); ?></th>
49
  <td>
50
  <?php
51
  if (PostExpirator_CronFacade::is_cron_enabled()) : ?>
52
  <i class="dashicons dashicons-yes pe-status pe-status-enabled"></i> <span><?php
53
- _e('Enabled', 'post-expirator'); ?></span>
54
  <?php
55
  else: ?>
56
  <i class="dashicons dashicons-no pe-status pe-status-disabled"></i> <span><?php
57
- _e('Disabled', 'post-expirator'); ?></span>
58
  <?php
59
  endif;
60
  ?>
@@ -62,7 +66,7 @@
62
  </tr/>
63
  <tr>
64
  <th scope="row"><label for="cron-schedule"><?php
65
- _e('Current Cron Schedule', 'post-expirator'); ?></label></th>
66
  <td>
67
  <?php
68
  $cron = PostExpirator_CronFacade::get_plugin_cron_events();
@@ -70,7 +74,7 @@
70
  if (empty($cron)) {
71
  ?>
72
  <p><?php
73
- _e(
74
  'No cron events found for the plugin.',
75
  'post-expirator'
76
  ); ?></p>
@@ -78,7 +82,7 @@
78
  } else {
79
  ?>
80
  <p><?php
81
- _e(
82
  'The below table will show all currently scheduled cron events for the pluginwith the next run time.',
83
  'post-expirator'
84
  ); ?></p>
@@ -87,21 +91,21 @@
87
  <table class="striped">
88
  <tr>
89
  <th><?php
90
- _e('Date', 'post-expirator'); ?></th>
91
  <th><?php
92
- _e('Event', 'post-expirator'); ?></th>
93
  <th><?php
94
- _e('Arguments / Schedule', 'post-expirator'); ?></th>
95
  <th><?php
96
- _e('Post', 'post-expirator'); ?></th>
97
  </tr>
98
  <?php
99
 
100
  foreach ($cron as $time => $value) {
101
  foreach ($value as $eventkey => $eventvalue) {
102
  echo '<tr class="pe-event">';
103
- echo '<td>' . PostExpirator_Util::get_wp_date('r', $time) . '</td>';
104
- echo '<td>' . $eventkey . '</td>';
105
  $arrkey = array_keys($eventvalue);
106
  $firstArgsUid = null;
107
  echo '<td>';
@@ -110,22 +114,20 @@
110
  $firstArgsUid = $eventguid;
111
  }
112
  if (empty($eventvalue[$eventguid]['args'])) {
113
- echo '<div>' . __('No Arguments', 'post-expirator') . '</div>';
114
  } else {
115
  echo '<div>';
116
- $args = array();
117
  foreach ($eventvalue[$eventguid]['args'] as $key => $value) {
118
- $args[] = "$key => $value";
119
  }
120
- echo implode("<br/>\n", $args);
121
  echo '</div>';
122
  }
123
  }
124
  echo '&nbsp;/&nbsp;';
125
  if (empty($eventvalue[$eventguid]['schedule'])) {
126
- echo __('Single Event', 'post-expirator');
127
  } else {
128
- echo $eventvalue[$eventguid]['schedule'] . ' (' . $eventvalue[$eventguid]['interval'] . ')';
129
  }
130
  echo '</td>';
131
 
@@ -139,7 +141,7 @@
139
  $post = get_post((int)$eventvalue[$firstArgsUid]['args'][0]);
140
 
141
  if (! empty($post) && ! is_wp_error($post) && is_object($post)) {
142
- echo "{$post->ID}: {$post->post_title} ({$post->post_status})";
143
  }
144
  }
145
  echo '</td>';
1
+ <?php
2
+ defined('ABSPATH') or die('Direct access not allowed.');
3
+ ?>
4
+
5
  <form method="post" id="postExpiratorMenuUpgrade">
6
  <?php
7
  wp_nonce_field('postexpirator_menu_diagnostics', '_postExpiratorMenuDiagnostics_nonce'); ?>
8
  <h3><?php
9
+ esc_html_e('Advanced Diagnostics', 'post-expirator'); ?></h3>
10
  <table class="form-table">
11
  <tr>
12
  <th scope="row"><label for="postexpirator-log"><?php
13
+ esc_html_e('Debug Logging', 'post-expirator'); ?></label></th>
14
  <td>
15
  <?php
16
  if (defined('POSTEXPIRATOR_DEBUG') && POSTEXPIRATOR_DEBUG) : ?>
17
  <i class="dashicons dashicons-yes-alt pe-status pe-status-enabled"></i> <span><?php
18
+ esc_html_e('Enabled', 'post-expirator'); ?></span>
19
  <?php
20
+ echo '<input type="submit" class="button" name="debugging-disable" id="debugging-disable" value=" ' . esc_html__(
21
  'Disable Debugging',
22
  'post-expirator'
23
  ) . '" />'; ?>
24
  <?php
25
+ echo '<a href="' . esc_url(admin_url(
26
+ 'admin.php?page=publishpress-future&tab=viewdebug'
27
+ )) . '">' . esc_html__('View Debug Logs', 'post-expirator') . '</a>'; ?>
28
  <?php
29
  else: ?>
30
  <i class="dashicons dashicons-no-alt pe-status pe-status-disabled"></i> <span><?php
31
+ esc_html_e('Disabled', 'post-expirator'); ?></span>
32
  <?php
33
+ echo '<input type="submit" class="button" name="debugging-enable" id="debugging-enable" value=" ' . esc_html__(
34
  'Enable Debugging',
35
  'post-expirator'
36
  ) . '" />'; ?>
41
  </tr>
42
  <tr>
43
  <th scope="row"><?php
44
+ esc_html_e('Purge Debug Log', 'post-expirator'); ?></th>
45
  <td>
46
  <input type="submit" class="button" name="purge-debug" id="purge-debug" value="<?php
47
+ esc_html_e('Purge Debug Log', 'post-expirator'); ?>"/>
48
  </td>
49
  </tr>
50
  <tr>
51
  <th scope="row"><?php
52
+ esc_html_e('WP-Cron Status', 'post-expirator'); ?></th>
53
  <td>
54
  <?php
55
  if (PostExpirator_CronFacade::is_cron_enabled()) : ?>
56
  <i class="dashicons dashicons-yes pe-status pe-status-enabled"></i> <span><?php
57
+ esc_html_e('Enabled', 'post-expirator'); ?></span>
58
  <?php
59
  else: ?>
60
  <i class="dashicons dashicons-no pe-status pe-status-disabled"></i> <span><?php
61
+ esc_html_e('Disabled', 'post-expirator'); ?></span>
62
  <?php
63
  endif;
64
  ?>
66
  </tr/>
67
  <tr>
68
  <th scope="row"><label for="cron-schedule"><?php
69
+ esc_html_e('Current Cron Schedule', 'post-expirator'); ?></label></th>
70
  <td>
71
  <?php
72
  $cron = PostExpirator_CronFacade::get_plugin_cron_events();
74
  if (empty($cron)) {
75
  ?>
76
  <p><?php
77
+ esc_html_e(
78
  'No cron events found for the plugin.',
79
  'post-expirator'
80
  ); ?></p>
82
  } else {
83
  ?>
84
  <p><?php
85
+ esc_html_e(
86
  'The below table will show all currently scheduled cron events for the pluginwith the next run time.',
87
  'post-expirator'
88
  ); ?></p>
91
  <table class="striped">
92
  <tr>
93
  <th><?php
94
+ esc_html_e('Date', 'post-expirator'); ?></th>
95
  <th><?php
96
+ esc_html_e('Event', 'post-expirator'); ?></th>
97
  <th><?php
98
+ esc_html_e('Arguments / Schedule', 'post-expirator'); ?></th>
99
  <th><?php
100
+ esc_html_e('Post', 'post-expirator'); ?></th>
101
  </tr>
102
  <?php
103
 
104
  foreach ($cron as $time => $value) {
105
  foreach ($value as $eventkey => $eventvalue) {
106
  echo '<tr class="pe-event">';
107
+ echo '<td>' . esc_html(PostExpirator_Util::get_wp_date('r', $time)) . '</td>';
108
+ echo '<td>' . esc_html($eventkey) . '</td>';
109
  $arrkey = array_keys($eventvalue);
110
  $firstArgsUid = null;
111
  echo '<td>';
114
  $firstArgsUid = $eventguid;
115
  }
116
  if (empty($eventvalue[$eventguid]['args'])) {
117
+ echo '<div>' . esc_html__('No Arguments', 'post-expirator') . '</div>';
118
  } else {
119
  echo '<div>';
 
120
  foreach ($eventvalue[$eventguid]['args'] as $key => $value) {
121
+ echo esc_html("$key => $value") . '<br>';
122
  }
 
123
  echo '</div>';
124
  }
125
  }
126
  echo '&nbsp;/&nbsp;';
127
  if (empty($eventvalue[$eventguid]['schedule'])) {
128
+ echo esc_html__('Single Event', 'post-expirator');
129
  } else {
130
+ echo esc_html($eventvalue[$eventguid]['schedule']) . ' (' . esc_html($eventvalue[$eventguid]['interval']) . ')';
131
  }
132
  echo '</td>';
133
 
141
  $post = get_post((int)$eventvalue[$firstArgsUid]['args'][0]);
142
 
143
  if (! empty($post) && ! is_wp_error($post) && is_object($post)) {
144
+ echo esc_html("{$post->ID}: {$post->post_title} ({$post->post_status})");
145
  }
146
  }
147
  echo '</td>';
views/menu-display.php CHANGED
@@ -1,3 +1,7 @@
 
 
 
 
1
  <?php
2
  // phpcs:disable WordPress.NamingConventions.ValidVariableName.InterpolatedVariableNotSnakeCase
3
  // phpcs:disable WordPress.PHP.StrictComparisons.LooseComparison
@@ -24,13 +28,13 @@ $expirationdateDefaultTimeFormat = get_option('expirationdateDefaultTimeFormat',
24
  wp_nonce_field('postexpirator_menu_display', '_postExpiratorMenuDisplay_nonce'); ?>
25
 
26
  <h3><?php
27
- _e('Shortcode', 'post-expirator'); ?></h3>
28
  <p><?php
29
- echo sprintf(__('Valid %s attributes:', 'post-expirator'), '<code>[postexpirator]</code>'); ?></p>
30
  <ul class="pe-list">
31
  <li><p><?php
32
  echo sprintf(
33
- __(
34
  '%1$s - valid options are %2$sfull%3$s (default), %4$sdate%5$s, %6$stime%7$s',
35
  'post-expirator'
36
  ),
@@ -44,12 +48,12 @@ $expirationdateDefaultTimeFormat = get_option('expirationdateDefaultTimeFormat',
44
  ); ?></p></li>
45
  <li><p><?php
46
  echo sprintf(
47
- __('%s - format set here will override the value set on the settings page', 'post-expirator'),
48
  '<code>dateformat</code>'
49
  ); ?></p></li>
50
  <li><p><?php
51
  echo sprintf(
52
- __('%s - format set here will override the value set on the settings page', 'post-expirator'),
53
  '<code>timeformat</code>'
54
  ); ?></p></li>
55
  </ul>
@@ -57,26 +61,28 @@ $expirationdateDefaultTimeFormat = get_option('expirationdateDefaultTimeFormat',
57
  <hr/>
58
 
59
  <h3><?php
60
- _e('Post Footer Display', 'post-expirator'); ?></h3>
61
  <p class="description"><?php
62
- _e(
63
  'Enabling this below will display the expiration date automatically at the end of any post which is set to expire.',
64
  'post-expirator'
65
  ); ?></p>
66
  <table class="form-table">
67
  <tr valign="top">
68
  <th scope="row"><?php
69
- _e('Show in post footer?', 'post-expirator'); ?></th>
70
  <td>
71
  <input type="radio" name="expired-display-footer" id="expired-display-footer-true" value="1" <?php
 
72
  echo $expireddisplayfooterenabled; ?>/> <label for="expired-display-footer-true"><?php
73
- _e('Enabled', 'post-expirator'); ?></label>
74
  &nbsp;&nbsp;
75
  <input type="radio" name="expired-display-footer" id="expired-display-footer-false" value="0" <?php
 
76
  echo $expireddisplayfooterdisabled; ?>/> <label for="expired-display-footer-false"><?php
77
- _e('Disabled', 'post-expirator'); ?></label>
78
  <p class="description"><?php
79
- _e(
80
  'This will enable or disable displaying the post expiration date in the post footer.',
81
  'post-expirator'
82
  ); ?></p>
@@ -84,46 +90,46 @@ $expirationdateDefaultTimeFormat = get_option('expirationdateDefaultTimeFormat',
84
  </tr>
85
  <tr valign="top">
86
  <th scope="row"><label for="expired-footer-contents"><?php
87
- _e('Footer Contents', 'post-expirator'); ?></label></th>
88
  <td>
89
  <textarea id="expired-footer-contents" name="expired-footer-contents" rows="3" cols="50"><?php
90
- echo $expirationdateFooterContents; ?></textarea>
91
  <p class="description"><?php
92
- _e(
93
  'Enter the text you would like to appear at the bottom of every post that will expire. The following placeholders will be replaced with the post expiration date in the following format:',
94
  'post-expirator'
95
  ); ?></p>
96
  <ul class="pe-list">
97
  <li><p class="description">EXPIRATIONFULL -> <?php
98
- echo date_i18n(
99
  "$expirationdateDefaultDateFormat $expirationdateDefaultTimeFormat"
100
- ); ?></p></li>
101
  <li><p class="description">EXPIRATIONDATE -> <?php
102
- echo date_i18n("$expirationdateDefaultDateFormat"); ?></p></li>
103
  <li><p class="description">EXPIRATIONTIME -> <?php
104
- echo date_i18n("$expirationdateDefaultTimeFormat"); ?></p></li>
105
  </ul>
106
  </td>
107
  </tr>
108
  <tr valign="top">
109
  <th scope="row"><label for="expired-footer-style"><?php
110
- _e('Footer Style', 'post-expirator'); ?></label></th>
111
  <td>
112
  <input type="text" name="expired-footer-style" id="expired-footer-style" value="<?php
113
- echo $expirationdateFooterStyle; ?>" size="25"/>
114
  (<span style="<?php
115
- echo $expirationdateFooterStyle; ?>"><?php
116
- _e('This post will expire on', 'post-expirator'); ?><?php
117
- echo date_i18n("$expirationdateDefaultDateFormat $expirationdateDefaultTimeFormat"); ?></span>)
118
  <p class="description"><?php
119
- _e('The inline css which will be used to style the footer text.', 'post-expirator'); ?></p>
120
  </td>
121
  </tr>
122
  </table>
123
 
124
  <p class="submit">
125
  <input type="submit" name="expirationdateSaveDisplay" class="button-primary" value="<?php
126
- _e('Save Changes', 'post-expirator'); ?>"/>
127
  </p>
128
  </form>
129
 
1
+ <?php
2
+ defined('ABSPATH') or die('Direct access not allowed.');
3
+ ?>
4
+
5
  <?php
6
  // phpcs:disable WordPress.NamingConventions.ValidVariableName.InterpolatedVariableNotSnakeCase
7
  // phpcs:disable WordPress.PHP.StrictComparisons.LooseComparison
28
  wp_nonce_field('postexpirator_menu_display', '_postExpiratorMenuDisplay_nonce'); ?>
29
 
30
  <h3><?php
31
+ esc_html_e('Shortcode', 'post-expirator'); ?></h3>
32
  <p><?php
33
+ echo sprintf(esc_html__('Valid %s attributes:', 'post-expirator'), '<code>[postexpirator]</code>'); ?></p>
34
  <ul class="pe-list">
35
  <li><p><?php
36
  echo sprintf(
37
+ esc_html__(
38
  '%1$s - valid options are %2$sfull%3$s (default), %4$sdate%5$s, %6$stime%7$s',
39
  'post-expirator'
40
  ),
48
  ); ?></p></li>
49
  <li><p><?php
50
  echo sprintf(
51
+ esc_html__('%s - format set here will override the value set on the settings page', 'post-expirator'),
52
  '<code>dateformat</code>'
53
  ); ?></p></li>
54
  <li><p><?php
55
  echo sprintf(
56
+ esc_html__('%s - format set here will override the value set on the settings page', 'post-expirator'),
57
  '<code>timeformat</code>'
58
  ); ?></p></li>
59
  </ul>
61
  <hr/>
62
 
63
  <h3><?php
64
+ esc_html_e('Post Footer Display', 'post-expirator'); ?></h3>
65
  <p class="description"><?php
66
+ esc_html_e(
67
  'Enabling this below will display the expiration date automatically at the end of any post which is set to expire.',
68
  'post-expirator'
69
  ); ?></p>
70
  <table class="form-table">
71
  <tr valign="top">
72
  <th scope="row"><?php
73
+ esc_html_e('Show in post footer?', 'post-expirator'); ?></th>
74
  <td>
75
  <input type="radio" name="expired-display-footer" id="expired-display-footer-true" value="1" <?php
76
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
77
  echo $expireddisplayfooterenabled; ?>/> <label for="expired-display-footer-true"><?php
78
+ esc_html_e('Enabled', 'post-expirator'); ?></label>
79
  &nbsp;&nbsp;
80
  <input type="radio" name="expired-display-footer" id="expired-display-footer-false" value="0" <?php
81
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
82
  echo $expireddisplayfooterdisabled; ?>/> <label for="expired-display-footer-false"><?php
83
+ esc_html_e('Disabled', 'post-expirator'); ?></label>
84
  <p class="description"><?php
85
+ esc_html_e(
86
  'This will enable or disable displaying the post expiration date in the post footer.',
87
  'post-expirator'
88
  ); ?></p>
90
  </tr>
91
  <tr valign="top">
92
  <th scope="row"><label for="expired-footer-contents"><?php
93
+ esc_html_e('Footer Contents', 'post-expirator'); ?></label></th>
94
  <td>
95
  <textarea id="expired-footer-contents" name="expired-footer-contents" rows="3" cols="50"><?php
96
+ echo esc_textarea($expirationdateFooterContents); ?></textarea>
97
  <p class="description"><?php
98
+ esc_html_e(
99
  'Enter the text you would like to appear at the bottom of every post that will expire. The following placeholders will be replaced with the post expiration date in the following format:',
100
  'post-expirator'
101
  ); ?></p>
102
  <ul class="pe-list">
103
  <li><p class="description">EXPIRATIONFULL -> <?php
104
+ echo esc_html(date_i18n(
105
  "$expirationdateDefaultDateFormat $expirationdateDefaultTimeFormat"
106
+ )); ?></p></li>
107
  <li><p class="description">EXPIRATIONDATE -> <?php
108
+ echo esc_html(date_i18n("$expirationdateDefaultDateFormat")); ?></p></li>
109
  <li><p class="description">EXPIRATIONTIME -> <?php
110
+ echo esc_html(date_i18n("$expirationdateDefaultTimeFormat")); ?></p></li>
111
  </ul>
112
  </td>
113
  </tr>
114
  <tr valign="top">
115
  <th scope="row"><label for="expired-footer-style"><?php
116
+ esc_html_e('Footer Style', 'post-expirator'); ?></label></th>
117
  <td>
118
  <input type="text" name="expired-footer-style" id="expired-footer-style" value="<?php
119
+ echo esc_attr($expirationdateFooterStyle); ?>" size="25"/>
120
  (<span style="<?php
121
+ echo esc_attr($expirationdateFooterStyle); ?>"><?php
122
+ esc_html_e('This post will expire on', 'post-expirator'); ?><?php
123
+ echo esc_html(date_i18n("$expirationdateDefaultDateFormat $expirationdateDefaultTimeFormat")); ?></span>)
124
  <p class="description"><?php
125
+ esc_html_e('The inline css which will be used to style the footer text.', 'post-expirator'); ?></p>
126
  </td>
127
  </tr>
128
  </table>
129
 
130
  <p class="submit">
131
  <input type="submit" name="expirationdateSaveDisplay" class="button-primary" value="<?php
132
+ esc_html_e('Save Changes', 'post-expirator'); ?>"/>
133
  </p>
134
  </form>
135
 
views/menu-editor.php CHANGED
@@ -1,3 +1,7 @@
 
 
 
 
1
  <form method="post" id="expirationdate_save_options">
2
  <?php
3
  wp_nonce_field('postexpirator_menu_editor', '_postExpiratorMenuEditor_nonce'); ?>
1
+ <?php
2
+ defined('ABSPATH') or die('Direct access not allowed.');
3
+ ?>
4
+
5
  <form method="post" id="expirationdate_save_options">
6
  <?php
7
  wp_nonce_field('postexpirator_menu_editor', '_postExpiratorMenuEditor_nonce'); ?>
views/menu-general.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
 
3
  // Get Option
4
  $expirationdateDefaultDateFormat = get_option('expirationdateDefaultDateFormat', POSTEXPIRATOR_DATEFORMAT);
@@ -46,28 +47,22 @@ if ($expiredemailnotificationadmins == 0) {
46
  $user_roles = wp_roles()->get_names();
47
  $plugin_facade = PostExpirator_Facade::getInstance();
48
  ?>
49
- <p><?php
50
- _e(
51
- 'The PublishPress Future plugin sets a custom meta value, and then optionally allows you to select if you want the post changed to a draft status or deleted when it expires.',
52
- 'post-expirator'
53
- ); ?></p>
54
-
55
  <form method="post" id="expirationdate_save_options">
56
  <?php
57
  wp_nonce_field('postexpirator_menu_general', '_postExpiratorMenuGeneral_nonce'); ?>
58
  <h3><?php
59
- _e('Defaults', 'post-expirator'); ?></h3>
60
  <table class="form-table">
61
  <tr valign="top">
62
  <th scope="row"><label for="expired-default-date-format"><?php
63
- _e('Date Format', 'post-expirator'); ?></label></th>
64
  <td>
65
  <input type="text" name="expired-default-date-format" id="expired-default-date-format" value="<?php
66
- echo $expirationdateDefaultDateFormat; ?>" size="25"/> <span class="description">(<?php
67
- echo PostExpirator_Util::get_wp_date($expirationdateDefaultDateFormat, time()); ?>)</span>
68
  <p class="description"><?php
69
  echo sprintf(
70
- __(
71
  'The default format to use when displaying the expiration date within a post using the shortcode or within the footer. For information on valid formatting options, see: %s.',
72
  'post-expirator'
73
  ),
@@ -77,14 +72,14 @@ $plugin_facade = PostExpirator_Facade::getInstance();
77
  </tr>
78
  <tr valign="top">
79
  <th scope="row"><label for="expired-default-time-format"><?php
80
- _e('Time Format', 'post-expirator'); ?></label></th>
81
  <td>
82
  <input type="text" name="expired-default-time-format" id="expired-default-time-format" value="<?php
83
- echo $expirationdateDefaultTimeFormat; ?>" size="25"/> <span class="description">(<?php
84
- echo PostExpirator_Util::get_wp_date($expirationdateDefaultTimeFormat, time()); ?>)</span>
85
  <p class="description"><?php
86
  echo sprintf(
87
- __(
88
  'The default format to use when displaying the expiration time within a post using the shortcode or within the footer. For information on valid formatting options, see: %s.',
89
  'post-expirator'
90
  ),
@@ -94,38 +89,38 @@ $plugin_facade = PostExpirator_Facade::getInstance();
94
  </tr>
95
  <tr valign="top">
96
  <th scope="row"><label for="expired-default-expiration-date"><?php
97
- _e('Default Date/Time Duration', 'post-expirator'); ?></label></th>
98
  <td>
99
  <select name="expired-default-expiration-date" id="expired-default-expiration-date"
100
  class="pe-custom-date-toggle">
101
  <option value="null" <?php
102
  echo ($expirationdateDefaultDate == 'null') ? ' selected="selected"' : ''; ?>><?php
103
- _e('None', 'post-expirator'); ?></option>
104
  <option value="custom" <?php
105
  echo ($expirationdateDefaultDate == 'custom') ? ' selected="selected"' : ''; ?>><?php
106
- _e('Custom', 'post-expirator'); ?></option>
107
  <option value="publish" <?php
108
  echo ($expirationdateDefaultDate == 'publish') ? ' selected="selected"' : ''; ?>><?php
109
- _e('Post/Page Publish Time', 'post-expirator'); ?></option>
110
  </select>
111
  <p class="description"><?php
112
- _e(
113
  'Set the default expiration date to be used when creating new posts and pages. Defaults to none.',
114
  'post-expirator'
115
  ); ?></p>
116
  <?php
117
  $show = ($expirationdateDefaultDate == 'custom') ? 'block' : 'none'; ?>
118
  <div id="expired-custom-container" style="display: <?php
119
- echo $show; ?>;" class="pe-custom-date-container">
120
  <br/>
121
  <label for="expired-custom-expiration-date"><?php
122
- _e('Custom', 'post-expirator'); ?>:</label>
123
  <input type="text" value="<?php
124
- echo $expirationdateDefaultDateCustom; ?>" name="expired-custom-expiration-date"
125
  id="expired-custom-expiration-date"/>
126
  <p class="description"><?php
127
  echo sprintf(
128
- __(
129
  'Set the custom value to use for the default expiration date. For information on formatting, see %1$s. For example, you could enter %2$s+1 month%3$s or %4$s+1 week 2 days 4 hours 2 seconds%5$s or %6$snext Thursday%7$s.',
130
  'post-expirator'
131
  ),
@@ -142,7 +137,7 @@ $plugin_facade = PostExpirator_Facade::getInstance();
142
  </tr>
143
  <tr valign="top">
144
  <th scope="row"><?php
145
- _e('Default Expiration Category', 'post-expirator'); ?></th>
146
  <td>
147
  <?php
148
  echo '<div class="wp-tab-panel" id="post-expirator-cat-list">';
@@ -161,36 +156,38 @@ $plugin_facade = PostExpirator_Facade::getInstance();
161
  echo '</div>';
162
  ?>
163
  <p class="description"><?php
164
- _e('Sets the default expiration category for the post.', 'post-expirator'); ?></p>
165
  </td>
166
  </tr>
167
  </table>
168
 
169
  <h3><?php
170
- _e('Expiration Email Notification', 'post-expirator'); ?></h3>
171
  <p class="description"><?php
172
- _e(
173
  'Whenever a post expires, an email can be sent to alert users of the expiration.',
174
  'post-expirator'
175
  ); ?></p>
176
  <table class="form-table">
177
  <tr valign="top">
178
  <th scope="row"><?php
179
- _e('Enable Email Notification?', 'post-expirator'); ?></th>
180
  <td>
181
  <input type="radio" name="expired-email-notification" id="expired-email-notification-true"
182
  value="1" <?php
 
183
  echo $expiredemailnotificationenabled; ?>/> <label
184
  for="expired-email-notification-true"><?php
185
- _e('Enabled', 'post-expirator'); ?></label>
186
  &nbsp;&nbsp;
187
  <input type="radio" name="expired-email-notification" id="expired-email-notification-false"
188
  value="0" <?php
 
189
  echo $expiredemailnotificationdisabled; ?>/> <label
190
  for="expired-email-notification-false"><?php
191
- _e('Disabled', 'post-expirator'); ?></label>
192
  <p class="description"><?php
193
- _e(
194
  'This will enable or disable the send of email notification on post expiration.',
195
  'post-expirator'
196
  ); ?></p>
@@ -198,23 +195,25 @@ $plugin_facade = PostExpirator_Facade::getInstance();
198
  </tr>
199
  <tr valign="top">
200
  <th scope="row"><?php
201
- _e('Include Blog Administrators?', 'post-expirator'); ?></th>
202
  <td>
203
  <input type="radio" name="expired-email-notification-admins"
204
  id="expired-email-notification-admins-true"
205
  value="1" <?php
 
206
  echo $expiredemailnotificationadminsenabled; ?>/> <label
207
  for="expired-email-notification-admins-true"><?php
208
- _e('Enabled', 'post-expirator'); ?></label>
209
  &nbsp;&nbsp;
210
  <input type="radio" name="expired-email-notification-admins"
211
  id="expired-email-notification-admins-false"
212
  value="0" <?php
 
213
  echo $expiredemailnotificationadminsdisabled; ?>/> <label
214
  for="expired-email-notification-admins-false"><?php
215
- _e('Disabled', 'post-expirator'); ?></label>
216
  <p class="description"><?php
217
- _e(
218
  'This will include all users with the role of "Administrator" in the post expiration email.',
219
  'post-expirator'
220
  ); ?></p>
@@ -223,14 +222,14 @@ $plugin_facade = PostExpirator_Facade::getInstance();
223
  <tr valign="top">
224
  <th scope="row"><label
225
  for="expired-email-notification-list"><?php
226
- _e('Who to notify', 'post-expirator'); ?></label>
227
  </th>
228
  <td>
229
  <input class="large-text" type="text" name="expired-email-notification-list"
230
  id="expired-email-notification-list" value="<?php
231
- echo $expiredemailnotificationlist; ?>"/>
232
  <p class="description"><?php
233
- _e(
234
  'Enter a comma separate list of emails that you would like to be notified when the post expires. This will be applied to ALL post types. You can set post type specific emails on the Defaults tab.',
235
  'post-expirator'
236
  ); ?></p>
@@ -241,7 +240,7 @@ $plugin_facade = PostExpirator_Facade::getInstance();
241
  <p class="submit">
242
  <input type="submit" name="expirationdateSave" class="button-primary"
243
  value="<?php
244
- _e('Save Changes', 'post-expirator'); ?>"/>
245
  </p>
246
  </form>
247
 
1
  <?php
2
+ defined('ABSPATH') or die('Direct access not allowed.');
3
 
4
  // Get Option
5
  $expirationdateDefaultDateFormat = get_option('expirationdateDefaultDateFormat', POSTEXPIRATOR_DATEFORMAT);
47
  $user_roles = wp_roles()->get_names();
48
  $plugin_facade = PostExpirator_Facade::getInstance();
49
  ?>
 
 
 
 
 
 
50
  <form method="post" id="expirationdate_save_options">
51
  <?php
52
  wp_nonce_field('postexpirator_menu_general', '_postExpiratorMenuGeneral_nonce'); ?>
53
  <h3><?php
54
+ esc_html_e('Defaults', 'post-expirator'); ?></h3>
55
  <table class="form-table">
56
  <tr valign="top">
57
  <th scope="row"><label for="expired-default-date-format"><?php
58
+ esc_html_e('Date Format', 'post-expirator'); ?></label></th>
59
  <td>
60
  <input type="text" name="expired-default-date-format" id="expired-default-date-format" value="<?php
61
+ echo esc_attr($expirationdateDefaultDateFormat); ?>" size="25"/> <span class="description">(<?php
62
+ echo esc_html(PostExpirator_Util::get_wp_date($expirationdateDefaultDateFormat, time())); ?>)</span>
63
  <p class="description"><?php
64
  echo sprintf(
65
+ esc_html__(
66
  'The default format to use when displaying the expiration date within a post using the shortcode or within the footer. For information on valid formatting options, see: %s.',
67
  'post-expirator'
68
  ),
72
  </tr>
73
  <tr valign="top">
74
  <th scope="row"><label for="expired-default-time-format"><?php
75
+ esc_html_e('Time Format', 'post-expirator'); ?></label></th>
76
  <td>
77
  <input type="text" name="expired-default-time-format" id="expired-default-time-format" value="<?php
78
+ echo esc_attr($expirationdateDefaultTimeFormat); ?>" size="25"/> <span class="description">(<?php
79
+ echo esc_html(PostExpirator_Util::get_wp_date($expirationdateDefaultTimeFormat, time())); ?>)</span>
80
  <p class="description"><?php
81
  echo sprintf(
82
+ esc_html__(
83
  'The default format to use when displaying the expiration time within a post using the shortcode or within the footer. For information on valid formatting options, see: %s.',
84
  'post-expirator'
85
  ),
89
  </tr>
90
  <tr valign="top">
91
  <th scope="row"><label for="expired-default-expiration-date"><?php
92
+ esc_html_e('Default Date/Time Duration', 'post-expirator'); ?></label></th>
93
  <td>
94
  <select name="expired-default-expiration-date" id="expired-default-expiration-date"
95
  class="pe-custom-date-toggle">
96
  <option value="null" <?php
97
  echo ($expirationdateDefaultDate == 'null') ? ' selected="selected"' : ''; ?>><?php
98
+ esc_html_e('None', 'post-expirator'); ?></option>
99
  <option value="custom" <?php
100
  echo ($expirationdateDefaultDate == 'custom') ? ' selected="selected"' : ''; ?>><?php
101
+ esc_html_e('Custom', 'post-expirator'); ?></option>
102
  <option value="publish" <?php
103
  echo ($expirationdateDefaultDate == 'publish') ? ' selected="selected"' : ''; ?>><?php
104
+ esc_html_e('Post/Page Publish Time', 'post-expirator'); ?></option>
105
  </select>
106
  <p class="description"><?php
107
+ esc_html_e(
108
  'Set the default expiration date to be used when creating new posts and pages. Defaults to none.',
109
  'post-expirator'
110
  ); ?></p>
111
  <?php
112
  $show = ($expirationdateDefaultDate == 'custom') ? 'block' : 'none'; ?>
113
  <div id="expired-custom-container" style="display: <?php
114
+ echo esc_attr($show); ?>;" class="pe-custom-date-container">
115
  <br/>
116
  <label for="expired-custom-expiration-date"><?php
117
+ esc_html_e('Custom', 'post-expirator'); ?>:</label>
118
  <input type="text" value="<?php
119
+ echo esc_attr($expirationdateDefaultDateCustom); ?>" name="expired-custom-expiration-date"
120
  id="expired-custom-expiration-date"/>
121
  <p class="description"><?php
122
  echo sprintf(
123
+ esc_html__(
124
  'Set the custom value to use for the default expiration date. For information on formatting, see %1$s. For example, you could enter %2$s+1 month%3$s or %4$s+1 week 2 days 4 hours 2 seconds%5$s or %6$snext Thursday%7$s.',
125
  'post-expirator'
126
  ),
137
  </tr>
138
  <tr valign="top">
139
  <th scope="row"><?php
140
+ esc_html_e('Default Expiration Category', 'post-expirator'); ?></th>
141
  <td>
142
  <?php
143
  echo '<div class="wp-tab-panel" id="post-expirator-cat-list">';
156
  echo '</div>';
157
  ?>
158
  <p class="description"><?php
159
+ esc_html_e('Sets the default expiration category for the post.', 'post-expirator'); ?></p>
160
  </td>
161
  </tr>
162
  </table>
163
 
164
  <h3><?php
165
+ esc_html_e('Expiration Email Notification', 'post-expirator'); ?></h3>
166
  <p class="description"><?php
167
+ esc_html_e(
168
  'Whenever a post expires, an email can be sent to alert users of the expiration.',
169
  'post-expirator'
170
  ); ?></p>
171
  <table class="form-table">
172
  <tr valign="top">
173
  <th scope="row"><?php
174
+ esc_html_e('Enable Email Notification?', 'post-expirator'); ?></th>
175
  <td>
176
  <input type="radio" name="expired-email-notification" id="expired-email-notification-true"
177
  value="1" <?php
178
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
179
  echo $expiredemailnotificationenabled; ?>/> <label
180
  for="expired-email-notification-true"><?php
181
+ esc_html_e('Enabled', 'post-expirator'); ?></label>
182
  &nbsp;&nbsp;
183
  <input type="radio" name="expired-email-notification" id="expired-email-notification-false"
184
  value="0" <?php
185
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
186
  echo $expiredemailnotificationdisabled; ?>/> <label
187
  for="expired-email-notification-false"><?php
188
+ esc_html_e('Disabled', 'post-expirator'); ?></label>
189
  <p class="description"><?php
190
+ esc_html_e(
191
  'This will enable or disable the send of email notification on post expiration.',
192
  'post-expirator'
193
  ); ?></p>
195
  </tr>
196
  <tr valign="top">
197
  <th scope="row"><?php
198
+ esc_html_e('Include Blog Administrators?', 'post-expirator'); ?></th>
199
  <td>
200
  <input type="radio" name="expired-email-notification-admins"
201
  id="expired-email-notification-admins-true"
202
  value="1" <?php
203
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
204
  echo $expiredemailnotificationadminsenabled; ?>/> <label
205
  for="expired-email-notification-admins-true"><?php
206
+ esc_html_e('Enabled', 'post-expirator'); ?></label>
207
  &nbsp;&nbsp;
208
  <input type="radio" name="expired-email-notification-admins"
209
  id="expired-email-notification-admins-false"
210
  value="0" <?php
211
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
212
  echo $expiredemailnotificationadminsdisabled; ?>/> <label
213
  for="expired-email-notification-admins-false"><?php
214
+ esc_html_e('Disabled', 'post-expirator'); ?></label>
215
  <p class="description"><?php
216
+ esc_html_e(
217
  'This will include all users with the role of "Administrator" in the post expiration email.',
218
  'post-expirator'
219
  ); ?></p>
222
  <tr valign="top">
223
  <th scope="row"><label
224
  for="expired-email-notification-list"><?php
225
+ esc_html_e('Who to notify', 'post-expirator'); ?></label>
226
  </th>
227
  <td>
228
  <input class="large-text" type="text" name="expired-email-notification-list"
229
  id="expired-email-notification-list" value="<?php
230
+ echo esc_attr($expiredemailnotificationlist); ?>"/>
231
  <p class="description"><?php
232
+ esc_html_e(
233
  'Enter a comma separate list of emails that you would like to be notified when the post expires. This will be applied to ALL post types. You can set post type specific emails on the Defaults tab.',
234
  'post-expirator'
235
  ); ?></p>
240
  <p class="submit">
241
  <input type="submit" name="expirationdateSave" class="button-primary"
242
  value="<?php
243
+ esc_html_e('Save Changes', 'post-expirator'); ?>"/>
244
  </p>
245
  </form>
246
 
views/quick-edit.php CHANGED
@@ -1,3 +1,7 @@
 
 
 
 
1
  <div style="clear:both"></div>
2
  <fieldset class="inline-edit-col-left post-expirator-quickedit">
3
  <div class="inline-edit-col">
@@ -5,16 +9,16 @@
5
  <label>
6
  <input name="enable-expirationdate" type="checkbox"/>
7
  <span class=""><?php
8
- _e('Enable Post Expiration', 'post-expirator'); ?></span>
9
  </label>
10
  <fieldset class="inline-edit-date">
11
  <div class="pe-qe-fields" style="display: none">
12
  <div>
13
  <legend><span class="title"><?php
14
- _e('Date', 'post-expirator'); ?></span></legend>
15
  <label>
16
  <span class="screen-reader-text"><?php
17
- _e('Month', 'post-expirator'); ?></span>
18
  <select name="expirationdate_month">
19
  <?php
20
  for ($x = 1; $x <= 12; $x++) {
@@ -23,12 +27,12 @@
23
  $monthStr = date_i18n('M', $now);
24
  ?>
25
  <option value="<?php
26
- echo $monthNumeric; ?>"
27
  data-text="<?php
28
- echo $monthStr; ?>"><?php
29
- echo $monthNumeric; ?>
30
  -<?php
31
- echo $monthStr; ?></option>
32
  <?php
33
  } ?>
34
 
@@ -36,40 +40,40 @@
36
  </label>
37
  <label>
38
  <span class="screen-reader-text"><?php
39
- _e('Day', 'post-expirator'); ?></span>
40
  <input name="expirationdate_day" value="" size="2" maxlength="2" autocomplete="off"
41
  type="text" placeholder="<?php
42
- echo date('d'); ?>">
43
  </label>,
44
  <label>
45
  <span class="screen-reader-text"><?php
46
- _e('Year', 'post-expirator'); ?></span>
47
  <input name="expirationdate_year" value="" size="4" maxlength="4" autocomplete="off"
48
  type="text" placeholder="<?php
49
- echo date('Y'); ?>">
50
  </label> @
51
  <label>
52
  <span class="screen-reader-text"><?php
53
- _e('Hour', 'post-expirator'); ?></span>
54
  <input name="expirationdate_hour" value="" size="2" maxlength="2" autocomplete="off"
55
  type="text" placeholder="00">
56
  </label> :
57
  <label>
58
  <span class="screen-reader-text"><?php
59
- _e('Minute', 'post-expirator'); ?></span>
60
  <input name="expirationdate_minute" value="" size="2" maxlength="2" autocomplete="off"
61
  type="text" placeholder="00">
62
  </label>
63
 
64
  <?php
65
- echo PostExpirator_Util::wp_timezone_string(); ?>
66
  </div>
67
  <div>
68
  <legend>
69
  <span class="title"><?php
70
- _e('Type', 'post-expirator'); ?></span>
71
  <span class="screen-reader-text"><?php
72
- _e('How to expire', 'post-expirator'); ?></span>
73
  </legend>
74
  <?php
75
  $defaults = get_option('expirationdateDefaults' . ucfirst($post_type));
@@ -83,9 +87,9 @@
83
  <div class="pe-category-list">
84
  <legend>
85
  <span class="title"><?php
86
- echo $tax_label; ?></span>
87
  <span class="screen-reader-text"><?php
88
- _e('Expiration Categories', 'post-expirator'); ?></span>
89
  </legend>
90
  <ul id="categorychecklist"
91
  class="list:category categorychecklist cat-checklist category-checklist">
@@ -105,6 +109,7 @@
105
  </div>
106
  <input name="expirationdate_quickedit" value="true" type="hidden"/>
107
  <input name="postexpirator_view" value="quick-edit" type="hidden"/>
 
108
  </fieldset>
109
  </div>
110
  </div>
1
+ <?php
2
+ defined('ABSPATH') or die('Direct access not allowed.');
3
+ ?>
4
+
5
  <div style="clear:both"></div>
6
  <fieldset class="inline-edit-col-left post-expirator-quickedit">
7
  <div class="inline-edit-col">
9
  <label>
10
  <input name="enable-expirationdate" type="checkbox"/>
11
  <span class=""><?php
12
+ esc_html_e('Enable Post Expiration', 'post-expirator'); ?></span>
13
  </label>
14
  <fieldset class="inline-edit-date">
15
  <div class="pe-qe-fields" style="display: none">
16
  <div>
17
  <legend><span class="title"><?php
18
+ esc_html_e('Date', 'post-expirator'); ?></span></legend>
19
  <label>
20
  <span class="screen-reader-text"><?php
21
+ esc_html_e('Month', 'post-expirator'); ?></span>
22
  <select name="expirationdate_month">
23
  <?php
24
  for ($x = 1; $x <= 12; $x++) {
27
  $monthStr = date_i18n('M', $now);
28
  ?>
29
  <option value="<?php
30
+ echo esc_attr($monthNumeric); ?>"
31
  data-text="<?php
32
+ echo esc_attr($monthStr); ?>"><?php
33
+ echo esc_html($monthNumeric); ?>
34
  -<?php
35
+ echo esc_html($monthStr); ?></option>
36
  <?php
37
  } ?>
38
 
40
  </label>
41
  <label>
42
  <span class="screen-reader-text"><?php
43
+ esc_html_e('Day', 'post-expirator'); ?></span>
44
  <input name="expirationdate_day" value="" size="2" maxlength="2" autocomplete="off"
45
  type="text" placeholder="<?php
46
+ echo esc_attr(date('d')); ?>">
47
  </label>,
48
  <label>
49
  <span class="screen-reader-text"><?php
50
+ esc_html_e('Year', 'post-expirator'); ?></span>
51
  <input name="expirationdate_year" value="" size="4" maxlength="4" autocomplete="off"
52
  type="text" placeholder="<?php
53
+ echo esc_attr(date('Y')); ?>">
54
  </label> @
55
  <label>
56
  <span class="screen-reader-text"><?php
57
+ esc_html_e('Hour', 'post-expirator'); ?></span>
58
  <input name="expirationdate_hour" value="" size="2" maxlength="2" autocomplete="off"
59
  type="text" placeholder="00">
60
  </label> :
61
  <label>
62
  <span class="screen-reader-text"><?php
63
+ esc_html_e('Minute', 'post-expirator'); ?></span>
64
  <input name="expirationdate_minute" value="" size="2" maxlength="2" autocomplete="off"
65
  type="text" placeholder="00">
66
  </label>
67
 
68
  <?php
69
+ echo esc_html(PostExpirator_Util::wp_timezone_string()); ?>
70
  </div>
71
  <div>
72
  <legend>
73
  <span class="title"><?php
74
+ esc_html_e('Type', 'post-expirator'); ?></span>
75
  <span class="screen-reader-text"><?php
76
+ esc_html_e('How to expire', 'post-expirator'); ?></span>
77
  </legend>
78
  <?php
79
  $defaults = get_option('expirationdateDefaults' . ucfirst($post_type));
87
  <div class="pe-category-list">
88
  <legend>
89
  <span class="title"><?php
90
+ echo esc_html($tax_label); ?></span>
91
  <span class="screen-reader-text"><?php
92
+ esc_html_e('Expiration Categories', 'post-expirator'); ?></span>
93
  </legend>
94
  <ul id="categorychecklist"
95
  class="list:category categorychecklist cat-checklist category-checklist">
109
  </div>
110
  <input name="expirationdate_quickedit" value="true" type="hidden"/>
111
  <input name="postexpirator_view" value="quick-edit" type="hidden"/>
112
+ <?php wp_nonce_field('__postexpirator', '_postexpiratornonce'); ?>
113
  </fieldset>
114
  </div>
115
  </div>
views/tabs.php CHANGED
@@ -1,50 +1,55 @@
1
  <?php
2
 
 
 
3
  $current_tab = empty($_GET['tab']) ? 'general' : sanitize_title(wp_unslash($_GET['tab']));
4
  ?>
5
 
6
  <div class="wrap">
7
  <h2><?php
8
- _e('PublishPress Future', 'post-expirator'); ?></h2>
9
  <div id="pe-settings-tabs">
10
  <nav class="nav-tab-wrapper postexpirator-nav-tab-wrapper">
11
  <a href="<?php
12
- echo admin_url('admin.php?page=publishpress-future&tab=general'); ?>"
13
  class="pe-tab nav-tab <?php
14
- echo($current_tab === 'general' ? 'nav-tab-active' : ''); ?>"><?php
15
- _e('Defaults', 'post-expirator'); ?></a>
16
  <a href="<?php
17
- echo admin_url('admin.php?page=publishpress-future&tab=display'); ?>"
18
  class="pe-tab nav-tab <?php
19
- echo($current_tab === 'display' ? 'nav-tab-active' : ''); ?>"><?php
20
- _e('Display', 'post-expirator'); ?></a>
21
  <a href="<?php
22
- echo admin_url('admin.php?page=publishpress-future&tab=defaults'); ?>"
23
  class="pe-tab nav-tab <?php
24
- echo($current_tab === 'defaults' ? 'nav-tab-active' : ''); ?>"><?php
25
- _e('Post Types', 'post-expirator'); ?></a>
26
  <a href="<?php
27
- echo admin_url('admin.php?page=publishpress-future&tab=diagnostics'); ?>"
28
  class="pe-tab nav-tab <?php
29
- echo($current_tab === 'diagnostics' ? 'nav-tab-active' : ''); ?>"><?php
30
- _e('Diagnostics', 'post-expirator'); ?></a>
31
  <a href="<?php
32
- echo admin_url('admin.php?page=publishpress-future&tab=advanced'); ?>"
33
  class="pe-tab nav-tab <?php
34
- echo($current_tab === 'advanced' ? 'nav-tab-active' : ''); ?>"><?php
35
- _e('Advanced', 'post-expirator'); ?></a>
36
  <?php
37
  if (POSTEXPIRATOR_DEBUG) { ?>
38
  <a href="<?php
39
- echo admin_url('admin.php?page=publishpress-future&tab=viewdebug'); ?>"
40
  class="pe-tab nav-tab <?php
41
- echo($current_tab === 'viewdebug' ? 'nav-tab-active' : ''); ?>"><?php
42
- _e('View Debug Logs', 'post-expirator'); ?></a>
43
  <?php
44
  } ?>
45
  </nav>
46
 
47
- <?php echo $html; ?>
 
 
 
48
 
49
  </div>
50
  </div>
1
  <?php
2
 
3
+ defined('ABSPATH') or die('Direct access not allowed.');
4
+
5
  $current_tab = empty($_GET['tab']) ? 'general' : sanitize_title(wp_unslash($_GET['tab']));
6
  ?>
7
 
8
  <div class="wrap">
9
  <h2><?php
10
+ esc_html_e('PublishPress Future', 'post-expirator'); ?></h2>
11
  <div id="pe-settings-tabs">
12
  <nav class="nav-tab-wrapper postexpirator-nav-tab-wrapper">
13
  <a href="<?php
14
+ echo esc_url(admin_url('admin.php?page=publishpress-future&tab=general')); ?>"
15
  class="pe-tab nav-tab <?php
16
+ echo ($current_tab === 'general' ? 'nav-tab-active' : ''); ?>"><?php
17
+ esc_html_e('Defaults', 'post-expirator'); ?></a>
18
  <a href="<?php
19
+ echo esc_url(admin_url('admin.php?page=publishpress-future&tab=display')); ?>"
20
  class="pe-tab nav-tab <?php
21
+ echo ($current_tab === 'display' ? 'nav-tab-active' : ''); ?>"><?php
22
+ esc_html_e('Display', 'post-expirator'); ?></a>
23
  <a href="<?php
24
+ echo esc_url(admin_url('admin.php?page=publishpress-future&tab=defaults')); ?>"
25
  class="pe-tab nav-tab <?php
26
+ echo ($current_tab === 'defaults' ? 'nav-tab-active' : ''); ?>"><?php
27
+ esc_html_e('Post Types', 'post-expirator'); ?></a>
28
  <a href="<?php
29
+ echo esc_url(admin_url('admin.php?page=publishpress-future&tab=diagnostics')); ?>"
30
  class="pe-tab nav-tab <?php
31
+ echo ($current_tab === 'diagnostics' ? 'nav-tab-active' : ''); ?>"><?php
32
+ esc_html_e('Diagnostics', 'post-expirator'); ?></a>
33
  <a href="<?php
34
+ echo esc_url(admin_url('admin.php?page=publishpress-future&tab=advanced')); ?>"
35
  class="pe-tab nav-tab <?php
36
+ echo ($current_tab === 'advanced' ? 'nav-tab-active' : ''); ?>"><?php
37
+ esc_html_e('Advanced', 'post-expirator'); ?></a>
38
  <?php
39
  if (POSTEXPIRATOR_DEBUG) { ?>
40
  <a href="<?php
41
+ echo esc_url(admin_url('admin.php?page=publishpress-future&tab=viewdebug')); ?>"
42
  class="pe-tab nav-tab <?php
43
+ echo ($current_tab === 'viewdebug' ? 'nav-tab-active' : ''); ?>"><?php
44
+ esc_html_e('View Debug Logs', 'post-expirator'); ?></a>
45
  <?php
46
  } ?>
47
  </nav>
48
 
49
+ <?php
50
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
51
+ echo $html;
52
+ ?>
53
 
54
  </div>
55
  </div>