diff --git a/assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png b/assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..de4fa90 Binary files /dev/null and b/assets/css/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/assets/css/images/ui-bg_glass_65_ffffff_1x400.png b/assets/css/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..7cf832f Binary files /dev/null and b/assets/css/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/assets/css/images/ui-bg_glass_75_dadada_1x400.png b/assets/css/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..0f06aaf Binary files /dev/null and b/assets/css/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png b/assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..7b9bcb6 Binary files /dev/null and b/assets/css/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/assets/css/images/ui-bg_glass_95_fef1ec_1x400.png b/assets/css/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..38a5af7 Binary files /dev/null and b/assets/css/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..5ae851c Binary files /dev/null and b/assets/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/assets/css/images/ui-icons_222222_256x240.png b/assets/css/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..b30f93c Binary files /dev/null and b/assets/css/images/ui-icons_222222_256x240.png differ diff --git a/assets/css/images/ui-icons_2e83ff_256x240.png b/assets/css/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..0815452 Binary files /dev/null and b/assets/css/images/ui-icons_2e83ff_256x240.png differ diff --git a/assets/css/images/ui-icons_454545_256x240.png b/assets/css/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..e4ebf84 Binary files /dev/null and b/assets/css/images/ui-icons_454545_256x240.png differ diff --git a/assets/css/images/ui-icons_888888_256x240.png b/assets/css/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..2b85be3 Binary files /dev/null and b/assets/css/images/ui-icons_888888_256x240.png differ diff --git a/assets/css/images/ui-icons_cd0a0a_256x240.png b/assets/css/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..79b897c Binary files /dev/null and b/assets/css/images/ui-icons_cd0a0a_256x240.png differ diff --git a/assets/css/jquery-ui.css b/assets/css/jquery-ui.css new file mode 100644 index 0000000..e1983cb --- /dev/null +++ b/assets/css/jquery-ui.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.14.2 - 2026-04-21 +* https://jqueryui.com +* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit https://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright OpenJS Foundation and other contributors; Licensed MIT */.ui-draggable-handle{touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;touch-action:none}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-sortable-handle{touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-active,.ui-menu .ui-state-focus{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;user-select:none}.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus,.ui-controlgroup>.ui-controlgroup-item:focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw,.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:pointer;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:0 0;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0 0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #d3d3d3}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-button,.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,html .ui-button.ui-state-disabled:active,html .ui-button.ui-state-disabled:hover{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:400;color:#555}.ui-button,.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button{color:#555;text-decoration:none}.ui-button:focus,.ui-button:hover,.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:400;color:#212121}.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,a.ui-button:focus,a.ui-button:hover{color:#212121;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px #5e9ed6}.ui-button.ui-state-active:hover,.ui-button:active,.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:400;color:#212121}.ui-icon-background,.ui-state-active .ui-icon-background{border:#aaa;background-color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-checked{border:1px solid #fcefa1;background:#fbf9ee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;background-image:none}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-button:focus .ui-icon,.ui-button:hover .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-button:active .ui-icon,.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-button .ui-state-highlight.ui-icon,.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:4px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa;opacity:.3}.ui-widget-shadow{box-shadow:-8px -8px 8px #aaa} \ No newline at end of file diff --git a/i18n/languages/suffice-toolkit.pot b/i18n/languages/suffice-toolkit.pot index 82bfc0d..cab381d 100644 --- a/i18n/languages/suffice-toolkit.pot +++ b/i18n/languages/suffice-toolkit.pot @@ -1,17 +1,17 @@ -# Copyright (C) 2019 ThemeGrill +# Copyright (C) 2026 ThemeGrill # This file is distributed under the GPLv3 or later. msgid "" msgstr "" -"Project-Id-Version: Suffice Toolkit 1.0.3\n" +"Project-Id-Version: Suffice Toolkit 1.1.0\n" "Report-Msgid-Bugs-To: themegrill@gmail.com\n" -"POT-Creation-Date: 2019-06-20 04:23:35+00:00\n" +"POT-Creation-Date: 2026-04-27 11:00:39+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2026-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" -"X-Generator: grunt-wp-i18n 0.5.4\n" +"X-Generator: grunt-wp-i18n 1.0.3\n" #: includes/widgets/class-suffice-widget-blog.php:83 #: includes/widgets/class-suffice-widget-logo.php:80 @@ -39,41 +39,41 @@ msgstr "" msgid "6" msgstr "" -#: includes/abstracts/abstract-suffice-widget.php:367 -#: includes/abstracts/abstract-suffice-widget.php:541 +#: includes/abstracts/abstract-suffice-widget.php:378 +#: includes/abstracts/abstract-suffice-widget.php:554 msgid "Remove media" msgstr "" -#: includes/abstracts/abstract-suffice-widget.php:375 -#: includes/abstracts/abstract-suffice-widget.php:549 +#: includes/abstracts/abstract-suffice-widget.php:386 +#: includes/abstracts/abstract-suffice-widget.php:562 msgid "Choose an image" msgstr "" -#: includes/abstracts/abstract-suffice-widget.php:375 -#: includes/abstracts/abstract-suffice-widget.php:549 +#: includes/abstracts/abstract-suffice-widget.php:386 +#: includes/abstracts/abstract-suffice-widget.php:562 msgid "Use image" msgstr "" -#: includes/abstracts/abstract-suffice-widget.php:375 -#: includes/abstracts/abstract-suffice-widget.php:549 +#: includes/abstracts/abstract-suffice-widget.php:386 +#: includes/abstracts/abstract-suffice-widget.php:562 msgid "Select an Image" msgstr "" -#: includes/abstracts/abstract-suffice-widget.php:386 -#: includes/abstracts/abstract-suffice-widget.php:559 +#: includes/abstracts/abstract-suffice-widget.php:397 +#: includes/abstracts/abstract-suffice-widget.php:572 msgid "Choose icons…" msgstr "" -#: includes/abstracts/abstract-suffice-widget.php:386 -#: includes/abstracts/abstract-suffice-widget.php:559 +#: includes/abstracts/abstract-suffice-widget.php:397 +#: includes/abstracts/abstract-suffice-widget.php:572 msgid "Icon" msgstr "" -#: includes/abstracts/abstract-suffice-widget.php:409 +#: includes/abstracts/abstract-suffice-widget.php:420 msgid "Choose fonts…" msgstr "" -#: includes/abstracts/abstract-suffice-widget.php:409 +#: includes/abstracts/abstract-suffice-widget.php:420 msgid "Font" msgstr "" @@ -95,261 +95,283 @@ msgstr "" msgid "Create your first field!" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:95 -msgid "You can add upto %s fields." +#: includes/admin/class-suffice-admin-assets.php:105 +#. translators: %s: maximum number of fields allowed +msgid "You can add up to %s fields." msgstr "" -#: includes/admin/class-suffice-admin-assets.php:115 +#: includes/admin/class-suffice-admin-assets.php:132 msgid "" "Delete this Sidebar Permanently and store all widgets in Inactive Sidebar. " "Are you positive you want to delete this Sidebar?" msgstr "" #: includes/admin/class-suffice-admin-notices.php:103 -#: includes/class-suffice-sidebars.php:94 +#: includes/admin/class-suffice-admin-notices.php:181 +#: includes/admin/class-suffice-admin-permalink-settings.php:162 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:150 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:128 +#: includes/class-suffice-install.php:85 includes/class-suffice-sidebars.php:95 msgid "Action failed. Please refresh the page and retry." msgstr "" #: includes/admin/class-suffice-admin-notices.php:107 -#: includes/class-suffice-sidebars.php:98 suffice-toolkit.php:57 -#: suffice-toolkit.php:65 -msgid "Cheatin’ huh?" +#: includes/admin/class-suffice-admin-notices.php:171 +#: includes/admin/class-suffice-admin-permalink-settings.php:166 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:154 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:132 +#: includes/class-suffice-install.php:75 includes/class-suffice-sidebars.php:99 +msgid "Cheatin' huh?" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:34 +#: includes/admin/class-suffice-admin-permalink-settings.php:35 msgid "Portfolio Permalinks" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:39 +#: includes/admin/class-suffice-admin-permalink-settings.php:40 msgid "Portfolio category base" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:46 +#: includes/admin/class-suffice-admin-permalink-settings.php:47 msgid "Portfolio tag base" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:77 +#: includes/admin/class-suffice-admin-permalink-settings.php:88 msgid "These settings control the permalinks specifically used for portfolio." msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:95 +#: includes/admin/class-suffice-admin-permalink-settings.php:107 #: includes/widgets/class-suffice-widget-slider.php:83 msgid "Default" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:99 +#: includes/admin/class-suffice-admin-permalink-settings.php:111 msgid "Project base" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:103 +#: includes/admin/class-suffice-admin-permalink-settings.php:115 msgid "Project based category" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:108 +#: includes/admin/class-suffice-admin-permalink-settings.php:120 msgid "Custom Base" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:110 +#: includes/admin/class-suffice-admin-permalink-settings.php:122 msgid "" "Enter a custom base to use. A base must be set or " "WordPress will use default instead." msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:51 +#: includes/admin/class-suffice-admin-post-types.php:53 +#. translators: %s: project permalink URL msgid "Project updated. View Project" msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:52 +#: includes/admin/class-suffice-admin-post-types.php:56 msgid "Custom field updated." msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:53 +#: includes/admin/class-suffice-admin-post-types.php:57 msgid "Custom field deleted." msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:54 +#: includes/admin/class-suffice-admin-post-types.php:58 msgid "Project updated." msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:55 +#: includes/admin/class-suffice-admin-post-types.php:61 +#. translators: %s: revision date/time msgid "Project restored to revision from %s" msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:56 +#: includes/admin/class-suffice-admin-post-types.php:66 +#. translators: %s: project permalink URL msgid "Project published. View Project" msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:57 +#: includes/admin/class-suffice-admin-post-types.php:69 msgid "Project saved." msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:58 +#: includes/admin/class-suffice-admin-post-types.php:72 +#. translators: %s: project preview URL msgid "Project submitted. Preview project" msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:59 +#: includes/admin/class-suffice-admin-post-types.php:77 +#. translators: 1: scheduled date/time, 2: project preview URL msgid "" "Project scheduled for: %1$s. Preview project" msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:60 +#: includes/admin/class-suffice-admin-post-types.php:78 msgid "M j, Y @ G:i" msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:61 +#: includes/admin/class-suffice-admin-post-types.php:83 +#. translators: %s: URL to preview the project msgid "Project draft updated. Preview project" msgstr "" -#: includes/admin/class-suffice-admin-post-types.php:76 +#: includes/admin/class-suffice-admin-post-types.php:101 +#. translators: %s: number of projects updated msgid "%s project updated." msgid_plural "%s projects updated." msgstr[0] "" msgstr[1] "" -#: includes/admin/class-suffice-admin-post-types.php:77 +#: includes/admin/class-suffice-admin-post-types.php:109 +#. translators: %s: number of projects not updated because they are locked msgid "%s project not updated, somebody is editing it." msgid_plural "%s projects not updated, somebody is editing them." msgstr[0] "" msgstr[1] "" -#: includes/admin/class-suffice-admin-post-types.php:78 +#: includes/admin/class-suffice-admin-post-types.php:117 +#. translators: %s: number of projects permanently deleted msgid "%s project permanently deleted." msgid_plural "%s projects permanently deleted." msgstr[0] "" msgstr[1] "" -#: includes/admin/class-suffice-admin-post-types.php:79 +#: includes/admin/class-suffice-admin-post-types.php:125 +#. translators: %s: number of projects moved to the trash msgid "%s project moved to the Trash." msgid_plural "%s projects moved to the Trash." msgstr[0] "" msgstr[1] "" -#: includes/admin/class-suffice-admin-post-types.php:80 +#: includes/admin/class-suffice-admin-post-types.php:133 +#. translators: %s: number of projects restored from the Trash msgid "%s project restored from the Trash." msgid_plural "%s projects restored from the Trash." msgstr[0] "" msgstr[1] "" -#: includes/admin/class-suffice-admin-post-types.php:95 +#: includes/admin/class-suffice-admin-post-types.php:153 msgid "Project name" msgstr "" -#: includes/admin/class-suffice-admin.php:72 +#: includes/admin/class-suffice-admin.php:74 +#. translators: %1$s: opening HTML anchor tag for the rating link, %2$s: +#. closing HTML anchor tag msgid "" "If you like Suffice Toolkit please leave us a " -"%s★★★★★%s rating. A huge thanks in advance!" +"%1$s★★★★★%2$s rating. A huge thanks in " +"advance!" msgstr "" -#: includes/admin/class-suffice-admin.php:72 +#: includes/admin/class-suffice-admin.php:75 msgid "Thanks :)" msgstr "" -#: includes/admin/class-suffice-admin.php:80 +#: includes/admin/class-suffice-admin.php:87 msgid "Thank you for creating with Suffice Toolkit." msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:37 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:42 msgid "Layout Settings" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:38 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:44 msgid "Default Layout" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:39 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:45 msgid "Left Sidebar" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:40 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:46 msgid "Right Sidebar" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:41 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:47 msgid "Full Width" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:42 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:48 msgid "Full Width Center" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:43 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:53 msgid "Select the specific layout for this entry." msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:46 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:65 msgid "Sidebar Settings" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:46 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:69 msgid "Choose a custom sidebar for this entry." msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:49 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:79 msgid "Footer Settings" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:50 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:81 msgid "Default Socket and Widgets" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:51 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:82 msgid "Both Socket and Widgets" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:52 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:83 msgid "Only Widgets (No Socket)" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:53 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:84 msgid "Only Socket (No Widgets)" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:54 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:85 msgid "Hide Socket and Widgets" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:55 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:90 msgid "Display the socket and footer widgets?" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:58 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:102 msgid "Header Transparency" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:59 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:104 msgid "No Transparency" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:60 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:105 msgid "Transparent Header" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:61 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:110 msgid "Header transparency options on this page." msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:64 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:122 msgid "Top Sidebar Position" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:65 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:124 msgid "None" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:66 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:125 msgid "Above Header" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:67 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:126 msgid "Below Header" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:68 +#: includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php:131 msgid "Top Sidebar Position options on this page." msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:34 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:37 #: includes/widgets/class-suffice-widget-blog.php:43 #: includes/widgets/class-suffice-widget-blog.php:54 #: includes/widgets/class-suffice-widget-blog.php:66 @@ -401,32 +423,32 @@ msgstr "" msgid "General" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:39 -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:89 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:42 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:108 msgid "Description" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:61 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:69 msgid "Layout Type" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:63 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:71 msgid "One Column" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:64 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:72 msgid "Two Column" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:67 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:75 msgid "Define whether or not the entire layout should be one or two column based." msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:75 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:88 msgid "Sample Checkbox" msgstr "" -#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:75 +#: includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php:89 msgid "Enable example checkbox." msgstr "" @@ -456,11 +478,11 @@ msgstr "" msgid "We need to update your site's database to the latest version." msgstr "" -#: includes/admin/views/html-notice-update.php:13 +#: includes/admin/views/html-notice-update.php:22 msgid "Run the updater" msgstr "" -#: includes/admin/views/html-notice-update.php:17 +#: includes/admin/views/html-notice-update.php:26 msgid "" "It is strongly recommended that you backup your database before proceeding. " "Are you sure you wish to run the updater now?" @@ -476,23 +498,23 @@ msgstr "" msgid "Your database is being updated in the background." msgstr "" -#: includes/admin/views/html-notice-updating.php:12 +#: includes/admin/views/html-notice-updating.php:21 msgid "Taking a while? Click here to run it now." msgstr "" -#: includes/class-suffice-install.php:280 +#: includes/class-suffice-install.php:302 msgid "View Suffice Toolkit Documentation" msgstr "" -#: includes/class-suffice-install.php:280 +#: includes/class-suffice-install.php:302 msgid "Docs" msgstr "" -#: includes/class-suffice-install.php:281 +#: includes/class-suffice-install.php:303 msgid "Visit Free Customer Support Forum" msgstr "" -#: includes/class-suffice-install.php:281 +#: includes/class-suffice-install.php:303 msgid "Free Support" msgstr "" @@ -693,15 +715,17 @@ msgstr "" msgid "This is where you can add new portfolio items to your project." msgstr "" -#: includes/class-suffice-sidebars.php:124 -msgid "Custom Widget Area of the site - %s " +#: includes/class-suffice-sidebars.php:131 +#. translators: %s: widget area name +msgid "Custom Widget Area of the site - %s" msgstr "" #: includes/functions-suffice-widget.php:87 msgid "Suffice Toolkit Widgets" msgstr "" -#: includes/libraries/wp-background-process.php:423 +#: includes/libraries/wp-background-process.php:465 +#. translators: %d: number of minutes msgid "Every %d Minutes" msgstr "" @@ -1342,17 +1366,21 @@ msgstr "" msgid "Title Position" msgstr "" -#: templates/content-widget-blog.php:99 templates/content-widget-blog.php:139 -#: templates/content-widget-featured-posts.php:116 +#: suffice-toolkit.php:57 suffice-toolkit.php:65 +msgid "Cheatin’ huh?" +msgstr "" + +#: templates/content-widget-blog.php:105 templates/content-widget-blog.php:147 +#: templates/content-widget-featured-posts.php:120 #. translators: %s: post title msgid "Leave a Comment on %s" msgstr "" -#: templates/content-widget-blog.php:121 templates/content-widget-blog.php:144 +#: templates/content-widget-blog.php:127 templates/content-widget-blog.php:152 msgid "Read More" msgstr "" -#: templates/content-widget-portfolio.php:40 +#: templates/content-widget-portfolio.php:44 msgid "All" msgstr "" @@ -1376,79 +1404,79 @@ msgstr "" msgid "http://themegrill.com" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:80 +#: includes/admin/class-suffice-admin-assets.php:83 msgctxt "enhanced select" msgid "One result is available, press enter to select it." msgstr "" -#: includes/admin/class-suffice-admin-assets.php:81 +#: includes/admin/class-suffice-admin-assets.php:84 msgctxt "enhanced select" msgid "%qty% results are available, use up and down arrow keys to navigate." msgstr "" -#: includes/admin/class-suffice-admin-assets.php:82 +#: includes/admin/class-suffice-admin-assets.php:85 msgctxt "enhanced select" msgid "No matches found" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:83 +#: includes/admin/class-suffice-admin-assets.php:86 msgctxt "enhanced select" msgid "Loading failed" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:84 +#: includes/admin/class-suffice-admin-assets.php:87 msgctxt "enhanced select" msgid "Please enter 1 or more characters" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:85 +#: includes/admin/class-suffice-admin-assets.php:88 msgctxt "enhanced select" msgid "Please enter %qty% or more characters" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:86 +#: includes/admin/class-suffice-admin-assets.php:89 msgctxt "enhanced select" msgid "Please delete 1 character" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:87 +#: includes/admin/class-suffice-admin-assets.php:90 msgctxt "enhanced select" msgid "Please delete %qty% characters" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:88 +#: includes/admin/class-suffice-admin-assets.php:91 msgctxt "enhanced select" msgid "You can only select 1 item" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:89 +#: includes/admin/class-suffice-admin-assets.php:92 msgctxt "enhanced select" msgid "You can only select %qty% items" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:90 +#: includes/admin/class-suffice-admin-assets.php:93 msgctxt "enhanced select" msgid "Loading more results…" msgstr "" -#: includes/admin/class-suffice-admin-assets.php:91 +#: includes/admin/class-suffice-admin-assets.php:94 msgctxt "enhanced select" msgid "Searching…" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:59 +#: includes/admin/class-suffice-admin-permalink-settings.php:65 #: includes/class-suffice-post-types.php:74 msgctxt "slug" msgid "portfolio-category" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:69 +#: includes/admin/class-suffice-admin-permalink-settings.php:80 #: includes/class-suffice-post-types.php:111 msgctxt "slug" msgid "portfolio-tag" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:171 +#: includes/admin/class-suffice-admin-permalink-settings.php:200 #: includes/class-suffice-post-types.php:131 msgctxt "slug" msgid "portfolio" @@ -1459,12 +1487,12 @@ msgctxt "slug" msgid "uncategorized" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:83 +#: includes/admin/class-suffice-admin-permalink-settings.php:94 msgctxt "default-slug" msgid "project" msgstr "" -#: includes/admin/class-suffice-admin-permalink-settings.php:84 +#: includes/admin/class-suffice-admin-permalink-settings.php:95 msgctxt "default-slug" msgid "portfolio" msgstr "" @@ -1484,7 +1512,8 @@ msgctxt "Admin menu name" msgid "Portfolio" msgstr "" -#: templates/content-widget-blog.php:90 templates/content-widget-blog.php:130 +#: templates/content-widget-blog.php:96 templates/content-widget-blog.php:138 +#. translators: %s: post author link msgctxt "post author" msgid "by %s" msgstr "" \ No newline at end of file diff --git a/includes/abstracts/abstract-suffice-widget.php b/includes/abstracts/abstract-suffice-widget.php index 426aef4..5a63d42 100644 --- a/includes/abstracts/abstract-suffice-widget.php +++ b/includes/abstracts/abstract-suffice-widget.php @@ -9,6 +9,11 @@ * @category Widgets * @author ThemeGrill */ + +if ( ! defined( 'ABSPATH' ) ) { + exit; +} + abstract class ST_Widget extends WP_Widget { /** @@ -59,8 +64,8 @@ abstract class ST_Widget extends WP_Widget { public function __construct() { $widget_ops = array( - 'classname' => $this->widget_cssclass, - 'description' => $this->widget_description, + 'classname' => $this->widget_cssclass, + 'description' => $this->widget_description, 'customize_selective_refresh' => true, ); @@ -86,7 +91,7 @@ public function get_cached_widget( $args ) { } if ( isset( $cache[ $args['widget_id'] ] ) ) { - echo $cache[ $args['widget_id'] ]; + echo $cache[ $args['widget_id'] ]; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped return true; } @@ -120,10 +125,10 @@ public function flush_widget_cache() { * @return string */ public function widget_start( $args, $instance ) { - echo $args['before_widget']; + echo $args['before_widget']; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ) ) { - echo $args['before_title'] . $title . $args['after_title']; + echo $args['before_title'] . esc_html( $title ) . $args['after_title']; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } @@ -134,7 +139,7 @@ public function widget_start( $args, $instance ) { * @return string */ public function widget_end( $args ) { - echo $args['after_widget']; + echo $args['after_widget']; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** @@ -161,7 +166,7 @@ public function update( $new_instance, $old_instance ) { // Format the value based on settings type. switch ( $setting['type'] ) { - case 'number' : + case 'number': $instance[ $key ] = absint( $new_instance[ $key ] ); if ( isset( $setting['min'] ) && '' !== $setting['min'] ) { @@ -171,30 +176,30 @@ public function update( $new_instance, $old_instance ) { if ( isset( $setting['max'] ) && '' !== $setting['max'] ) { $instance[ $key ] = min( $instance[ $key ], $setting['max'] ); } - break; - case 'textarea' : + break; + case 'textarea': if ( current_user_can( 'unfiltered_html' ) ) { $instance[ $key ] = $new_instance[ $key ]; } else { $instance[ $key ] = wp_kses( trim( wp_unslash( $new_instance[ $key ] ) ), wp_kses_allowed_html( 'post' ) ); } - break; - case 'checkbox' : + break; + case 'checkbox': $instance[ $key ] = empty( $new_instance[ $key ] ) ? 0 : 1; - break; - case 'select_categories' : - if( is_array($new_instance[$key][0]) ){ + break; + case 'select_categories': + if ( is_array( $new_instance[ $key ][0] ) ) { $instance[ $key ] = $new_instance[ $key ][0]; } else { $instance[ $key ] = isset( $new_instance[ $key ] ) ? suffice_clean( $new_instance[ $key ] ) : ''; } - break; - case 'color_picker' : + break; + case 'color_picker': $instance[ $key ] = $new_instance[ $key ]; - break; + break; default: $instance[ $key ] = isset( $new_instance[ $key ] ) ? suffice_clean( $new_instance[ $key ] ) : ''; - break; + break; } /** @@ -224,96 +229,102 @@ public function form( $instance ) {
- settings as $key => $setting ) { $group_name = isset( $setting['group'] ) ? $setting['group'] : ''; - if( !in_array( $group_name, $group_name_array ) ) { + if ( ! in_array( $group_name, $group_name_array ) ) { $group_name_array[] = $group_name; - if( $group_name_array[0] != '' ) { ?> - - - - + + + + + } + ?>
- -
+ foreach ( $group_name_array as $group ) { + ?> +
- settings as $key => $setting ) { - $current_setting_group = isset( $setting['group'] ) ? $setting['group'] : ''; + settings as $key => $setting ) { + $current_setting_group = isset( $setting['group'] ) ? $setting['group'] : ''; - if( $current_setting_group == $group || empty( $group_name_array ) ) { - $class = isset( $setting['class'] ) ? $setting['class'] : ''; - $value = isset( $instance[ $key ] ) ? $instance[ $key ] : $setting['std']; - $field_width = isset( $setting['field_width'] ) ? $setting['field_width'] : 'col-full'; + if ( $current_setting_group == $group || empty( $group_name_array ) ) { + $class = isset( $setting['class'] ) ? $setting['class'] : ''; + $value = isset( $instance[ $key ] ) ? $instance[ $key ] : $setting['std']; + $field_width = isset( $setting['field_width'] ) ? $setting['field_width'] : 'col-full'; - switch ( $setting['type'] ) { + switch ( $setting['type'] ) { - case 'text' : - ?> + case 'text': + ?>

- - + +

- + case 'number': + ?>

- - + +

- + case 'select': + ?>

- - $option_value ) : ?>

- + case 'radio-image': + ?>

- + $option_image ) : ?>

- + case 'select_pages': + case 'select_categories': + ?>

- - get_field_id( $key ) ); ?>"> + $this->get_field_id( $key ), 'name' => $this->get_field_name( $key ), @@ -327,114 +338,116 @@ public function form( $instance ) { // Display dropdown based on settings type. if ( 'select_pages' === $setting['type'] ) { - wp_dropdown_pages( $args ); + wp_dropdown_pages( $args ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } elseif ( 'select_categories' === $setting['type'] ) { wp_dropdown_categories( $args ); } - ?> + ?>

- + case 'textarea': + ?>

- - - + + +

- + case 'checkbox': + ?>

/> - +

- + case 'image': + ?>
-

-
+

+
- +

- - + +

- + case 'icon_picker': + ?>
-

- $option_value ) : ?>
- + case 'color_picker': + ?>

- - + +

- + case 'font_picker': + ?>

- - $option_value ) : ?>

- -
-
- -
- +
+
+ + + get_field_name( $setting_key ) . '[' . $field_key . '][' . $key . ']'; switch ( $setting['type'] ) { - case 'text' : + case 'text': ?>

- - + +

- - + +

- - $option_value ) : ?>

- + $field_id, @@ -504,59 +517,59 @@ public function output_repeater_field( $settings = array(), $instance, $setting_ // Display dropdown based on settings type. if ( 'select_pages' === $setting['type'] ) { - wp_dropdown_pages( $args ); + wp_dropdown_pages( $args ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } elseif ( 'select_categories' === $setting['type'] ) { wp_dropdown_categories( $args ); } - ?> + ?>

- - + +

- /> - + /> +

-

-
+

+

- - + +

-

- $option_value ) : ?> @@ -564,7 +577,7 @@ public function output_repeater_field( $settings = array(), $instance, $setting_
= apply_filters( 'suffice_toolkit_maximum_repeater_field_entries', 5 ) ? 'disabled' : 'enabled'; +$suffice_toolkit_repeater_field_id = strtolower( str_replace( ' ', '-', $setting['title'] ) ) . '-{{ data.field_id }}'; +$suffice_toolkit_max_field_entries = count( (array) $value ) >= apply_filters( 'suffice_toolkit_maximum_repeater_field_entries', 5 ) ? 'disabled' : 'enabled'; ?>
-

+

    - $field ) : ?> + $field ) : //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound ?>
  • @@ -33,7 +33,7 @@
-

+

@@ -41,13 +41,13 @@
diff --git a/includes/admin/class-suffice-admin-assets.php b/includes/admin/class-suffice-admin-assets.php index b4c6618..c3fa985 100644 --- a/includes/admin/class-suffice-admin-assets.php +++ b/includes/admin/class-suffice-admin-assets.php @@ -37,11 +37,11 @@ public function admin_styles() { $screen = get_current_screen(); $screen_id = $screen ? $screen->id : ''; - $jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.9.2'; + $jquery_version = isset( $wp_scripts->registered['jquery-ui-core']->ver ) ? $wp_scripts->registered['jquery-ui-core']->ver : '1.14.2'; // Register admin styles. wp_register_style( 'font-awesome', ST()->plugin_url() . '/assets/css/fontawesome.css', array(), '4.6.3' ); - wp_register_style( 'jquery-ui-style', '//code.jquery.com/ui/' . $jquery_version . '/themes/smoothness/jquery-ui.css', array(), $jquery_version ); + wp_register_style( 'jquery-ui-style', ST()->plugin_url() . '/assets/css/jquery-ui.css', array(), $jquery_version ); wp_register_style( 'suffice-toolkit-menu', ST()->plugin_url() . '/assets/css/menu.css', array(), ST_VERSION ); wp_register_style( 'suffice-toolkit-admin', ST()->plugin_url() . '/assets/css/admin.css', array(), ST_VERSION ); wp_register_style( 'suffice-toolkit-admin-widgets', ST()->plugin_url() . '/assets/css/widgets.css', array( 'font-awesome', 'wp-color-picker' ), ST_VERSION ); @@ -70,30 +70,44 @@ public function admin_scripts() { $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; // Register admin scripts. - wp_register_script( 'suffice-toolkit-admin', ST()->plugin_url() . '/assets/js/admin/admin' . $suffix . '.js', array( 'jquery', 'jquery-ui-sortable', 'jquery-ui-widget', 'jquery-ui-core', 'jquery-tiptip' ), ST_VERSION ); - wp_register_script( 'suffice-toolkit-admin-widgets', ST()->plugin_url() . '/assets/js/admin/widgets' . $suffix . '.js', array( 'jquery', 'jquery-ui-sortable', 'wp-util', 'underscore', 'backbone', 'suffice-enhanced-select', 'wp-color-picker' ), ST_VERSION ); - wp_register_script( 'suffice-toolkit-admin-sidebars', ST()->plugin_url() . '/assets/js/admin/sidebars' . $suffix . '.js', array( 'jquery' ), ST_VERSION ); + wp_register_script( 'suffice-toolkit-admin', ST()->plugin_url() . '/assets/js/admin/admin' . $suffix . '.js', array( 'jquery', 'jquery-ui-sortable', 'jquery-ui-widget', 'jquery-ui-core', 'jquery-tiptip' ), ST_VERSION, true ); + wp_register_script( 'suffice-toolkit-admin-widgets', ST()->plugin_url() . '/assets/js/admin/widgets' . $suffix . '.js', array( 'jquery', 'jquery-ui-sortable', 'wp-util', 'underscore', 'backbone', 'suffice-enhanced-select', 'wp-color-picker' ), ST_VERSION, true ); + wp_register_script( 'suffice-toolkit-admin-sidebars', ST()->plugin_url() . '/assets/js/admin/sidebars' . $suffix . '.js', array( 'jquery' ), ST_VERSION, true ); wp_register_script( 'jquery-tiptip', ST()->plugin_url() . '/assets/js/jquery-tiptip/jquery.tipTip' . $suffix . '.js', array( 'jquery' ), ST_VERSION, true ); - wp_register_script( 'select2', ST()->plugin_url() . '/assets/js/select2/select2' . $suffix . '.js', array( 'jquery' ), '4.0.3' ); - wp_register_script( 'suffice-enhanced-select', ST()->plugin_url() . '/assets/js/admin/enhanced-select' . $suffix . '.js', array( 'jquery', 'select2' ), ST_VERSION ); - wp_localize_script( 'suffice-enhanced-select', 'suffice_enhanced_select_params', array( - 'i18n_matches_1' => _x( 'One result is available, press enter to select it.', 'enhanced select', 'suffice-toolkit' ), - 'i18n_matches_n' => _x( '%qty% results are available, use up and down arrow keys to navigate.', 'enhanced select', 'suffice-toolkit' ), - 'i18n_no_matches' => _x( 'No matches found', 'enhanced select', 'suffice-toolkit' ), - 'i18n_ajax_error' => _x( 'Loading failed', 'enhanced select', 'suffice-toolkit' ), - 'i18n_input_too_short_1' => _x( 'Please enter 1 or more characters', 'enhanced select', 'suffice-toolkit' ), - 'i18n_input_too_short_n' => _x( 'Please enter %qty% or more characters', 'enhanced select', 'suffice-toolkit' ), - 'i18n_input_too_long_1' => _x( 'Please delete 1 character', 'enhanced select', 'suffice-toolkit' ), - 'i18n_input_too_long_n' => _x( 'Please delete %qty% characters', 'enhanced select', 'suffice-toolkit' ), - 'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'suffice-toolkit' ), - 'i18n_selection_too_long_n' => _x( 'You can only select %qty% items', 'enhanced select', 'suffice-toolkit' ), - 'i18n_load_more' => _x( 'Loading more results…', 'enhanced select', 'suffice-toolkit' ), - 'i18n_searching' => _x( 'Searching…', 'enhanced select', 'suffice-toolkit' ) - ) ); - wp_localize_script( 'suffice-toolkit-admin-widgets', 'sufficeToolkitLocalizeScript', array( - 'i18n_max_field_entries' => apply_filters( 'suffice_toolkit_maximum_repeater_field_entries', 5 ), - 'i18n_max_field_message' => esc_js( sprintf( __( 'You can add upto %s fields.', 'suffice-toolkit' ), apply_filters( 'suffice_toolkit_maximum_repeater_field_entries', 5 ) ) ), - ) ); + wp_register_script( 'select2', ST()->plugin_url() . '/assets/js/select2/select2' . $suffix . '.js', array( 'jquery' ), '4.0.3', true ); + wp_register_script( 'suffice-enhanced-select', ST()->plugin_url() . '/assets/js/admin/enhanced-select' . $suffix . '.js', array( 'jquery', 'select2' ), ST_VERSION, true ); + wp_localize_script( + 'suffice-enhanced-select', + 'suffice_enhanced_select_params', + array( + 'i18n_matches_1' => _x( 'One result is available, press enter to select it.', 'enhanced select', 'suffice-toolkit' ), + 'i18n_matches_n' => _x( '%qty% results are available, use up and down arrow keys to navigate.', 'enhanced select', 'suffice-toolkit' ), + 'i18n_no_matches' => _x( 'No matches found', 'enhanced select', 'suffice-toolkit' ), + 'i18n_ajax_error' => _x( 'Loading failed', 'enhanced select', 'suffice-toolkit' ), + 'i18n_input_too_short_1' => _x( 'Please enter 1 or more characters', 'enhanced select', 'suffice-toolkit' ), + 'i18n_input_too_short_n' => _x( 'Please enter %qty% or more characters', 'enhanced select', 'suffice-toolkit' ), + 'i18n_input_too_long_1' => _x( 'Please delete 1 character', 'enhanced select', 'suffice-toolkit' ), + 'i18n_input_too_long_n' => _x( 'Please delete %qty% characters', 'enhanced select', 'suffice-toolkit' ), + 'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'suffice-toolkit' ), + 'i18n_selection_too_long_n' => _x( 'You can only select %qty% items', 'enhanced select', 'suffice-toolkit' ), + 'i18n_load_more' => _x( 'Loading more results…', 'enhanced select', 'suffice-toolkit' ), + 'i18n_searching' => _x( 'Searching…', 'enhanced select', 'suffice-toolkit' ), + ) + ); + wp_localize_script( + 'suffice-toolkit-admin-widgets', + 'sufficeToolkitLocalizeScript', + array( + 'i18n_max_field_entries' => apply_filters( 'suffice_toolkit_maximum_repeater_field_entries', 5 ), + 'i18n_max_field_message' => esc_js( + sprintf( + /* translators: %s: maximum number of fields allowed */ + __( 'You can add up to %s fields.', 'suffice-toolkit' ), + apply_filters( 'suffice_toolkit_maximum_repeater_field_entries', 5 ) + ) + ), + ) + ); // SufficeToolkit admin pages. if ( in_array( $screen_id, suffice_toolkit_get_screen_ids() ) ) { @@ -109,11 +123,15 @@ public function admin_scripts() { if ( 'widgets' === $screen_id && is_suffice_pro_active() ) { wp_enqueue_script( 'suffice-toolkit-admin-sidebars' ); - wp_localize_script( 'suffice-toolkit-admin-sidebars', 'suffice_toolkit_admin_sidebars', array( - 'ajax_url' => admin_url( 'admin-ajax.php' ), - 'delete_custom_sidebar_nonce' => wp_create_nonce( 'delete-custom-sidebar' ), - 'i18n_confirm_delete_custom_sidebar' => __( 'Delete this Sidebar Permanently and store all widgets in Inactive Sidebar. Are you positive you want to delete this Sidebar?', 'suffice-toolkit' ), - ) ); + wp_localize_script( + 'suffice-toolkit-admin-sidebars', + 'suffice_toolkit_admin_sidebars', + array( + 'ajax_url' => admin_url( 'admin-ajax.php' ), + 'delete_custom_sidebar_nonce' => wp_create_nonce( 'delete-custom-sidebar' ), + 'i18n_confirm_delete_custom_sidebar' => __( 'Delete this Sidebar Permanently and store all widgets in Inactive Sidebar. Are you positive you want to delete this Sidebar?', 'suffice-toolkit' ), + ) + ); } } } diff --git a/includes/admin/class-suffice-admin-notices.php b/includes/admin/class-suffice-admin-notices.php index d14038a..31c95eb 100644 --- a/includes/admin/class-suffice-admin-notices.php +++ b/includes/admin/class-suffice-admin-notices.php @@ -99,15 +99,15 @@ public static function has_notice( $name ) { */ public static function hide_notices() { if ( isset( $_GET['suffice-toolkit-hide-notice'] ) && isset( $_GET['_suffice_toolkit_notice_nonce'] ) ) { - if ( ! wp_verify_nonce( $_GET['_suffice_toolkit_notice_nonce'], 'suffice_toolkit_hide_notices_nonce' ) ) { - wp_die( __( 'Action failed. Please refresh the page and retry.', 'suffice-toolkit' ) ); + if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['_suffice_toolkit_notice_nonce'] ) ), 'suffice_toolkit_hide_notices_nonce' ) ) { + wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'suffice-toolkit' ) ); } if ( ! current_user_can( 'manage_suffice_toolkit' ) ) { - wp_die( __( 'Cheatin’ huh?', 'suffice-toolkit' ) ); + wp_die( esc_html__( "Cheatin' huh?", 'suffice-toolkit' ) ); } - $hide_notice = sanitize_text_field( $_GET['suffice-toolkit-hide-notice'] ); + $hide_notice = sanitize_text_field( wp_unslash( $_GET['suffice-toolkit-hide-notice'] ) ); self::remove_notice( $hide_notice ); do_action( 'suffice_toolkit_hide_' . $hide_notice . '_notice' ); } @@ -153,7 +153,7 @@ public static function output_custom_notices() { $notice_html = get_option( 'suffice_toolkit_admin_notice_' . $notice ); if ( $notice_html ) { - include( 'views/html-notice-custom.php' ); + include 'views/html-notice-custom.php'; } } } @@ -165,14 +165,27 @@ public static function output_custom_notices() { */ public static function update_notice() { if ( version_compare( get_option( 'suffice_toolkit_db_version' ), ST_VERSION, '<' ) ) { - $updater = new ST_Background_Updater(); + $updater = new \ST_Background_Updater(); if ( $updater->is_updating() || ! empty( $_GET['do_update_suffice_toolkit'] ) ) { - include( 'views/html-notice-updating.php' ); + if ( ! current_user_can( 'manage_options' ) ) { + wp_die( esc_html__( "Cheatin' huh?", 'suffice-toolkit' ) ); + } + + if ( + ! isset( $_GET['_wpnonce'] ) || + ! wp_verify_nonce( + sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ), + 'suffice_toolkit_update' + ) + ) { + wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'suffice-toolkit' ) ); + } + include 'views/html-notice-updating.php'; } else { - include( 'views/html-notice-update.php' ); + include 'views/html-notice-update.php'; } } else { - include( 'views/html-notice-updated.php' ); + include 'views/html-notice-updated.php'; } } } diff --git a/includes/admin/class-suffice-admin-permalink-settings.php b/includes/admin/class-suffice-admin-permalink-settings.php index b3b8420..92f3312 100644 --- a/includes/admin/class-suffice-admin-permalink-settings.php +++ b/includes/admin/class-suffice-admin-permalink-settings.php @@ -16,6 +16,7 @@ /** * ST_Admin_Permalink_Settings Class */ +// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound class ST_Admin_Permalink_Settings { /** @@ -56,7 +57,12 @@ public function settings_init() { public function portfolio_category_slug_input() { $permalinks = get_option( 'suffice_toolkit_permalinks' ); ?> - + - + '', 1 => '/' . trailingslashit( $base_slug ), - 2 => '/' . trailingslashit( $base_slug ) . trailingslashit( '%portfolio_cat%' ) + 2 => '/' . trailingslashit( $base_slug ) . trailingslashit( '%portfolio_cat%' ), ); ?> + - + - + - + + @@ -144,24 +156,41 @@ public function settings_save() { if ( ! is_admin() ) { return; } - // We need to save the options ourselves; settings api does not trigger save for the permalinks page. if ( isset( $_POST['permalink_structure'] ) ) { + if ( ! isset( $_POST['suffice_toolkit_permalink_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['suffice_toolkit_permalink_nonce'] ) ), 'suffice_toolkit_permalink_action' ) ) { + wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'suffice-toolkit' ) ); + } + + if ( ! current_user_can( 'manage_options' ) ) { + wp_die( esc_html__( "Cheatin' huh?", 'suffice-toolkit' ) ); + } + $permalinks = get_option( 'suffice_toolkit_permalinks' ); if ( ! $permalinks ) { $permalinks = array(); } - $permalinks['category_base'] = suffice_sanitize_permalink( trim( $_POST['suffice_toolkit_portfolio_category_slug'] ) ); - $permalinks['tag_base'] = suffice_sanitize_permalink( trim( $_POST['suffice_toolkit_portfolio_tag_slug'] ) ); + $permalinks['category_base'] = isset( $_POST['suffice_toolkit_portfolio_category_slug'] ) + ? suffice_sanitize_permalink( wp_unslash( $_POST['suffice_toolkit_portfolio_category_slug'] ) ) //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- sanitized in suffice_sanitize_permalink() + : ''; + + $permalinks['tag_base'] = isset( $_POST['suffice_toolkit_portfolio_tag_slug'] ) + ? suffice_sanitize_permalink( wp_unslash( $_POST['suffice_toolkit_portfolio_tag_slug'] ) ) //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- sanitized in suffice_sanitize_permalink() + : ''; // Portfolio base. - $portfolio_permalink = isset( $_POST['portfolio_permalink'] ) ? suffice_clean( $_POST['portfolio_permalink'] ) : ''; + $portfolio_permalink = isset( $_POST['portfolio_permalink'] ) ? suffice_clean( $_POST['portfolio_permalink'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- unslash and sanitized in suffice_clean() if ( 'custom' === $portfolio_permalink ) { if ( isset( $_POST['portfolio_permalink_structure'] ) ) { - $portfolio_permalink = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', trim( $_POST['portfolio_permalink_structure'] ) ) ); + + $structure = sanitize_text_field( + wp_unslash( $_POST['portfolio_permalink_structure'] ) + ); + + $portfolio_permalink = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', trim( $structure ) ) ); } else { $portfolio_permalink = '/'; } diff --git a/includes/admin/class-suffice-admin-post-types.php b/includes/admin/class-suffice-admin-post-types.php index 0e70063..fbb3cc1 100644 --- a/includes/admin/class-suffice-admin-post-types.php +++ b/includes/admin/class-suffice-admin-post-types.php @@ -47,18 +47,42 @@ public function post_updated_messages( $messages ) { global $post, $post_ID; $messages['portfolio'] = array( - 0 => '', // Unused. Messages start at index 1. - 1 => sprintf( __( 'Project updated. View Project', 'suffice-toolkit' ), esc_url( get_permalink( $post_ID ) ) ), - 2 => __( 'Custom field updated.', 'suffice-toolkit' ), - 3 => __( 'Custom field deleted.', 'suffice-toolkit' ), - 4 => __( 'Project updated.', 'suffice-toolkit' ), - 5 => isset( $_GET['revision'] ) ? sprintf( __( 'Project restored to revision from %s', 'suffice-toolkit' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, - 6 => sprintf( __( 'Project published. View Project', 'suffice-toolkit' ), esc_url( get_permalink( $post_ID ) ) ), - 7 => __( 'Project saved.', 'suffice-toolkit' ), - 8 => sprintf( __( 'Project submitted. Preview project', 'suffice-toolkit' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ) ), - 9 => sprintf( __( 'Project scheduled for: %1$s. Preview project', 'suffice-toolkit' ), - date_i18n( __( 'M j, Y @ G:i', 'suffice-toolkit' ), strtotime( $post->post_date ) ), esc_url( get_permalink( $post_ID ) ) ), - 10 => sprintf( __( 'Project draft updated. Preview project', 'suffice-toolkit' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ) ), + 0 => '', // Unused. Messages start at index 1. + 1 => sprintf( + /* translators: %s: project permalink URL */ + __( 'Project updated. View Project', 'suffice-toolkit' ), + esc_url( get_permalink( $post_ID ) ) + ), + 2 => __( 'Custom field updated.', 'suffice-toolkit' ), + 3 => __( 'Custom field deleted.', 'suffice-toolkit' ), + 4 => __( 'Project updated.', 'suffice-toolkit' ), + 5 => isset( $_GET['revision'] ) ? sprintf( //phpcs:ignore WordPress.Security.NonceVerification.Recommended + /* translators: %s: revision date/time */ + __( 'Project restored to revision from %s', 'suffice-toolkit' ), + wp_post_revision_title( (int) $_GET['revision'], false ) //phpcs:ignore WordPress.Security.NonceVerification.Recommended + ) : false, + 6 => sprintf( + /* translators: %s: project permalink URL */ + __( 'Project published. View Project', 'suffice-toolkit' ), + esc_url( get_permalink( $post_ID ) ) + ), + 7 => __( 'Project saved.', 'suffice-toolkit' ), + 8 => sprintf( + /* translators: %s: project preview URL */ + __( 'Project submitted. Preview project', 'suffice-toolkit' ), + esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ) + ), + 9 => sprintf( + /* translators: 1: scheduled date/time, 2: project preview URL */ + __( 'Project scheduled for: %1$s. Preview project', 'suffice-toolkit' ), + date_i18n( __( 'M j, Y @ G:i', 'suffice-toolkit' ), strtotime( $post->post_date ) ), + esc_url( get_permalink( $post_ID ) ) + ), + 10 => sprintf( + /* translators: %s: URL to preview the project */ + __( 'Project draft updated. Preview project', 'suffice-toolkit' ), + esc_url( add_query_arg( 'preview', 'true', get_permalink( $post_ID ) ) ) + ), ); return $messages; @@ -73,11 +97,45 @@ public function post_updated_messages( $messages ) { public function bulk_post_updated_messages( $bulk_messages, $bulk_counts ) { $bulk_messages['portfolio'] = array( - 'updated' => _n( '%s project updated.', '%s projects updated.', $bulk_counts['updated'], 'suffice-toolkit' ), - 'locked' => _n( '%s project not updated, somebody is editing it.', '%s projects not updated, somebody is editing them.', $bulk_counts['locked'], 'suffice-toolkit' ), - 'deleted' => _n( '%s project permanently deleted.', '%s projects permanently deleted.', $bulk_counts['deleted'], 'suffice-toolkit' ), - 'trashed' => _n( '%s project moved to the Trash.', '%s projects moved to the Trash.', $bulk_counts['trashed'], 'suffice-toolkit' ), - 'untrashed' => _n( '%s project restored from the Trash.', '%s projects restored from the Trash.', $bulk_counts['untrashed'], 'suffice-toolkit' ), + /* translators: %s: number of projects updated */ + 'updated' => _n( + '%s project updated.', + '%s projects updated.', + $bulk_counts['updated'], + 'suffice-toolkit' + ), + + /* translators: %s: number of projects not updated because they are locked */ + 'locked' => _n( + '%s project not updated, somebody is editing it.', + '%s projects not updated, somebody is editing them.', + $bulk_counts['locked'], + 'suffice-toolkit' + ), + + /* translators: %s: number of projects permanently deleted */ + 'deleted' => _n( + '%s project permanently deleted.', + '%s projects permanently deleted.', + $bulk_counts['deleted'], + 'suffice-toolkit' + ), + + /* translators: %s: number of projects moved to the trash */ + 'trashed' => _n( + '%s project moved to the Trash.', + '%s projects moved to the Trash.', + $bulk_counts['trashed'], + 'suffice-toolkit' + ), + + /* translators: %s: number of projects restored from the Trash */ + 'untrashed' => _n( + '%s project restored from the Trash.', + '%s projects restored from the Trash.', + $bulk_counts['untrashed'], + 'suffice-toolkit' + ), ); return $bulk_messages; @@ -91,9 +149,9 @@ public function bulk_post_updated_messages( $bulk_messages, $bulk_counts ) { */ public function enter_title_here( $text, $post ) { switch ( $post->post_type ) { - case 'portfolio' : + case 'portfolio': $text = __( 'Project name', 'suffice-toolkit' ); - break; + break; } return $text; diff --git a/includes/admin/class-suffice-admin.php b/includes/admin/class-suffice-admin.php index 8a9b264..8518503 100644 --- a/includes/admin/class-suffice-admin.php +++ b/includes/admin/class-suffice-admin.php @@ -32,11 +32,11 @@ public function __construct() { * Includes any classes we need within admin. */ public function includes() { - include_once( dirname( __FILE__ ) . '/functions-suffice-admin.php' ); - include_once( dirname( __FILE__ ) . '/functions-suffice-meta-box.php' ); - include_once( dirname( __FILE__ ) . '/class-suffice-admin-notices.php' ); - include_once( dirname( __FILE__ ) . '/class-suffice-admin-assets.php' ); - include_once( dirname( __FILE__ ) . '/class-suffice-admin-post-types.php' ); + include_once __DIR__ . '/functions-suffice-admin.php'; + include_once __DIR__ . '/functions-suffice-meta-box.php'; + include_once __DIR__ . '/class-suffice-admin-notices.php'; + include_once __DIR__ . '/class-suffice-admin-assets.php'; + include_once __DIR__ . '/class-suffice-admin-post-types.php'; } /** @@ -48,8 +48,8 @@ public function conditional_includes() { } switch ( $screen->id ) { - case 'options-permalink' : - include( 'class-suffice-admin-permalink-settings.php' ); + case 'options-permalink': + include 'class-suffice-admin-permalink-settings.php'; } } @@ -69,13 +69,20 @@ public function admin_footer_text( $footer_text ) { if ( isset( $current_screen->id ) && apply_filters( 'suffice_toolkit_display_admin_footer_text', in_array( $current_screen->id, $ft_pages ) ) ) { // Change the footer text. if ( ! get_option( 'suffice_toolkit_admin_footer_text_rated' ) ) { - $footer_text = sprintf( __( 'If you like Suffice Toolkit please leave us a %s★★★★★%s rating. A huge thanks in advance!', 'suffice-toolkit' ), '', '' ); - suffice_toolkit_enqueue_js( " + $footer_text = sprintf( + /* translators: %1$s: opening HTML anchor tag for the rating link, %2$s: closing HTML anchor tag */ + __( 'If you like Suffice Toolkit please leave us a %1$s★★★★★%2$s rating. A huge thanks in advance!', 'suffice-toolkit' ), + '', + '' + ); + suffice_toolkit_enqueue_js( + " jQuery( 'a.suffice-toolkit-rating-link' ).click( function() { jQuery.post( '" . ST()->ajax_url() . "', { action: 'suffice_toolkit_rated' } ); jQuery( this ).parent().text( jQuery( this ).data( 'rated' ) ); }); - " ); + " + ); } else { $footer_text = __( 'Thank you for creating with Suffice Toolkit.', 'suffice-toolkit' ); } diff --git a/includes/admin/functions-suffice-meta-box.php b/includes/admin/functions-suffice-meta-box.php index 9845158..5e8a21e 100644 --- a/includes/admin/functions-suffice-meta-box.php +++ b/includes/admin/functions-suffice-meta-box.php @@ -19,7 +19,7 @@ function suffice_toolkit_wp_text_input( $field ) { global $thepostid, $post; - $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; + $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound $field['placeholder'] = isset( $field['placeholder'] ) ? $field['placeholder'] : ''; $field['class'] = isset( $field['class'] ) ? $field['class'] : 'short'; $field['style'] = isset( $field['style'] ) ? $field['style'] : ''; @@ -30,12 +30,12 @@ function suffice_toolkit_wp_text_input( $field ) { $data_type = empty( $field['data_type'] ) ? '' : $field['data_type']; switch ( $data_type ) { - case 'url' : + case 'url': $field['class'] .= ' ft_input_url'; $field['value'] = esc_url( $field['value'] ); break; - default : + default: break; } @@ -44,17 +44,17 @@ function suffice_toolkit_wp_text_input( $field ) { if ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) { - foreach ( $field['custom_attributes'] as $attribute => $value ){ + foreach ( $field['custom_attributes'] as $attribute => $value ) { $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $value ) . '"'; } } - echo '

'; + echo '

'; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- attributes are individually escaped if ( ! empty( $field['description'] ) ) { if ( isset( $field['desc_tip'] ) && false !== $field['desc_tip'] ) { - echo suffice_toolkit_help_tip( $field['description'] ); + echo wp_kses_post( suffice_toolkit_help_tip( $field['description'] ) ); } else { echo '' . wp_kses_post( $field['description'] ) . ''; } @@ -69,11 +69,11 @@ function suffice_toolkit_wp_text_input( $field ) { function suffice_toolkit_wp_hidden_input( $field ) { global $thepostid, $post; - $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; + $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound $field['value'] = isset( $field['value'] ) ? $field['value'] : get_post_meta( $thepostid, $field['id'], true ); $field['class'] = isset( $field['class'] ) ? $field['class'] : ''; - echo ' '; + echo ' '; } /** @@ -83,7 +83,7 @@ function suffice_toolkit_wp_hidden_input( $field ) { function suffice_toolkit_wp_textarea_input( $field ) { global $thepostid, $post; - $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; + $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound $field['placeholder'] = isset( $field['placeholder'] ) ? $field['placeholder'] : ''; $field['class'] = isset( $field['class'] ) ? $field['class'] : 'short'; $field['style'] = isset( $field['style'] ) ? $field['style'] : ''; @@ -95,17 +95,17 @@ function suffice_toolkit_wp_textarea_input( $field ) { if ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) { - foreach ( $field['custom_attributes'] as $attribute => $value ){ + foreach ( $field['custom_attributes'] as $attribute => $value ) { $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $value ) . '"'; } } - echo '

'; + echo '

'; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- attributes are individually escaped if ( ! empty( $field['description'] ) ) { if ( isset( $field['desc_tip'] ) && false !== $field['desc_tip'] ) { - echo suffice_toolkit_help_tip( $field['description'] ); + echo wp_kses_post( suffice_toolkit_help_tip( $field['description'] ) ); } else { echo '' . wp_kses_post( $field['description'] ) . ''; } @@ -120,7 +120,7 @@ function suffice_toolkit_wp_textarea_input( $field ) { function suffice_toolkit_wp_checkbox( $field ) { global $thepostid, $post; - $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; + $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound $field['class'] = isset( $field['class'] ) ? $field['class'] : 'checkbox'; $field['style'] = isset( $field['style'] ) ? $field['style'] : ''; $field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : ''; @@ -133,17 +133,17 @@ function suffice_toolkit_wp_checkbox( $field ) { if ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) { - foreach ( $field['custom_attributes'] as $attribute => $value ){ + foreach ( $field['custom_attributes'] as $attribute => $value ) { $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $value ) . '"'; } } - echo '

'; + echo '

'; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- attributes are individually escaped if ( ! empty( $field['description'] ) ) { if ( isset( $field['desc_tip'] ) && false !== $field['desc_tip'] ) { - echo suffice_toolkit_help_tip( $field['description'] ); + echo wp_kses_post( suffice_toolkit_help_tip( $field['description'] ) ); } else { echo '' . wp_kses_post( $field['description'] ) . ''; } @@ -159,7 +159,7 @@ function suffice_toolkit_wp_checkbox( $field ) { function suffice_toolkit_wp_select( $field ) { global $thepostid, $post; - $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; + $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound $field['class'] = isset( $field['class'] ) ? $field['class'] : 'select short'; $field['style'] = isset( $field['style'] ) ? $field['style'] : ''; $field['desc_side'] = isset( $field['desc_side'] ) ? $field['desc_side'] : false; @@ -173,7 +173,7 @@ function suffice_toolkit_wp_select( $field ) { if ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) { - foreach ( $field['custom_attributes'] as $attribute => $value ){ + foreach ( $field['custom_attributes'] as $attribute => $value ) { $custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $value ) . '"'; } } @@ -184,7 +184,7 @@ function suffice_toolkit_wp_select( $field ) { if ( ! empty( $field['description'] ) ) { if ( isset( $field['desc_tip'] ) && false !== $field['desc_tip'] ) { - $description = suffice_toolkit_help_tip( $field['description'] ); + $description = wp_kses_post( suffice_toolkit_help_tip( $field['description'] ) ); } else { $description = '' . wp_kses_post( $field['description'] ) . ''; } @@ -193,10 +193,10 @@ function suffice_toolkit_wp_select( $field ) { echo '

'; if ( isset( $field['desc_side'] ) && true === $field['desc_side'] ) { - echo $description; + echo $description; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- already escaped above } - echo ''; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- attributes are individually escaped foreach ( $field['options'] as $key => $value ) { echo ''; @@ -205,7 +205,7 @@ function suffice_toolkit_wp_select( $field ) { echo ' '; if ( isset( $field['desc_side'] ) && false === $field['desc_side'] ) { - echo $description; + echo $description; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- already escaped above } echo '

'; @@ -218,7 +218,7 @@ function suffice_toolkit_wp_select( $field ) { function suffice_toolkit_wp_radio( $field ) { global $thepostid, $post; - $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; + $thepostid = empty( $thepostid ) ? $post->ID : $thepostid; //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound $field['class'] = isset( $field['class'] ) ? $field['class'] : 'select short'; $field['style'] = isset( $field['style'] ) ? $field['style'] : ''; $field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : ''; @@ -244,7 +244,7 @@ class="' . esc_attr( $field['class'] ) . '" if ( ! empty( $field['description'] ) ) { if ( isset( $field['desc_tip'] ) && false !== $field['desc_tip'] ) { - echo suffice_toolkit_help_tip( $field['description'] ); + echo wp_kses_post( suffice_toolkit_help_tip( $field['description'] ) ); } else { echo '' . wp_kses_post( $field['description'] ) . ''; } diff --git a/includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php b/includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php index 2c84e20..dce99bd 100644 --- a/includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php +++ b/includes/admin/meta-boxes/class-suffice-meta-box-layout-data.php @@ -18,6 +18,7 @@ /** * ST_Meta_Box_Layout_Data Class */ +// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound class ST_Meta_Box_Layout_Data { /** @@ -34,38 +35,105 @@ public static function output( $post ) { do_action( 'suffice_toolkit_layout_data_start', $post->ID ); // Layout - suffice_toolkit_wp_select( array( 'id' => 'suffice_page_layout', 'class' => 'select side show_if_sidebar', 'label' => __( 'Layout Settings', 'suffice-toolkit' ), 'options' => array( - 'default-layout' => __( 'Default Layout', 'suffice-toolkit' ), - 'left-sidebar' => __( 'Left Sidebar', 'suffice-toolkit' ), - 'right-sidebar' => __( 'Right Sidebar', 'suffice-toolkit' ), - 'full-width' => __( 'Full Width', 'suffice-toolkit' ), - 'full-width-center' => __( 'Full Width Center', 'suffice-toolkit' ), - ), 'desc_side' => true, 'desc_tip' => false, 'desc_class' => 'side', 'description' => __( 'Select the specific layout for this entry.', 'suffice-toolkit' ) ) ); + suffice_toolkit_wp_select( + array( + 'id' => 'suffice_page_layout', + 'class' => 'select side show_if_sidebar', + 'label' => __( 'Layout Settings', 'suffice-toolkit' ), + 'options' => array( + 'default-layout' => __( 'Default Layout', 'suffice-toolkit' ), + 'left-sidebar' => __( 'Left Sidebar', 'suffice-toolkit' ), + 'right-sidebar' => __( 'Right Sidebar', 'suffice-toolkit' ), + 'full-width' => __( 'Full Width', 'suffice-toolkit' ), + 'full-width-center' => __( 'Full Width Center', 'suffice-toolkit' ), + ), + 'desc_side' => true, + 'desc_tip' => false, + 'desc_class' => 'side', + 'description' => __( + 'Select the specific layout for this entry.', + 'suffice-toolkit' + ), + ) + ); // Sidebar - suffice_toolkit_wp_select( array( 'id' => 'suffice_sidebar', 'class' => 'select side', 'label' => __( 'Sidebar Settings', 'suffice-toolkit' ), 'desc_side' => true, 'desc_tip' => false, 'desc_class' => 'side', 'description' => __( 'Choose a custom sidebar for this entry.', 'suffice-toolkit' ), 'options' => suffice_toolkit_get_sidebars( array( 'default' => 'Default Sidebar' ) ) ) ); + suffice_toolkit_wp_select( + array( + 'id' => 'suffice_sidebar', + 'class' => 'select side', + 'label' => __( 'Sidebar Settings', 'suffice-toolkit' ), + 'desc_side' => true, + 'desc_tip' => false, + 'desc_class' => 'side', + 'description' => __( 'Choose a custom sidebar for this entry.', 'suffice-toolkit' ), + 'options' => suffice_toolkit_get_sidebars( array( 'default' => 'Default Sidebar' ) ), + ) + ); // Footer - suffice_toolkit_wp_select( array( 'id' => 'suffice_footer', 'class' => 'select side', 'label' => __( 'Footer Settings', 'suffice-toolkit' ), 'options' => array( - 'default' => __( 'Default Socket and Widgets', 'suffice-toolkit' ), - 'footer_both' => __( 'Both Socket and Widgets', 'suffice-toolkit' ), - 'widget_only' => __( 'Only Widgets (No Socket)', 'suffice-toolkit' ), - 'socket_only' => __( 'Only Socket (No Widgets)', 'suffice-toolkit' ), - 'footer_hide' => __( 'Hide Socket and Widgets', 'suffice-toolkit' ) - ), 'desc_side' => true, 'desc_tip' => false, 'desc_class' => 'side', 'description' => __( 'Display the socket and footer widgets?', 'suffice-toolkit' ) ) ); + suffice_toolkit_wp_select( + array( + 'id' => 'suffice_footer', + 'class' => 'select side', + 'label' => __( 'Footer Settings', 'suffice-toolkit' ), + 'options' => array( + 'default' => __( 'Default Socket and Widgets', 'suffice-toolkit' ), + 'footer_both' => __( 'Both Socket and Widgets', 'suffice-toolkit' ), + 'widget_only' => __( 'Only Widgets (No Socket)', 'suffice-toolkit' ), + 'socket_only' => __( 'Only Socket (No Widgets)', 'suffice-toolkit' ), + 'footer_hide' => __( 'Hide Socket and Widgets', 'suffice-toolkit' ), + ), + 'desc_side' => true, + 'desc_tip' => false, + 'desc_class' => 'side', + 'description' => __( + 'Display the socket and footer widgets?', + 'suffice-toolkit' + ), + ) + ); // Header Transparency - suffice_toolkit_wp_select( array( 'id' => 'suffice_transparency', 'class' => 'select side', 'label' => __( 'Header Transparency', 'suffice-toolkit' ), 'options' => array( - 'non-transparent' => __( 'No Transparency', 'suffice-toolkit' ), - 'transparent' => __( 'Transparent Header', 'suffice-toolkit' ), - ), 'desc_side' => true, 'desc_tip' => false, 'desc_class' => 'side', 'description' => __( 'Header transparency options on this page.', 'suffice-toolkit' ) ) ); + suffice_toolkit_wp_select( + array( + 'id' => 'suffice_transparency', + 'class' => 'select side', + 'label' => __( 'Header Transparency', 'suffice-toolkit' ), + 'options' => array( + 'non-transparent' => __( 'No Transparency', 'suffice-toolkit' ), + 'transparent' => __( 'Transparent Header', 'suffice-toolkit' ), + ), + 'desc_side' => true, + 'desc_tip' => false, + 'desc_class' => 'side', + 'description' => __( + 'Header transparency options on this page.', + 'suffice-toolkit' + ), + ) + ); // Top Sidebar Position - suffice_toolkit_wp_select( array( 'id' => 'suffice_top_sidebar_position', 'class' => 'select side', 'label' => __( 'Top Sidebar Position', 'suffice-toolkit' ), 'options' => array( - 'none' => __( 'None', 'suffice-toolkit' ), - 'above_header' => __( 'Above Header', 'suffice-toolkit' ), - 'below_header' => __( 'Below Header', 'suffice-toolkit' ), - ), 'desc_side' => true, 'desc_tip' => false, 'desc_class' => 'side', 'description' => __( 'Top Sidebar Position options on this page.', 'suffice-toolkit' ) ) ); + suffice_toolkit_wp_select( + array( + 'id' => 'suffice_top_sidebar_position', + 'class' => 'select side', + 'label' => __( 'Top Sidebar Position', 'suffice-toolkit' ), + 'options' => array( + 'none' => __( 'None', 'suffice-toolkit' ), + 'above_header' => __( 'Above Header', 'suffice-toolkit' ), + 'below_header' => __( 'Below Header', 'suffice-toolkit' ), + ), + 'desc_side' => true, + 'desc_tip' => false, + 'desc_class' => 'side', + 'description' => __( + 'Top Sidebar Position options on this page.', + 'suffice-toolkit' + ), + ) + ); do_action( 'suffice_toolkit_layout_data_end', $post->ID ); ?> @@ -78,11 +146,19 @@ public static function output( $post ) { * @param int $post_id */ public static function save( $post_id ) { + if ( ! isset( $_POST['suffice_toolkit_meta_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['suffice_toolkit_meta_nonce'] ) ), 'suffice_toolkit_save_data' ) ) { + wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'suffice-toolkit' ) ); + } + + if ( ! current_user_can( 'edit_post', $post_id ) ) { + wp_die( esc_html__( "Cheatin' huh?", 'suffice-toolkit' ) ); + } + $layout_post_meta = array( 'suffice_layout', 'suffice_sidebar', 'suffice_footer', 'suffice_transparency', 'suffice_top_sidebar_position' ); foreach ( $layout_post_meta as $post_meta ) { if ( isset( $_POST[ $post_meta ] ) ) { - update_post_meta( $post_id, $post_meta, $_POST[ $post_meta ] ); + update_post_meta( $post_id, $post_meta, sanitize_text_field( wp_unslash( $_POST[ $post_meta ] ) ) ); } } } diff --git a/includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php b/includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php index 820ea76..8ac6896 100644 --- a/includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php +++ b/includes/admin/meta-boxes/class-suffice-meta-box-portfolio-data.php @@ -16,6 +16,7 @@ /** * ST_Meta_Box_Portfolio_Data Class */ +// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedClassFound class ST_Meta_Box_Portfolio_Data { /** @@ -29,69 +30,89 @@ public static function output( $post ) {
    array( - 'label' => __( 'General', 'suffice-toolkit' ), - 'target' => 'general_portfolio_data', - 'class' => array(), - ), - 'description' => array( - 'label' => __( 'Description', 'suffice-toolkit' ), - 'target' => 'description_portfolio_data', - 'class' => array(), - ), - ) ); - - foreach ( $portfolio_data_tabs as $key => $tab ) { - ?>
  • - -
  • array( + 'label' => __( 'General', 'suffice-toolkit' ), + 'target' => 'general_portfolio_data', + 'class' => array(), + ), + 'description' => array( + 'label' => __( 'Description', 'suffice-toolkit' ), + 'target' => 'description_portfolio_data', + 'class' => array(), + ), + ) + ); + + foreach ( $portfolio_data_tabs as $key => $tab ) { + ?> +
  • + +
  • +
- '; - - echo '
'; + suffice_toolkit_wp_select( + array( + 'id' => 'layout_type', + 'label' => __( 'Layout Type', 'suffice-toolkit' ), + 'options' => array( + 'one_column' => __( 'One Column', 'suffice-toolkit' ), + 'two_column' => __( 'Two Column', 'suffice-toolkit' ), + ), + 'desc_tip' => 'true', + 'description' => __( 'Define whether or not the entire layout should be one or two column based.', 'suffice-toolkit' ), + ) + ); + + echo '
'; + + echo '
'; // Example Checkbox - suffice_toolkit_wp_checkbox( array( 'id' => '_example_cb', 'wrapper_class' => 'show_to_all_layout', 'label' => __( 'Sample Checkbox', 'suffice-toolkit' ), 'description' => __( 'Enable example checkbox.', 'suffice-toolkit' ) ) ); + suffice_toolkit_wp_checkbox( + array( + 'id' => '_example_cb', + 'wrapper_class' => 'show_to_all_layout', + 'label' => __( 'Sample Checkbox', 'suffice-toolkit' ), + 'description' => __( 'Enable example checkbox.', 'suffice-toolkit' ), + ) + ); - echo '
'; + echo '
'; - do_action( 'suffice_toolkit_portfolio_options_general' ); + do_action( 'suffice_toolkit_portfolio_options_general' ); - ?> - + '; + echo ''; - ?> + ?> +
@@ -103,9 +124,17 @@ public static function output( $post ) { * @param int $post_id */ public static function save( $post_id ) { + if ( ! isset( $_POST['suffice_toolkit_meta_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['suffice_toolkit_meta_nonce'] ) ), 'suffice_toolkit_save_data' ) ) { + wp_die( esc_html__( 'Action failed. Please refresh the page and retry.', 'suffice-toolkit' ) ); + } + + if ( ! current_user_can( 'edit_post', $post_id ) ) { + wp_die( esc_html__( "Cheatin' huh?", 'suffice-toolkit' ) ); + } + // Add/replace data to array - $layout_type = suffice_clean( $_POST['layout_type'] ); - $layout_desc = esc_textarea( $_POST['layout_desc'] ); + $layout_type = isset( $_POST['layout_type'] ) ? suffice_clean( $_POST['layout_type'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- unslash and sanitized in suffice_clean() + $layout_desc = isset( $_POST['layout_desc'] ) ? sanitize_textarea_field( wp_unslash( $_POST['layout_desc'] ) ) : ''; $_example_cb = isset( $_POST['_example_cb'] ) ? 'yes' : 'no'; // Save diff --git a/includes/admin/views/html-admin-tmpl-sidebars.php b/includes/admin/views/html-admin-tmpl-sidebars.php index 5283f50..6082139 100644 --- a/includes/admin/views/html-admin-tmpl-sidebars.php +++ b/includes/admin/views/html-admin-tmpl-sidebars.php @@ -9,8 +9,8 @@ ?> \n"; + $js = "/* Suffice Toolkit JavaScript */\n\n"; /** * social_icons_queued_js filter. * @param string $js JavaScript code. */ - echo apply_filters( 'suffice_toolkit_queued_js', $js ); + echo wp_kses( + apply_filters( 'suffice_toolkit_queued_js', $js ), + array( + 'script' => array( + 'type' => true, + ), + ) + ); unset( $suffice_toolkit_queued_js ); } @@ -123,7 +130,7 @@ function suffice_get_template( $template_name, $args = array(), $template_path = $located = suffice_locate_template( $template_name, $template_path, $default_path ); if ( ! file_exists( $located ) ) { - _doing_it_wrong( __FUNCTION__, sprintf( '%s does not exist.', $located ), '1.0' ); + _doing_it_wrong( __FUNCTION__, sprintf( '%s does not exist.', esc_html( $located ) ), '1.0' ); return; } @@ -132,7 +139,7 @@ function suffice_get_template( $template_name, $args = array(), $template_path = do_action( 'suffice_toolkit_before_template_part', $template_name, $template_path, $located, $args ); - include( $located ); + include $located; do_action( 'suffice_toolkit_after_template_part', $template_name, $template_path, $located, $args ); } @@ -186,7 +193,7 @@ function suffice_locate_template( $template_name, $template_path = '', $default_ * @return array */ function suffice_get_google_fonts() { - return apply_filters( 'suffice_get_google_fonts', include( ST()->plugin_path() . '/i18n/google-fonts.php' ) ); + return apply_filters( 'suffice_get_google_fonts', include ST()->plugin_path() . '/i18n/google-fonts.php' ); } } @@ -197,7 +204,7 @@ function suffice_get_google_fonts() { * @return array */ function suffice_get_fontawesome_icons() { - return apply_filters( 'suffice_get_fontawesome_icons', include( ST()->plugin_path() . '/i18n/fontawesome.php' ) ); + return apply_filters( 'suffice_get_fontawesome_icons', include ST()->plugin_path() . '/i18n/fontawesome.php' ); } } @@ -207,7 +214,7 @@ function suffice_get_fontawesome_icons() { */ function suffice_get_column_class( $column ) { $class = ''; - switch ($column) { + switch ( $column ) { case '1': $class = 'col-md-12'; break; @@ -242,23 +249,23 @@ function suffice_get_column_class( $column ) { * @return string List of Terms joined with ', ' */ -function suffice_get_terms_list($id, $taxonomy) { +function suffice_get_terms_list( $id, $taxonomy ) { $terms = get_the_terms( $id, $taxonomy ); if ( $terms && ! is_wp_error( $terms ) ) : - $joined_terms_array = array(); + $joined_terms_array = array(); - foreach ( $terms as $term ) { - $joined_terms_array[] = $term->name; - } + foreach ( $terms as $term ) { + $joined_terms_array[] = $term->name; + } - $joined_terms_string = join( ", ", $joined_terms_array ); + $joined_terms_string = join( ', ', $joined_terms_array ); - endif; + endif; - return $joined_terms_string; + return $joined_terms_string; } /** @@ -267,8 +274,8 @@ function suffice_get_terms_list($id, $taxonomy) { * @return string First Category from Loop */ -function suffice_get_first_category_name($source, $cat_id) { - if( $source == 'latest' ) { +function suffice_get_first_category_name( $source, $cat_id ) { + if ( $source == 'latest' ) { $category = get_the_category(); $category_name = $category[0]->cat_name; } else { @@ -284,8 +291,8 @@ function suffice_get_first_category_name($source, $cat_id) { * @return string First Link from Loop */ -function suffice_get_first_category_link($source, $cat_id){ - $category_name = suffice_get_first_category_name($source, $cat_id); +function suffice_get_first_category_link( $source, $cat_id ) { + $category_name = suffice_get_first_category_name( $source, $cat_id ); $category_ID = get_cat_ID( $category_name ); $category_link = get_category_link( $category_ID ); @@ -297,8 +304,8 @@ function suffice_get_first_category_link($source, $cat_id){ * * @return int category id */ -function suffice_get_first_category_id($source, $cat_id){ - $category_name = suffice_get_first_category_name($source, $cat_id); +function suffice_get_first_category_id( $source, $cat_id ) { + $category_name = suffice_get_first_category_name( $source, $cat_id ); $category_ID = get_cat_ID( $category_name ); return $category_ID; @@ -309,21 +316,25 @@ function suffice_get_first_category_id($source, $cat_id){ * @return array */ function suffice_get_woocommerce_categories() { - $terms = get_terms( array_values ( array( - 'taxonomy' => 'category', - 'hide_empty' => true, - ) ) ); + $terms = get_terms( + array_values( + array( + 'taxonomy' => 'category', + 'hide_empty' => true, + ) + ) + ); $terms_array = array(); $term_id_array = array(); $term_name_array = array(); - foreach ($terms as $term ) { + foreach ( $terms as $term ) { $term_id_array[] = $term->term_id; $term_name_array[] = $term->name; } - $terms_array = array_combine($term_id_array, $term_name_array); + $terms_array = array_combine( $term_id_array, $term_name_array ); return $terms_array; } @@ -341,21 +352,22 @@ function suffice_wp_dropdown_cats_multiple( $output, $r ) { // This Walker is needed to match more than one selected value class Suffice_Walker_CategoryDropdown extends Walker_CategoryDropdown { public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { - $pad = str_repeat(' ', $depth * 3); + $pad = str_repeat( ' ', $depth * 3 ); - $cat_name = apply_filters('list_cats', $category->name, $category); - $output .= ""; + $output .= '>'; + $output .= $pad . $cat_name; + if ( $args['show_count'] ) { + $output .= "({$category->count})"; + } + $output .= ''; } } diff --git a/includes/functions-suffice-formatting.php b/includes/functions-suffice-formatting.php index e7c8f6e..75e59bc 100644 --- a/includes/functions-suffice-formatting.php +++ b/includes/functions-suffice-formatting.php @@ -20,7 +20,7 @@ * @return string */ function suffice_clean( $var ) { - return is_array( $var ) ? array_map( 'suffice_clean', $var ) : sanitize_text_field( $var ); + return is_array( $var ) ? array_map( 'suffice_clean', $var ) : sanitize_text_field( wp_unslash( $var ) ); } /** @@ -31,17 +31,22 @@ function suffice_clean( $var ) { * @return string */ function suffice_toolkit_sanitize_tooltip( $var ) { - return htmlspecialchars( wp_kses( html_entity_decode( $var ), array( - 'br' => array(), - 'em' => array(), - 'strong' => array(), - 'small' => array(), - 'span' => array(), - 'ul' => array(), - 'li' => array(), - 'ol' => array(), - 'p' => array(), - ) ) ); + return htmlspecialchars( + wp_kses( + html_entity_decode( $var ), + array( + 'br' => array(), + 'em' => array(), + 'strong' => array(), + 'small' => array(), + 'span' => array(), + 'ul' => array(), + 'li' => array(), + 'ol' => array(), + 'p' => array(), + ) + ) + ); } /** diff --git a/includes/functions-suffice-widget.php b/includes/functions-suffice-widget.php index 012f8cb..e6888ac 100644 --- a/includes/functions-suffice-widget.php +++ b/includes/functions-suffice-widget.php @@ -84,7 +84,7 @@ function suffice_toolkit_widgets($widgets) { /* Add a tab for the theme widgets in the page builder */ function suffice_toolkit_widgets_tab($tabs){ $tabs[] = array( - 'title' => __('Suffice Toolkit Widgets', 'suffice'), + 'title' => __('Suffice Toolkit Widgets', 'suffice-toolkit'), 'filter' => array( 'groups' => array('suffice-toolkit') ) diff --git a/includes/libraries/wp-async-request.php b/includes/libraries/wp-async-request.php index af5b052..b63b954 100644 --- a/includes/libraries/wp-async-request.php +++ b/includes/libraries/wp-async-request.php @@ -5,6 +5,10 @@ * @package WP-Background-Processing */ +if ( ! defined( 'ABSPATH' ) ) { + exit; +} + if ( ! class_exists( 'WP_Async_Request' ) ) { /** @@ -131,7 +135,7 @@ protected function get_post_args() { 'blocking' => false, 'body' => $this->data, 'cookies' => $_COOKIE, - 'sslverify' => apply_filters( 'https_local_ssl_verify', false ), + 'sslverify' => apply_filters( 'https_local_ssl_verify', false ), //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound ); } @@ -158,6 +162,5 @@ public function maybe_handle() { * during the async request. */ abstract protected function handle(); - } } diff --git a/includes/libraries/wp-background-process.php b/includes/libraries/wp-background-process.php index f6de59e..e2bc537 100644 --- a/includes/libraries/wp-background-process.php +++ b/includes/libraries/wp-background-process.php @@ -5,6 +5,10 @@ * @package WP-Background-Processing */ +if ( ! defined( 'ABSPATH' ) ) { + exit; +} + if ( ! class_exists( 'WP_Background_Process' ) ) { /** @@ -146,7 +150,7 @@ public function delete( $key ) { * @return string */ protected function generate_key( $length = 64 ) { - $unique = md5( microtime() . rand() ); + $unique = md5( microtime() . wp_rand() ); $prepend = $this->identifier . '_batch_'; return substr( $prepend . $unique, 0, $length ); @@ -187,21 +191,34 @@ public function maybe_handle() { protected function is_queue_empty() { global $wpdb; - $table = $wpdb->options; - $column = 'option_name'; + $key = $this->identifier . '_batch_%'; if ( is_multisite() ) { - $table = $wpdb->sitemeta; - $column = 'meta_key'; - } - $key = $this->identifier . '_batch_%'; + $count = $wpdb->get_var( //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $wpdb->prepare( + " + SELECT COUNT(*) + FROM {$wpdb->sitemeta} + WHERE meta_key LIKE %s + ", + $key + ) + ); + + return ( $count > 0 ) ? false : true; + } - $count = $wpdb->get_var( $wpdb->prepare( " + $count = $wpdb->get_var( //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $wpdb->prepare( + " SELECT COUNT(*) - FROM {$table} - WHERE {$column} LIKE %s - ", $key ) ); + FROM {$wpdb->options} + WHERE option_name LIKE %s + ", + $key + ) + ); return ( $count > 0 ) ? false : true; } @@ -232,7 +249,7 @@ protected function lock_process() { $this->start_time = time(); // Set start time of current process. $lock_duration = ( property_exists( $this, 'queue_lock_time' ) ) ? $this->queue_lock_time : 60; // 1 minute - $lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration ); + $lock_duration = apply_filters( $this->identifier . '_queue_lock_time', $lock_duration ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound set_site_transient( $this->identifier . '_process_lock', microtime(), $lock_duration ); } @@ -258,31 +275,54 @@ protected function unlock_process() { protected function get_batch() { global $wpdb; - $table = $wpdb->options; - $column = 'option_name'; - $key_column = 'option_id'; - $value_column = 'option_value'; + $key = $this->identifier . '_batch_%'; if ( is_multisite() ) { - $table = $wpdb->sitemeta; - $column = 'meta_key'; - $key_column = 'meta_id'; - $value_column = 'meta_value'; + + $query = $wpdb->get_row( //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $wpdb->prepare( + " + SELECT * + FROM {$wpdb->sitemeta} + WHERE meta_key LIKE %s + ORDER BY meta_id ASC + LIMIT 1 + ", + $key + ) + ); + + if ( ! $query ) { + return null; + } + + $batch = new stdClass(); + $batch->key = $query->meta_key; + $batch->data = maybe_unserialize( $query->meta_value ); + + return $batch; } - $key = $this->identifier . '_batch_%'; + $query = $wpdb->get_row( //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching + $wpdb->prepare( + " + SELECT * + FROM {$wpdb->options} + WHERE option_name LIKE %s + ORDER BY option_id ASC + LIMIT 1 + ", + $key + ) + ); - $query = $wpdb->get_row( $wpdb->prepare( " - SELECT * - FROM {$table} - WHERE {$column} LIKE %s - ORDER BY {$key_column} ASC - LIMIT 1 - ", $key ) ); + if ( ! $query ) { + return null; + } $batch = new stdClass(); - $batch->key = $query->$column; - $batch->data = maybe_unserialize( $query->$value_column ); + $batch->key = $query->option_name; + $batch->data = maybe_unserialize( $query->option_value ); return $batch; } @@ -349,7 +389,7 @@ protected function memory_exceeded() { $return = true; } - return apply_filters( $this->identifier . '_memory_exceeded', $return ); + return apply_filters( $this->identifier . '_memory_exceeded', $return ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound } /** @@ -382,14 +422,14 @@ protected function get_memory_limit() { * @return bool */ protected function time_exceeded() { - $finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); // 20 seconds + $finish = $this->start_time + apply_filters( $this->identifier . '_default_time_limit', 20 ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound $return = false; if ( time() >= $finish ) { $return = true; } - return apply_filters( $this->identifier . '_time_exceeded', $return ); + return apply_filters( $this->identifier . '_time_exceeded', $return ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound } /** @@ -411,16 +451,20 @@ protected function complete() { * @return mixed */ public function schedule_cron_healthcheck( $schedules ) { - $interval = apply_filters( $this->identifier . '_cron_interval', 5 ); + $interval = apply_filters( $this->identifier . '_cron_interval', 5 ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound if ( property_exists( $this, 'cron_interval' ) ) { - $interval = apply_filters( $this->identifier . '_cron_interval', $this->cron_interval_identifier ); + $interval = apply_filters( $this->identifier . '_cron_interval', $this->cron_interval_identifier ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound } // Adds every 5 minutes to the existing schedules. $schedules[ $this->identifier . '_cron_interval' ] = array( 'interval' => MINUTE_IN_SECONDS * $interval, - 'display' => sprintf( __( 'Every %d Minutes', 'suffice-toolkit' ), $interval ), + 'display' => sprintf( + /* translators: %d: number of minutes */ + __( 'Every %d Minutes', 'suffice-toolkit' ), + $interval + ), ); return $schedules; @@ -483,7 +527,6 @@ public function cancel_process() { wp_clear_scheduled_hook( $this->cron_hook_identifier ); } - } /** @@ -499,6 +542,5 @@ public function cancel_process() { * @return mixed */ abstract protected function task( $item ); - } } diff --git a/includes/widgets/class-suffice-widget-iconbox.php b/includes/widgets/class-suffice-widget-iconbox.php index 8952841..5627e37 100644 --- a/includes/widgets/class-suffice-widget-iconbox.php +++ b/includes/widgets/class-suffice-widget-iconbox.php @@ -95,20 +95,20 @@ public function __construct() { 'icon-color' => array( 'type' => 'color_picker', 'std' => '', - 'label' => esc_html__( 'Icon Color', 'suffice' ), - 'group' => esc_html__( 'Color', 'suffice' ), + 'label' => esc_html__( 'Icon Color', 'suffice-toolkit' ), + 'group' => esc_html__( 'Color', 'suffice-toolkit' ), ), 'icon-background-color' => array( 'type' => 'color_picker', 'std' => '', - 'label' => esc_html__( 'Icon Background Color', 'suffice' ), - 'group' => esc_html__( 'Color', 'suffice' ), + 'label' => esc_html__( 'Icon Background Color', 'suffice-toolkit' ), + 'group' => esc_html__( 'Color', 'suffice-toolkit' ), ), 'icon-font-size' => array( 'type' => 'text', 'std' => '', - 'label' => esc_html__( 'Icon Font Size', 'suffice' ), - 'group' => esc_html__( 'Color', 'suffice' ), + 'label' => esc_html__( 'Icon Font Size', 'suffice-toolkit' ), + 'group' => esc_html__( 'Color', 'suffice-toolkit' ), ), 'link-target' => array( 'type' => 'select', diff --git a/includes/widgets/class-suffice-widget-team.php b/includes/widgets/class-suffice-widget-team.php index 045bf5c..ba4e176 100644 --- a/includes/widgets/class-suffice-widget-team.php +++ b/includes/widgets/class-suffice-widget-team.php @@ -32,7 +32,7 @@ public function __construct() { $this->settings = apply_filters( 'suffice_toolkit_widget_settings_' . $this->widget_id, array( 'name' => array( 'type' => 'text', - 'std' => __( '', 'suffice-toolkit' ), + 'std' => '', 'label' => __( 'Team Member Name', 'suffice-toolkit' ), 'group' => __( 'General', 'suffice-toolkit' ), ), diff --git a/includes/widgets/class-suffice-widget-title.php b/includes/widgets/class-suffice-widget-title.php index 491c242..d5344b1 100644 --- a/includes/widgets/class-suffice-widget-title.php +++ b/includes/widgets/class-suffice-widget-title.php @@ -38,7 +38,7 @@ public function __construct() { ), 'tg-sub-title' => array( 'type' => 'text', - 'std' => __( '', 'suffice-toolkit' ), + 'std' => '', 'label' => __( 'Sub Title', 'suffice-toolkit' ), 'group' => __( 'General', 'suffice-toolkit' ), ), diff --git a/package.json b/package.json index d2473ed..a37a8ec 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "suffice-toolkit", "title": "Suffice Toolkit", - "version": "1.0.9", + "version": "1.1.0", "homepage": "http://themegrill.com/plugins/suffice-toolkit/", "repository": { "type": "git", @@ -30,4 +30,4 @@ "node": ">=10.0.0", "npm": ">=6.9.0 <7" } -} +} \ No newline at end of file diff --git a/readme.txt b/readme.txt index 6113238..76e667c 100644 --- a/readme.txt +++ b/readme.txt @@ -2,8 +2,8 @@ Contributors: ThemeGrill Tags: theme, suffice, toolkit, themegrill Requires at least: 4.0 -Tested up to: 6.1 -Stable tag: 1.0.9 +Tested up to: 6.9 +Stable tag: 1.1.0 License: GPLv3 License URI: http://www.gnu.org/licenses/gpl-3.0.html @@ -32,6 +32,13 @@ Get free support at https://themegrill.com/support-forum/ == Changelog == +== 1.1.0 - 2026-04-24 == +* Fix - Security and WordPress guideline compliance issues. +* Fix - Internationalization and text domain corrections. +* Fix - Sanitization, validation, and output escaping improvements. +* Fix - Nonce verification and user capability checks. +* Fix - Removed remote file calls and enforced local asset usage. + == 1.0.9 - 2022-12-20 == * Tweak - Removed wordpress patch version number diff --git a/suffice-toolkit.php b/suffice-toolkit.php index 3d54ac5..c78e5fd 100644 --- a/suffice-toolkit.php +++ b/suffice-toolkit.php @@ -3,7 +3,7 @@ * Plugin Name: Suffice Toolkit * Plugin URI: https://themegrill.com/themes/suffice * Description: Suffice Toolkit is a companion for Suffice WordPress theme by ThemeGrill - * Version: 1.0.9 + * Version: 1.1.0 * Author: ThemeGrill * Author URI: http://themegrill.com * License: GPLv3 or later @@ -17,196 +17,196 @@ if ( ! class_exists( 'SufficeToolkit' ) ) : -/** - * SufficeToolkit main class. - * - * @class SufficeToolkit - * @version 1.0.0 - */ -final class SufficeToolkit { - - /** - * Plugin version. - * @var string - */ - public $version = '1.0.9'; - - /** - * Instance of this class. - * @var object - */ - protected static $_instance = null; - /** - * Return an instance of this class. - * @return object A single instance of this class. - */ - public static function instance() { - // If the single instance hasn't been set, set it now. - if ( is_null( self::$_instance ) ) { - self::$_instance = new self(); + * SufficeToolkit main class. + * + * @class SufficeToolkit + * @version 1.0.0 + */ + final class SufficeToolkit { + + /** + * Plugin version. + * @var string + */ + public $version = '1.1.0'; + + /** + * Instance of this class. + * @var object + */ + protected static $_instance = null; + + /** + * Return an instance of this class. + * @return object A single instance of this class. + */ + public static function instance() { + // If the single instance hasn't been set, set it now. + if ( is_null( self::$_instance ) ) { + self::$_instance = new self(); + } + return self::$_instance; } - return self::$_instance; - } - - /** - * Cloning is forbidden. - * @since 1.0 - */ - public function __clone() { - _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?', 'suffice-toolkit' ), '1.0' ); - } - - /** - * Unserializing instances of this class is forbidden. - * @since 1.0 - */ - public function __wakeup() { - _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?', 'suffice-toolkit' ), '1.0' ); - } - /** - * SufficeToolkit Constructor. - */ - public function __construct() { - $this->define_constants(); - $this->includes(); - $this->init_hooks(); - - do_action( 'suffice_toolkit_loaded' ); - } + /** + * Cloning is forbidden. + * @since 1.0 + */ + public function __clone() { + _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?', 'suffice-toolkit' ), '1.0' ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } - /** - * Hook into actions and filters. - */ - private function init_hooks() { - register_activation_hook( __FILE__, array( 'ST_Install', 'install' ) ); - add_action( 'init', array( $this, 'load_plugin_textdomain' ) ); - add_action( 'admin_notices', array( $this, 'theme_support_missing_notice' ) ); - } + /** + * Unserializing instances of this class is forbidden. + * @since 1.0 + */ + public function __wakeup() { + _doing_it_wrong( __FUNCTION__, __( 'Cheatin’ huh?', 'suffice-toolkit' ), '1.0' ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + } - /** - * Define ST Constants. - */ - private function define_constants() { - $this->define( 'ST_PLUGIN_FILE', __FILE__ ); - $this->define( 'ST_ABSPATH', dirname( __FILE__ ) . '/' ); - $this->define( 'ST_PLUGIN_BASENAME', plugin_basename( __FILE__ ) ); - $this->define( 'ST_VERSION', $this->version ); - $this->define( 'ST_TEMPLATE_DEBUG_MODE', false ); - } + /** + * SufficeToolkit Constructor. + */ + public function __construct() { + $this->define_constants(); + $this->includes(); + $this->init_hooks(); - /** - * Define constant if not already set. - * - * @param string $name - * @param string|bool $value - */ - private function define( $name, $value ) { - if ( ! defined( $name ) ) { - define( $name, $value ); + do_action( 'suffice_toolkit_loaded' ); } - } - /** - * What type of request is this? - * - * @param string $type admin or frontend. - * @return bool - */ - private function is_request( $type ) { - switch ( $type ) { - case 'admin' : - return is_admin(); - case 'frontend' : - return ( ! is_admin() || defined( 'DOING_AJAX' ) ) && ! defined( 'DOING_CRON' ); + /** + * Hook into actions and filters. + */ + private function init_hooks() { + register_activation_hook( __FILE__, array( 'ST_Install', 'install' ) ); + add_action( 'init', array( $this, 'load_plugin_textdomain' ) ); + add_action( 'admin_notices', array( $this, 'theme_support_missing_notice' ) ); } - } - /** - * Includes. - */ - private function includes() { - include_once( ST_ABSPATH . 'includes/functions-suffice-core.php' ); - include_once( ST_ABSPATH . 'includes/functions-suffice-widget.php' ); - include_once( ST_ABSPATH . 'includes/class-suffice-autoloader.php' ); - include_once( ST_ABSPATH . 'includes/class-suffice-install.php' ); - include_once( ST_ABSPATH . 'includes/class-suffice-ajax.php' ); - include_once( ST_ABSPATH . 'includes/class-suffice-inline-style.php' ); - - if ( $this->is_request( 'admin' ) ) { - include_once( ST_ABSPATH . 'includes/admin/class-suffice-admin.php' ); + /** + * Define ST Constants. + */ + private function define_constants() { + $this->define( 'ST_PLUGIN_FILE', __FILE__ ); + $this->define( 'ST_ABSPATH', __DIR__ . '/' ); + $this->define( 'ST_PLUGIN_BASENAME', plugin_basename( __FILE__ ) ); + $this->define( 'ST_VERSION', $this->version ); + $this->define( 'ST_TEMPLATE_DEBUG_MODE', false ); } - if ( is_suffice_pro_active() ) { - include_once( ST_ABSPATH . 'includes/class-suffice-sidebars.php' ); + /** + * Define constant if not already set. + * + * @param string $name + * @param string|bool $value + */ + private function define( $name, $value ) { + if ( ! defined( $name ) ) { + define( $name, $value ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.VariableConstantNameFound + } } - include_once( ST_ABSPATH . 'includes/class-suffice-post-types.php' ); // Registers post types - } - - /** - * Load Localisation files. - * - * Note: the first-loaded translation file overrides any following ones if the same translation is present. - * - * Locales found in: - * - WP_LANG_DIR/suffice-toolkit/suffice-toolkit-LOCALE.mo - * - WP_LANG_DIR/plugins/suffice-toolkit-LOCALE.mo - */ - public function load_plugin_textdomain() { - $locale = apply_filters( 'plugin_locale', get_locale(), 'suffice-toolkit' ); + /** + * What type of request is this? + * + * @param string $type admin or frontend. + * @return bool + */ + private function is_request( $type ) { + switch ( $type ) { + case 'admin': + return is_admin(); + case 'frontend': + return ( ! is_admin() || defined( 'DOING_AJAX' ) ) && ! defined( 'DOING_CRON' ); + } + } - load_textdomain( 'suffice-toolkit', WP_LANG_DIR . '/suffice-toolkit/suffice-toolkit-' . $locale . '.mo' ); - load_plugin_textdomain( 'suffice-toolkit', false, plugin_basename( dirname( __FILE__ ) ) . '/i18n/languages' ); - } + /** + * Includes. + */ + private function includes() { + include_once ST_ABSPATH . 'includes/functions-suffice-core.php'; + include_once ST_ABSPATH . 'includes/functions-suffice-widget.php'; + include_once ST_ABSPATH . 'includes/class-suffice-autoloader.php'; + include_once ST_ABSPATH . 'includes/class-suffice-install.php'; + include_once ST_ABSPATH . 'includes/class-suffice-ajax.php'; + include_once ST_ABSPATH . 'includes/class-suffice-inline-style.php'; + + if ( $this->is_request( 'admin' ) ) { + include_once ST_ABSPATH . 'includes/admin/class-suffice-admin.php'; + } + + if ( is_suffice_pro_active() ) { + include_once ST_ABSPATH . 'includes/class-suffice-sidebars.php'; + } + + include_once ST_ABSPATH . 'includes/class-suffice-post-types.php'; // Registers post types + } - /** - * Theme support fallback notice. - * @return string - */ - public function theme_support_missing_notice() { - $theme = wp_get_theme(); - $parent = $theme->parent(); + /** + * Load Localisation files. + * + * Note: the first-loaded translation file overrides any following ones if the same translation is present. + * + * Locales found in: + * - WP_LANG_DIR/suffice-toolkit/suffice-toolkit-LOCALE.mo + * - WP_LANG_DIR/plugins/suffice-toolkit-LOCALE.mo + */ + public function load_plugin_textdomain() { + $locale = apply_filters( 'plugin_locale', get_locale(), 'suffice-toolkit' ); //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound + + load_textdomain( 'suffice-toolkit', WP_LANG_DIR . '/suffice-toolkit/suffice-toolkit-' . $locale . '.mo' ); + load_plugin_textdomain( 'suffice-toolkit', false, plugin_basename( __DIR__ ) . '/i18n/languages' ); + } - // Check with ThemeGrill Suffice Theme is installed. - if ( ( $theme != 'Suffice' ) && ( $theme != 'Suffice Pro' ) && ( $parent != 'Suffice' ) && ( $parent != 'Suffice Pro' ) ) { - // echo '

' . __( 'Suffice Toolkit', 'suffice-toolkit' ) . ' – ' . sprintf( __( 'This plugin requires %s by ThemeGrill to work.', 'suffice-toolkit' ), '' . __( 'Suffice Theme', 'suffice-toolkit' ) . '' ) . '

'; + /** + * Theme support fallback notice. + * @return string + */ + public function theme_support_missing_notice() { + $theme = wp_get_theme(); + $parent = $theme->parent(); + + // Check with ThemeGrill Suffice Theme is installed. + if ( ( $theme != 'Suffice' ) && ( $theme != 'Suffice Pro' ) && ( $parent != 'Suffice' ) && ( $parent != 'Suffice Pro' ) ) { + // echo '

' . __( 'Suffice Toolkit', 'suffice-toolkit' ) . ' – ' . sprintf( __( 'This plugin requires %s by ThemeGrill to work.', 'suffice-toolkit' ), '' . __( 'Suffice Theme', 'suffice-toolkit' ) . '' ) . '

'; + } } - } - /** - * Get the plugin url. - * @return string - */ - public function plugin_url() { - return untrailingslashit( plugins_url( '/', __FILE__ ) ); - } + /** + * Get the plugin url. + * @return string + */ + public function plugin_url() { + return untrailingslashit( plugins_url( '/', __FILE__ ) ); + } - /** - * Get the plugin path. - * @return string - */ - public function plugin_path() { - return untrailingslashit( plugin_dir_path( __FILE__ ) ); - } + /** + * Get the plugin path. + * @return string + */ + public function plugin_path() { + return untrailingslashit( plugin_dir_path( __FILE__ ) ); + } - /** - * Get the template path. - * @return string - */ - public function template_path() { - return apply_filters( 'suffice_toolkit_template_path', 'suffice-toolkit/' ); - } + /** + * Get the template path. + * @return string + */ + public function template_path() { + return apply_filters( 'suffice_toolkit_template_path', 'suffice-toolkit/' ); + } - /** - * Get Ajax URL. - * @return string - */ - public function ajax_url() { - return admin_url( 'admin-ajax.php', 'relative' ); + /** + * Get Ajax URL. + * @return string + */ + public function ajax_url() { + return admin_url( 'admin-ajax.php', 'relative' ); + } } -} endif; @@ -218,7 +218,7 @@ public function ajax_url() { * @since 1.0 * @return SufficeToolkit */ -function ST() { +function ST() { //phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound return SufficeToolkit::instance(); } diff --git a/templates/content-widget-blog.php b/templates/content-widget-blog.php index 28afa88..5df6078 100644 --- a/templates/content-widget-blog.php +++ b/templates/content-widget-blog.php @@ -20,40 +20,44 @@ exit; } -$number = isset( $instance['number'] ) ? $instance['number'] : '6'; -$source = isset( $instance['source'] ) ? $instance['source'] : ''; -$category = isset( $instance['category'] ) ? $instance['category'] : ''; -$style = isset( $instance['style'] ) ? $instance['style'] : ''; -$column = isset( $instance['column'] ) ? $instance['column'] : 3; - -if ( 'latest' === $source ) { - $get_featured_posts = new WP_Query( array( - 'posts_per_page' => $number, - 'post_type' => 'post', - 'ignore_sticky_posts' => true, - ) ); +$suffice_toolkit_number = isset( $instance['number'] ) ? $instance['number'] : '6'; +$suffice_toolkit_source = isset( $instance['source'] ) ? $instance['source'] : ''; +$suffice_toolkit_category = isset( $instance['category'] ) ? $instance['category'] : ''; +$suffice_toolkit_style = isset( $instance['style'] ) ? $instance['style'] : ''; +$suffice_toolkit_column = isset( $instance['column'] ) ? $instance['column'] : 3; + +if ( 'latest' === $suffice_toolkit_source ) { + $suffice_toolkit_get_featured_posts = new WP_Query( + array( + 'posts_per_page' => $suffice_toolkit_number, + 'post_type' => 'post', + 'ignore_sticky_posts' => true, + ) + ); } else { - $get_featured_posts = new WP_Query( array( - 'posts_per_page' => $number, - 'post_type' => 'post', - 'category__in' => $category, - ) ); + $suffice_toolkit_get_featured_posts = new WP_Query( + array( + 'posts_per_page' => $suffice_toolkit_number, + 'post_type' => 'post', + 'category__in' => $suffice_toolkit_category, + ) + ); } -$thumbnail_size = 'suffice-thumbnail-grid'; +$suffice_toolkit_thumbnail_size = 'suffice-thumbnail-grid'; // Choose image size. -if ( 'post-style-grid' === $style && '1' === $column ) { - $thumbnail_size = 'full'; -} elseif ( 'post-style-list' === $style ) { - $thumbnail_size = 'thumbnail'; +if ( 'post-style-grid' === $suffice_toolkit_style && '1' === $suffice_toolkit_column ) { + $suffice_toolkit_thumbnail_size = 'full'; +} elseif ( 'post-style-list' === $suffice_toolkit_style ) { + $suffice_toolkit_thumbnail_size = 'thumbnail'; } ?>
- +
@@ -61,21 +65,21 @@
have_posts() ) : - $get_featured_posts->the_post(); + while ( $suffice_toolkit_get_featured_posts->have_posts() ) : + $suffice_toolkit_get_featured_posts->the_post(); ?> -
+
- - + +
- +
@@ -83,14 +87,16 @@

- + - +
- - +
diff --git a/templates/content-widget-button.php b/templates/content-widget-button.php index 214b5f4..5a98442 100644 --- a/templates/content-widget-button.php +++ b/templates/content-widget-button.php @@ -23,50 +23,54 @@ /** * General. */ -$widget_id = isset( $args['widget_id'] ) ? $args['widget_id'] : ''; -$btn_text = isset( $instance['btn-text'] ) ? $instance['btn-text'] : ''; -$btn_url = isset( $instance['btn-url'] ) ? $instance['btn-url'] : ''; -$icon = isset( $instance['icon'] ) ? $instance['icon'] : ''; +$suffice_toolkit_widget_id = isset( $args['widget_id'] ) ? $args['widget_id'] : ''; +$suffice_toolkit_btn_text = isset( $instance['btn-text'] ) ? $instance['btn-text'] : ''; +$suffice_toolkit_btn_url = isset( $instance['btn-url'] ) ? $instance['btn-url'] : ''; +$suffice_toolkit_icon = isset( $instance['icon'] ) ? $instance['icon'] : ''; /** * Styling. */ -$icon_position = isset( $instance['icon-position'] ) ? $instance['icon-position'] : 'icon-left'; -$target = isset( $instance['target'] ) ? $instance['target'] : 'same-window'; -$btn_style = isset( $instance['button-style'] ) ? $instance['button-style'] : 'btn-default'; -$btn_edge = isset( $instance['button-edge'] ) ? $instance['button-edge'] : 'btn-flat'; -$btn_width = isset( $instance['button-width'] ) ? $instance['button-width'] : 'btn-medium'; -$btn_align = isset( $instance['button-align'] ) ? $instance['button-align'] : 'btn-left'; +$suffice_toolkit_icon_position = isset( $instance['icon-position'] ) ? $instance['icon-position'] : 'icon-left'; +$suffice_toolkit_target = isset( $instance['target'] ) ? $instance['target'] : 'same-window'; +$suffice_toolkit_btn_style = isset( $instance['button-style'] ) ? $instance['button-style'] : 'btn-default'; +$suffice_toolkit_btn_edge = isset( $instance['button-edge'] ) ? $instance['button-edge'] : 'btn-flat'; +$suffice_toolkit_btn_width = isset( $instance['button-width'] ) ? $instance['button-width'] : 'btn-medium'; +$suffice_toolkit_btn_align = isset( $instance['button-align'] ) ? $instance['button-align'] : 'btn-left'; /** * Color. */ -$icon_color = isset( $instance['icon-color'] ) ? $instance['icon-color'] : ''; -$text_color = isset( $instance['text-color'] ) ? $instance['text-color'] : ''; -$background_color = isset( $instance['background-color'] ) ? $instance['background-color'] : ''; +$suffice_toolkit_icon_color = isset( $instance['icon-color'] ) ? $instance['icon-color'] : ''; +$suffice_toolkit_text_color = isset( $instance['text-color'] ) ? $instance['text-color'] : ''; +$suffice_toolkit_background_color = isset( $instance['background-color'] ) ? $instance['background-color'] : ''; -$custom_icon_style = suffice_toolkit_inline_style( array( - 'color' => $icon_color, -) ); +$suffice_toolkit_custom_icon_style = suffice_toolkit_inline_style( + array( + 'color' => $suffice_toolkit_icon_color, + ) +); -$custom_text_style = suffice_toolkit_inline_style( array( - 'color' => $text_color, - 'background_color' => $background_color, -) ); +$suffice_toolkit_custom_text_style = suffice_toolkit_inline_style( + array( + 'color' => $suffice_toolkit_text_color, + 'background_color' => $suffice_toolkit_background_color, + ) +); ?> -
+
- class="btn " href=""> - - > + class="btn " href=""> + + > diff --git a/templates/content-widget-counter.php b/templates/content-widget-counter.php index 2356235..1c70336 100644 --- a/templates/content-widget-counter.php +++ b/templates/content-widget-counter.php @@ -23,42 +23,46 @@ /** * General. */ -$title = isset( $instance['counter-title'] ) ? $instance['counter-title'] : ''; -$icon = isset( $instance['icon'] ) ? $instance['icon'] : ''; -$number = isset( $instance['number'] ) ? $instance['number'] : ''; -$prefix = isset( $instance['prefix'] ) ? $instance['prefix'] : ''; -$suffix = isset( $instance['suffix'] ) ? $instance['suffix'] : ''; +$suffice_toolkit_title = isset( $instance['counter-title'] ) ? $instance['counter-title'] : ''; +$suffice_toolkit_icon = isset( $instance['icon'] ) ? $instance['icon'] : ''; +$suffice_toolkit_number = isset( $instance['number'] ) ? $instance['number'] : ''; +$suffice_toolkit_prefix = isset( $instance['prefix'] ) ? $instance['prefix'] : ''; +$suffice_toolkit_suffix = isset( $instance['suffix'] ) ? $instance['suffix'] : ''; /** * Styling. */ -$style = isset( $instance['style'] ) ? $instance['style'] : 'counter-style-hexagon'; +$suffice_toolkit_style = isset( $instance['style'] ) ? $instance['style'] : 'counter-style-hexagon'; /** * Color. */ -$icon_color = isset( $instance['icon-color'] ) ? $instance['icon-color'] : ''; -$text_color = isset( $instance['text-color'] ) ? $instance['text-color'] : ''; -$background_color = isset( $instance['background-color'] ) ? $instance['background-color'] : ''; +$suffice_toolkit_icon_color = isset( $instance['icon-color'] ) ? $instance['icon-color'] : ''; +$suffice_toolkit_text_color = isset( $instance['text-color'] ) ? $instance['text-color'] : ''; +$suffice_toolkit_background_color = isset( $instance['background-color'] ) ? $instance['background-color'] : ''; // Add inline styles. -$custom_icon_style = suffice_toolkit_inline_style( array( - 'color' => $icon_color, -) ); +$suffice_toolkit_custom_icon_style = suffice_toolkit_inline_style( + array( + 'color' => $suffice_toolkit_icon_color, + ) +); -$custom_text_style = suffice_toolkit_inline_style( array( - 'color' => $text_color, - 'background_color' => $background_color, -) ); +$suffice_toolkit_custom_text_style = suffice_toolkit_inline_style( + array( + 'color' => $suffice_toolkit_text_color, + 'background_color' => $suffice_toolkit_background_color, + ) +); ?> -
+
- > + >
-
>
-
+
>
+
diff --git a/templates/content-widget-cta.php b/templates/content-widget-cta.php index 44a1ea9..74ee01f 100644 --- a/templates/content-widget-cta.php +++ b/templates/content-widget-cta.php @@ -19,59 +19,59 @@ if ( ! defined( 'ABSPATH' ) ) { exit; } -$title = isset( $instance['cta-title'] ) ? $instance['cta-title'] : ''; -$icon = isset( $instance['icon'] ) ? $instance['icon'] : ''; -$text = isset( $instance['text'] ) ? $instance['text'] : ''; -$more_text = isset( $instance['more-text'] ) ? $instance['more-text'] : ''; -$more_url = isset( $instance['more-url'] ) ? $instance['more-url'] : ''; -$more_text2 = isset( $instance['more-text2'] ) ? $instance['more-text2'] : ''; -$more_url2 = isset( $instance['more-url2'] ) ? $instance['more-url2'] : ''; -$linktarget = isset( $instance['link-target'] ) ? $instance['link-target'] : ''; -$style = isset( $instance['style'] ) ? $instance['style'] : 'cta-boxed-one'; +$suffice_toolkit_title = isset( $instance['cta-title'] ) ? $instance['cta-title'] : ''; +$suffice_toolkit_icon = isset( $instance['icon'] ) ? $instance['icon'] : ''; +$suffice_toolkit_text = isset( $instance['text'] ) ? $instance['text'] : ''; +$suffice_toolkit_more_text = isset( $instance['more-text'] ) ? $instance['more-text'] : ''; +$suffice_toolkit_more_url = isset( $instance['more-url'] ) ? $instance['more-url'] : ''; +$suffice_toolkit_more_text2 = isset( $instance['more-text2'] ) ? $instance['more-text2'] : ''; +$suffice_toolkit_more_url2 = isset( $instance['more-url2'] ) ? $instance['more-url2'] : ''; +$suffice_toolkit_linktarget = isset( $instance['link-target'] ) ? $instance['link-target'] : ''; +$suffice_toolkit_style = isset( $instance['style'] ) ? $instance['style'] : 'cta-boxed-one'; // Sets the button class as per style. -$btn_class = array( +$suffice_toolkit_btn_class = array( 'one' => 'btn', 'two' => 'btn', ); -if ( 'cta-boxed-one' === $style ) { - $btn_class = array( +if ( 'cta-boxed-one' === $suffice_toolkit_style ) { + $suffice_toolkit_btn_class = array( 'one' => 'btn btn-medium btn-primary btn-rounded', 'two' => 'btn hide', ); -} elseif ( 'cta-big-bordered' === $style ) { - $btn_class = array( +} elseif ( 'cta-big-bordered' === $suffice_toolkit_style ) { + $suffice_toolkit_btn_class = array( 'one' => 'btn btn-medium btn-ghost btn-primary', 'two' => 'btn btn-medium btn-ghost btn-primary', ); -} elseif ( 'cta-background' === $style ) { - $btn_class = array( +} elseif ( 'cta-background' === $suffice_toolkit_style ) { + $suffice_toolkit_btn_class = array( 'one' => 'btn btn-wide btn-rounded-edges btn-white', 'two' => 'btn btn-wide btn-rounded-edges btn-black', ); } ?> -
+
- +
- +
- -

+ +

- +
-

+

@@ -79,17 +79,15 @@
- + > - + >
diff --git a/templates/content-widget-featured-posts.php b/templates/content-widget-featured-posts.php index bebb8e9..49c4dd8 100644 --- a/templates/content-widget-featured-posts.php +++ b/templates/content-widget-featured-posts.php @@ -20,86 +20,90 @@ exit; } -$source = isset( $instance['source'] ) ? $instance['source'] : 'latest'; -$category = isset( $instance['category'] ) ? $instance['category'] : ''; -$style = isset( $instance['style'] ) ? $instance['style'] : 'feature-post-style-one'; +$suffice_toolkit_source = isset( $instance['source'] ) ? $instance['source'] : 'latest'; +$suffice_toolkit_category = isset( $instance['category'] ) ? $instance['category'] : ''; +$suffice_toolkit_style = isset( $instance['style'] ) ? $instance['style'] : 'feature-post-style-one'; // Image Size. -$image_size = ''; -if ( 'feature-post-style-one' === $style ) { - $image_size = 'suffice-thumbnail-featured-one'; -} elseif ( 'feature-post-style-two' === $style ) { - $image_size = 'suffice-thumbnail-post-large'; +$suffice_toolkit_image_size = ''; +if ( 'feature-post-style-one' === $suffice_toolkit_style ) { + $suffice_toolkit_image_size = 'suffice-thumbnail-featured-one'; +} elseif ( 'feature-post-style-two' === $suffice_toolkit_style ) { + $suffice_toolkit_image_size = 'suffice-thumbnail-post-large'; } else { - $image_size = 'suffice-thumbnail-post-large'; + $suffice_toolkit_image_size = 'suffice-thumbnail-post-large'; } // Number. -$post_number = ''; -if ( 'feature-post-style-one' === $style ) { - $post_number = 4; -} elseif ( 'feature-post-style-two' === $style ) { - $post_number = 4; +$suffice_toolkit_post_number = ''; +if ( 'feature-post-style-one' === $suffice_toolkit_style ) { + $suffice_toolkit_post_number = 4; +} elseif ( 'feature-post-style-two' === $suffice_toolkit_style ) { + $suffice_toolkit_post_number = 4; } else { - $post_number = 6; + $suffice_toolkit_post_number = 6; } // Row class. -$row_class = 'row'; -if ( 'feature-post-style-one' === $style ) { - $row_class = 'row no-gutter'; -} elseif ( 'feature-post-style-two' === $style ) { - $row_class = 'no-row'; +$suffice_toolkit_row_class = 'row'; +if ( 'feature-post-style-one' === $suffice_toolkit_style ) { + $suffice_toolkit_row_class = 'row no-gutter'; +} elseif ( 'feature-post-style-two' === $suffice_toolkit_style ) { + $suffice_toolkit_row_class = 'no-row'; } // Featured post class. -$feature_post_class = ''; -if ( 'feature-post-style-one' === $style ) { - $feature_post_class = 'col-md-3'; -} elseif ( 'feature-post-style-three' === $style ) { - $feature_post_class = 'col-md-4'; +$suffice_toolkit_feature_post_class = ''; +if ( 'feature-post-style-one' === $suffice_toolkit_style ) { + $suffice_toolkit_feature_post_class = 'col-md-3'; +} elseif ( 'feature-post-style-three' === $suffice_toolkit_style ) { + $suffice_toolkit_feature_post_class = 'col-md-4'; } -if ( 'latest' === $source ) { - $get_featured_posts = new WP_Query( array( - 'posts_per_page' => $post_number, - 'post_type' => 'post', - 'ignore_sticky_posts' => true, - ) ); +if ( 'latest' === $suffice_toolkit_source ) { + $suffice_toolkit_get_featured_posts = new WP_Query( + array( + 'posts_per_page' => $suffice_toolkit_post_number, + 'post_type' => 'post', + 'ignore_sticky_posts' => true, + ) + ); } else { - $get_featured_posts = new WP_Query( array( - 'posts_per_page' => $post_number, - 'post_type' => 'post', - 'category__in' => $category, - ) ); + $suffice_toolkit_get_featured_posts = new WP_Query( + array( + 'posts_per_page' => $suffice_toolkit_post_number, + 'post_type' => 'post', + 'category__in' => $suffice_toolkit_category, + ) + ); } ?> -
-
+
+
have_posts() ) : - $get_featured_posts->the_post(); + while ( $suffice_toolkit_get_featured_posts->have_posts() ) : + $suffice_toolkit_get_featured_posts->the_post(); ?> - current_post && 'feature-post-style-two' === $style ) : ?> + current_post && 'feature-post-style-two' === $suffice_toolkit_style ) : ?>
-
+
- current_post && 'feature-post-style-two' === $style ? 'suffice-thumbnail-featured-two' : $image_size ) ); ?> + current_post && 'feature-post-style-two' === $suffice_toolkit_style ? 'suffice-thumbnail-featured-two' : $suffice_toolkit_image_size ) ); ?> - +
- current_post === $get_featured_posts->post_count - 1 && 'feature-post-style-two' === $style ) : ?> + current_post === $suffice_toolkit_get_featured_posts->post_count - 1 && 'feature-post-style-two' === $suffice_toolkit_style ) : ?>
- $icon_color, - 'font_size' => $icon_font_size, - 'background_color' => $icon_background_color, -) ); +$suffice_toolkit_custom_icon_style = suffice_toolkit_inline_style( + array( + 'color' => $suffice_toolkit_icon_color, + 'font_size' => $suffice_toolkit_icon_font_size, + 'background_color' => $suffice_toolkit_icon_background_color, + ) +); ?> -
- -
> +
+ +
>
- +
- -
diff --git a/templates/content-widget-image.php b/templates/content-widget-image.php index 307acf1..b0985cc 100644 --- a/templates/content-widget-image.php +++ b/templates/content-widget-image.php @@ -20,11 +20,11 @@ exit; } -$image = isset( $instance['image'] ) ? $instance['image'] : ''; -$link = isset( $instance['image_link'] ) ? $instance['image_link'] : ''; +$suffice_toolkit_image = isset( $instance['image'] ) ? $instance['image'] : ''; +$suffice_toolkit_link = isset( $instance['image_link'] ) ? $instance['image_link'] : ''; ?> - - + + - + diff --git a/templates/content-widget-logo.php b/templates/content-widget-logo.php index 938ba05..81dd874 100644 --- a/templates/content-widget-logo.php +++ b/templates/content-widget-logo.php @@ -19,28 +19,28 @@ if ( ! defined( 'ABSPATH' ) ) { exit; } -$logos = isset( $instance['repeatable_logos'] ) ? $instance['repeatable_logos'] : array(); -$style = isset( $instance['style'] ) ? $instance['style'] : 'logos-slider-style-clean'; -$linktarget = isset( $instance['link-target'] ) ? $instance['link-target'] : 'same-window'; -$columns = isset( $instance['columns'] ) ? $instance['columns'] : '3'; +$suffice_toolkit_logos = isset( $instance['repeatable_logos'] ) ? $instance['repeatable_logos'] : array(); +$suffice_toolkit_style = isset( $instance['style'] ) ? $instance['style'] : 'logos-slider-style-clean'; +$suffice_toolkit_linktarget = isset( $instance['link-target'] ) ? $instance['link-target'] : 'same-window'; +$suffice_toolkit_columns = isset( $instance['columns'] ) ? $instance['columns'] : '3'; ?>
-
+
diff --git a/templates/content-widget-portfolio.php b/templates/content-widget-portfolio.php index af6025e..91494da 100644 --- a/templates/content-widget-portfolio.php +++ b/templates/content-widget-portfolio.php @@ -20,87 +20,136 @@ exit; } -$categories = isset( $instance['categories'] ) ? $instance['categories'] : ''; -$number = isset( $instance['number'] ) ? $instance['number'] : ''; -$filter = empty( $instance['filter'] ) ? 0 : 1; -$style = isset( $instance['style'] ) ? $instance['style'] : 'portfolio-with-text'; -$column = isset( $instance['column'] ) ? $instance['column'] : '4'; +$suffice_toolkit_categories = isset( $instance['categories'] ) ? $instance['categories'] : ''; +$suffice_toolkit_number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 0; +$suffice_toolkit_filter = ! empty( $instance['filter'] ); +$suffice_toolkit_style = isset( $instance['style'] ) ? $instance['style'] : 'portfolio-with-text'; +$suffice_toolkit_column = isset( $instance['column'] ) ? $instance['column'] : '4'; ?> -'; +
-if ( $filter && ! $categories ) { - $terms = get_terms( 'portfolio_cat' ); + + 'portfolio_cat', + ) + ); + ?> - // Filter. - $output .= ''; -} + + -// Grid. -$output .= '
    '; + 'portfolio', - 'posts_per_page' => $number, - 'tax_query' => array( + if ( '0' === $suffice_toolkit_categories ) { + $suffice_toolkit_terms = get_terms( array( 'taxonomy' => 'portfolio_cat', - 'field' => 'id', - 'terms' => $included_terms, - ), - ), - ) -); + ) + ); -while ( $project_query->have_posts() ) : - $project_query->the_post(); + if ( ! is_wp_error( $suffice_toolkit_terms ) ) { + $suffice_toolkit_included_terms = wp_list_pluck( $suffice_toolkit_terms, 'term_id' ); + } + } else { + $suffice_toolkit_included_terms = (array) $suffice_toolkit_categories; + } + ?> - global $post; + -$output .= '
'; -$output .= '
'; -echo $output; +
diff --git a/templates/content-widget-slider.php b/templates/content-widget-slider.php index 477d9d3..a926669 100644 --- a/templates/content-widget-slider.php +++ b/templates/content-widget-slider.php @@ -20,39 +20,39 @@ exit; } -$repeatable_slider = isset( $instance['repeatable_slider'] ) ? $instance['repeatable_slider'] : array(); -$controls = isset( $instance['controls'] ) ? $instance['controls'] : 'slider-controls-rounded'; -$height = isset( $instance['height'] ) ? $instance['height'] : 'slider-height--default'; +$suffice_toolkit_repeatable_slider = isset( $instance['repeatable_slider'] ) ? $instance['repeatable_slider'] : array(); +$suffice_toolkit_controls = isset( $instance['controls'] ) ? $instance['controls'] : 'slider-controls-rounded'; +$suffice_toolkit_height = isset( $instance['height'] ) ? $instance['height'] : 'slider-height--default'; ?> - -
+ +
-
+
- -

+ +

- -

+ +

- - + +
- <?php echo esc_html( $slider['title'] ); ?> + <?php echo esc_html( $suffice_toolkit_slider['title'] ); ?>
-
+
- +
- <?php echo esc_attr( $name ); ?> + <?php echo esc_attr( $suffice_toolkit_name ); ?>
- +
- -
+ +
- - + + - + diff --git a/templates/content-widget-testimonial.php b/templates/content-widget-testimonial.php index 3dcde4a..399d3d7 100644 --- a/templates/content-widget-testimonial.php +++ b/templates/content-widget-testimonial.php @@ -19,35 +19,35 @@ if ( ! defined( 'ABSPATH' ) ) { exit; } -$repeatable_testimonial = isset( $instance['repeatable_testimonial'] ) ? $instance['repeatable_testimonial'] : array(); -$style = isset( $instance['style'] ) ? $instance['style'] : ''; -$columns = isset( $instance['columns'] ) ? $instance['columns'] : '2'; +$suffice_toolkit_repeatable_testimonial = isset( $instance['repeatable_testimonial'] ) ? $instance['repeatable_testimonial'] : array(); +$suffice_toolkit_style = isset( $instance['style'] ) ? $instance['style'] : ''; +$suffice_toolkit_columns = isset( $instance['columns'] ) ? $instance['columns'] : '2'; ?>
-
    - -
  • - -

    +
      + +
    • + +

      - +
      - +
      - <?php echo esc_attr( $testimonial['name'] ); ?> + <?php echo esc_attr( $suffice_toolkit_testimonial['name'] ); ?>
      - -

      + +

      -
      - +
      +
    • diff --git a/templates/content-widget-title.php b/templates/content-widget-title.php index 4195afc..ecc58ca 100644 --- a/templates/content-widget-title.php +++ b/templates/content-widget-title.php @@ -19,24 +19,24 @@ if ( ! defined( 'ABSPATH' ) ) { exit; } -$title = isset( $instance['tg-title'] ) ? $instance['tg-title'] : ''; -$sub_title = isset( $instance['tg-sub-title'] ) ? $instance['tg-sub-title'] : ''; -$position = isset( $instance['position'] ) ? $instance['position'] : ''; -$style = isset( $instance['style'] ) ? $instance['style'] : ''; +$suffice_toolkit_title = isset( $instance['tg-title'] ) ? $instance['tg-title'] : ''; +$suffice_toolkit_sub_title = isset( $instance['tg-sub-title'] ) ? $instance['tg-sub-title'] : ''; +$suffice_toolkit_position = isset( $instance['position'] ) ? $instance['position'] : ''; +$suffice_toolkit_style = isset( $instance['style'] ) ? $instance['style'] : ''; ?> -
      -

      +
      +

      - -

      + +

      - +
      - +