plugin updates
This commit is contained in:
@@ -61,11 +61,10 @@
|
||||
}
|
||||
#wpadminbar #wp-admin-bar-imagify-profile .ab-item {
|
||||
height: auto;
|
||||
padding: 0 13px;
|
||||
padding: 0;
|
||||
}
|
||||
#wpadminbar #wp-admin-bar-imagify-profile {
|
||||
min-width: 200px;
|
||||
padding: 15px 0 10px;
|
||||
margin-top: 0.7em;
|
||||
background: #222;
|
||||
}
|
||||
@@ -193,7 +192,31 @@
|
||||
#wpadminbar #wp-admin-bar-imagify-profile .imagify-upsell-dismiss::before {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 10px;
|
||||
content: "\2715";
|
||||
color: #fff;
|
||||
right: 5px;
|
||||
color: #fff;
|
||||
}
|
||||
.imagify-plugin-upgrade {
|
||||
color: #6f9c3b;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
#wpadminbar #wp-admin-bar-imagify-upgrade-plan .ab-empty-item {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#wpadminbar .imagify-admin-bar-upgrade-plan {
|
||||
background: #8bc34a;
|
||||
box-sizing: border-box;
|
||||
border:none;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
font-weight: bold !important;
|
||||
padding: 0 10px;
|
||||
text-align: left;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
#wpadminbar #wp-admin-bar-imagify-profile .imagify-admin-bar-quota {
|
||||
padding: 13px 15px;
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
.imagify-account,.imagify-account-link{padding-right:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}.imagify-meteo-title.imagify-meteo-title{color:#fff;font-size:17px}.imagify-space-left>p{color:#fff}#wp-admin-bar-imagify-profile [class^=imagify-bar-]{position:relative;height:1.5em;width:100%;background:#60758d;color:#fff;font-size:10px}#wp-admin-bar-imagify-profile .imagify-progress{height:1.5em;font-size:1em}.imagify-progress{-webkit-transition:width .3s;-o-transition:width .3s;transition:width .3s}.imagify-bar-positive .imagify-progress{background:#8cc152}.imagify-bar-positive .imagify-barnb{color:#8cc152}.imagify-bar-negative .imagify-progress{background:#73818c}.imagify-bar-negative .imagify-barnb{color:#73818c}.imagify-bar-neutral .imagify-progress{background:#f5a623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#d0021b}#wpadminbar #wp-admin-bar-imagify-profile *{line-height:1.5;white-space:initial}#wpadminbar #wp-admin-bar-imagify .ab-submenu{padding-bottom:0}#wpadminbar #wp-admin-bar-imagify-profile .ab-item{height:auto;padding:0 13px}#wpadminbar #wp-admin-bar-imagify-profile{min-width:200px;padding:15px 0 10px;margin-top:.7em;background:#222}#wp-admin-bar-imagify .dashicons{font-family:dashicons;font-size:18px;vertical-align:middle;margin:0 5px 0 0}#wp-admin-bar-imagify .button-text{display:inline-block;vertical-align:middle}#wp-admin-bar-imagify .imagify-abq-row{display:table;width:100%}#wp-admin-bar-imagify .imagify-abq-row+.imagify-abq-row{margin-top:.75em}#wp-admin-bar-imagify .imagify-abq-row>*{display:table-cell}#wp-admin-bar-imagify-profile .imagify-meteo-icon{padding-right:7px}#wp-admin-bar-imagify-profile .imagify-meteo-icon img{width:37px}#wp-admin-bar-imagify-profile .imagify-meteo-title{font-size:17px}#wp-admin-bar-imagify-profile .imagify-meteo-subs{color:#72889f}#wpadminbar #wp-admin-bar-imagify-profile strong{font-weight:700}#wpadminbar #wp-admin-bar-imagify-profile .imagify-user-plan,#wpadminbar #wp-admin-bar-imagify-profile a{padding:0;color:#40b1d0}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link{display:table}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link>*{display:table-cell}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left{max-width:210px;min-width:210px;width:210px}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left p{font-size:12px}#wp-admin-bar-imagify-profile .imagify-error,#wp-admin-bar-imagify-profile .imagify-warning{padding:10px;margin:0 -13px -13px}#wp-admin-bar-imagify-profile .imagify-error p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p{margin-top:.5em}#wp-admin-bar-imagify-profile .imagify-error p+p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p+p{margin-top:1em}#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost{display:inline-block;height:auto;padding:7px 10px;border:1px solid #fff;text-align:center;background:0 0;color:#fff;border-radius:3px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost:focus,#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost:hover{background:#fff;color:#888}#wpadminbar .imagify-warning *{background:#f5a623;color:#fff;text-shadow:0 0 2px rgba(0,0,0,.2)}#wp-admin-bar-imagify-profile .imagify-upsell-admin-bar{position:relative;background:#c51161;margin:10px -13px -10px -13px;padding:20px}#wp-admin-bar-imagify-profile .imagify-upsell-admin-bar p{color:#fff}#wp-admin-bar-imagify-profile a.imagify-upsell-admin-bar-button{display:block;height:auto!important;border:1px solid #fff;border-radius:5px;color:#fff!important;padding:5px 10px!important;text-align:center;text-decoration:none;margin-top:10px}#wpadminbar #wp-admin-bar-imagify-profile a.imagify-upsell-dismiss{display:inline!important;height:auto!important}#wpadminbar #wp-admin-bar-imagify-profile .imagify-upsell-dismiss::before{position:absolute;top:5px;right:10px;content:"\2715";color:#fff}
|
||||
.imagify-account,.imagify-account-link{padding-right:15px}.imagify-meteo-icon{display:inline-block;height:38px;vertical-align:middle;margin-right:10px}.imagify-user-plan{color:#40b1d0}.imagify-meteo-title.imagify-meteo-title{color:#fff;font-size:17px}.imagify-space-left>p{color:#fff}#wp-admin-bar-imagify-profile [class^=imagify-bar-]{position:relative;height:1.5em;width:100%;background:#60758d;color:#fff;font-size:10px}#wp-admin-bar-imagify-profile .imagify-progress{height:1.5em;font-size:1em}.imagify-progress{-webkit-transition:width .3s;-o-transition:width .3s;transition:width .3s}.imagify-bar-positive .imagify-progress{background:#8cc152}.imagify-bar-positive .imagify-barnb{color:#8cc152}.imagify-bar-negative .imagify-progress{background:#73818c}.imagify-bar-negative .imagify-barnb{color:#73818c}.imagify-bar-neutral .imagify-progress{background:#f5a623}.imagify-space-left .imagify-bar-negative .imagify-progress{background:#d0021b}#wpadminbar #wp-admin-bar-imagify-profile *{line-height:1.5;white-space:initial}#wpadminbar #wp-admin-bar-imagify .ab-submenu{padding-bottom:0}#wpadminbar #wp-admin-bar-imagify-profile .ab-item{height:auto;padding:0}#wpadminbar #wp-admin-bar-imagify-profile{min-width:200px;margin-top:.7em;background:#222}#wp-admin-bar-imagify .dashicons{font-family:dashicons;font-size:18px;vertical-align:middle;margin:0 5px 0 0}#wp-admin-bar-imagify .button-text{display:inline-block;vertical-align:middle}#wp-admin-bar-imagify .imagify-abq-row{display:table;width:100%}#wp-admin-bar-imagify .imagify-abq-row+.imagify-abq-row{margin-top:.75em}#wp-admin-bar-imagify .imagify-abq-row>*{display:table-cell}#wp-admin-bar-imagify-profile .imagify-meteo-icon{padding-right:7px}#wp-admin-bar-imagify-profile .imagify-meteo-icon img{width:37px}#wp-admin-bar-imagify-profile .imagify-meteo-title{font-size:17px}#wp-admin-bar-imagify-profile .imagify-meteo-subs{color:#72889f}#wpadminbar #wp-admin-bar-imagify-profile strong{font-weight:700}#wpadminbar #wp-admin-bar-imagify-profile .imagify-user-plan,#wpadminbar #wp-admin-bar-imagify-profile a{padding:0;color:#40b1d0}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link{display:table}#wpadminbar #wp-admin-bar-imagify-profile .imagify-account-link>*{display:table-cell}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left{max-width:210px;min-width:210px;width:210px}#wpadminbar #wp-admin-bar-imagify-profile .imagify-space-left p{font-size:12px}#wp-admin-bar-imagify-profile .imagify-error,#wp-admin-bar-imagify-profile .imagify-warning{padding:10px;margin:0 -13px -13px}#wp-admin-bar-imagify-profile .imagify-error p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p{margin-top:.5em}#wp-admin-bar-imagify-profile .imagify-error p+p+p,#wp-admin-bar-imagify-profile .imagify-warning p+p+p{margin-top:1em}#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost{display:inline-block;height:auto;padding:7px 10px;border:1px solid #fff;text-align:center;background:0 0;color:#fff;border-radius:3px;-webkit-transition:all .275s;-o-transition:all .275s;transition:all .275s}#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost:focus,#wpadminbar #wp-admin-bar-imagify-profile .imagify-btn-ghost:hover{background:#fff;color:#888}#wpadminbar .imagify-warning *{background:#f5a623;color:#fff;text-shadow:0 0 2px rgba(0,0,0,.2)}#wp-admin-bar-imagify-profile .imagify-upsell-admin-bar{position:relative;background:#c51161;margin:10px -13px -10px -13px;padding:20px}#wp-admin-bar-imagify-profile .imagify-upsell-admin-bar p{color:#fff}#wp-admin-bar-imagify-profile a.imagify-upsell-admin-bar-button{display:block;height:auto!important;border:1px solid #fff;border-radius:5px;color:#fff!important;padding:5px 10px!important;text-align:center;text-decoration:none;margin-top:10px}#wpadminbar #wp-admin-bar-imagify-profile a.imagify-upsell-dismiss{display:inline!important;height:auto!important}#wpadminbar #wp-admin-bar-imagify-profile .imagify-upsell-dismiss::before{position:absolute;top:5px;right:5px;color:#fff}.imagify-plugin-upgrade{color:#6f9c3b;font-weight:600}#wpadminbar #wp-admin-bar-imagify-upgrade-plan .ab-empty-item{padding:0}#wpadminbar .imagify-admin-bar-upgrade-plan{background:#8bc34a;-webkit-box-sizing:border-box;box-sizing:border-box;border:none;color:#fff;cursor:pointer;display:block;font-weight:700!important;padding:0 10px;text-align:left;width:100%!important}#wpadminbar #wp-admin-bar-imagify-profile .imagify-admin-bar-quota{padding:13px 15px}
|
||||
@@ -1562,7 +1562,7 @@ ul.imagify-datas-details.imagify-datas-details {
|
||||
border-radius: 5px;
|
||||
color: #c51161 !important;
|
||||
font-weight: bold;
|
||||
padding: 10px;
|
||||
padding: 10px 0;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
text-transform: uppercase;
|
||||
@@ -1575,15 +1575,6 @@ ul.imagify-datas-details.imagify-datas-details {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.imagify-upsell-dismiss::before {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
content: "\2715";
|
||||
color: #2e3243;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.imagify-upsell .imagify-meteo-icon {
|
||||
filter: invert(100%) sepia(100%) saturate(0%) hue-rotate(104deg) brightness(103%) contrast(103%);
|
||||
}
|
||||
@@ -1595,3 +1586,78 @@ ul.imagify-datas-details.imagify-datas-details {
|
||||
.imagify-original-fize-size .value {
|
||||
padding-left: 15px !important;
|
||||
}
|
||||
.imagify-card {
|
||||
border: 1px solid #dfdfdf;
|
||||
background-color: #f4f7f9;
|
||||
border-radius: 5px;
|
||||
width:95%;
|
||||
}
|
||||
.imagify-card-header {
|
||||
margin-bottom: 10px;
|
||||
padding-top: 25px;
|
||||
}
|
||||
.imagify-card-logo {
|
||||
height: 42px;
|
||||
}
|
||||
.imagify-card-logo img {
|
||||
display: block;
|
||||
margin: 0 auto 0;
|
||||
}
|
||||
.imagify-card-header h4 {
|
||||
text-align: center;
|
||||
color: #323232;
|
||||
font-size: 1.1em;
|
||||
font-weight:bold;
|
||||
}
|
||||
.imagify-card-body {
|
||||
margin-bottom: 10px;
|
||||
padding: 0 10px 0 10px;
|
||||
height: 87px;
|
||||
}
|
||||
.imagify-card-body p {
|
||||
font-size: 1em;
|
||||
color: #323232;
|
||||
text-align:center;
|
||||
line-height: 17px;
|
||||
}
|
||||
.imagify-card-footer {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
height: 40px;
|
||||
}
|
||||
.imagify-card-footer span {
|
||||
text-transform: uppercase;
|
||||
font-weight:bold;
|
||||
color: #6f9c3b;
|
||||
}
|
||||
.imagify-card-footer a {
|
||||
margin: 0 15px 0 15px;
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.imagify-card-footer a.imagify-card-btn {
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
background-color: #2f3242;
|
||||
padding: 8px 20px 8px 20px;
|
||||
color: white;
|
||||
}
|
||||
.imagify-plugin-family-col {
|
||||
float: left;
|
||||
width: 25%;
|
||||
box-sizing: border-box;
|
||||
-webkit-flex-basis: 25%;
|
||||
-ms-flex-preferred-size: 25%;
|
||||
flex-basis: 25%;
|
||||
}
|
||||
.imagify-upsell-cta {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.imagify-upsell-cta .imagify-svg-icon {
|
||||
margin-left: 7px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1304,3 +1304,14 @@ td.imagify-cell-filename {
|
||||
}
|
||||
}
|
||||
|
||||
.imagify-notice-dismiss {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.imagify-notice-dismiss::before {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.imagify-notice-dismiss.notice-dismiss:hover::before {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -21,6 +21,10 @@
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.imagify-notice-dismiss.notice-dismiss::before {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Notices in Imagify related pages */
|
||||
.media_page_imagify-bulk-optimization .notice,
|
||||
body[class*="_imagify-ngg-bulk-optimization"] .notice,
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -41,7 +41,7 @@
|
||||
z-index: 10;
|
||||
}
|
||||
.imagify-payment-modal .imagify-modal-content {
|
||||
width: 980px;
|
||||
width: 1065px;
|
||||
max-width: 100%;
|
||||
min-width: 925px;
|
||||
padding: 0;
|
||||
@@ -56,7 +56,9 @@
|
||||
height: 668px;
|
||||
}
|
||||
.imagify-payment-modal .imagify-modal-main {
|
||||
width: 70%;
|
||||
width: 100%;
|
||||
background-color: #f5f7f9;
|
||||
padding: 30px 50px;
|
||||
}
|
||||
.imagify-iframe-viewing .imagify-modal-main {
|
||||
width: auto;
|
||||
@@ -99,7 +101,9 @@
|
||||
margin-bottom: .5em;
|
||||
}
|
||||
.imagify-modal-title {
|
||||
font-size: 1.8em;
|
||||
font-size: 2.2em;
|
||||
font-weight: 600;
|
||||
margin: 30px 0 10px;
|
||||
}
|
||||
.imagify-modal-title .imagify-inner-sub-title {
|
||||
display: block;
|
||||
@@ -163,7 +167,7 @@
|
||||
|
||||
.imagify-small-options {
|
||||
width: 300px;
|
||||
margin: 1em auto .5em;
|
||||
margin: 5em auto 5em;
|
||||
background: #338EA6;
|
||||
border-radius: 4px;
|
||||
}
|
||||
@@ -394,10 +398,11 @@ div.imagify-col-checkbox {
|
||||
/* Offer col */
|
||||
.imagify-offer-size {
|
||||
font-size: 30px;
|
||||
color: #2E3243;
|
||||
color: #5F758E;
|
||||
font-weight: bold;
|
||||
-webkit-transition: all .275s;
|
||||
transition: all .275s;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.imagify-offer-by {
|
||||
font-size: 10px;
|
||||
@@ -427,6 +432,8 @@ div.imagify-col-price {
|
||||
padding-right: 0;
|
||||
font-size: 10px;
|
||||
font-weight: bold;
|
||||
font-size: 0.9em;
|
||||
line-height: 1.7;
|
||||
}
|
||||
.imagify-price-block,
|
||||
.imagify-price-discount {
|
||||
@@ -490,10 +497,17 @@ span.imagify-price-mini {
|
||||
vertical-align: 2px;
|
||||
}
|
||||
span.imagify-price-by {
|
||||
font-size: 10px;
|
||||
color: #1F2332;
|
||||
vertical-align: -13px;
|
||||
text-indent: -27px;
|
||||
font-size: 0.9em;
|
||||
color: #5F758E;
|
||||
text-indent: -27px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin-top: 9px;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
}
|
||||
.imagify-plans-selection-view span.imagify-price-by {
|
||||
text-indent: -66px;
|
||||
}
|
||||
|
||||
.imagify-col-other-actions {
|
||||
@@ -694,8 +708,9 @@ input.imagify-coupon-code {
|
||||
width: 500px;
|
||||
max-width: 100%;
|
||||
margin: 2em auto 2.5em;
|
||||
font-size: 0.85em;
|
||||
font-size: 0.9em;
|
||||
line-height: 1.5;
|
||||
font-weight:600
|
||||
}
|
||||
|
||||
/* Year selected */
|
||||
@@ -741,9 +756,11 @@ div.imagify-col-details {
|
||||
}
|
||||
.imagify-pricing-table .imagify-offer-line {
|
||||
padding: .6em 0;
|
||||
border: 2px solid #E8EEF0;
|
||||
background-color: white;
|
||||
margin-bottom: 30px;
|
||||
text-align: left;
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
}
|
||||
.imagify-pricing-table .imagify-offer-line:first-child {
|
||||
margin-top: .75em;
|
||||
@@ -1152,6 +1169,18 @@ p.imagify-modal-sidebar-title.imagify-modal-sidebar-title {
|
||||
float: right;
|
||||
font-weight: bold;
|
||||
}
|
||||
.imagify-col-details p.imagify-label-plans{
|
||||
margin-left: 10px;
|
||||
font-size: 1.5em;
|
||||
text-transform: uppercase;
|
||||
color: #3FB1CF;
|
||||
}
|
||||
div.imagify-col-label {
|
||||
width:15%;
|
||||
}
|
||||
.imagify-pricing-table .imagify-col-other-actions.imagify-choose-plan-col {
|
||||
width: 14.5%;
|
||||
}
|
||||
@media (max-width: 782px) {
|
||||
.imagify-payment-modal .imagify-modal-content{
|
||||
width: 90%;
|
||||
@@ -1338,3 +1367,141 @@ p.imagify-modal-sidebar-title.imagify-modal-sidebar-title {
|
||||
left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
/** Ribbon **/
|
||||
.imagify-ribbon {
|
||||
position: absolute;
|
||||
left: -5px; top: -5px;
|
||||
z-index: 1;
|
||||
overflow: hidden;
|
||||
width: 75px; height: 75px;
|
||||
text-align: right;
|
||||
}
|
||||
.imagify-ribbon span {
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
color: #FFF;
|
||||
text-align: center;
|
||||
line-height: 22px;
|
||||
transform: rotate(-45deg);
|
||||
-webkit-transform: rotate(-45deg);
|
||||
width: 100px;
|
||||
display: block;
|
||||
background: #79A70A;
|
||||
background: linear-gradient(#3FB1CF 0%, #3FB1CF 100%);
|
||||
box-shadow: 0 3px 10px -5px rgba(0, 0, 0, 1);
|
||||
position: absolute;
|
||||
top: 19px; left: -21px;
|
||||
}
|
||||
.imagify-ribbon span::before {
|
||||
content: "";
|
||||
position: absolute; left: 0px; top: 100%;
|
||||
z-index: -1;
|
||||
border-left: 3px solid #3FB1CF;
|
||||
border-right: 3px solid transparent;
|
||||
border-bottom: 3px solid transparent;
|
||||
border-top: 3px solid #3FB1CF;
|
||||
}
|
||||
.imagify-ribbon span::after {
|
||||
content: "";
|
||||
position: absolute; right: 0px; top: 100%;
|
||||
z-index: -1;
|
||||
border-left: 3px solid transparent;
|
||||
border-right: 3px solid #3FB1CF;
|
||||
border-bottom: 3px solid transparent;
|
||||
border-top: 3px solid #3FB1CF;
|
||||
}
|
||||
/** End Ribbon **/
|
||||
|
||||
/** Toggle Switch **/
|
||||
.imagify-toggle-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: 80px auto 40px;
|
||||
}
|
||||
.imagify-toggle-container .toggle-label {
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.toggle-container .toggle-label:nth-of-type(2) {
|
||||
color: #c8ced5;
|
||||
}
|
||||
.imagify-switch {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 48px;
|
||||
height: 24px;
|
||||
}
|
||||
.imagify-switch input {
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
.imagify-slider {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: #97c45e;
|
||||
border-radius: 30px;
|
||||
cursor: pointer;
|
||||
transition: 0.4s;
|
||||
}
|
||||
.imagify-slider:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
left: 4px;
|
||||
bottom: 3px;
|
||||
background-color: white;
|
||||
border-radius: 50%;
|
||||
transition: 0.4s;
|
||||
}
|
||||
input:checked + .imagify-slider {
|
||||
background-color: #97c45e;
|
||||
}
|
||||
input:checked + .imagify-slider:before {
|
||||
transform: translateX(22px);
|
||||
}
|
||||
.imagify-badge-container {
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
position:absolute;
|
||||
right: 80px;
|
||||
top: -25px;
|
||||
}
|
||||
.imagify-badge {
|
||||
font-size: 12px;
|
||||
padding: 4px 10px;
|
||||
border: 1px solid #b8bfc5;
|
||||
border-radius: 3px;
|
||||
color: #b8bfc5;
|
||||
font-weight: 700;
|
||||
transition: background-color 0.4s, color 0.4s;
|
||||
}
|
||||
.imagify-badge.imagify-badge-checked {
|
||||
background-color: #E2F0D1;
|
||||
color: #8bc34a;
|
||||
border: 1px solid #8bc34a
|
||||
}
|
||||
.imagify-arrow-container {
|
||||
position: absolute;
|
||||
right: 180px;
|
||||
top: 0px;
|
||||
}
|
||||
.imagify-toggle-container img:nth-of-type(2) {
|
||||
display: none;
|
||||
}
|
||||
input:checked ~ .imagify-badge-container .imagify-badge {
|
||||
background-color: #97c45e;
|
||||
color: white;
|
||||
border-color: #97c45e;
|
||||
opacity: 1;
|
||||
}
|
||||
/** End Toggle Switch **/
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,12 @@
|
||||
<svg width="880" height="204" viewBox="0 0 880 204" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M102.879 16.5303C55.7484 16.5303 17.4105 54.8682 17.4105 101.999C17.4105 149.306 55.7484 187.468 102.879 187.468C150.186 187.468 188.348 149.13 188.348 101.999C188.524 54.8682 150.186 16.5303 102.879 16.5303ZM61.9036 132.248L45.7243 140.689L48.0105 79.1372L100.242 111.848L82.6553 121.168C97.076 153.703 118.883 152.472 118.883 152.472C118.883 152.472 86.7002 180.61 61.9036 132.248ZM160.386 125.389L108.155 92.6786L125.742 83.3579C111.321 50.8234 89.514 52.0544 89.514 52.0544C89.514 52.0544 121.873 23.9165 146.493 72.2785L162.673 63.6613L160.386 125.389Z" fill="#9DC55D"/>
|
||||
<path d="M196.086 62.2552C190.986 50.1207 183.6 39.2172 174.279 29.8966C164.959 20.5759 154.055 13.1897 141.921 8.08966C129.259 2.63793 115.893 0 102 0C88.1069 0 74.9172 2.63793 62.2552 8.08966C50.1207 13.1897 39.2172 20.5759 29.8966 29.8966C20.5759 39.2172 13.1897 50.1207 8.08965 62.2552C2.63793 74.9172 0 88.2828 0 102C0 115.717 2.63793 129.083 8.08965 141.745C13.1897 153.879 20.5759 164.783 29.8966 174.103C39.2172 183.424 50.1207 190.81 62.2552 195.91C74.9172 201.186 88.2828 204 102 204C115.717 204 129.083 201.362 141.745 195.91C153.879 190.81 164.783 183.424 174.103 174.103C183.424 164.783 190.81 153.879 195.91 141.745C201.186 129.083 204 115.717 204 102C204.176 88.2828 201.362 74.9172 196.086 62.2552ZM102 198.548C48.8897 198.548 5.62759 155.286 5.62759 102C5.62759 48.8897 48.8897 5.62759 102 5.62759C155.286 5.62759 198.548 48.8897 198.548 102.176C198.548 155.286 155.286 198.548 102 198.548Z" fill="#9DC55D"/>
|
||||
<path d="M260.628 47.8346C263.442 47.4829 266.607 47.1312 270.301 46.7795C273.994 46.4277 278.566 46.4277 284.194 46.4277C288.942 46.4277 293.514 46.7795 297.911 47.6588C302.132 48.3622 306.001 49.7691 309.166 51.7036C312.332 53.6381 314.97 56.1001 316.728 59.2657C318.663 62.4312 319.542 66.3002 319.542 71.0484C319.542 73.8622 319.19 76.5002 318.311 78.9622C317.432 81.4243 316.376 83.5346 314.97 85.2933C313.563 87.0519 311.98 88.6346 310.221 89.6898C308.463 90.9208 306.704 91.6243 304.77 91.8001C306.704 91.976 308.99 92.6795 311.452 93.5588C313.914 94.6139 316.201 96.0208 318.311 97.7795C320.421 99.7139 322.18 102.176 323.587 105.166C324.994 108.155 325.697 111.673 325.697 115.893C325.697 121.697 324.642 126.269 322.532 129.962C320.421 133.655 317.432 136.469 313.914 138.579C310.221 140.69 306.001 142.097 301.252 142.976C296.504 143.679 291.404 144.207 286.128 144.207C282.083 144.207 278.038 144.031 274.17 143.855C270.301 143.679 265.728 143.152 260.804 142.624V47.8346H260.628ZM285.601 86.3484C287.711 86.3484 289.821 86.1726 291.756 85.8208C293.69 85.4691 295.273 84.7657 296.68 83.7105C298.087 82.6553 299.142 81.4243 300.021 79.6657C300.725 77.907 301.252 75.7967 301.252 73.1588C301.252 70.6967 300.725 68.5864 299.845 66.8277C298.966 65.245 297.735 64.0139 296.328 62.9588C294.921 62.0795 293.163 61.376 291.404 61.2001C289.645 60.8484 287.887 60.6726 286.128 60.6726C283.666 60.6726 281.556 60.8484 279.973 61.0243V86.3484H285.601ZM279.797 128.204C281.028 128.379 282.435 128.555 284.018 128.555C285.601 128.731 287.183 128.731 288.414 128.731C290.173 128.731 292.107 128.555 294.218 128.204C296.152 127.852 298.087 127.148 299.845 126.093C301.604 125.038 303.011 123.631 304.242 121.873C305.297 120.114 306.001 117.652 306.001 114.838C306.001 112.2 305.473 109.914 304.77 107.979C303.89 106.221 302.659 104.814 301.076 103.583C299.494 102.528 297.559 101.648 295.273 101.297C292.987 100.945 290.525 100.593 287.887 100.593H279.973V128.204H279.797Z" fill="black"/>
|
||||
<path d="M374.235 97.9552C374.235 95.8449 373.883 94.0863 373.18 92.8552C372.477 91.4483 371.421 90.569 370.366 89.6897C369.135 88.9863 367.552 88.4587 365.794 88.107C364.035 87.9311 361.925 87.7552 359.814 87.7552C355.066 87.7552 349.966 88.6346 344.69 90.569C343.459 88.2828 342.58 86.1725 341.877 84.0621C341.173 82.1277 340.997 79.6656 340.997 76.8518C344.866 75.4449 348.735 74.5656 352.604 74.038C356.473 73.5104 359.99 73.1587 363.332 73.1587C372.477 73.1587 379.687 75.4449 384.787 79.6656C389.887 84.0621 392.525 91.0966 392.525 100.769V140.338C389.359 141.393 385.666 142.272 381.27 143.152C376.873 144.031 371.949 144.383 366.321 144.383C361.925 144.383 357.704 144.031 354.011 143.152C350.318 142.272 347.152 141.041 344.339 139.107C341.701 137.348 339.59 134.886 338.183 132.072C336.777 129.259 336.073 125.566 336.073 121.345C336.073 117.124 336.952 113.607 338.711 110.793C340.47 107.979 342.756 105.693 345.746 103.935C348.559 102.176 351.725 100.945 355.242 100.241C358.759 99.538 362.277 99.1863 365.794 99.1863C368.256 99.1863 371.07 99.3621 374.235 99.538V97.9552ZM374.235 111.497C373.18 111.321 371.949 111.145 370.894 110.969C369.663 110.793 368.608 110.793 367.552 110.793C363.156 110.793 359.814 111.497 357.352 113.079C354.89 114.662 353.659 117.124 353.659 120.466C353.659 122.752 354.187 124.51 355.066 125.741C355.946 126.972 357.177 127.852 358.583 128.379C359.99 128.907 361.397 129.259 362.98 129.435C364.563 129.61 365.794 129.61 367.025 129.61C368.256 129.61 369.663 129.435 370.894 129.259C372.125 129.083 373.356 128.907 374.235 128.731V111.497Z" fill="black"/>
|
||||
<path d="M454.78 126.621C455.835 128.379 456.715 130.49 457.418 132.776C458.122 135.062 458.473 137.876 458.473 141.041C454.956 142.448 451.615 143.328 448.625 143.679C445.459 144.031 442.294 144.207 438.953 144.207C433.325 144.207 428.225 143.328 424.004 141.569C419.784 139.81 416.266 137.348 413.453 134.183C410.639 131.017 408.528 127.324 407.122 122.928C405.715 118.531 405.011 113.783 405.011 108.683C405.011 103.759 405.715 99.0104 407.122 94.7897C408.528 90.569 410.463 86.7001 413.277 83.5346C416.09 80.369 419.432 77.7311 423.653 75.9725C427.697 74.2139 432.622 73.1587 438.073 73.1587C440.008 73.1587 441.766 73.1587 443.349 73.3346C444.932 73.5104 446.515 73.5104 448.097 73.8621C449.504 74.038 451.087 74.5656 452.494 74.9173C453.901 75.4449 455.659 75.9725 457.594 76.6759C457.594 78.7863 457.242 80.8966 456.715 83.5346C456.187 85.9966 455.308 88.4587 454.253 90.7449C451.615 89.8656 449.328 89.338 447.394 88.9863C445.459 88.6346 443.173 88.4587 440.535 88.4587C435.084 88.4587 431.039 90.2173 428.225 93.7346C425.411 97.2518 424.004 102.352 424.004 109.035C424.004 116.069 425.587 121.345 428.401 124.51C431.39 127.852 435.435 129.435 440.535 129.435C441.766 129.435 442.997 129.435 444.228 129.435C445.284 129.435 446.339 129.259 447.394 129.083C448.449 128.907 449.504 128.731 450.559 128.379C451.966 127.676 453.373 127.148 454.78 126.621Z" fill="black"/>
|
||||
<path d="M470.432 46.2508C473.421 45.7232 476.411 45.5474 479.577 45.5474C482.742 45.5474 485.908 45.7232 488.897 46.2508V142.623C485.732 143.151 482.742 143.327 479.577 143.327C476.411 143.327 473.246 143.151 470.432 142.623V46.2508ZM491.711 106.923L508.594 74.5646C511.935 74.037 515.452 73.8612 518.97 73.8612C522.311 73.8612 525.477 74.037 528.642 74.5646L511.232 106.044L531.456 142.623C527.763 143.151 524.421 143.327 521.08 143.327C517.915 143.327 514.749 143.151 511.408 142.623L491.711 106.923Z" fill="black"/>
|
||||
<path d="M535.149 47.8338C538.315 47.3062 541.832 47.1304 545.877 47.1304C547.459 47.1304 549.042 47.1304 550.625 47.3062C552.208 47.4821 553.79 47.658 555.373 48.0097L568.915 119.41L585.27 48.0097C587.028 47.8338 588.611 47.4821 590.194 47.4821C591.777 47.3062 593.184 47.3062 594.766 47.3062C597.404 47.3062 600.218 47.4821 603.383 48.0097L620.442 121.168L633.983 48.0097C636.621 47.4821 639.435 47.3062 642.425 47.3062C644.183 47.3062 645.942 47.4821 647.525 47.4821C649.108 47.658 650.866 47.8338 652.449 48.0097L629.587 142.799C626.421 143.327 623.08 143.503 619.739 143.503C616.397 143.503 612.704 143.327 608.835 142.799L593.711 79.6649L577.356 142.799C575.246 142.975 573.311 143.151 571.728 143.327C570.146 143.503 568.387 143.503 566.452 143.503C563.639 143.503 560.825 143.327 557.659 142.799L535.149 47.8338Z" fill="black"/>
|
||||
<path d="M663.704 47.481C667.749 47.1293 671.794 46.7776 676.014 46.6017C680.059 46.4259 684.28 46.25 688.501 46.25C692.897 46.25 697.294 46.7776 701.866 47.6569C706.439 48.5362 710.483 50.119 714.177 52.581C717.87 55.0431 720.859 58.3845 723.146 62.6052C725.432 66.8259 726.487 72.4534 726.487 79.3121C726.487 86.1707 725.432 91.7983 723.146 96.019C720.859 100.24 717.87 103.581 714.352 106.043C710.659 108.505 706.79 110.264 702.218 111.143C697.821 112.022 693.425 112.374 689.028 112.374C687.797 112.374 686.742 112.374 685.863 112.374C684.808 112.374 683.928 112.198 683.049 112.198V142.622C681.29 142.798 679.708 142.974 678.125 143.15C676.542 143.15 674.959 143.326 673.552 143.326C672.145 143.326 670.563 143.326 668.98 143.15C667.397 142.974 665.639 142.974 663.88 142.622V47.481H663.704ZM682.873 96.3707C683.928 96.5466 684.983 96.5466 685.863 96.5466C686.742 96.5466 687.973 96.5466 689.204 96.5466C691.314 96.5466 693.601 96.1948 695.711 95.6673C697.821 95.1397 699.756 94.0845 701.339 92.8535C702.921 91.4466 704.328 89.8638 705.208 87.5776C706.087 85.4672 706.614 82.8293 706.614 79.6638C706.614 76.4983 706.087 73.6845 705.208 71.3983C704.152 69.1121 702.921 67.3535 701.339 65.9466C699.756 64.5397 697.821 63.6604 695.711 63.1328C693.601 62.6052 691.49 62.2535 689.204 62.2535C688.149 62.2535 687.27 62.2535 686.566 62.2535C685.687 62.2535 684.456 62.4293 682.873 62.6052V96.3707Z" fill="black"/>
|
||||
<path d="M739.325 74.5648C742.49 74.0372 745.656 73.8613 748.646 73.8613C751.635 73.8613 754.801 74.0372 757.966 74.5648V110.617C757.966 114.31 758.318 117.123 758.846 119.585C759.373 121.872 760.253 123.806 761.484 125.037C762.715 126.444 764.122 127.323 765.88 127.851C767.639 128.379 769.749 128.73 772.035 128.73C775.201 128.73 778.015 128.379 780.301 127.851V74.5648C783.466 74.0372 786.456 73.8613 789.446 73.8613C792.435 73.8613 795.601 74.0372 798.766 74.5648V140.161C795.953 141.216 792.259 142.096 787.687 142.975C783.115 143.854 778.19 144.382 773.266 144.382C768.87 144.382 764.473 144.03 760.428 143.327C756.208 142.623 752.69 141.217 749.525 138.93C746.359 136.644 743.897 133.303 742.139 128.906C740.204 124.51 739.325 118.706 739.325 111.32V74.5648Z" fill="black"/>
|
||||
<path d="M815.649 74.3881C816.88 74.2122 818.111 74.0364 819.342 73.8605C820.573 73.8605 821.804 73.6846 823.387 73.6846C825.849 73.6846 828.311 73.8605 830.949 74.3881C831.125 74.9157 831.477 75.4433 831.653 76.3226C831.828 77.2019 832.004 78.0812 832.356 78.9605C832.532 80.0157 832.708 80.895 832.884 81.7743C833.06 82.6536 833.06 83.5329 833.235 84.0605C833.939 82.6536 834.994 81.2467 836.049 79.8398C837.104 78.4329 838.511 77.2019 840.27 76.1467C841.853 75.0915 843.787 74.2122 845.722 73.5088C847.656 72.8053 849.942 72.4536 852.404 72.4536C856.097 72.4536 859.791 73.1571 862.956 74.564C866.297 75.9709 869.111 78.0812 871.573 80.895C874.035 83.7088 875.97 87.4019 877.377 91.6226C878.784 96.0191 879.487 101.119 879.487 106.923C879.487 112.55 878.608 117.826 877.025 122.223C875.266 126.795 872.98 130.664 869.815 133.829C866.649 136.995 862.78 139.457 858.208 141.216C853.635 142.974 848.535 143.854 842.732 143.854C841.149 143.854 839.742 143.854 838.335 143.678C836.929 143.502 835.697 143.326 834.642 143.15V173.398C833.06 173.574 831.301 173.75 829.894 173.926C828.311 173.926 826.904 174.102 825.322 174.102C823.739 174.102 822.332 174.102 820.749 173.926C819.166 173.75 817.584 173.574 816.001 173.398V74.3881H815.649ZM834.291 128.202C836.753 128.905 839.391 129.257 842.38 129.257C847.832 129.257 852.053 127.498 854.866 123.981C857.68 120.464 859.263 115.188 859.263 107.978C859.263 105.34 859.087 102.702 858.56 100.416C858.032 98.1295 857.328 96.0191 856.273 94.4364C855.218 92.8536 853.811 91.4467 852.229 90.3915C850.646 89.5122 848.535 88.9846 846.249 88.9846C844.139 88.9846 842.204 89.3364 840.622 90.2157C839.039 91.095 837.808 92.1502 836.928 93.5571C835.873 94.964 835.346 96.7226 834.818 98.6571C834.291 100.592 834.115 102.702 834.115 104.812V128.202H834.291Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1 @@
|
||||
<svg enable-background="new 0 0 630 101.9" viewBox="0 0 630 101.9" xmlns="http://www.w3.org/2000/svg"><path d="m235.3 89.2-12-17.2c-.8.1-1.5.1-2.3.1h-13.3v17.1h-10.9v-58.8h24.2c15.5 0 25.1 7.9 25.1 20.9 0 8.9-4.5 15.5-12.5 18.6l13.6 19.3zm-14.8-49.6h-12.8v23.5h12.8c9.6 0 14.5-4.4 14.5-11.8s-4.9-11.7-14.5-11.7z" fill="#6666c3"/><path d="m294.4 62.9v26.3h-9.9v-5.5c-2.5 3.9-7.4 6.1-14.1 6.1-10.2 0-16.7-5.6-16.7-13.4 0-7.5 5.1-13.4 18.7-13.4h11.6v-.7c0-6.1-3.7-9.8-11.2-9.8-5 0-10.2 1.7-13.6 4.5l-4.1-7.6c4.8-3.7 11.8-5.5 19-5.5 12.8-.1 20.3 6.1 20.3 19zm-10.5 12.3v-5.2h-10.8c-7.1 0-9.1 2.7-9.1 6 0 3.8 3.2 6.2 8.6 6.2 5.1-.1 9.5-2.4 11.3-7z" fill="#6666c3"/><path d="m352.1 63.5v25.7h-10.5v-24.4c0-8-4-11.9-10.7-11.9-7.5 0-12.5 4.5-12.5 13.5v22.7h-10.5v-44.8h10v5.8c3.5-4.1 8.9-6.3 15.5-6.3 10.7 0 18.7 6.2 18.7 19.7z" fill="#6666c3"/><path d="m383.8 70-7.8 7.4v11.8h-10.5v-62.4h10.5v37.7l21.8-20.2h12.6l-18.8 18.8 20.5 26h-12.8z" fill="#6666c3"/><g fill="#334e68"><path d="m473.9 89.2-.1-39-19.3 32.3h-4.9l-19.3-31.8v38.5h-10.4v-58.8h9l23.4 39 23-39h9l.1 58.8z"/><path d="m536.7 62.9v26.3h-9.9v-5.5c-2.5 3.9-7.4 6.1-14.1 6.1-10.2 0-16.7-5.6-16.7-13.4 0-7.5 5.1-13.3 18.7-13.3h11.6v-.7c0-6.1-3.7-9.8-11.2-9.8-5 0-10.2 1.7-13.6 4.5l-4.1-7.7c4.8-3.7 11.8-5.5 19-5.5 12.8-.1 20.3 6.1 20.3 19zm-10.5 12.3v-5.2h-10.8c-7.1 0-9.1 2.7-9.1 6 0 3.8 3.2 6.2 8.6 6.2 5.1-.1 9.5-2.4 11.3-7z"/><path d="m577.1 86.8c-2.5 2-6.3 3-10.1 3-9.8 0-15.5-5.2-15.5-15.1v-21.6h-7.4v-8.4h7.4v-10.3h10.5v10.2h12v8.4h-12v21.4c0 4.4 2.2 6.7 6.2 6.7 2.1.1 4.2-.6 5.9-1.8z"/><path d="m630 63.5v25.7h-10.5v-24.4c0-8-4-11.9-10.7-11.9-7.5 0-12.5 4.5-12.5 13.5v22.7h-10.5v-62.3h10.5v22.7c3.5-3.7 8.8-5.7 15-5.7 10.7 0 18.7 6.2 18.7 19.7z"/><path d="m166 52.3-27.4 1.2 4.8 7.5-45.6 29.2-45.2-19-52.6 21.9 3.6 8.8 48.9-20.4 46.2 19.4 49.8-31.8 4.8 7.6z"/></g><path d="m19.4 80.3 33.1-13.8 1.6.7v-19.6h-34.7zm75.8-80.3v84.4l2.6 1.1 32.1-20.5v-65zm-37.9 68.5 34.7 14.6v-59.3h-34.7z" fill="#6666c3"/></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg id="logo_1_" data-name="logo (1)" xmlns="http://www.w3.org/2000/svg" width="138.346" height="39.134" viewBox="0 0 138.346 39.134">
|
||||
<path id="Path_1" data-name="Path 1" d="M93.852,23.2V20.564h12.686V23.2H101.9V37.6H98.465V23.2ZM114.93,37.8a6.446,6.446,0,0,1-4.834-1.916,6.951,6.951,0,0,1-1.865-5.064,6.841,6.841,0,0,1,1.877-5.04,6.547,6.547,0,0,1,4.858-1.892,6.768,6.768,0,0,1,4.9,1.843,6.511,6.511,0,0,1,1.914,4.918,8.311,8.311,0,0,1-.1,1.318h-9.913a3.2,3.2,0,0,0,.981,2.123,3.066,3.066,0,0,0,2.184.805,2.861,2.861,0,0,0,2.65-1.464h3.73a5.937,5.937,0,0,1-2.282,3.149,6.821,6.821,0,0,1-4.1,1.22Zm2.27-10.2a3.256,3.256,0,0,0-2.221-.805,3.077,3.077,0,0,0-2.172.805,3.4,3.4,0,0,0-1.043,2.148h6.429a2.94,2.94,0,0,0-.994-2.148Zm10.76-3.515V26.47a4.313,4.313,0,0,1,3.975-2.587V27.4h-.859a3.2,3.2,0,0,0-2.331.769,3.627,3.627,0,0,0-.785,2.648V37.6H124.5V24.078Zm9.889,0V26.1a4.515,4.515,0,0,1,4.22-2.221,5.38,5.38,0,0,1,2.76.708,4.754,4.754,0,0,1,1.877,2.026,5.283,5.283,0,0,1,1.951-2,5.37,5.37,0,0,1,2.785-.732,5.236,5.236,0,0,1,3.914,1.513,5.807,5.807,0,0,1,1.484,4.247V37.6H153.4V30.131a3.367,3.367,0,0,0-.81-2.429,2.92,2.92,0,0,0-2.208-.842,2.961,2.961,0,0,0-2.221.842,3.336,3.336,0,0,0-.822,2.429V37.6h-3.435V30.131a3.367,3.367,0,0,0-.81-2.429,2.92,2.92,0,0,0-2.208-.842,2.961,2.961,0,0,0-2.221.842,3.336,3.336,0,0,0-.822,2.429V37.6h-3.46V24.078ZM160.4,37.6V19.539h3.46V37.6Zm10.8-.244-5.325-13.277h3.877l3.46,9.616,3.656-9.616h3.607l-8.49,19.916h-3.607Z" transform="translate(-42.123 -8.769)" fill="#1f1e33" fill-rule="evenodd"/>
|
||||
<path id="Path_2" data-name="Path 2" d="M20.039,0A19.807,19.807,0,0,1,40.078,19.567,19.807,19.807,0,0,1,20.039,39.134,19.807,19.807,0,0,1,0,19.567,19.807,19.807,0,0,1,20.039,0Zm8.833,10.577h-12V31.73l11.6-15.865H25Z" fill="#4672ff" fill-rule="evenodd"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 23 KiB |
@@ -31,6 +31,17 @@
|
||||
$_this.addClass(curr_class).attr('aria-selected', 'true');
|
||||
});
|
||||
|
||||
// Plan switcher.
|
||||
$('#imagify-toggle-plan').change(function() {
|
||||
var isChecked = $(this).is(':checked');
|
||||
$('.imagify-toggle-label').eq(0).css('color', isChecked ? '#c8ced5' : '#3b3f4a');
|
||||
$('.imagify-toggle-label').eq(1).css('color', isChecked ? '#3b3f4a' : '#c8ced5');
|
||||
$('.imagify-badge').toggleClass('imagify-badge-checked', isChecked);
|
||||
$('#imagify_all_plan_view').toggleClass('imagify-year-selected', isChecked).toggleClass('imagify-month-selected', ! isChecked);
|
||||
$('.imagify-arrow-container img').eq(0).toggle(! isChecked);
|
||||
$('.imagify-arrow-container img').eq(1).toggle(isChecked);
|
||||
});
|
||||
|
||||
})(jQuery, document, window);
|
||||
|
||||
|
||||
@@ -55,8 +66,8 @@
|
||||
$checkboxes: $('.imagify-offer-line .imagify-checkbox'),
|
||||
$radios: $('.imagify-payment-modal .imagify-radio-line input'),
|
||||
// Plans selection view & payment process view hidden by default.
|
||||
$preView: $('#imagify-pre-checkout-view'),
|
||||
$plansView: $('#imagify-plans-selection-view').hide(),
|
||||
$preView: $('#imagify-pre-checkout-view').hide(),
|
||||
$plansView: $('#imagify-plans-selection-view'),
|
||||
$paymentView: $('#imagify-payment-process-view').hide(),
|
||||
$successView: $('#imagify-success-view').hide(),
|
||||
$anotherBtn: $('.imagify-choose-another-plan'),
|
||||
@@ -151,10 +162,13 @@
|
||||
mon = datas.monthly_cost, // 4.99 (monthly)
|
||||
quo = datas.quota, // 1000 (MB) - 5000 images (monthly/onetime)
|
||||
cos = datas.cost, // 3.49 (onetime)
|
||||
label = datas.label,
|
||||
name = -1 === quo ? 'Unlimited' : (quo >= 1000 ? quo / 1000 + ' GB' : quo + ' MB'),
|
||||
pcs = 'monthly' === type ? {monthly: mon, yearly: Math.round(ann / 12 * 100) / 100} : cos,
|
||||
pcsd = pcs, // Used if discount is active.
|
||||
percent, $datas_c, datas_content, applies_to = [];
|
||||
percent, $datas_c, datas_content, applies_to = [],
|
||||
offer_by = '',
|
||||
additional_data = '';
|
||||
|
||||
applies_to = imagifyModal.getPromoAppliesTo(promo);
|
||||
|
||||
@@ -176,14 +190,29 @@
|
||||
|
||||
if (typeof classes !== 'undefined') {
|
||||
$offer.addClass('imagify-' + type + '-' + lab + classes);
|
||||
$offer.addClass('imagify-' + type + '-' + lab + classes);
|
||||
}
|
||||
|
||||
// Label.
|
||||
$offer.find('.imagify-label-plans').text(label);
|
||||
|
||||
// Name.
|
||||
$offer.find('.imagify-offer-size').text(name);
|
||||
|
||||
// Main prices (pcs can be an object or a string).
|
||||
$offer.find('.imagify-number-block').html(imagifyModal.getHtmlPrice(pcs, 'monthly'));
|
||||
|
||||
if ('Unlimited' === name) {
|
||||
offer_by = 'quota';
|
||||
$offer.addClass('imagify-best-value');
|
||||
additional_data = 'No additional cost';
|
||||
} else {
|
||||
offer_by = '/month';
|
||||
additional_data = '$' + add + ' per additional Gb';
|
||||
}
|
||||
|
||||
$offer.find('.imagify-offer-by').text(offer_by);
|
||||
|
||||
// discount prices
|
||||
$offer.find('.imagify-price-block').prev('.imagify-price-discount').remove();
|
||||
if (
|
||||
@@ -200,7 +229,7 @@
|
||||
|
||||
if ('monthly' === type) {
|
||||
// Additional price.
|
||||
$offer.find('.imagify-price-add-data').text('$' + add);
|
||||
$offer.find('.imagify-price-add-data').text(additional_data);
|
||||
}
|
||||
|
||||
// Button data-offer attr.
|
||||
@@ -402,6 +431,10 @@
|
||||
if ('free' === value.label) {
|
||||
freeQuota = value.quota;
|
||||
}
|
||||
|
||||
if ('starter' === value.label) {
|
||||
return;
|
||||
}
|
||||
offers.mo.push(value);
|
||||
}
|
||||
});
|
||||
@@ -501,7 +534,7 @@
|
||||
} else {
|
||||
// Now, do the MONTHLIES Markup.
|
||||
$.each(offers.mo, function (index, value) {
|
||||
var $tpl, $offer,
|
||||
var $tpl,
|
||||
classes = '';
|
||||
|
||||
// If offer is too big (far) than estimated needs, don't show the offer.
|
||||
@@ -509,20 +542,6 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
if (index === suggested.mo.index) {
|
||||
// It's the one to display.
|
||||
$offer = $('.imagify-pre-checkout-offers .imagify-offer-monthly');
|
||||
|
||||
if (suggested.mo.selected) {
|
||||
classes = ' imagify-offer-selected';
|
||||
|
||||
// Add this offer as pre-selected item in pre-checkout view.
|
||||
$offer.addClass('imagify-offer-selected').find('.imagify-checkbox').prop('checked', true);
|
||||
}
|
||||
// Populate the Pre-checkout view depending on user_cons.
|
||||
imagifyModal.populateOffer($offer, value, 'monthly');
|
||||
}
|
||||
|
||||
// Populate each offer.
|
||||
$tpl = $(mo_clone).clone();
|
||||
$tpl = imagifyModal.populateOffer($tpl, value, 'monthly', classes);
|
||||
@@ -530,6 +549,12 @@
|
||||
// Complete Monthlies HTML.
|
||||
mo_html += $tpl[0].outerHTML;
|
||||
});
|
||||
|
||||
// Wait for element to be ready after ajax callback before adding ribbon.
|
||||
setTimeout(function() {
|
||||
// Add best value ribbon to unlimited plan.
|
||||
$('.imagify-best-value').prepend('<div class="imagify-ribbon"><span>Best Value!</span></div>');
|
||||
}, 100);
|
||||
}
|
||||
|
||||
if (0 === offers.ot.length) {
|
||||
@@ -1100,7 +1125,7 @@
|
||||
* Get pricings on modal opening.
|
||||
* Build the pricing tables inside modal.
|
||||
*/
|
||||
$('#imagify-get-pricing-modal').on('click.imagify-ajax', function () {
|
||||
$('.imagify-get-pricing-modal').on('click.imagify-ajax', function () {
|
||||
imagifyModal.getPricing($(this));
|
||||
});
|
||||
|
||||
@@ -1116,7 +1141,8 @@
|
||||
// Reset first view after fadeout ~= 300 ms.
|
||||
setTimeout(function () {
|
||||
$('.imagify-modal-views').hide();
|
||||
$('#imagify-pre-checkout-view').show();
|
||||
$('#imagify-pre-checkout-view').hide();
|
||||
$('#imagify-plans-selection-view').show();
|
||||
}, 300);
|
||||
|
||||
//delay scrolltop top to avoid flickering
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,26 +1,129 @@
|
||||
<?php
|
||||
declare( strict_types=1 );
|
||||
|
||||
namespace Imagify\Admin;
|
||||
|
||||
use Imagify\Traits\InstanceGetterTrait;
|
||||
use Imagify\EventManagement\SubscriberInterface;
|
||||
use Imagify\User\User;
|
||||
use Imagify_Views;
|
||||
use WP_Admin_Bar;
|
||||
|
||||
/**
|
||||
* Admin bar handler
|
||||
*/
|
||||
class AdminBar {
|
||||
use InstanceGetterTrait;
|
||||
class AdminBar implements SubscriberInterface {
|
||||
/**
|
||||
* User instance.
|
||||
*
|
||||
* @var User
|
||||
*/
|
||||
private $user;
|
||||
|
||||
/**
|
||||
* Launch the hooks.
|
||||
* AdminBar constructor.
|
||||
*
|
||||
* @return void
|
||||
* @param User $user User instance.
|
||||
*/
|
||||
public function init() {
|
||||
if ( wp_doing_ajax() ) {
|
||||
add_action( 'wp_ajax_imagify_get_admin_bar_profile', array( $this, 'get_admin_bar_profile_callback' ) );
|
||||
public function __construct( User $user ) {
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of events this subscriber listens to
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_subscribed_events(): array {
|
||||
return [
|
||||
'wp_ajax_imagify_get_admin_bar_profile' => 'get_admin_bar_profile_callback',
|
||||
'admin_bar_menu' => [ 'add_imagify_admin_bar_menu', IMAGIFY_INT_MAX ],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Imagify menu in the admin bar.
|
||||
*
|
||||
* @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance, passed by reference.
|
||||
*/
|
||||
public function add_imagify_admin_bar_menu( $wp_admin_bar ) {
|
||||
if ( ! imagify_get_context( 'wp' )->current_user_can( 'manage' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! get_imagify_option( 'admin_bar_menu' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Parent.
|
||||
$wp_admin_bar->add_menu( array(
|
||||
'id' => 'imagify',
|
||||
'title' => 'Imagify',
|
||||
'href' => get_imagify_admin_url(),
|
||||
) );
|
||||
|
||||
// Settings.
|
||||
$wp_admin_bar->add_menu(array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-settings',
|
||||
'title' => __( 'Settings' ),
|
||||
'href' => get_imagify_admin_url(),
|
||||
) );
|
||||
|
||||
// Bulk Optimization.
|
||||
if ( ! is_network_admin() ) {
|
||||
$wp_admin_bar->add_menu(array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-bulk-optimization',
|
||||
'title' => __( 'Bulk Optimization', 'imagify' ),
|
||||
'href' => get_imagify_admin_url( 'bulk-optimization' ),
|
||||
) );
|
||||
}
|
||||
|
||||
// Documentation.
|
||||
$wp_admin_bar->add_menu(array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-documentation',
|
||||
'title' => __( 'Documentation', 'imagify' ),
|
||||
'href' => imagify_get_external_url( 'documentation' ),
|
||||
'meta' => array(
|
||||
'target' => '_blank',
|
||||
),
|
||||
) );
|
||||
|
||||
// Rate it.
|
||||
$wp_admin_bar->add_menu(array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-rate-it',
|
||||
/* translators: %s is WordPress.org. */
|
||||
'title' => sprintf( __( 'Rate Imagify on %s', 'imagify' ), 'WordPress.org' ),
|
||||
'href' => imagify_get_external_url( 'rate' ),
|
||||
'meta' => array(
|
||||
'target' => '_blank',
|
||||
),
|
||||
) );
|
||||
|
||||
// Quota & Profile informations.
|
||||
if ( defined( 'IMAGIFY_HIDDEN_ACCOUNT' ) && IMAGIFY_HIDDEN_ACCOUNT || ! get_imagify_option( 'api_key' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
$this->user->is_free()
|
||||
&&
|
||||
$this->user->get_percent_unconsumed_quota() > 20
|
||||
) {
|
||||
$wp_admin_bar->add_menu( [
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-upgrade-plan',
|
||||
'title' => '<button data-nonce="' . wp_create_nonce( 'imagify_get_pricing_' . get_current_user_id() ) . '" data-target="#imagify-pricing-modal" type="button" class="imagify-get-pricing-modal imagify-modal-trigger imagify-admin-bar-upgrade-plan">' . __( 'Upgrade Plan', 'imagify' ) . '</button>',
|
||||
] );
|
||||
}
|
||||
|
||||
$wp_admin_bar->add_menu( array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-profile',
|
||||
'title' => wp_nonce_field( 'imagify-get-admin-bar-profile', 'imagifygetadminbarprofilenonce', false, false ) . '<div id="wp-admin-bar-imagify-profile-loading" class="hide-if-no-js">' . __( 'Loading...', 'imagify' ) . '</div><div id="wp-admin-bar-imagify-profile-content" class="hide-if-no-js"></div>',
|
||||
) );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -35,22 +138,21 @@ class AdminBar {
|
||||
imagify_die();
|
||||
}
|
||||
|
||||
$user = new User();
|
||||
$views = Imagify_Views::get_instance();
|
||||
$unconsumed_quota = $views->get_quota_percent();
|
||||
$text = '';
|
||||
$button_text = '';
|
||||
$upgrade_link = '';
|
||||
|
||||
if ( $user->is_free() ) {
|
||||
if ( $this->user->is_free() ) {
|
||||
$text = esc_html__( 'Upgrade your plan now for more!', 'rocket' ) . '<br>' .
|
||||
esc_html__( 'From $5.99/month only, keep going with image optimization!', 'rocket' );
|
||||
$button_text = esc_html__( 'Upgrade My Plan', 'rocket' );
|
||||
$upgrade_link = IMAGIFY_APP_DOMAIN . '/subscription/?utm_source=plugin&utm_medium=notification';
|
||||
} elseif ( $user->is_growth() ) {
|
||||
} elseif ( $this->user->is_growth() ) {
|
||||
$text = esc_html__( 'Switch to Infinite plan for unlimited optimization:', 'rocket' ) . '<br>';
|
||||
|
||||
if ( $user->is_monthly ) {
|
||||
if ( $this->user->is_monthly ) {
|
||||
$text .= esc_html__( 'For $9.99/month, optimize as many images as you like!', 'rocket' );
|
||||
$upgrade_link = IMAGIFY_APP_DOMAIN . '/subscription/plan_switch/?label=infinite&payment_plan=1&utm_source=plugin&utm_medium=notification ';
|
||||
} else {
|
||||
@@ -64,11 +166,11 @@ class AdminBar {
|
||||
$data = [
|
||||
'quota_icon' => $views->get_quota_icon(),
|
||||
'quota_class' => $views->get_quota_class(),
|
||||
'plan_label' => $user->plan_label,
|
||||
'plan_with_quota' => $user->is_free() || $user->is_growth(),
|
||||
'plan_label' => $this->user->plan_label,
|
||||
'plan_with_quota' => $this->user->is_free() || $this->user->is_growth(),
|
||||
'unconsumed_quota' => $unconsumed_quota,
|
||||
'user_quota' => $user->quota,
|
||||
'next_update' => $user->next_date_update,
|
||||
'user_quota' => $this->user->quota,
|
||||
'next_update' => $this->user->next_date_update,
|
||||
'text' => $text,
|
||||
'button_text' => $button_text,
|
||||
'upgrade_link' => $upgrade_link,
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Imagify\Admin;
|
||||
|
||||
use Imagify\EventManagement\SubscriberInterface;
|
||||
use Imagify\User\User;
|
||||
|
||||
/**
|
||||
* Admin Subscriber
|
||||
*/
|
||||
class AdminSubscriber implements SubscriberInterface {
|
||||
|
||||
/**
|
||||
* User instance.
|
||||
*
|
||||
* @var User
|
||||
*/
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* Instantiate the class
|
||||
*
|
||||
* @param User $user User instance.
|
||||
*/
|
||||
public function __construct( User $user ) {
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of events this subscriber listens to
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_subscribed_events() {
|
||||
$basename = plugin_basename( IMAGIFY_FILE );
|
||||
|
||||
return [
|
||||
'plugin_action_links_' . $basename => 'plugin_action_links',
|
||||
'network_admin_plugin_action_links_' . $basename => 'plugin_action_links',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Add links to the plugin row in the plugins list.
|
||||
*
|
||||
* @since 1.7
|
||||
*
|
||||
* @param array $actions An array of action links.
|
||||
* @return array
|
||||
*/
|
||||
public function plugin_action_links( $actions ) {
|
||||
$text = 1 !== $this->user->plan_id ? __( 'Documentation', 'imagify' ) : __( 'Upgrade', 'imagify' );
|
||||
$url = 1 !== $this->user->plan_id ? 'documentation' : 'subscription';
|
||||
$class = 1 !== $this->user->plan_id ? '' : ' class="imagify-plugin-upgrade"';
|
||||
|
||||
array_unshift( $actions, sprintf( '<a href="%s" target="_blank"%s>%s</a>',
|
||||
esc_url( imagify_get_external_url( $url ) ),
|
||||
$class,
|
||||
$text
|
||||
) );
|
||||
|
||||
array_unshift( $actions, sprintf( '<a href="%s">%s</a>', esc_url( get_imagify_admin_url( 'bulk-optimization' ) ), __( 'Bulk Optimization', 'imagify' ) ) );
|
||||
array_unshift( $actions, sprintf( '<a href="%s">%s</a>', esc_url( get_imagify_admin_url() ), __( 'Settings', 'imagify' ) ) );
|
||||
return $actions;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Imagify\Admin;
|
||||
|
||||
use Imagify\EventManagement\SubscriberInterface;
|
||||
use Imagify\Dependencies\WPMedia\PluginFamily\Controller\{ PluginFamily, PluginFamilyInterface };
|
||||
|
||||
/**
|
||||
* Process plugin family actions.
|
||||
*/
|
||||
class PluginFamilySubscriber implements SubscriberInterface, PluginFamilyInterface {
|
||||
|
||||
/**
|
||||
* PluginFamily instance.
|
||||
*
|
||||
* @var PluginFamily
|
||||
*/
|
||||
protected $plugin_family;
|
||||
|
||||
/**
|
||||
* Instantiate the class
|
||||
*
|
||||
* @param PluginFamily $plugin_family PluginFamily instance.
|
||||
*/
|
||||
public function __construct( PluginFamily $plugin_family ) {
|
||||
$this->plugin_family = $plugin_family;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of events this subscriber listens to
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_subscribed_events() {
|
||||
$events = PluginFamily::get_subscribed_events();
|
||||
|
||||
return $events;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process to install & activate plugin.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function install_activate() {
|
||||
$this->plugin_family->install_activate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Display error notice if available.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function display_error_notice() {
|
||||
$this->plugin_family->display_error_notice();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Imagify\Admin;
|
||||
|
||||
use Imagify\Dependencies\League\Container\ServiceProvider\AbstractServiceProvider;
|
||||
use Imagify\Dependencies\WPMedia\PluginFamily\Controller\PluginFamily;
|
||||
|
||||
/**
|
||||
* Service provider for Admin.
|
||||
*/
|
||||
class ServiceProvider extends AbstractServiceProvider {
|
||||
/**
|
||||
* Services provided by this provider
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $provides = [
|
||||
'admin_bar',
|
||||
'admin_subscriber',
|
||||
'plugin_family',
|
||||
'plugin_family_subscriber',
|
||||
];
|
||||
|
||||
/**
|
||||
* Subscribers provided by this provider
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $subscribers = [
|
||||
'admin_bar',
|
||||
'admin_subscriber',
|
||||
'plugin_family_subscriber',
|
||||
];
|
||||
|
||||
/**
|
||||
* Registers the provided classes
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register() {
|
||||
|
||||
$this->getContainer()->share( 'admin_bar', AdminBar::class )
|
||||
->addArgument( $this->getContainer()->get( 'user' ) );
|
||||
$this->getContainer()->share( 'admin_subscriber', AdminSubscriber::class )
|
||||
->addArgument( $this->getContainer()->get( 'user' ) );
|
||||
|
||||
$this->getContainer()->add( 'plugin_family', PluginFamily::class );
|
||||
|
||||
$this->getContainer()->add( 'plugin_family_subscriber', PluginFamilySubscriber::class )
|
||||
->addArgument( $this->getContainer()->get( 'plugin_family' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the subscribers array
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_subscribers() {
|
||||
return $this->subscribers;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,254 @@
|
||||
<?php
|
||||
|
||||
namespace Imagify\Dependencies\WPMedia\PluginFamily\Controller;
|
||||
|
||||
/**
|
||||
* Handles installation and Activation of plugin family members.
|
||||
*/
|
||||
class PluginFamily implements PluginFamilyInterface {
|
||||
|
||||
/**
|
||||
* Error transient.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $error_transient = 'plugin_family_error';
|
||||
|
||||
/**
|
||||
* Returns an array of events this subscriber listens to
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_subscribed_events(): array {
|
||||
$events = self::get_post_install_event();
|
||||
$events['admin_notices'] = 'display_error_notice';
|
||||
|
||||
return $events;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set post install event.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_post_install_event(): array {
|
||||
$allowed_plugin = [
|
||||
'uk-cookie-consent',
|
||||
'backwpup',
|
||||
'imagify',
|
||||
'seo-by-rank-math',
|
||||
'wp-rocket',
|
||||
];
|
||||
|
||||
if ( ! isset( $_GET['action'], $_GET['_wpnonce'], $_GET['plugin_to_install'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
||||
return [];
|
||||
}
|
||||
|
||||
$plugin = str_replace( 'plugin_family_install_', '', sanitize_text_field( wp_unslash( $_GET['action'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
||||
|
||||
if ( ! in_array( $plugin, $allowed_plugin, true ) ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [
|
||||
'admin_post_plugin_family_install_' . $plugin => 'install_activate',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Process to install and activate plugin.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function install_activate() {
|
||||
if ( ! $this->is_allowed() ) {
|
||||
wp_die(
|
||||
'Plugin Installation is not allowed.',
|
||||
'',
|
||||
[ 'back_link' => true ]
|
||||
);
|
||||
}
|
||||
|
||||
// Install plugin.
|
||||
$this->install();
|
||||
|
||||
// Activate plugin.
|
||||
$result = activate_plugin( $this->get_plugin(), '', is_multisite() );
|
||||
|
||||
if ( is_wp_error( $result ) ) {
|
||||
$this->set_error( $result );
|
||||
}
|
||||
|
||||
wp_safe_redirect( wp_get_referer() );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install plugin.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function install() {
|
||||
if ( $this->is_installed() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$upgrader_class = ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) || ! file_exists( $upgrader_class ) ) {
|
||||
wp_die(
|
||||
'Plugin Installation failed. class-wp-upgrader.php not found',
|
||||
'',
|
||||
[ 'back_link' => true ]
|
||||
);
|
||||
}
|
||||
|
||||
require_once $upgrader_class; // @phpstan-ignore-line
|
||||
|
||||
$upgrader = new \Plugin_Upgrader( new \Automatic_Upgrader_Skin() );
|
||||
$result = $upgrader->install( $this->get_download_url() );
|
||||
|
||||
if ( is_wp_error( $result ) ) {
|
||||
$this->set_error( $result );
|
||||
}
|
||||
|
||||
clearstatcache();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if plugin is installed.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function is_installed(): bool {
|
||||
return file_exists( WP_PLUGIN_DIR . '/' . $this->get_plugin() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if installation is allowed.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function is_allowed(): bool {
|
||||
if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ), 'plugin_family_install_' . $this->get_slug() ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! current_user_can( is_multisite() ? 'manage_network_plugins' : 'install_plugins' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugin slug.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_slug(): string {
|
||||
return dirname( rawurldecode( sanitize_text_field( wp_unslash( $_GET['plugin_to_install'] ) ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugin identifier.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_plugin(): string {
|
||||
return rawurldecode( sanitize_text_field( wp_unslash( $_GET['plugin_to_install'] ) ) ) . '.php'; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugin download url.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_download_url(): string {
|
||||
$plugin_install = ABSPATH . 'wp-admin/includes/plugin-install.php';
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) || ! file_exists( $plugin_install ) ) {
|
||||
wp_die(
|
||||
'Plugin Installation failed. plugin-install.php not found',
|
||||
'',
|
||||
[ 'back_link' => true ]
|
||||
);
|
||||
}
|
||||
|
||||
require_once $plugin_install; // @phpstan-ignore-line
|
||||
|
||||
$data = [
|
||||
'slug' => $this->get_slug(),
|
||||
'fields' => [
|
||||
'download_link' => true,
|
||||
'short_description' => false,
|
||||
'sections' => false,
|
||||
'rating' => false,
|
||||
'ratings' => false,
|
||||
'downloaded' => false,
|
||||
'last_updated' => false,
|
||||
'added' => false,
|
||||
'tags' => false,
|
||||
'homepage' => false,
|
||||
'donate_link' => false,
|
||||
],
|
||||
];
|
||||
|
||||
// Get Plugin Infos.
|
||||
$plugin_info = plugins_api( 'plugin_information', $data );
|
||||
|
||||
if ( is_wp_error( $plugin_info ) ) {
|
||||
$this->set_error( $plugin_info );
|
||||
}
|
||||
|
||||
// Ensure that $plugin_info is an object before accessing the property.
|
||||
if ( ! is_object( $plugin_info ) || ! isset( $plugin_info->download_link ) ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return $plugin_info->download_link;
|
||||
}
|
||||
|
||||
/**
|
||||
* Maybe display error notice.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function display_error_notice() {
|
||||
$errors = get_transient( $this->error_transient );
|
||||
|
||||
if ( ! $errors ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! is_wp_error( $errors ) ) {
|
||||
delete_transient( $this->error_transient );
|
||||
return;
|
||||
}
|
||||
|
||||
$errors = $errors->get_error_messages();
|
||||
|
||||
if ( ! $errors ) {
|
||||
$errors[] = 'Installation process failed';
|
||||
}
|
||||
|
||||
$notice = '<div class="error notice is-dismissible"><p>' . implode( '<br/>', $errors ) . '</p></div>';
|
||||
echo wp_kses_post( $notice );
|
||||
|
||||
// Remove transient after displaying notice.
|
||||
delete_transient( $this->error_transient );
|
||||
}
|
||||
|
||||
/**
|
||||
* Store an error message in a transient then redirect.
|
||||
*
|
||||
* @param object $error A WP_Error object.
|
||||
* @return void
|
||||
*/
|
||||
private function set_error( $error ) {
|
||||
set_transient( $this->error_transient, $error, 30 );
|
||||
|
||||
wp_safe_redirect( wp_get_referer() );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace Imagify\Dependencies\WPMedia\PluginFamily\Controller;
|
||||
|
||||
interface PluginFamilyInterface {
|
||||
/**
|
||||
* Process to install and activate plugin.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function install_activate();
|
||||
|
||||
/**
|
||||
* Maybe display error notice.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function display_error_notice();
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
namespace Imagify\Dependencies\WPMedia\PluginFamily\Model;
|
||||
|
||||
/**
|
||||
* Handles the data to be passed to the frontend.
|
||||
*/
|
||||
class PluginFamily {
|
||||
|
||||
/**
|
||||
* An array of referrers for wp rocket.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $wp_rocket_referrer = [
|
||||
'imagify' => 'imagify',
|
||||
'seo-by-rank-math' => '',
|
||||
'backwpup' => '',
|
||||
'uk-cookie-consent' => '',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get filtered plugins.
|
||||
*
|
||||
* @param string $main_plugin Main plugin installed.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_filtered_plugins( string $main_plugin ): array {
|
||||
$plugins = require_once 'wp_media_plugins.php';
|
||||
|
||||
return $this->filter_plugins_by_activation( $plugins, $main_plugin );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter plugins family data by activation status and returns both categorized and uncategorized format.
|
||||
*
|
||||
* @param array $plugins Array of family plugins.
|
||||
* @param string $main_plugin Main plugin installed.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function filter_plugins_by_activation( array $plugins, string $main_plugin ): array {
|
||||
if ( empty( $plugins ) ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
list( $active_plugins, $inactive_plugins ) = [ [], [] ];
|
||||
|
||||
foreach ( $plugins as $cat => $cat_data ) {
|
||||
foreach ( $cat_data['plugins'] as $plugin => $data ) {
|
||||
|
||||
$plugin_path = $plugin . '.php';
|
||||
$plugin_slug = dirname( $plugin );
|
||||
$main_plugin_slug = dirname( $main_plugin );
|
||||
$wpr_referrer = 'wp-rocket' !== $main_plugin_slug ? $this->wp_rocket_referrer[ $main_plugin_slug ] : '';
|
||||
|
||||
/**
|
||||
* Check for activated plugins and pop them out of the array
|
||||
* to re-add them back using array_merge to be displayed after
|
||||
* plugins that are not installed or not activated.
|
||||
*/
|
||||
if ( is_plugin_active( $plugin_path ) && $main_plugin . '.php' !== $plugin_path ) {
|
||||
// set cta data of active plugins.
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
|
||||
'text' => 'Activated',
|
||||
'url' => '#',
|
||||
];
|
||||
|
||||
// Send active plugin to new array.
|
||||
$active_plugins[ $plugin ] = $plugins[ $cat ]['plugins'][ $plugin ];
|
||||
|
||||
// Remove active plugin from current category.
|
||||
$active_plugin = $plugins[ $cat ]['plugins'][ $plugin ];
|
||||
unset( $plugins[ $cat ]['plugins'][ $plugin ] );
|
||||
|
||||
// Send active plugin to the end of array in current category.
|
||||
$plugins[ $cat ]['plugins'][ $plugin ] = $active_plugin;
|
||||
|
||||
// Remove category with active plugin from current array.
|
||||
$active_cat = $plugins[ $cat ];
|
||||
unset( $plugins[ $cat ] );
|
||||
|
||||
// Send category with active plugins to the end of array.
|
||||
$plugins[ $cat ] = $active_cat;
|
||||
continue;
|
||||
}
|
||||
|
||||
$install_activate_url = admin_url( 'admin-post.php' );
|
||||
|
||||
$args = [
|
||||
'action' => 'plugin_family_install_' . $plugin_slug,
|
||||
'_wpnonce' => wp_create_nonce( 'plugin_family_install_' . $plugin_slug ),
|
||||
'plugin_to_install' => rawurlencode( $plugin ),
|
||||
];
|
||||
|
||||
if ( 'imagify' === $plugin_slug ) {
|
||||
$args = [
|
||||
'action' => 'install_imagify_from_partner_' . $main_plugin_slug,
|
||||
'_wpnonce' => wp_create_nonce( 'install_imagify_from_partner' ),
|
||||
'_wp_http_referer' => rawurlencode( $this->get_current_url() ),
|
||||
];
|
||||
}
|
||||
|
||||
$install_activate_url = add_query_arg( $args, $install_activate_url );
|
||||
|
||||
// Set Installation link.
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
|
||||
'text' => 'Install',
|
||||
'url' => $install_activate_url,
|
||||
];
|
||||
|
||||
// Create unique CTA data for WP Rocket.
|
||||
if ( 'wp-rocket/wp-rocket' === $plugin ) {
|
||||
$url = 'https://wp-rocket.me/?utm_source=' . $wpr_referrer . '-coupon&utm_medium=plugin&utm_campaign=' . $wpr_referrer;
|
||||
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
|
||||
'text' => 'Get it Now',
|
||||
'url' => $url,
|
||||
];
|
||||
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['link'] = $url;
|
||||
}
|
||||
|
||||
// Set activation text.
|
||||
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_path ) ) {
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta']['text'] = 'Activate';
|
||||
|
||||
if ( 'wp-rocket/wp-rocket' === $plugin ) {
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta']['url'] = $install_activate_url;
|
||||
}
|
||||
}
|
||||
|
||||
// Send inactive plugins to new array.
|
||||
$inactive_plugins[ $plugin ] = $plugins[ $cat ]['plugins'][ $plugin ];
|
||||
}
|
||||
|
||||
// Remove main plugin from categorized array.
|
||||
if ( isset( $plugins[ $cat ]['plugins'][ $main_plugin ] ) ) {
|
||||
unset( $plugins[ $cat ]['plugins'][ $main_plugin ] );
|
||||
}
|
||||
}
|
||||
|
||||
$uncategorized = array_merge( $inactive_plugins, $active_plugins );
|
||||
// Remove main plugin from uncategorized array.
|
||||
unset( $uncategorized[ $main_plugin ] );
|
||||
|
||||
return [
|
||||
'categorized' => $plugins,
|
||||
'uncategorized' => $uncategorized,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current URL.
|
||||
* Gotten from Imagify_Partner Package.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_current_url(): string {
|
||||
if ( ! isset( $_SERVER['SERVER_PORT'], $_SERVER['HTTP_HOST'] ) ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$port = (int) wp_unslash( $_SERVER['SERVER_PORT'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
|
||||
$port = 80 !== $port && 443 !== $port ? ( ':' . $port ) : '';
|
||||
$url = ! empty( $GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'] ) ? $GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'] : ( ! empty( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
|
||||
|
||||
return 'http' . ( is_ssl() ? 's' : '' ) . '://' . $_SERVER['HTTP_HOST'] . $port . $url; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Media plugin family data.
|
||||
*/
|
||||
|
||||
return [
|
||||
'optimize_performance' => [
|
||||
'title' => 'Optimize Performance',
|
||||
'plugins' => [
|
||||
'wp-rocket/wp-rocket' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-wp-rocket.svg',
|
||||
'width' => '50%',
|
||||
],
|
||||
'title' => 'Speed Up Your Website, Instantly',
|
||||
'desc' => 'WP Rocket is the easiest way to make your WordPress website faster and boost your Google PageSpeed score. Get more traffic, better engagement, and higher conversions effortlessly.',
|
||||
'link' => '',
|
||||
],
|
||||
'imagify/imagify' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-imagify.svg',
|
||||
'width' => '50%',
|
||||
],
|
||||
'title' => 'Speed Up Your Website With Lighter Images',
|
||||
'desc' => 'Imagify is the easiest WordPress image optimizer. It automatically compresses images, converts them to WebP and AVIF formats, and lets you resize and optimize with just one click!',
|
||||
'link' => 'https://imagify.io/',
|
||||
],
|
||||
],
|
||||
],
|
||||
'boost_traffic' => [
|
||||
'title' => 'Boost Traffic',
|
||||
'plugins' => [
|
||||
'seo-by-rank-math/rank-math' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-rank-math.svg',
|
||||
'width' => '60%',
|
||||
],
|
||||
'title' => 'The Swiss Army Knife of SEO Tools',
|
||||
'desc' => 'Rank Math SEO is the Best WordPress SEO plugin with the features of many SEO and AI SEO tools in a single package to help multiply your SEO traffic.',
|
||||
'link' => 'https://rankmath.com/wordpress/plugin/seo-suite/',
|
||||
],
|
||||
],
|
||||
],
|
||||
'protect_secure' => [
|
||||
'title' => 'Protect & Secure',
|
||||
'plugins' => [
|
||||
'backwpup/backwpup' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-backwpup.svg',
|
||||
'width' => '60%',
|
||||
],
|
||||
'title' => 'The Easiest Way to Protect Your Website',
|
||||
'desc' => 'BackWPup is the most comprehensive and user-friendly backup & restore plugin for WordPress. Easily schedule automatic backups, securely store and restore with just a few clicks!',
|
||||
'link' => 'https://backwpup.com/',
|
||||
],
|
||||
'uk-cookie-consent/uk-cookie-consent' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-termly.svg',
|
||||
'width' => '50%',
|
||||
],
|
||||
'title' => 'GDPR/CCPA Cookie Consent Banner',
|
||||
'desc' => 'One of the easiest, most comprehensive, and popular cookie consent plugins available. Google Gold Certified Partner to quickly comply with data privacy laws from around the world.',
|
||||
'link' => 'https://termly.io/resources/articles/wordpress-cookies-guide/',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -1638,7 +1638,7 @@ abstract class AbstractProcess implements ProcessInterface {
|
||||
|
||||
$keys = array_keys( $sizes );
|
||||
$non_next_gen_keys = array_values(array_filter($keys, function ( $key ) {
|
||||
return strpos( $key, $this->format ) === false;
|
||||
return strpos( (string) $key, $this->format ) === false;
|
||||
}));
|
||||
|
||||
return array_reduce($non_next_gen_keys, function ( $is_fully, $key ) use ( $sizes ) {
|
||||
|
||||
@@ -42,7 +42,7 @@ class Display implements SubscriberInterface {
|
||||
*/
|
||||
public static function get_subscribed_events() {
|
||||
return [
|
||||
'template_redirect' => [ 'start_content_process', -1000 ],
|
||||
'template_redirect' => 'start_content_process',
|
||||
'imagify_process_webp_content' => 'process_content',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -115,7 +115,6 @@ class Plugin {
|
||||
\Imagify\Auth\Basic::get_instance()->init();
|
||||
\Imagify\Job\MediaOptimization::get_instance()->init();
|
||||
Bulk::get_instance()->init();
|
||||
AdminBar::get_instance()->init();
|
||||
|
||||
if ( is_admin() ) {
|
||||
Notices::get_instance()->init();
|
||||
@@ -190,7 +189,6 @@ class Plugin {
|
||||
require_once $inc_path . 'functions/i18n.php';
|
||||
require_once $inc_path . 'functions/partners.php';
|
||||
require_once $inc_path . 'common/attachments.php';
|
||||
require_once $inc_path . 'common/admin-bar.php';
|
||||
require_once $inc_path . 'common/partners.php';
|
||||
require_once $inc_path . '3rd-party/3rd-party.php';
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Imagify\User;
|
||||
|
||||
use Imagify\Dependencies\League\Container\ServiceProvider\AbstractServiceProvider;
|
||||
|
||||
/**
|
||||
* Service provider for Picture display
|
||||
*/
|
||||
class ServiceProvider extends AbstractServiceProvider {
|
||||
/**
|
||||
* Services provided by this provider
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $provides = [
|
||||
'user',
|
||||
];
|
||||
|
||||
/**
|
||||
* Registers the provided classes
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register() {
|
||||
$this->getContainer()->add( 'user', User::class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the subscribers array
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_subscribers() {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
@@ -143,7 +143,7 @@ class User {
|
||||
$this->next_date_update = $user->next_date_update;
|
||||
$this->is_active = $user->is_active;
|
||||
$this->is_monthly = $user->is_monthly;
|
||||
$this->error = false;
|
||||
$this->error = is_wp_error( $user );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
return [
|
||||
'Imagify\User\ServiceProvider',
|
||||
'Imagify\Admin\ServiceProvider',
|
||||
'Imagify\Avif\ServiceProvider',
|
||||
'Imagify\CDN\ServiceProvider',
|
||||
'Imagify\Picture\ServiceProvider',
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
* Plugin Name: Imagify
|
||||
* Plugin URI: https://wordpress.org/plugins/imagify/
|
||||
* Description: Dramatically reduce image file sizes without losing quality, make your website load faster, boost your SEO and save money on your bandwidth using Imagify, the new most advanced image optimization tool.
|
||||
* Version: 2.2.2
|
||||
* Version: 2.2.3.2
|
||||
* Requires at least: 5.3
|
||||
* Requires PHP: 7.3
|
||||
* Author: Imagify – Optimize Images & Convert WebP & Avif
|
||||
* Author: Imagify Image Optimizer – Optimize Images & Convert WebP & Avif
|
||||
* Author URI: https://imagify.io
|
||||
* Licence: GPLv2
|
||||
*
|
||||
@@ -19,7 +19,7 @@
|
||||
defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
|
||||
// Imagify defines.
|
||||
define( 'IMAGIFY_VERSION', '2.2.2' );
|
||||
define( 'IMAGIFY_VERSION', '2.2.3.2' );
|
||||
define( 'IMAGIFY_SLUG', 'imagify' );
|
||||
define( 'IMAGIFY_FILE', __FILE__ );
|
||||
define( 'IMAGIFY_PATH', realpath( plugin_dir_path( IMAGIFY_FILE ) ) . '/' );
|
||||
|
||||
@@ -825,6 +825,8 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
|
||||
|
||||
update_imagify_option( 'api_key', $api_key );
|
||||
|
||||
delete_transient( 'imagify_user_cache' );
|
||||
|
||||
wp_send_json_success();
|
||||
}
|
||||
|
||||
@@ -980,7 +982,7 @@ class Imagify_Admin_Ajax_Post extends Imagify_Admin_Ajax_Post_Deprecated {
|
||||
} elseif ( $user->get_percent_unconsumed_quota <= 20 ) {
|
||||
$user->best_plan_title = __( 'Oops, It\'s almost over!', 'imagify' );
|
||||
} else {
|
||||
$user->best_plan_title = __( 'You\'re new to Imagify?', 'imagify' );
|
||||
$user->best_plan_title = __( 'Unlock Imagify\'s full potential', 'imagify' );
|
||||
}
|
||||
|
||||
wp_send_json_success( $user );
|
||||
|
||||
@@ -276,14 +276,14 @@ class Imagify_Assets extends Imagify_Assets_Deprecated {
|
||||
* Loaded in the bulk optimization page.
|
||||
*/
|
||||
if ( imagify_is_screen( 'bulk' ) ) {
|
||||
$this->enqueue_assets( [ 'pricing-modal', 'bulk' ] );
|
||||
$this->enqueue_assets( 'bulk' );
|
||||
}
|
||||
|
||||
/*
|
||||
* Loaded in the settings page.
|
||||
*/
|
||||
if ( imagify_is_screen( 'imagify-settings' ) ) {
|
||||
$this->enqueue_assets( [ 'sweetalert', 'notices', 'twentytwenty', 'pricing-modal', 'options' ] );
|
||||
$this->enqueue_assets( [ 'sweetalert', 'notices', 'twentytwenty', 'options' ] );
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -293,6 +293,8 @@ class Imagify_Assets extends Imagify_Assets_Deprecated {
|
||||
$this->enqueue_assets( [ 'files-list', 'twentytwenty' ] );
|
||||
}
|
||||
|
||||
$this->enqueue_assets( 'pricing-modal' );
|
||||
|
||||
/**
|
||||
* Triggered after Imagify CSS and JS have been enqueued.
|
||||
*
|
||||
|
||||
@@ -36,11 +36,11 @@ class Imagify_Options extends Imagify_Abstract_Options {
|
||||
'resize_larger_w' => 0,
|
||||
'display_nextgen' => 0,
|
||||
'display_nextgen_method' => 'picture',
|
||||
'display_webp' => 0,
|
||||
'display_webp_method' => 'picture',
|
||||
'display_webp' => 0,
|
||||
'display_webp_method' => 'picture',
|
||||
'cdn_url' => '',
|
||||
'disallowed-sizes' => [],
|
||||
'admin_bar_menu' => 0,
|
||||
'admin_bar_menu' => 1,
|
||||
'partner_links' => 0,
|
||||
'convert_to_avif' => 0,
|
||||
'convert_to_webp' => 0,
|
||||
|
||||
@@ -359,6 +359,8 @@ class Imagify_Settings {
|
||||
return;
|
||||
}
|
||||
|
||||
delete_transient( 'imagify_user_cache' );
|
||||
|
||||
// Handle API key validation cache and notices.
|
||||
if ( Imagify_Requirements::is_api_key_valid( true ) ) {
|
||||
Notices::dismiss_notice( 'wrong-api-key' );
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Imagify\User\User;
|
||||
use Imagify\Dependencies\WPMedia\PluginFamily\Model\PluginFamily;
|
||||
|
||||
defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
|
||||
@@ -120,16 +121,12 @@ class Imagify_Views {
|
||||
add_action( 'network_admin_menu', [ $this, 'add_network_menus' ] );
|
||||
}
|
||||
|
||||
// Action links in plugins list.
|
||||
$basename = plugin_basename( IMAGIFY_FILE );
|
||||
add_filter( 'plugin_action_links_' . $basename, [ $this, 'plugin_action_links' ] );
|
||||
add_filter( 'network_admin_plugin_action_links_' . $basename, [ $this, 'plugin_action_links' ] );
|
||||
|
||||
// Save the "per page" option value from the files list screen.
|
||||
add_filter( 'set-screen-option', [ 'Imagify_Files_List_Table', 'save_screen_options' ], 10, 3 );
|
||||
|
||||
// JS templates in footer.
|
||||
add_action( 'admin_print_footer_scripts', [ $this, 'print_js_templates' ] );
|
||||
add_action( 'admin_footer', [ $this, 'print_modal_payment' ] );
|
||||
}
|
||||
|
||||
|
||||
@@ -208,27 +205,6 @@ class Imagify_Views {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------------------- */
|
||||
/** PLUGIN ACTION LINKS ===================================================================== */
|
||||
/** ----------------------------------------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Add links to the plugin row in the plugins list.
|
||||
*
|
||||
* @since 1.7
|
||||
*
|
||||
* @param array $actions An array of action links.
|
||||
* @return array
|
||||
*/
|
||||
public function plugin_action_links( $actions ) {
|
||||
array_unshift( $actions, sprintf( '<a href="%s" target="_blank">%s</a>', esc_url( imagify_get_external_url( 'documentation' ) ), __( 'Documentation', 'imagify' ) ) );
|
||||
array_unshift( $actions, sprintf( '<a href="%s">%s</a>', esc_url( get_imagify_admin_url( 'bulk-optimization' ) ), __( 'Bulk Optimization', 'imagify' ) ) );
|
||||
array_unshift( $actions, sprintf( '<a href="%s">%s</a>', esc_url( get_imagify_admin_url() ), __( 'Settings', 'imagify' ) ) );
|
||||
return $actions;
|
||||
}
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------------------- */
|
||||
/** MAIN PAGE TEMPLATES ===================================================================== */
|
||||
/** ----------------------------------------------------------------------------------------- */
|
||||
@@ -239,7 +215,14 @@ class Imagify_Views {
|
||||
* @since 1.7
|
||||
*/
|
||||
public function display_settings_page() {
|
||||
$this->print_template( 'page-settings' );
|
||||
$plugin_family = new PluginFamily();
|
||||
$plugins_array = $plugin_family->get_filtered_plugins( 'imagify/imagify' );
|
||||
|
||||
$data = [
|
||||
'plugin_family' => $plugins_array['uncategorized'],
|
||||
];
|
||||
|
||||
$this->print_template( 'page-settings', $data );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -651,6 +634,36 @@ class Imagify_Views {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the payment modal.
|
||||
*/
|
||||
public function print_modal_payment() {
|
||||
$this->print_template(
|
||||
'modal-payment',
|
||||
[
|
||||
'attachments_number' => $this->get_attachments_number_modal(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of attachments to display in the payment modal.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
private function get_attachments_number_modal() {
|
||||
$transient = get_transient( 'imagify_attachments_number_modal' );
|
||||
|
||||
if ( false !== $transient ) {
|
||||
return $transient;
|
||||
}
|
||||
|
||||
$attachments_number = imagify_count_attachments() + Imagify_Files_Stats::count_all_files();
|
||||
|
||||
set_transient( 'imagify_attachments_number_modal', $attachments_number, 1 * DAY_IN_SECONDS );
|
||||
|
||||
return $attachments_number;
|
||||
}
|
||||
|
||||
/** ----------------------------------------------------------------------------------------- */
|
||||
/** TOOLS =================================================================================== */
|
||||
|
||||
@@ -86,6 +86,10 @@ class Imagify {
|
||||
* @return object
|
||||
*/
|
||||
public function get_user() {
|
||||
if ( empty( $this->api_key ) ) {
|
||||
return new WP_Error( 'api_key_missing', __( 'API key required.', 'imagify' ) );
|
||||
}
|
||||
|
||||
global $wp_current_filter;
|
||||
|
||||
if ( isset( static::$user ) ) {
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php
|
||||
defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
|
||||
add_action( 'admin_bar_menu', '_imagify_admin_bar', IMAGIFY_INT_MAX );
|
||||
/**
|
||||
* Add Imagify menu in the admin bar.
|
||||
*
|
||||
* @since 1.0
|
||||
*
|
||||
* @param object $wp_admin_bar WP_Admin_Bar instance, passed by reference.
|
||||
*/
|
||||
function _imagify_admin_bar( $wp_admin_bar ) {
|
||||
if ( ! imagify_get_context( 'wp' )->current_user_can( 'manage' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! get_imagify_option( 'admin_bar_menu' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Parent.
|
||||
$wp_admin_bar->add_menu( array(
|
||||
'id' => 'imagify',
|
||||
'title' => 'Imagify',
|
||||
'href' => get_imagify_admin_url(),
|
||||
) );
|
||||
|
||||
// Settings.
|
||||
$wp_admin_bar->add_menu(array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-settings',
|
||||
'title' => __( 'Settings' ),
|
||||
'href' => get_imagify_admin_url(),
|
||||
) );
|
||||
|
||||
// Bulk Optimization.
|
||||
if ( ! is_network_admin() ) {
|
||||
$wp_admin_bar->add_menu(array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-bulk-optimization',
|
||||
'title' => __( 'Bulk Optimization', 'imagify' ),
|
||||
'href' => get_imagify_admin_url( 'bulk-optimization' ),
|
||||
) );
|
||||
}
|
||||
|
||||
// Documentation.
|
||||
$wp_admin_bar->add_menu(array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-documentation',
|
||||
'title' => __( 'Documentation', 'imagify' ),
|
||||
'href' => imagify_get_external_url( 'documentation' ),
|
||||
'meta' => array(
|
||||
'target' => '_blank',
|
||||
),
|
||||
) );
|
||||
|
||||
// Rate it.
|
||||
$wp_admin_bar->add_menu(array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-rate-it',
|
||||
/* translators: %s is WordPress.org. */
|
||||
'title' => sprintf( __( 'Rate Imagify on %s', 'imagify' ), 'WordPress.org' ),
|
||||
'href' => imagify_get_external_url( 'rate' ),
|
||||
'meta' => array(
|
||||
'target' => '_blank',
|
||||
),
|
||||
) );
|
||||
|
||||
// Quota & Profile informations.
|
||||
if ( defined( 'IMAGIFY_HIDDEN_ACCOUNT' ) && IMAGIFY_HIDDEN_ACCOUNT || ! get_imagify_option( 'api_key' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$wp_admin_bar->add_menu( array(
|
||||
'parent' => 'imagify',
|
||||
'id' => 'imagify-profile',
|
||||
'title' => wp_nonce_field( 'imagify-get-admin-bar-profile', 'imagifygetadminbarprofilenonce', false, false ) . '<div id="wp-admin-bar-imagify-profile-loading" class="hide-if-no-js">' . __( 'Loading...', 'imagify' ) . '</div><div id="wp-admin-bar-imagify-profile-content" class="hide-if-no-js"></div>',
|
||||
) );
|
||||
}
|
||||
@@ -40,7 +40,30 @@ function update_imagify_user( $data ) {
|
||||
* @return object
|
||||
*/
|
||||
function get_imagify_user() {
|
||||
return imagify()->get_user();
|
||||
$user = get_transient( 'imagify_user_cache' );
|
||||
if ( false !== $user ) {
|
||||
return $user;
|
||||
}
|
||||
|
||||
$user = imagify()->get_user();
|
||||
|
||||
// Fill user object with missed details before saving the transient.
|
||||
if ( is_wp_error( $user ) ) {
|
||||
$user->id = 0;
|
||||
$user->email = '';
|
||||
$user->plan_id = 0;
|
||||
$user->plan_label = '';
|
||||
$user->quota = 0;
|
||||
$user->extra_quota = 0;
|
||||
$user->extra_quota_consumed = 0;
|
||||
$user->consumed_current_month_quota = 0;
|
||||
$user->next_date_update = null;
|
||||
$user->is_active = false;
|
||||
$user->is_monthly = false;
|
||||
}
|
||||
|
||||
set_transient( 'imagify_user_cache', $user, 5 * MINUTE_IN_SECONDS );
|
||||
return $user;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
=== Imagify – Optimize Images & Convert WebP & AVIF | Compress Images Easily ===
|
||||
Contributors: wp_rocket, imagify
|
||||
Tags: optimize images, convert webp, webp converter, convert AVIF, webp to AVIF, AVIF plugin, AVIF converter, image optimization, compress images, image compressor, resize images, reduce image size, performance, image optimizer, core web vitals, best image optimization plugin
|
||||
Tested up to: 6.5
|
||||
Stable tag: 2.2.2
|
||||
Tags: optimize images, image optimization, compress images, convert webp, convert AVIF
|
||||
Tested up to: 6.7
|
||||
Stable tag: 2.2.3.2
|
||||
Requires PHP: 7.3
|
||||
License: GPLv2 or later
|
||||
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Compress images & convert WebP and AVIF with the best WordPress image optimization plugin. Optimize images in 1-click & resize images with our image optimizer!
|
||||
Compress images & convert WebP and AVIF with the best and easiest WordPress image optimization plugin. Resize and optimize images in 1-click easily!
|
||||
|
||||
== Description ==
|
||||
|
||||
= The Best Image Optimization Plugin For WordPress =
|
||||
|
||||
[Imagify](https://imagify.io/) is the most advanced image optimization plugin to help you resize and compress images. You can now use its power directly in WordPress to optimise images and reduce the weight of the photos you want to add to your site – all in just one click and without sacrificing their quality.
|
||||
[Imagify](https://imagify.io/) is the most advanced image optimization plugin to help you resize and compress images. You can now use its power directly in WordPress to optimize images and reduce the weight of the photos you want to add to your site – image optimization is all done with just one click and without sacrificing their quality.
|
||||
|
||||
Imagify is the best WordPress image optimizer. The plugin lets you optimize images in one go with its asynchronous bulk optimization option. You can resize your images on the fly – they will be automatically optimized at the best compression level. If needed, you can always restore your images to their original versions.
|
||||
|
||||
On top of optimizing images, you’ll choose the best WebP plugin and AVIF plugin for WordPress. Imagify also converts your images to WebP and AVIF, the next-gen formats for lighter images that will speed up your WordPress site, improve user experience, and even SEO. Convert WebP and convert AVIF will make a difference in image optimization, you’ll see that from yourself.
|
||||
On top of optimizing images, you’ll choose the best AVIF and WebP converter plugin for WordPress. Imagify also converts your images to WebP and AVIF, the next-gen formats for lighter images that will speed up your WordPress site, improve user experience, and even SEO. Convert WebP and convert AVIF will make a difference in image optimization, you’ll see that from yourself.
|
||||
|
||||
Lastly, it’s easy to use the best image compression plugin for better site performance. Speed up your WordPress site and improve Core Web Vitals thanks to Imagify’s state-of-the-art image optimization process.
|
||||
|
||||
@@ -38,15 +38,15 @@ When using our image compression tool, Imagify, you will enjoy smaller file size
|
||||
|
||||
= Convert Images to the WebP and AVIF Formats =
|
||||
|
||||
Thanks to Imagify, you can take a step further in your image optimization process. You can also convert all your images to next-gen image formats such as WebP and AVIF. WebP format, as well as the AVIF format, offers superior image compression and quality and is a way to optimise images and speed up their loading times on websites. To convert images to next-gen format, using the Imagify plugin will save you a precious amount of time.
|
||||
Thanks to Imagify, you can take a step further in your image optimization process. You can also convert all your images to next-gen image formats such as WebP and AVIF. WebP format, as well as the AVIF format, offers superior image compression and quality and is a way to optimise images and speed up their loading times on websites. By utilizing Imagify’s AVIF and WebP optimizer, you can efficiently convert images to these next-gen formats, saving you a precious amount of time.
|
||||
|
||||
With Imagify, WebP compression and conversion are indeed super easy. Wondering how the convert WebP option works? Imagify will automatically enable WebP and convert your images to WebP. You can also easily convert WebP images to AVIF.
|
||||
With Imagify, WebP conversion and compression are indeed super easy. Wondering how the convert WebP option works? Imagify will automatically enable WebP and convert your images to WebP. You can also easily convert WebP images to AVIF.
|
||||
|
||||
If the "Create Next-gen formats versions" option is enabled, the AVIF version of optimized images will be created automatically. Simple as that! Thanks to the best WebP and AVIF plugin for WordPress, you’ll be able to take advantage of the automatic convert WebP feature in no time, plus you’ll always have the convert AVIF option.
|
||||
|
||||
Imagify can also display the AVIF images directly on your front-end. But because some browser versions don’t support AVIF yet, Imagify lets you have both optimized versions of the original format images and the WebP versions ready. Imagify will serve the AVIF version if a visitor's browser supports it and the WebP format if not (if you have previously converted the images to WebP).
|
||||
|
||||
WebP is definitively an excellent replacement for jpeg, png, and gif images, and the same goes for AVIF, which improves your image performance even further. Imagify offers WebP conversion for all image formats: you can convert gif to webP, jpeg to WebP, and even png to WebP. You can also benefit from AVIF conversion and convert gif to AVIF, jpg and jpeg to AVIF, ng to AVIF, and even WebP to AVIF!
|
||||
WebP is definitively an excellent replacement for jpeg, png, and gif images, and the same goes for AVIF, which improves your image performance even further. Imagify offers WebP conversion for all image formats: you can convert gif to WebP, jpeg to WebP, and even png to WebP. You can also benefit from AVIF conversion and convert gif to AVIF, jpg and jpeg to AVIF, png to AVIF, and even WebP to AVIF!
|
||||
Whatever your favorite image format, let Imagify optimise your images!
|
||||
|
||||
= Optimise Images to Make Your Site Faster and Improve Core Web Vitals =
|
||||
@@ -169,16 +169,20 @@ Yes, Imagify is fully compatible with NextGEN Gallery, the most popular photo ga
|
||||
|
||||
Imagify can optimize JPG, PNG, WebP, PDF files and GIFs (whether animated or not).
|
||||
|
||||
When you optimize JPG, PNG, and GIF files, Imagify will also create WebP versions of your original images and all your thumbnail sizes (if you have this option enabled).
|
||||
When you optimize JPG, PNG, and GIF files, Imagify will also create WebP and AVIF versions of your original images and all your thumbnail sizes (if you have this option enabled).
|
||||
|
||||
= How should I know which image compression level is best for me? =
|
||||
|
||||
Don’t worry! Imagify comes with the Smart Compression Mode. It means that your images will be automatically optimized for the best possible compression ratio and quality. There’s nothing else to do – just enjoy your lighter and faster images.
|
||||
|
||||
=How does the optimization process work?=
|
||||
=How does the image optimization process work?=
|
||||
|
||||
The image optimization process is performed on our servers. Once done, Imagify returns the optimized image to your server. We do not edit images’ titles or any other information, so there is nothing further to be done on your end than to compress images. Your original images will be moved to a dedicated backup folder (just make sure to keep the Backup option active in Imagify settings).
|
||||
|
||||
=How to enable the Webp Converter?=
|
||||
|
||||
With Imagify v2.2, the creation of WebP images is enabled by default. This means that when Imagify optimizes your images using its built-in WebP optimizer, a WebP version will automatically be generated, provided you have disabled the “Create AVIF versions of images” option in your plugin settings. Although the WebP files won’t be directly visible in your Media Library, you can verify their creation by checking for the “Next-Gen generated: yes” indication in the Imagify column of your Media Library.
|
||||
|
||||
=How long are images stored by Imagify?=
|
||||
|
||||
Once your images have been optimized via the WP plugin, the compressed images stay on your end forever (even if you delete the Imagify account).
|
||||
@@ -253,7 +257,7 @@ You can report any security bugs found in the source code of the site-reviews pl
|
||||
|
||||
== Screenshots ==
|
||||
|
||||
1. Bulk Optimization
|
||||
1. Bulk Image Optimization
|
||||
|
||||
2. Settings Page
|
||||
|
||||
@@ -262,6 +266,19 @@ You can report any security bugs found in the source code of the site-reviews pl
|
||||
4. Other Media Page
|
||||
|
||||
== Changelog ==
|
||||
= 2.2.3.2 =
|
||||
- Enhancement: Optimize and cache the modal attachment counter database query.
|
||||
|
||||
= 2.2.3.1 =
|
||||
- Enhancement: Decrease the amount of requests to imagify servers.
|
||||
|
||||
= 2.2.3 =
|
||||
- Enhancement: Cache the calls to the license API to avoid sending unnecessary requests
|
||||
- 3rd-party compatibility: Update priority on `template_redirect` to improve compatibility with WP Rocket’s LazyLoad
|
||||
- Bugfix: Fix `Uncaught TypeError: strpos() expects parameter 1 to be string` fatal error
|
||||
- Enhancement: UI improvements
|
||||
- Enhancement: Improve the code architecture
|
||||
|
||||
= 2.2.2 =
|
||||
- Enhancement: Allow to choose which Next-Gen images should be generated in UI
|
||||
- Enhancement: Guard against image size that’s not a string
|
||||
@@ -285,532 +302,4 @@ You can report any security bugs found in the source code of the site-reviews pl
|
||||
= 2.2 =
|
||||
- New Feature: Introduce AVIF generation feature
|
||||
|
||||
= 2.1.3.1 =
|
||||
- Bugfix: missing styling on some banners when using minified versions of the CSS files (#765)
|
||||
|
||||
= 2.1.3 =
|
||||
- Enhancement: Update chart.js (#742)
|
||||
- Enhancement: Improve messaging around WebP images when they are larger than the original (#751)
|
||||
- Enhancement: Update notices when out of quota (#727, #728)
|
||||
- Bugfix: Prevent PHP deprecated notice on PHP 8.1 (#734)
|
||||
- Bugfix: Improve database queries on large media libraries (#747)
|
||||
|
||||
= 2.1.2 =
|
||||
- Bugfix: Prevent deprecation notice with PHP 8.1 & 8.2 (#721, #723)
|
||||
- Bugfix: Escape error message before display (#729)
|
||||
- Bugfix: Don't count WebP images in the generate missing WebP images versions (#713)
|
||||
- Bugfix: Improve information related to out of quota on bulk optimization (#714)
|
||||
- Bugfix: Fix optimization filter type working with file filters on media library (#670)
|
||||
|
||||
= 2.1.1 =
|
||||
- Enhancement: Allow WebP images to be optimized by Imagify from the plugin (#611)
|
||||
- Enhancement: Improve error message displayed when an unknown error occured (#637)
|
||||
- Enhancement: Update Action Scheduler to v3.5.4 (#708)
|
||||
- Enhancement: Only display plan suggestion for users on free plan (#69)
|
||||
- Bugfix: Prevent optimization from getting stuck on websites with big images libraries (#707)
|
||||
- Bugfix: Prevent PHP8 ArgumentCountError (#682)
|
||||
|
||||
|
||||
= 2.1 =
|
||||
- Enhancement: Re-add lossless compression option (#686)
|
||||
- Enhancement: New async bulk optimization, allowing to run the bulk optimization without keeping the browser open. Also possible to run the bulk optimization from an API function or a WP CLI command (#674)
|
||||
- Bugfix: Correctly resize the WebP generated file to the maximum defined size from the settings (#521)
|
||||
- Bugfix: Prevent error related to set_time_limit() function on some environments (#671)
|
||||
|
||||
= 2.0 =
|
||||
- Enhancement: Add compatibility with our new smart compression system (#663)
|
||||
- Enhancement: Optimize initialization of some of the code (#473)
|
||||
- Enhancement: Add new filter `imagify_process_webp_content` (#653)
|
||||
- Bugfix: Prevent PHP warning when displaying the pricing modal (#666)
|
||||
- 3rd party compatibility: Pass missing parameter to the `http_headers_useragent` filter (#612)
|
||||
- 3rd party compatibility: Prevent conflict with WP Cloudflare super page cache (#609)
|
||||
- Bugfix: Fix various UI issues (#604, #586, #592, #594)
|
||||
- i18n: Fix typos & improve strings (#621)
|
||||
|
||||
= 1.10 - 2021/07/15 =
|
||||
* The plugin minimum compatible versions are now PHP 7.0 and WordPress 5.3
|
||||
* Enhancement: Correctly display WordPress cover blocks when WebP and picture tag replacement is enabled (#546)
|
||||
* Enhancement: Update our jQuery code to be compatible with the new jQuery version included in WordPress (#545)
|
||||
* 3rd party compatibility: Correctly display WooCommerce variable products images when WebP and picture tag replacement is enabled (#495)
|
||||
* Bugfix: Prevent nested picture tags when picture tag replacement is enabled (#537)
|
||||
* Bugfix: Prevent a fatal error related to get_current_screen() in some cases (#567)
|
||||
* Bugfix: Fixes some display issues related to the promotions in the checkout process (#556, #557)
|
||||
* Bugfix: Fixes some display issues on the settings & bulk optimization pages on mobile (#566)
|
||||
* Bugfix: Prevent PHP warning in some cases on the bulk optimization process (#565)
|
||||
* Bugfix: Prevent PHP notice in somes cases for the $images_count variable (#573)
|
||||
|
||||
= 1.9.14 =
|
||||
* Fix: cURL not connecting to Imagify API when using PHP 8.
|
||||
* Fix: Display issue in Chrome on scrollable check groups on Imagify admin page.
|
||||
|
||||
= 1.9.13 =
|
||||
* Improvement: Update readme with new quotas, FAQ and description info.
|
||||
|
||||
= 1.9.12 - 2020/11/09 =
|
||||
* Improvement: Enable plugin to work with new app pricing API.
|
||||
|
||||
= 1.9.11 - 2020/09/09 =
|
||||
* Fix: Fix settings error on multi-sites with WordPress 5.5
|
||||
* Fix: Write the correct conf file for use with WebP rewrites on nginx
|
||||
* Improvement: Namespace composer dependencies to avoid possible naming collisions.
|
||||
* Security: Add blank index.php to imagify-created backup folders to disable public access.
|
||||
|
||||
= 1.9.10 - 2020/05/26 =
|
||||
* Fix: Correctly optimize thumbnails during auto-optimization of image upload
|
||||
* Fix: Fix broken compatibility with Enable Media Replace plugin after WordPress 5.3
|
||||
|
||||
= 1.9.9 - 2020/02/13 =
|
||||
* Fix: do not warn that all the quota has been consumed when it is not the case.
|
||||
* Fix: fix a "chunky upload" error that some users experienced.
|
||||
* Fix: php notices that could happen when optimizing.
|
||||
|
||||
= 1.9.8.1 - 2019/11/15 =
|
||||
* Fix: WebP image not showing when using the `<picture>` method and the original `<img/>` does not have a `srcset` attribute.
|
||||
* Fix: a fatal error with WP Offload Media 2.3.
|
||||
|
||||
= 1.9.8 - 2019/11/11 =
|
||||
* Improvement: compatibility with WordPress 5.3!
|
||||
* New: among other things, WordPress 5.3 automatically resizes large images on upload, using a predefined threshold value that can be changed only by filter (no setting fields are provided). Imagify’s "Resize larger images" setting field is now used to tweak this threshold.
|
||||
* Caution: to be able to work on WordPress 5.3, some adjustments have been made to our compatibility with Enable Media Replace and Regenerate Thumbnails. However, these plugins must be updated to work with WordPress 5.3: do not use them until then.
|
||||
* Improvement: moved the `width` and `height` attributes from the `<picture>` tag to the `<img>` tag to be valid HTML markup.
|
||||
* Fix: added a missing descriptor in `srcset` attribute when using `<picture>` tags to display WebP images. This should also fix an issue with LasyLoad.
|
||||
* Fix: fixed an issue with the user capacity used for "Other Media" menu item.
|
||||
* Fix: a php notice `stripos(): Non-string needles will be interpreted as strings in the future.`.
|
||||
|
||||
= 1.9.7 - 2019/10/08 =
|
||||
* Improvement: prevent greedy antiviruses from crashing the website by renaming our highly dangerous php file with a ".suspected" suffix.
|
||||
* Improvement: on the settings page, display the "Save & Go to Bulk Optimizer" button only if the user has the ability to bulk optimize.
|
||||
* Fix: display the "Welcome" banner correctly when it is shown on the WP Rocket’s settings page.
|
||||
|
||||
= 1.9.6 - 2019/07/22 =
|
||||
* Improvement: now images that are "already optimized" can also get WebP versions.
|
||||
* Fix: progress bar height in the admin bar for Chrome and Safari.
|
||||
|
||||
= 1.9.5 - 2019/07/16 =
|
||||
* Improvement: Basic Authentication support. If it does not work automatically, you can still define the constants `IMAGIFY_AUTH_USER` and `IMAGIFY_AUTH_PASSWORD` in your `wp-config.php` file.
|
||||
* Improvement: WebP images are not created for animated gif images by default anymore. Use the filter `imagify_pre_can_create_next_gen_version` if you still want to create an unanimated WebP version of them.
|
||||
* Improvement: when creating WebP images from the settings page, we made more clear when all the images are missing a backup copy.
|
||||
* Improvement: clear the 5 minutes data cache when buying quota from the plugin.
|
||||
* Improvement: when displaying WebP images with the `<picture>` tag, allow to use relative URLs (starting with `/`).
|
||||
|
||||
= 1.9.4 - 2019/07/10 =
|
||||
* Improvement: if a next-gen image is larger than its non-next-gen version, it is now possible to not keep it. This can be done by using the filter `imagify_keep_large_next_gen`.
|
||||
* Improvement: compatibility with Pressable.
|
||||
* Improvement: renamed a php class to prevent some hosts to wrongly flag it as "suspicious" and trigger a fatal error.
|
||||
* Improvement: better compatibility with WP Real Media Library plugin.
|
||||
* Fix: rewrite rules for WebP could not work on some servers.
|
||||
* Fix: when using `<picture>` tags for WebP, some attributes could disappear if they were written on multiple lines.
|
||||
* Fix: the bulk method would not work in the NextGen Gallery list.
|
||||
* Fix: php notice `Trying to get property "namespace" for a non object`.
|
||||
|
||||
= 1.9.3.1 - 2019/07/03 =
|
||||
* Fix: conflict with plugins using an ancient version of Composer.
|
||||
|
||||
= 1.9.3 - 2019/06/17 =
|
||||
* Improvement: better compatibility with CDNs when displaying WebP images with `<picture>` tags. There is now a new setting field to fill in the CDN URL in use.
|
||||
* Improvement: don’t use Heartbeat anymore. This speeds up the optimization process and prevents other plugins to break everything when they remove Heartbeat.
|
||||
* Fix: a fatal error upon plugin deactivation.
|
||||
* Fix: an occasional fatal error preventing the optimization process to work.
|
||||
* Fix: conflict with plugins using an ancient version of Composer.
|
||||
* Fix: php notices displayed on the bulk optimization page on rare cases.
|
||||
* Fix: a php notice about "Non-string needles" with php 7.3.
|
||||
* Fix: a php notice displayed when restoring a custom file.
|
||||
|
||||
= 1.9.2 - 2019/05/16 =
|
||||
* Fix: don’t display support bubble anymore.
|
||||
|
||||
= 1.9.1 - 2019/05/09 =
|
||||
* Improvement: prevent "Generating missing WebP versions" being stuck at 0% in the settings page by displaying a "done/total" label instead.
|
||||
* Improvement: improved our "re-registering" of the Heartbeat library, that some plugins may deactivate.
|
||||
|
||||
= 1.9.0 - 2019/05/06 =
|
||||
* New: WebP support. For each image or thumbnail, Imagify can create a WebP version of it. But since creating these images without using them does not make really sense, Imagify can also display your WebP images on your site. All of this can be enabled in the settings. For the images that are already optimized, you get the possibility to create the WebP versions separately (one by one or in the settings page), but only if you kept a backup copy of the original images.
|
||||
* Improvement: the optimization process has been entirely rebuilt. This new process allows you to optimize as many thumbnail sizes that you want. It also implies that many classes, functions, and hooks have been deprecated.
|
||||
* Improvement: compatibility with Flywheel.
|
||||
* Improvement: some error messages are now more accurate.
|
||||
* Fix: made sure to stop the optimization process if the backup process fails. Since the optimization process has been rebuilt, some other bugs have been fixed along the way.
|
||||
* Fix: an issue preventing directory creation.
|
||||
* Fix: a fatal error when uploading an image in NextGen Gallery, due to a recent change in NGG.
|
||||
* Imagify now requires WordPress 4.0+ and php 5.4+.
|
||||
* Support for the plugin WP Retina 2x has been dropped (maybe temporarily).
|
||||
|
||||
= 1.8.4.1 - 2018/12/18 =
|
||||
* Improvement: prevent "unknown error" messages that some users are getting since yesterday.
|
||||
|
||||
= 1.8.4 - 2018/11/12 =
|
||||
* Improvement: automatic optimization is delayed further, it now happens after the image original data is stored in the database. This new process should be more reliable.
|
||||
* Improvement: compatibility with wordpress.com.
|
||||
* Improvement: some wording and typos in the plan suggestion tool.
|
||||
* Improvement: improved wording and added a link to a new documentation entry for the case when no php extension are available for image manipulation.
|
||||
* Improvement: prevent plugins from accidentally overwriting the header containing the API key when contacting our servers.
|
||||
* Bug Fix: the handle in the original/optimized image comparator was a bit shy, but after some personal work it should stick to the cursor hopefully.
|
||||
* Bug Fix: a php notice in the WP Retina 2x compatibility code.
|
||||
* Bug Fix: handle a specific error case when contacting our servers fails.
|
||||
|
||||
= 1.8.3 - 2018/10/24 =
|
||||
* Improvement: compatibility with new version of WP Offload Media plugin.
|
||||
* Improvement: some wording about EXIF Data and the 2MB limit.
|
||||
* Bug Fix: the lock icon now displays correctly.
|
||||
* Bug Fix: a text encoding issue with some server configurations.
|
||||
|
||||
= 1.8.2 - 2018/09/12 =
|
||||
* New: display partnership links (can be removed).
|
||||
* Improvement: display a small spinner when opening a folder in the custom folders selector.
|
||||
* Improvement: visual for the admin toolbar option has been updated and localized for some languages.
|
||||
* Bug Fix: two errors that prevented to create the backup folder (and other things).
|
||||
* Bug Fix: improved uninstall cleanup.
|
||||
|
||||
= 1.8.1.1 - 2018/07/31 =
|
||||
* Bug Fix: an open_basedir error that prevented some users to use the custom folders browser.
|
||||
* Bug Fix: an error that prevented to create the backup folder (and other things) on multisite.
|
||||
|
||||
= 1.8.1 - 2018/07/18 =
|
||||
* Imagify now requires WordPress 4.0 at least! This value may increase in the future, like required php version.
|
||||
* Bug Fix: improved support of sites having the "wp-content" folder outside WordPress folder.
|
||||
* Bug Fix: improved the plan recommendation tool: better choices, and pre-select only what is needed.
|
||||
* Bug fix: fixed a wrong color on a quota bar.
|
||||
* Lots of various small fixes and code improvements.
|
||||
|
||||
= 1.8.0.1 - 2018/06/19 =
|
||||
* Bug Fix: issue on some sites displaying a "no php extension available".
|
||||
|
||||
= 1.8 - 2018/06/19 =
|
||||
* New: you can now optimize pdf files.
|
||||
* Improvement: custom folders, you can now optimize files located in the *uploads* folder.
|
||||
* Improvement: support for thumbnails dynamically generated by NextGen Gallery plugin.
|
||||
* Bug Fix: revamped support for WP Retina 2x plugin.
|
||||
|
||||
= 1.7.1.3 - 2018/04/12 =
|
||||
* Bug Fix: a fatal error with outdated versions of php.
|
||||
|
||||
= 1.7.1.2 - 2018/04/12 =
|
||||
* Improvement: reset OPcache after Imagify being updated.
|
||||
* Bug Fix: a fatal error upon Imagify update.
|
||||
* Bug Fix: a case where the bulk optimizer wrongly says that all images are already optimized.
|
||||
|
||||
= 1.7.1 - 2018/04/10 =
|
||||
* New: compatibility with Regenerate Thumbnails (v3) plugin.
|
||||
* Improvement: better performance of the bulk optimization on sites with huge media library. This is done by not updating the statistics display periodically, but only when the job is done.
|
||||
* Improvement: SiteGround cache testing is not blocked anymore.
|
||||
* Improvement: proxies are now handled.
|
||||
* Improvement: test for ImageMagick or GD availability.
|
||||
* Dev stuff: improved the way we use the filesystem. This should solve few edge cases.
|
||||
|
||||
= 1.7 - 2018/03/13 =
|
||||
* New: you can now optimize the images from your themes and plugins, or from any other folder in your site!
|
||||
* Improvement: compatibility with old and new versions of WP Offload S3 plugins.
|
||||
* Improvement: don't start the bulk optimization process if cURL is not available.
|
||||
* Bug Fix: image dimensions not being stored sometimes after it is resized.
|
||||
* Bug Fix: the comparison tool could display multiple handles.
|
||||
* Bug Fix: issue with php 7.2.
|
||||
* Dev stuff: lots of internal changes, many things have been rewritten.
|
||||
* Dev stuff: the default options can now be filtered.
|
||||
|
||||
= 1.6.14.2 - 2018/01/15 =
|
||||
* Improvement: force browsers not to use the old version of our script for the charts.
|
||||
|
||||
= 1.6.14.1 - 2018/01/11 =
|
||||
* Bug Fix: no more conflicts between our script used for the charts and theme builders, or plugins that use an outdated version of this script.
|
||||
|
||||
= 1.6.14 - 2018/01/10 =
|
||||
* New: added compatibility with partners' plugins.
|
||||
* Improvement: updated the script used for the charts, it will lower the risk of conflicts with other plugins (that are also up-to-date).
|
||||
* Improvement: the comparison tool button is now also inserted when clicking the next/previous buttons in the media modal.
|
||||
* Bug Fix: the comparison tool button should not be inserted several times anymore.
|
||||
* Bug Fix: the images wouldn't appear in the comparison tool sometimes.
|
||||
|
||||
= 1.6.13.1 - 2017/11/08 =
|
||||
* Bug Fix: fixed a php error with php 5.2.
|
||||
|
||||
= 1.6.13 - 2017/11/07 =
|
||||
* New: added links to the documentation in Imagify' settings and bulk optimization pages.
|
||||
* Improvement: better compatibility with NextGen Gallery plugin. Imagify no longer resizes NextGen images nor removes exif, to let NextGen Gallery do its job peacefully.
|
||||
* Improvement: better compatibility with WP Real Media Library plugin, our modal wasn't working correctly.
|
||||
* Improvement: better compatibility with plugins that use cookies, like Duo Two-Factor Authentication and Shield Security, to prevent being disconnected.
|
||||
* Improvement: better compatibility with SiteGround. A "security" measure was preventing Imagify to work correctly.
|
||||
* Improvement: better compatibility with hosts that limit some SQL queries, it prevented our bulk optimization to work.
|
||||
* Improvement: better compatibility with Heartbeat Control plugin, it prevented our bulk optimization to work.
|
||||
* Improvement: better compatibility with Formidable Forms Pro plugin, the bulk optimizer was never satisfied.
|
||||
* Bug Fix: fixed a few bugs when optimizing in NextGen Gallery.
|
||||
|
||||
= 1.6.12 - 2017/10/18 =
|
||||
* New: added links to the documentation in the plugin's admin bar item and the plugin's row (plugins page). There is more to come.
|
||||
* Improvement: image attachments that don't have some mandatory WordPress metadata are not included in Imagify stats anymore.
|
||||
* Fix: the "Optimized size" progress bar in the bulk optimization page now behaves like the "Original size" one does.
|
||||
* Dev stuff: auto-optimization can be disabled on an attachment basis with the new filter `imagify_auto_optimize_attachment`. For example it can be used to disable auto-optimization for a specific file extension.
|
||||
* Dev stuff: classes are now auto-loaded. Some constants have been removed.
|
||||
|
||||
= 1.6.11 - 2017/10/12 =
|
||||
* Improvement: Imagify now works with the iOS app, and with XML-RPC in general.
|
||||
* Improvement: we harmonized and improved how user roles are handled.
|
||||
* Improvement: prevent optimized image to be cached by the browser in the comparison tool.
|
||||
* Fix: sometimes the comparison tool's button wouldn't show on the attachment edition page.
|
||||
* Fix: the bulk optimization button works again.
|
||||
|
||||
= 1.6.10 - 2017/10/05 =
|
||||
* New: if new thumbnail sizes appear after activating a new theme or plugin, you can now optimize only these missing sizes instead of restoring and re-optimizing all images.
|
||||
* Improvement: CSS and JS files have been split and are loaded only when needed.
|
||||
* Improvement: in each NextGen Galleries you now have "Optimize" and "Restore" bulk actions.
|
||||
* Improvement: better banner placements with languages with long sentences (looking at you, Germany).
|
||||
* Improvement: messages like the "WELL DONE" one can now be translated.
|
||||
* Bug Fix: the account infos in the admin bar now works properly on front-end.
|
||||
* Bug Fix: some thumbnail sizes with curious name were not listed in the settings page.
|
||||
* Bug Fix: improved library size calculation for "What plan do I need?". Some thumbnail sizes were missing, lowering the result.
|
||||
* Regression fix: the issue with Imagify's popup on WP Rocket options screen is now also solved when WP Rocket is white-labelled.
|
||||
* Lots of various small fixes and code improvements.
|
||||
|
||||
= 1.6.9.1 - 2017/08/12 =
|
||||
* Regression fix: don't load Imagify's popup files on WP Rocket options screen to avoid conflicts.
|
||||
|
||||
= 1.6.9 - 2017/08/11 =
|
||||
* Improvement: the bulk optimization now stops as soon as the quota is fully consumed, instead of trying to optimize more images and getting error messages one after the other.
|
||||
* Improvement: updated (almost) all JavaScript libraries we use. SweetAlert won't conflict with new versions anymore. Few code improvements.
|
||||
* Improvement: in the medias list, improved the Imagify column behavior on small screens.
|
||||
* Improvement: when optimizing in NextGen Gallery, update some NGG data.
|
||||
* Bug Fix: revamped the whole Enable Media Replace plugin compatibility. Optimization, restoration, and backup should work properly now.
|
||||
* Bug Fix: revamped the way to restore images in NextGen Gallery to prevent deletion of alt text, description, and tags.
|
||||
* Regression fix: fixed optimization and restoration not working in NextGen Gallery.
|
||||
* Regression fix: fixed the bulk optimization not working with PHP 5.2.
|
||||
|
||||
= 1.6.8 - 2017/07/26 =
|
||||
* Improvement: don't display the restore bulk action in the medias list if there is nothing to restore.
|
||||
* Improvement: you can know select and unselect all image sizes at once in the settings page.
|
||||
* Improvement: detect when the backup directory is not writable. A warning is displayed dynamically under the backup setting, a notice is also displayed on some pages.
|
||||
* Improvement: some strings were still not translated in the bulk optimization page.
|
||||
* Bug Fix: the "Save & Go to Bulk Optimizer" button now redirects you even if no settings have been changed.
|
||||
* Lots of various small fixes and code improvements.
|
||||
|
||||
= 1.6.7.1 - 2017/07/13 =
|
||||
* Bug Fix: Fixed the "Unknown error" during a bulk optimization.
|
||||
|
||||
= 1.6.7 - 2017/07/12 =
|
||||
* Improvement: Compatibility with the plugin WP Offload S3 Pro, and fixed a few things for both Lite and Pro versions.
|
||||
* Improvement: Improved performance on the bulk optimization page for huge image libraries.
|
||||
* Improvement: When performing a bulk optimization, moved the attachments with the "WELL DONE" message at the end of the queue, it helps to speed up things.
|
||||
* Improvement: Use cURL directly only to optimize an image. It helps when cURL is not available: less things will break in that case.
|
||||
* Bug Fix: Fixed a bug with the plugin Screets Live Chat, prior to version 2.2.8.
|
||||
* Regression fix: Fixed the buffer size on the bulk optimization page.
|
||||
* Dev stuff: Added a hook allowing to filter arguments when doing a request to our API. It can be used to increase the timeout value for example.
|
||||
|
||||
= 1.6.6 - 2017/06/27 =
|
||||
* New: Compatibility with the plugin WP Offload S3 Lite. Your images now will be sent to Amazon S3 after being optimized. Also works when you store your images only on S3, not locally.
|
||||
* Improvement: Added a filter to the asynchronous job arguments.
|
||||
* Bug fix: Compatibility with Internet Explorer 9 to 11.
|
||||
* Regression fix: The comparison tool stopped working in the medias list since the previous version.
|
||||
|
||||
= 1.6.5 - 2017/06/22 =
|
||||
* Improvement: Code quality of the whole plugin has been improved to fit more WordPress coding standards.
|
||||
* Improvement: Lots of internationalization improvements. Now the plugin's internationalization fully rely on the repository system.
|
||||
* Bug Fix: Fixed an error with php 7.1: `Uncaught Error: [] operator not supported for strings in /wp-content/plugins/imagify/inc/functions/admin.php:134`.
|
||||
|
||||
= 1.6.4 - 2017/04/06 =
|
||||
* Improvement: Provide a link to optimize in higher level when an image is already optimized.
|
||||
* Improvement: Add a dedicated message for 413 HTTP error when the image is too big to be uploaded on our servers.
|
||||
|
||||
= 1.6.3 - 2016/12/16 =
|
||||
* Improvement: The discount is now automatically applied in when you buy from the plugin and a promotion is active
|
||||
|
||||
= 1.6.2 - 2016/11/22 =
|
||||
* Bug Fix: Correctly display the modal when clicking on the plan suggestion button on bulk optimization page
|
||||
|
||||
= 1.6.1 - 2016/11/22 =
|
||||
* Bug Fix: Better offer suggestion when your medias library is bigger than 3GB
|
||||
|
||||
= 1.6 - 2016/11/21 =
|
||||
* New: Knowing how many MB/GB you need to optimize your existing and future images is complicated. We love to make things easier, so Imagify will do it and advise you the best plan.
|
||||
* New: You can now buy all the plans without leaving your WordPress administration
|
||||
* Improvement: Some styles fixed in the interface
|
||||
|
||||
= 1.5.10 - 2016/10/05 =
|
||||
* Improvement: Set to 1 the Bulk buffer size when there are more than 10 thumbnails to avoid "Unknown error" on the Bulk Optimization
|
||||
|
||||
= 1.5.9 - 2016/09/27 =
|
||||
* Bug Fix: Don't delete the thumbnail when the maximum file size is set to one of the thumbnail size
|
||||
* Bug Fix: Don't strip the image meta data if possible (only with Imagick)
|
||||
* Bug Fix: Fix persistent "WELL DONE" message because of "original_size" meta value was 0
|
||||
|
||||
= 1.5.8 - 2016/08/24 =
|
||||
* Regression fix: Check if the backup option is active before doing a backup when an image is resized
|
||||
|
||||
= 1.5.7 - 2016/08/23 =
|
||||
* Improvement: Resize images bigger than the maximum width defined in the settings using WP Image Editor instead of Imagify API
|
||||
|
||||
= 1.5.6 - 2016/07/29 =
|
||||
* Improvement: Dynamically update from the API the maximum image size allowed in bulk optimization
|
||||
* Improvement: Updated SweetAlert to SweetAlert2
|
||||
|
||||
= 1.5.5 =
|
||||
* Bug Fix: Fix issue with "original_size" at 0 in "_imagify_data" to be able to re-optimize an image with a "Forbidden" error.
|
||||
|
||||
= 1.5.4 =
|
||||
* Improvement: Increase to 4 the number of parallel queries during a bulk optimization
|
||||
* Improvement: Don't display Intercom chat if the user turned off the option in the web app
|
||||
|
||||
= 1.5.3 =
|
||||
* Regression Fix: Display the Original File size in "View Details" section
|
||||
|
||||
= 1.5.2.1 =
|
||||
* Bug Fix: Fix JS error: Uncaught ReferenceError: imagify is not defined in /assets/options.min.js
|
||||
* Bug Fix: Don't show "Optimize" button during optimizing process in "Edit Media" screen
|
||||
|
||||
= 1.5.1 =
|
||||
* Bug Fix: Thumbnail sizes in settings page aren't reset anymore on plugin update
|
||||
* Bug Fix: Fix PHP Warning: Cannot unset offset in a non-array variable in /inc/functions/admin-stats.php on line 23
|
||||
* Bug Fix: Fix PHP Warning: Invalid argument supplied for foreach() in /inc/functions/admin-stats.php on line 233
|
||||
|
||||
= 1.5 =
|
||||
* New: NextGen Gallery compatibility - Optimize all your images uploaded with NextGen Gallery
|
||||
* New: Asynchronous Optimization - No more latency when you upload new images, Imagify will optimize them in background!
|
||||
* Improvement: Bulk Optimization: Interface improvements for a better experience
|
||||
|
||||
= 1.4.7 =
|
||||
* Bug Fix: Fix issue between Bulk Optimization & WP Engine. The query to get unoptimized images is limited to 2500 images to be able to use the Bulk Optimization on this hosting.
|
||||
* Bug Fix: Fix SSL certificate problem: unable to get local issuer certificate
|
||||
|
||||
= 1.4.6 =
|
||||
* Bug Fix: Fix the "All your images have been optimized by Imagify" issue when images still need to be optimized. This issue occurred only since 1.4.5 for some users. Sorry for the inconvenience!
|
||||
|
||||
= 1.4.5 =
|
||||
* Improvement: Bulk Optimization: optimize all SQL queries and improve by 65% the process time \o/
|
||||
* Improvement: Chart.js library updated
|
||||
* Improvement: Media List JS notice removed
|
||||
|
||||
= 1.4.4 =
|
||||
* Improvement: Visual fix: CSS prefixed in notices to avoid class conflicts
|
||||
* Improvement: Visual fix: improve Imagify Notices CSS to avoid issue with WP Engine CSS
|
||||
* Improvement: Medias: new "Compare Original VS Optimized" action link in grid view mode
|
||||
* Improvement: Settings: new sample images for visual comparison of compression levels (removes unused sample images)
|
||||
|
||||
= 1.4.3 =
|
||||
* New: Medias: new "Compare Original VS Optimized" action link in list view
|
||||
* Improvement: Visual fix: CSS prefixed in notices to avoid class conflicts
|
||||
* Improvement: Medias: comparison are now available for image from 36Opx wide
|
||||
* Improvement: Settings: new sample images for visual comparison of compression levels
|
||||
|
||||
= 1.4.2 =
|
||||
* New: Add German translation
|
||||
* New: You can define the `IMAGIFY_HIDDEN_ACCOUNT` constant in wp-config.php to hide all your Imagify account infos in the Admin Bar and Bulk Optimization
|
||||
* Bug Fix: Fix PHP Notice: Undefined index original_size in /inc/functions/admin-stats.php on line 185
|
||||
* Bug Fix: Fix PHP Notice: Undefined index optimized_size in /inc/functions/admin-stats.php on line 186
|
||||
|
||||
= 1.4.1 =
|
||||
* Improvement: Medias: better comparison for big portrait images
|
||||
* Improvement: Medias: Don't display the "Compare Original VS Optimized" button for images without backup
|
||||
* Bug Fix: WPML: Fix AJAX error caused by WPML to avoid issue during the API key validation process
|
||||
* Bug Fix: Yoast: Remove JS error caused by Yoast SEO on the attachment edit screen to avoid issue with our "Compare Original VS Optimized"
|
||||
|
||||
= 1.4 =
|
||||
* New: Medias: Click a button to open images comparison between Original and Optimized (available for big enough images)
|
||||
* Improvement: Add async method to optimize resized images
|
||||
|
||||
= 1.3.6 =
|
||||
* Improvement: Optimize attachments resized with the WordPress editor tool
|
||||
* Improvement: Compatibility with the "Replace the file, use new file name and update all links" option from "Enable Media Replace" plugin
|
||||
* Improvement: Add a notice message during the Bulk Optimization if the quota is consumed
|
||||
* Improvement: Better styles for compression details next to your images
|
||||
* Bug Fix: No freeze anymore during the Bulk Optimization if an unknown error occurred with an image
|
||||
* Bug Fix: Add a notice message if we can't get all unoptimized images during the Bulk Optimization process
|
||||
* Bug Fix: Fix PHP Warning: set_time_limit(): Cannot set time limit in safe mode in ../inc/admin/ajax.php on line 137
|
||||
* Bug Fix: Details about compressed images in modal media box are now closed by default
|
||||
* Regression Fix: Get all attachments with the message "You've consumed all your data" during the Bulk Optimization process to be able to optimize them
|
||||
|
||||
= 1.3.5.2 =
|
||||
* Regression Fix: Check mark displayed better on certain settings pages
|
||||
|
||||
= 1.3.5 =
|
||||
* Bug Fix: Check box display issue fixed on Imagify settings page: SVG Icons cleaning
|
||||
|
||||
= 1.3.4 =
|
||||
* New: Add Italian translation
|
||||
|
||||
= 1.3.3 =
|
||||
* Bug Fix: Fixed behavior in multisite networks where Imagify options would not get saved when the plugin wasn't network-activated, but only activated for specific sites within the network.
|
||||
|
||||
= 1.3.2 =
|
||||
* New: Add Spanish translation
|
||||
* Bug Fix: Avoid lack of performance in the WordPress administration if the Imagify's servers are down.
|
||||
|
||||
= 1.3.1 =
|
||||
* Bug Fix: Remove a notice message which causes a lack of performance in the administration. (thanks Kevin Gauthier to warn us)
|
||||
|
||||
= 1.3 =
|
||||
* New: Add GIF support
|
||||
* New: You can now decide to keep EXIF data on your images
|
||||
|
||||
= 1.2.4 =
|
||||
* Bug Fix: Don't duplicate Imagify data in the attachment edit screen (wp-admin/post.php)
|
||||
|
||||
= 1.2.3 =
|
||||
* Improvement: Use AJAX to display the quota in the admin bar to avoid a call to our API on each pages.
|
||||
|
||||
= 1.2.2 =
|
||||
* Bug Fix: Bulk Optimization: Fix issue when the backup option isn't activated. The compression level applied was "Normal" instead the one saved in the settings.
|
||||
* Bug Fix: Bulk Optimization: Don't try to re-optimize an image already optimized which has the same compression level than the one saved in the settings.
|
||||
|
||||
= 1.2.1 =
|
||||
* Regression fix: Fix the Bulk Optimization issue when you never optimized any images and avoid the message "All your images have been optimized by Imagify. Congratulations!".
|
||||
|
||||
= 1.2 =
|
||||
* New: compression level: Ultra
|
||||
* New: You can now choose to display Admin Bar Imagify's menu, or not.
|
||||
* New: See the differences between Ultra, Aggressive and Normal option inside Imagify Options page.
|
||||
* Bug Fix: Admin Bar: Styles are now included in front-end too.
|
||||
* Bug Fix: Admin Bar: Better styles in certain cases.
|
||||
* Bug Fix: Deactivate a conflict plugin doesn't return a blank page anymore!
|
||||
* Bug Fix: Display the right original image size after a resize (meta data)
|
||||
* Regression Fix: Bulk Optimization: update in live the unconsumed credit during a bulk optimization.
|
||||
|
||||
= 1.1.6 =
|
||||
* Improvement: Quick access to your profile informations (quota) in Admin Bar > Imagify
|
||||
* Improvement: More precise information about global size saved using Imagify (bulk optimization page)
|
||||
* Improvement: When your bulk optimization is over, success message isn't inside the table anymore
|
||||
* Improvement: To quit the bulk optimization processing you have to confirm your action
|
||||
* Bug Fix: JS: `console` undefined on some IE browsers
|
||||
* Bug Fix: PHP Warning: `Illegal string offset 'sizes' in ../inc/functions/admin-stats.php on line 180`
|
||||
* Bug Fix: Don't count GIF & SVG in the Imagify statistics
|
||||
|
||||
= 1.1.5 =
|
||||
* Improvement: Display a default preview to avoid issues with 404 images and a security restriction on SSL websites on the Bulk Optimization page
|
||||
* Improvement: Don't count all exceeded images to avoid lack of speed on the Bulk Optimization page
|
||||
* Bug Fix: Don't try to re-optimize images with an empty error message or with an already optimized message on the Bulk Optimization
|
||||
* Bug Fix: Don't generate special chars in the password to avoid issue on the Imagify app log in
|
||||
|
||||
= 1.1.4 =
|
||||
* Improvement: Don't add the WP Rocket ads if this plugin is activated
|
||||
* Bug Fix: Ignore thumbnails with infinite width like 9999 to avoid an issue with the "Resize larger images" option
|
||||
|
||||
= 1.1.3 =
|
||||
* Bug Fix: Fix PHP Warning: `curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in ../inc/api/imagify.php on line 218`
|
||||
|
||||
= 1.1.2 =
|
||||
* Regression fix: Fix the "%undefined%" and the overview chart issues on the Bulk Optimization page
|
||||
* Regression fix: Fix PHP Warning: Illegal string offset 'sizes' in ../inc/classes/class-attachment.php on line 347
|
||||
* Regression fix: Fix PHP Notice: Uninitialized string offset: 0 in ../inc/classes/class-attachment.php on line 347
|
||||
* Regression fix: Fix PHP Warning: Illegal string offset 'file' in ../inc/classes/class-attachment.php on line 410
|
||||
|
||||
= 1.1.1 =
|
||||
* New: Add a notice on the Bulk Optimization & Imagify Settings page when the monthly free quota is consumed
|
||||
* Bug Fix: Fix issue on Chrome & Opera on the Bulk Optimization: images are optimized from the newest to the oldest.
|
||||
|
||||
= 1.1 =
|
||||
* New: Add new option "Resize larger Images"
|
||||
* Improvement: Bulk optimization: results table is not shrinkable to the infinite anymore (scrollable)
|
||||
* Improvement: Better visual in options page
|
||||
* Bug Fix: Check if an attachment exists to avoid an issue which is stopped the Bulk Optimization
|
||||
* Bug Fix: Really Fix PHP Notice: Undefined offset: 1 in imagify/inc/functions/formatting.php on line 17
|
||||
* Bug Fix: Double animation in Progress Bar
|
||||
|
||||
= 1.0.3 =
|
||||
* Bug Fix: Fix PHP Notice: Undefined offset: 1 in ../inc/functions/formatting.php on line 16
|
||||
|
||||
= 1.0.2 =
|
||||
* Improvement: Add error descriptions on the Bulk Optimization results
|
||||
* Improvement: Add a notice to switch to the list view in the media library page
|
||||
|
||||
= 1.0.1 =
|
||||
* New: Add Intercom Live Chat on Imagify Settings and Bulk Optimization pages
|
||||
* Improvement: Better user informations
|
||||
* Bug Fix: PHP 5.2+ compatibility
|
||||
|
||||
= 1.0 =
|
||||
* Initial release.
|
||||
[Full changelog](https://github.com/wp-media/imagify-plugin/blob/develop/README.md)
|
||||
|
||||
@@ -27,6 +27,8 @@ delete_transient( 'imagify_large_library' );
|
||||
delete_transient( 'imagify_max_image_size' );
|
||||
delete_transient( 'imagify_user' );
|
||||
delete_transient( 'imagify_stat_without_next_gen' );
|
||||
delete_transient( 'imagify_attachments_number_modal' );
|
||||
delete_transient( 'imagify_user_cache' );
|
||||
|
||||
// Delete transients.
|
||||
$transients = implode( '" OR option_name LIKE "', array(
|
||||
|
||||
@@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit0382efa3332217fe0a96bbbe57e91464::getLoader();
|
||||
return ComposerAutoloaderInit4fff6e59f3e5ad878e4b5bf99ef89f0a::getLoader();
|
||||
|
||||
@@ -6,6 +6,7 @@ $vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'WPMedia\\PluginFamily\\' => array($vendorDir . '/wp-media/plugin-family/src'),
|
||||
'Imagify\\ThirdParty\\WPRocket\\' => array($baseDir . '/inc/3rd-party/wp-rocket/classes'),
|
||||
'Imagify\\ThirdParty\\RegenerateThumbnails\\' => array($baseDir . '/inc/3rd-party/regenerate-thumbnails/classes'),
|
||||
'Imagify\\ThirdParty\\NGG\\' => array($baseDir . '/inc/3rd-party/nextgen-gallery/classes'),
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit0382efa3332217fe0a96bbbe57e91464
|
||||
class ComposerAutoloaderInit4fff6e59f3e5ad878e4b5bf99ef89f0a
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
@@ -24,12 +24,12 @@ class ComposerAutoloaderInit0382efa3332217fe0a96bbbe57e91464
|
||||
|
||||
require __DIR__ . '/platform_check.php';
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit0382efa3332217fe0a96bbbe57e91464', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInit4fff6e59f3e5ad878e4b5bf99ef89f0a', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader(\dirname(__DIR__));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit0382efa3332217fe0a96bbbe57e91464', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit4fff6e59f3e5ad878e4b5bf99ef89f0a', 'loadClassLoader'));
|
||||
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit0382efa3332217fe0a96bbbe57e91464::getInitializer($loader));
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit4fff6e59f3e5ad878e4b5bf99ef89f0a::getInitializer($loader));
|
||||
|
||||
$loader->register(true);
|
||||
|
||||
|
||||
@@ -7,9 +7,13 @@ namespace Composer\Autoload;
|
||||
use Composer\AutoloadWPMediaImagifyWordPressPlugin\ClassLoader as ClassLoaderWPMediaImagifyWordPressPlugin;
|
||||
|
||||
|
||||
class ComposerStaticInit0382efa3332217fe0a96bbbe57e91464
|
||||
class ComposerStaticInit4fff6e59f3e5ad878e4b5bf99ef89f0a
|
||||
{
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
'W' =>
|
||||
array (
|
||||
'WPMedia\\PluginFamily\\' => 21,
|
||||
),
|
||||
'I' =>
|
||||
array (
|
||||
'Imagify\\ThirdParty\\WPRocket\\' => 28,
|
||||
@@ -32,6 +36,10 @@ class ComposerStaticInit0382efa3332217fe0a96bbbe57e91464
|
||||
);
|
||||
|
||||
public static $prefixDirsPsr4 = array (
|
||||
'WPMedia\\PluginFamily\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/wp-media/plugin-family/src',
|
||||
),
|
||||
'Imagify\\ThirdParty\\WPRocket\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/../..' . '/inc/3rd-party/wp-rocket/classes',
|
||||
@@ -127,9 +135,9 @@ class ComposerStaticInit0382efa3332217fe0a96bbbe57e91464
|
||||
public static function getInitializer(ClassLoaderWPMediaImagifyWordPressPlugin $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit0382efa3332217fe0a96bbbe57e91464::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit0382efa3332217fe0a96bbbe57e91464::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit0382efa3332217fe0a96bbbe57e91464::$classMap;
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit4fff6e59f3e5ad878e4b5bf99ef89f0a::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit4fff6e59f3e5ad878e4b5bf99ef89f0a::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit4fff6e59f3e5ad878e4b5bf99ef89f0a::$classMap;
|
||||
|
||||
}, null, ClassLoaderWPMediaImagifyWordPressPlugin::class);
|
||||
}
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
"packages": [
|
||||
{
|
||||
"name": "composer/installers",
|
||||
"version": "v2.2.0",
|
||||
"version_normalized": "2.2.0.0",
|
||||
"version": "v2.3.0",
|
||||
"version_normalized": "2.3.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/installers.git",
|
||||
"reference": "c29dc4b93137acb82734f672c37e029dfbd95b35"
|
||||
"reference": "12fb2dfe5e16183de69e784a7b84046c43d97e8e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/installers/zipball/c29dc4b93137acb82734f672c37e029dfbd95b35",
|
||||
"reference": "c29dc4b93137acb82734f672c37e029dfbd95b35",
|
||||
"url": "https://api.github.com/repos/composer/installers/zipball/12fb2dfe5e16183de69e784a7b84046c43d97e8e",
|
||||
"reference": "12fb2dfe5e16183de69e784a7b84046c43d97e8e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -20,14 +20,14 @@
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer": "1.6.* || ^2.0",
|
||||
"composer/semver": "^1 || ^3",
|
||||
"phpstan/phpstan": "^0.12.55",
|
||||
"phpstan/phpstan-phpunit": "^0.12.16",
|
||||
"symfony/phpunit-bridge": "^5.3",
|
||||
"symfony/process": "^5"
|
||||
"composer/composer": "^1.10.27 || ^2.7",
|
||||
"composer/semver": "^1.7.2 || ^3.4.0",
|
||||
"phpstan/phpstan": "^1.11",
|
||||
"phpstan/phpstan-phpunit": "^1",
|
||||
"symfony/phpunit-bridge": "^7.1.1",
|
||||
"symfony/process": "^5 || ^6 || ^7"
|
||||
},
|
||||
"time": "2022-08-20T06:45:11+00:00",
|
||||
"time": "2024-06-24T20:46:46+00:00",
|
||||
"type": "composer-plugin",
|
||||
"extra": {
|
||||
"class": "Composer\\Installers\\Plugin",
|
||||
@@ -84,6 +84,7 @@
|
||||
"cockpit",
|
||||
"codeigniter",
|
||||
"concrete5",
|
||||
"concreteCMS",
|
||||
"croogo",
|
||||
"dokuwiki",
|
||||
"drupal",
|
||||
@@ -130,7 +131,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/composer/installers/issues",
|
||||
"source": "https://github.com/composer/installers/tree/v2.2.0"
|
||||
"source": "https://github.com/composer/installers/tree/v2.3.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -186,6 +187,55 @@
|
||||
"source": "https://github.com/dangoodman/composer-for-wordpress/tree/2.0.2"
|
||||
},
|
||||
"install-path": "../dangoodman/composer-for-wordpress"
|
||||
},
|
||||
{
|
||||
"name": "wp-media/plugin-family",
|
||||
"version": "v1.0.2",
|
||||
"version_normalized": "1.0.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/wp-media/plugin-family.git",
|
||||
"reference": "1b827eed34842de10fa3c94fec3a0f32b14be8bd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/wp-media/plugin-family/zipball/1b827eed34842de10fa3c94fec3a0f32b14be8bd",
|
||||
"reference": "1b827eed34842de10fa3c94fec3a0f32b14be8bd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||
"phpcompatibility/phpcompatibility-wp": "^2.0",
|
||||
"phpstan/extension-installer": "^1.4",
|
||||
"szepeviktor/phpstan-wordpress": "^1.3",
|
||||
"wp-coding-standards/wpcs": "^3",
|
||||
"wp-media/phpunit": "^3"
|
||||
},
|
||||
"time": "2024-10-25T16:27:40+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"WPMedia\\PluginFamily\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"GPL-3.0-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "WP Media",
|
||||
"email": "contact@wp-media.me",
|
||||
"homepage": "https://wp-media.me"
|
||||
}
|
||||
],
|
||||
"description": "Organizes and displays WP Media plugin family across other members.",
|
||||
"support": {
|
||||
"issues": "https://github.com/wp-media/plugin-family/issues",
|
||||
"source": "https://github.com/wp-media/plugin-family/tree/v1.0.2"
|
||||
},
|
||||
"install-path": "../wp-media/plugin-family"
|
||||
}
|
||||
],
|
||||
"dev": false,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php return array(
|
||||
'root' => array(
|
||||
'name' => 'wp-media/imagify-plugin',
|
||||
'pretty_version' => 'v2.2.2',
|
||||
'version' => '2.2.2.0',
|
||||
'reference' => '33e23dd026fd905ae6ae703be9456c84ae9ca591',
|
||||
'pretty_version' => 'v2.2.3.2',
|
||||
'version' => '2.2.3.2',
|
||||
'reference' => '459768940c0ea4e9c483b42257f790dc51b3bde9',
|
||||
'type' => 'wordpress-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@@ -11,9 +11,9 @@
|
||||
),
|
||||
'versions' => array(
|
||||
'composer/installers' => array(
|
||||
'pretty_version' => 'v2.2.0',
|
||||
'version' => '2.2.0.0',
|
||||
'reference' => 'c29dc4b93137acb82734f672c37e029dfbd95b35',
|
||||
'pretty_version' => 'v2.3.0',
|
||||
'version' => '2.3.0.0',
|
||||
'reference' => '12fb2dfe5e16183de69e784a7b84046c43d97e8e',
|
||||
'type' => 'composer-plugin',
|
||||
'install_path' => __DIR__ . '/./installers',
|
||||
'aliases' => array(),
|
||||
@@ -29,13 +29,22 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'wp-media/imagify-plugin' => array(
|
||||
'pretty_version' => 'v2.2.2',
|
||||
'version' => '2.2.2.0',
|
||||
'reference' => '33e23dd026fd905ae6ae703be9456c84ae9ca591',
|
||||
'pretty_version' => 'v2.2.3.2',
|
||||
'version' => '2.2.3.2',
|
||||
'reference' => '459768940c0ea4e9c483b42257f790dc51b3bde9',
|
||||
'type' => 'wordpress-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'wp-media/plugin-family' => array(
|
||||
'pretty_version' => 'v1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'reference' => '1b827eed34842de10fa3c94fec3a0f32b14be8bd',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../wp-media/plugin-family',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -8,6 +8,9 @@ env:
|
||||
COMPOSER_FLAGS: "--ansi --no-interaction --no-progress --prefer-dist"
|
||||
SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT: "1"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
name: "CI"
|
||||
|
||||
@@ -4,6 +4,9 @@ on:
|
||||
- push
|
||||
- pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
name: "Lint"
|
||||
|
||||
@@ -8,6 +8,9 @@ env:
|
||||
COMPOSER_FLAGS: "--ansi --no-interaction --no-progress --prefer-dist"
|
||||
SYMFONY_PHPUNIT_VERSION: ""
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
name: "PHPStan"
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
"Cockpit",
|
||||
"CodeIgniter",
|
||||
"concrete5",
|
||||
"ConcreteCMS",
|
||||
"Croogo",
|
||||
"DokuWiki",
|
||||
"Dolibarr",
|
||||
@@ -102,15 +103,15 @@
|
||||
"composer-plugin-api": "^1.0 || ^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer": "1.6.* || ^2.0",
|
||||
"composer/semver": "^1 || ^3",
|
||||
"symfony/phpunit-bridge": "^5.3",
|
||||
"phpstan/phpstan": "^0.12.55",
|
||||
"symfony/process": "^5",
|
||||
"phpstan/phpstan-phpunit": "^0.12.16"
|
||||
"composer/composer": "^1.10.27 || ^2.7",
|
||||
"composer/semver": "^1.7.2 || ^3.4.0",
|
||||
"symfony/phpunit-bridge": "^7.1.1",
|
||||
"phpstan/phpstan": "^1.11",
|
||||
"symfony/process": "^5 || ^6 || ^7",
|
||||
"phpstan/phpstan-phpunit": "^1"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "vendor/bin/simple-phpunit",
|
||||
"phpstan": "vendor/bin/phpstan analyse"
|
||||
"test": "@php vendor/bin/simple-phpunit",
|
||||
"phpstan": "@php vendor/bin/phpstan analyse"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
parameters:
|
||||
level: 8
|
||||
paths:
|
||||
- src
|
||||
- tests
|
||||
excludes_analyse:
|
||||
- tests/Composer/Installers/Test/PolyfillTestCase.php
|
||||
ignoreErrors:
|
||||
- '~Test::[a-zA-Z0-9]+Provider\(\) return type~'
|
||||
|
||||
includes:
|
||||
- vendor/phpstan/phpstan-phpunit/extension.neon
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Composer\Installers;
|
||||
|
||||
class BotbleInstaller extends BaseInstaller
|
||||
{
|
||||
/** @var array<string, string> */
|
||||
protected $locations = array(
|
||||
'plugin' => 'platform/plugins/{$name}/',
|
||||
'theme' => 'platform/themes/{$name}/',
|
||||
);
|
||||
}
|
||||
@@ -46,7 +46,7 @@ class CakePHPInstaller extends BaseInstaller
|
||||
/**
|
||||
* Check if CakePHP version matches against a version
|
||||
*
|
||||
* @phpstan-param Constraint::STR_OP_* $matcher
|
||||
* @phpstan-param '='|'=='|'<'|'<='|'>'|'>='|'<>'|'!=' $matcher
|
||||
*/
|
||||
protected function matchesCakeVersion(string $matcher, string $version): bool
|
||||
{
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Composer\Installers;
|
||||
|
||||
class ConcreteCMSInstaller extends BaseInstaller
|
||||
{
|
||||
/** @var array<string, string> */
|
||||
protected $locations = array(
|
||||
'core' => 'concrete/',
|
||||
'block' => 'application/blocks/{$name}/',
|
||||
'package' => 'packages/{$name}/',
|
||||
'theme' => 'application/themes/{$name}/',
|
||||
'update' => 'updates/{$name}/',
|
||||
);
|
||||
}
|
||||
@@ -20,5 +20,6 @@ class DrupalInstaller extends BaseInstaller
|
||||
'console' => 'console/{$name}/',
|
||||
'console-language' => 'console/language/{$name}/',
|
||||
'config' => 'config/sync/',
|
||||
'recipe' => 'recipes/{$name}',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace Composer\Installers;
|
||||
|
||||
class ForkCMSInstaller extends BaseInstaller
|
||||
{
|
||||
/** @var array<string, string> */
|
||||
protected $locations = [
|
||||
'module' => 'src/Modules/{$name}/',
|
||||
'theme' => 'src/Themes/{$name}/'
|
||||
];
|
||||
|
||||
/**
|
||||
* Format package name.
|
||||
*
|
||||
* For package type fork-cms-module, cut off a trailing '-plugin' if present.
|
||||
*
|
||||
* For package type fork-cms-theme, cut off a trailing '-theme' if present.
|
||||
*/
|
||||
public function inflectPackageVars(array $vars): array
|
||||
{
|
||||
if ($vars['type'] === 'fork-cms-module') {
|
||||
return $this->inflectModuleVars($vars);
|
||||
}
|
||||
|
||||
if ($vars['type'] === 'fork-cms-theme') {
|
||||
return $this->inflectThemeVars($vars);
|
||||
}
|
||||
|
||||
return $vars;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string> $vars
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function inflectModuleVars(array $vars): array
|
||||
{
|
||||
$vars['name'] = $this->pregReplace('/^fork-cms-|-module|ForkCMS|ForkCms|Forkcms|forkcms|Module$/', '', $vars['name']);
|
||||
$vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); // replace hyphens with spaces
|
||||
$vars['name'] = str_replace(' ', '', ucwords($vars['name'])); // make module name camelcased
|
||||
|
||||
return $vars;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string> $vars
|
||||
* @return array<string, string>
|
||||
*/
|
||||
protected function inflectThemeVars(array $vars): array
|
||||
{
|
||||
$vars['name'] = $this->pregReplace('/^fork-cms-|-theme|ForkCMS|ForkCms|Forkcms|forkcms|Theme$/', '', $vars['name']);
|
||||
$vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); // replace hyphens with spaces
|
||||
$vars['name'] = str_replace(' ', '', ucwords($vars['name'])); // make theme name camelcased
|
||||
|
||||
return $vars;
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ class Installer extends LibraryInstaller
|
||||
'agl' => 'AglInstaller',
|
||||
'annotatecms' => 'AnnotateCmsInstaller',
|
||||
'bitrix' => 'BitrixInstaller',
|
||||
'botble' => 'BotbleInstaller',
|
||||
'bonefish' => 'BonefishInstaller',
|
||||
'cakephp' => 'CakePHPInstaller',
|
||||
'chef' => 'ChefInstaller',
|
||||
@@ -34,6 +35,7 @@ class Installer extends LibraryInstaller
|
||||
'cockpit' => 'CockpitInstaller',
|
||||
'codeigniter' => 'CodeIgniterInstaller',
|
||||
'concrete5' => 'Concrete5Installer',
|
||||
'concretecms' => 'ConcreteCMSInstaller',
|
||||
'croogo' => 'CroogoInstaller',
|
||||
'dframe' => 'DframeInstaller',
|
||||
'dokuwiki' => 'DokuWikiInstaller',
|
||||
@@ -45,6 +47,7 @@ class Installer extends LibraryInstaller
|
||||
'ee3' => 'ExpressionEngineInstaller',
|
||||
'ee2' => 'ExpressionEngineInstaller',
|
||||
'ezplatform' => 'EzPlatformInstaller',
|
||||
'fork' => 'ForkCMSInstaller',
|
||||
'fuel' => 'FuelInstaller',
|
||||
'fuelphp' => 'FuelphpInstaller',
|
||||
'grav' => 'GravInstaller',
|
||||
@@ -145,6 +148,9 @@ class Installer extends LibraryInstaller
|
||||
}
|
||||
|
||||
$class = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType];
|
||||
/**
|
||||
* @var BaseInstaller
|
||||
*/
|
||||
$installer = new $class($package, $this->composer, $this->getIO());
|
||||
|
||||
$path = $installer->getInstallPath($package, $frameworkType);
|
||||
@@ -178,6 +184,8 @@ class Installer extends LibraryInstaller
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* @param string $packageType
|
||||
*/
|
||||
public function supports($packageType)
|
||||
{
|
||||
|
||||
@@ -21,6 +21,7 @@ class MoodleInstaller extends BaseInstaller
|
||||
'cachestore' => 'cache/stores/{$name}/',
|
||||
'cachelock' => 'cache/locks/{$name}/',
|
||||
'calendartype' => 'calendar/type/{$name}/',
|
||||
'communication' => 'communication/provider/{$name}/',
|
||||
'customfield' => 'customfield/field/{$name}/',
|
||||
'fileconverter' => 'files/converter/{$name}/',
|
||||
'format' => 'course/format/{$name}/',
|
||||
@@ -33,20 +34,24 @@ class MoodleInstaller extends BaseInstaller
|
||||
'editor' => 'lib/editor/{$name}/',
|
||||
'enrol' => 'enrol/{$name}/',
|
||||
'filter' => 'filter/{$name}/',
|
||||
'forumreport' => 'mod/forum/report/{$name}/',
|
||||
'gradeexport' => 'grade/export/{$name}/',
|
||||
'gradeimport' => 'grade/import/{$name}/',
|
||||
'gradereport' => 'grade/report/{$name}/',
|
||||
'gradingform' => 'grade/grading/form/{$name}/',
|
||||
'h5plib' => 'h5p/h5plib/{$name}/',
|
||||
'local' => 'local/{$name}/',
|
||||
'logstore' => 'admin/tool/log/store/{$name}/',
|
||||
'ltisource' => 'mod/lti/source/{$name}/',
|
||||
'ltiservice' => 'mod/lti/service/{$name}/',
|
||||
'media' => 'media/player/{$name}/',
|
||||
'message' => 'message/output/{$name}/',
|
||||
'mlbackend' => 'lib/mlbackend/{$name}/',
|
||||
'mnetservice' => 'mnet/service/{$name}/',
|
||||
'paygw' => 'payment/gateway/{$name}/',
|
||||
'plagiarism' => 'plagiarism/{$name}/',
|
||||
'portfolio' => 'portfolio/{$name}/',
|
||||
'qbank' => 'question/bank/{$name}/',
|
||||
'qbehaviour' => 'question/behaviour/{$name}/',
|
||||
'qformat' => 'question/format/{$name}/',
|
||||
'qtype' => 'question/type/{$name}/',
|
||||
@@ -57,6 +62,7 @@ class MoodleInstaller extends BaseInstaller
|
||||
'scormreport' => 'mod/scorm/report/{$name}/',
|
||||
'search' => 'search/engine/{$name}/',
|
||||
'theme' => 'theme/{$name}/',
|
||||
'tiny' => 'lib/editor/tiny/plugins/{$name}/',
|
||||
'tinymce' => 'lib/editor/tinymce/plugins/{$name}/',
|
||||
'profilefield' => 'user/profile/field/{$name}/',
|
||||
'webservice' => 'webservice/{$name}/',
|
||||
|
||||
45
wp/wp-content/plugins/imagify/vendor/wp-media/plugin-family/composer.json
vendored
Normal file
45
wp/wp-content/plugins/imagify/vendor/wp-media/plugin-family/composer.json
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"name": "wp-media/plugin-family",
|
||||
"description": "Organizes and displays WP Media plugin family across other members.",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"authors": [
|
||||
{
|
||||
"name": "WP Media",
|
||||
"email": "contact@wp-media.me",
|
||||
"homepage": "https://wp-media.me"
|
||||
}
|
||||
],
|
||||
"config": {
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": true,
|
||||
"phpstan/extension-installer": true
|
||||
}
|
||||
},
|
||||
"require-dev": {
|
||||
"phpcompatibility/phpcompatibility-wp": "^2.0",
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||
"wp-coding-standards/wpcs": "^3",
|
||||
"wp-media/phpunit": "^3",
|
||||
"phpstan/extension-installer": "^1.4",
|
||||
"szepeviktor/phpstan-wordpress": "^1.3"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"WPMedia\\PluginFamily\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"WPMedia\\PluginFamily\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"install-codestandards": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin::run",
|
||||
"phpcs": "phpcs --basepath=.",
|
||||
"phpcs:fix": "phpcbf",
|
||||
"test-unit": "\"vendor/bin/phpunit\" --testsuite unit --colors=always --configuration tests/Unit/phpunit.xml.dist --coverage-php tests/report/unit.cov",
|
||||
"report-code-coverage": "\"vendor/bin/phpcov\" merge tests/report --clover tests/report/coverage.clover",
|
||||
"phpstan": "vendor/bin/phpstan analyze --memory-limit=2G --no-progress"
|
||||
}
|
||||
}
|
||||
254
wp/wp-content/plugins/imagify/vendor/wp-media/plugin-family/src/Controller/PluginFamily.php
vendored
Normal file
254
wp/wp-content/plugins/imagify/vendor/wp-media/plugin-family/src/Controller/PluginFamily.php
vendored
Normal file
@@ -0,0 +1,254 @@
|
||||
<?php
|
||||
|
||||
namespace WPMedia\PluginFamily\Controller;
|
||||
|
||||
/**
|
||||
* Handles installation and Activation of plugin family members.
|
||||
*/
|
||||
class PluginFamily implements PluginFamilyInterface {
|
||||
|
||||
/**
|
||||
* Error transient.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $error_transient = 'plugin_family_error';
|
||||
|
||||
/**
|
||||
* Returns an array of events this subscriber listens to
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_subscribed_events(): array {
|
||||
$events = self::get_post_install_event();
|
||||
$events['admin_notices'] = 'display_error_notice';
|
||||
|
||||
return $events;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set post install event.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_post_install_event(): array {
|
||||
$allowed_plugin = [
|
||||
'uk-cookie-consent',
|
||||
'backwpup',
|
||||
'imagify',
|
||||
'seo-by-rank-math',
|
||||
'wp-rocket',
|
||||
];
|
||||
|
||||
if ( ! isset( $_GET['action'], $_GET['_wpnonce'], $_GET['plugin_to_install'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
||||
return [];
|
||||
}
|
||||
|
||||
$plugin = str_replace( 'plugin_family_install_', '', sanitize_text_field( wp_unslash( $_GET['action'] ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
||||
|
||||
if ( ! in_array( $plugin, $allowed_plugin, true ) ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return [
|
||||
'admin_post_plugin_family_install_' . $plugin => 'install_activate',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Process to install and activate plugin.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function install_activate() {
|
||||
if ( ! $this->is_allowed() ) {
|
||||
wp_die(
|
||||
'Plugin Installation is not allowed.',
|
||||
'',
|
||||
[ 'back_link' => true ]
|
||||
);
|
||||
}
|
||||
|
||||
// Install plugin.
|
||||
$this->install();
|
||||
|
||||
// Activate plugin.
|
||||
$result = activate_plugin( $this->get_plugin(), '', is_multisite() );
|
||||
|
||||
if ( is_wp_error( $result ) ) {
|
||||
$this->set_error( $result );
|
||||
}
|
||||
|
||||
wp_safe_redirect( wp_get_referer() );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Install plugin.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function install() {
|
||||
if ( $this->is_installed() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$upgrader_class = ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) || ! file_exists( $upgrader_class ) ) {
|
||||
wp_die(
|
||||
'Plugin Installation failed. class-wp-upgrader.php not found',
|
||||
'',
|
||||
[ 'back_link' => true ]
|
||||
);
|
||||
}
|
||||
|
||||
require_once $upgrader_class; // @phpstan-ignore-line
|
||||
|
||||
$upgrader = new \Plugin_Upgrader( new \Automatic_Upgrader_Skin() );
|
||||
$result = $upgrader->install( $this->get_download_url() );
|
||||
|
||||
if ( is_wp_error( $result ) ) {
|
||||
$this->set_error( $result );
|
||||
}
|
||||
|
||||
clearstatcache();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if plugin is installed.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function is_installed(): bool {
|
||||
return file_exists( WP_PLUGIN_DIR . '/' . $this->get_plugin() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if installation is allowed.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function is_allowed(): bool {
|
||||
if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['_wpnonce'] ) ), 'plugin_family_install_' . $this->get_slug() ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! current_user_can( is_multisite() ? 'manage_network_plugins' : 'install_plugins' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugin slug.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_slug(): string {
|
||||
return dirname( rawurldecode( sanitize_text_field( wp_unslash( $_GET['plugin_to_install'] ) ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugin identifier.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_plugin(): string {
|
||||
return rawurldecode( sanitize_text_field( wp_unslash( $_GET['plugin_to_install'] ) ) ) . '.php'; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
|
||||
}
|
||||
|
||||
/**
|
||||
* Get plugin download url.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_download_url(): string {
|
||||
$plugin_install = ABSPATH . 'wp-admin/includes/plugin-install.php';
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) || ! file_exists( $plugin_install ) ) {
|
||||
wp_die(
|
||||
'Plugin Installation failed. plugin-install.php not found',
|
||||
'',
|
||||
[ 'back_link' => true ]
|
||||
);
|
||||
}
|
||||
|
||||
require_once $plugin_install; // @phpstan-ignore-line
|
||||
|
||||
$data = [
|
||||
'slug' => $this->get_slug(),
|
||||
'fields' => [
|
||||
'download_link' => true,
|
||||
'short_description' => false,
|
||||
'sections' => false,
|
||||
'rating' => false,
|
||||
'ratings' => false,
|
||||
'downloaded' => false,
|
||||
'last_updated' => false,
|
||||
'added' => false,
|
||||
'tags' => false,
|
||||
'homepage' => false,
|
||||
'donate_link' => false,
|
||||
],
|
||||
];
|
||||
|
||||
// Get Plugin Infos.
|
||||
$plugin_info = plugins_api( 'plugin_information', $data );
|
||||
|
||||
if ( is_wp_error( $plugin_info ) ) {
|
||||
$this->set_error( $plugin_info );
|
||||
}
|
||||
|
||||
// Ensure that $plugin_info is an object before accessing the property.
|
||||
if ( ! is_object( $plugin_info ) || ! isset( $plugin_info->download_link ) ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return $plugin_info->download_link;
|
||||
}
|
||||
|
||||
/**
|
||||
* Maybe display error notice.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function display_error_notice() {
|
||||
$errors = get_transient( $this->error_transient );
|
||||
|
||||
if ( ! $errors ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! is_wp_error( $errors ) ) {
|
||||
delete_transient( $this->error_transient );
|
||||
return;
|
||||
}
|
||||
|
||||
$errors = $errors->get_error_messages();
|
||||
|
||||
if ( ! $errors ) {
|
||||
$errors[] = 'Installation process failed';
|
||||
}
|
||||
|
||||
$notice = '<div class="error notice is-dismissible"><p>' . implode( '<br/>', $errors ) . '</p></div>';
|
||||
echo wp_kses_post( $notice );
|
||||
|
||||
// Remove transient after displaying notice.
|
||||
delete_transient( $this->error_transient );
|
||||
}
|
||||
|
||||
/**
|
||||
* Store an error message in a transient then redirect.
|
||||
*
|
||||
* @param object $error A WP_Error object.
|
||||
* @return void
|
||||
*/
|
||||
private function set_error( $error ) {
|
||||
set_transient( $this->error_transient, $error, 30 );
|
||||
|
||||
wp_safe_redirect( wp_get_referer() );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace WPMedia\PluginFamily\Controller;
|
||||
|
||||
interface PluginFamilyInterface {
|
||||
/**
|
||||
* Process to install and activate plugin.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function install_activate();
|
||||
|
||||
/**
|
||||
* Maybe display error notice.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function display_error_notice();
|
||||
}
|
||||
171
wp/wp-content/plugins/imagify/vendor/wp-media/plugin-family/src/Model/PluginFamily.php
vendored
Normal file
171
wp/wp-content/plugins/imagify/vendor/wp-media/plugin-family/src/Model/PluginFamily.php
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
namespace WPMedia\PluginFamily\Model;
|
||||
|
||||
/**
|
||||
* Handles the data to be passed to the frontend.
|
||||
*/
|
||||
class PluginFamily {
|
||||
|
||||
/**
|
||||
* An array of referrers for wp rocket.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $wp_rocket_referrer = [
|
||||
'imagify' => 'imagify',
|
||||
'seo-by-rank-math' => '',
|
||||
'backwpup' => '',
|
||||
'uk-cookie-consent' => '',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get filtered plugins.
|
||||
*
|
||||
* @param string $main_plugin Main plugin installed.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_filtered_plugins( string $main_plugin ): array {
|
||||
$plugins = require_once 'wp_media_plugins.php';
|
||||
|
||||
return $this->filter_plugins_by_activation( $plugins, $main_plugin );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter plugins family data by activation status and returns both categorized and uncategorized format.
|
||||
*
|
||||
* @param array $plugins Array of family plugins.
|
||||
* @param string $main_plugin Main plugin installed.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function filter_plugins_by_activation( array $plugins, string $main_plugin ): array {
|
||||
if ( empty( $plugins ) ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
list( $active_plugins, $inactive_plugins ) = [ [], [] ];
|
||||
|
||||
foreach ( $plugins as $cat => $cat_data ) {
|
||||
foreach ( $cat_data['plugins'] as $plugin => $data ) {
|
||||
|
||||
$plugin_path = $plugin . '.php';
|
||||
$plugin_slug = dirname( $plugin );
|
||||
$main_plugin_slug = dirname( $main_plugin );
|
||||
$wpr_referrer = 'wp-rocket' !== $main_plugin_slug ? $this->wp_rocket_referrer[ $main_plugin_slug ] : '';
|
||||
|
||||
/**
|
||||
* Check for activated plugins and pop them out of the array
|
||||
* to re-add them back using array_merge to be displayed after
|
||||
* plugins that are not installed or not activated.
|
||||
*/
|
||||
if ( is_plugin_active( $plugin_path ) && $main_plugin . '.php' !== $plugin_path ) {
|
||||
// set cta data of active plugins.
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
|
||||
'text' => 'Activated',
|
||||
'url' => '#',
|
||||
];
|
||||
|
||||
// Send active plugin to new array.
|
||||
$active_plugins[ $plugin ] = $plugins[ $cat ]['plugins'][ $plugin ];
|
||||
|
||||
// Remove active plugin from current category.
|
||||
$active_plugin = $plugins[ $cat ]['plugins'][ $plugin ];
|
||||
unset( $plugins[ $cat ]['plugins'][ $plugin ] );
|
||||
|
||||
// Send active plugin to the end of array in current category.
|
||||
$plugins[ $cat ]['plugins'][ $plugin ] = $active_plugin;
|
||||
|
||||
// Remove category with active plugin from current array.
|
||||
$active_cat = $plugins[ $cat ];
|
||||
unset( $plugins[ $cat ] );
|
||||
|
||||
// Send category with active plugins to the end of array.
|
||||
$plugins[ $cat ] = $active_cat;
|
||||
continue;
|
||||
}
|
||||
|
||||
$install_activate_url = admin_url( 'admin-post.php' );
|
||||
|
||||
$args = [
|
||||
'action' => 'plugin_family_install_' . $plugin_slug,
|
||||
'_wpnonce' => wp_create_nonce( 'plugin_family_install_' . $plugin_slug ),
|
||||
'plugin_to_install' => rawurlencode( $plugin ),
|
||||
];
|
||||
|
||||
if ( 'imagify' === $plugin_slug ) {
|
||||
$args = [
|
||||
'action' => 'install_imagify_from_partner_' . $main_plugin_slug,
|
||||
'_wpnonce' => wp_create_nonce( 'install_imagify_from_partner' ),
|
||||
'_wp_http_referer' => rawurlencode( $this->get_current_url() ),
|
||||
];
|
||||
}
|
||||
|
||||
$install_activate_url = add_query_arg( $args, $install_activate_url );
|
||||
|
||||
// Set Installation link.
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
|
||||
'text' => 'Install',
|
||||
'url' => $install_activate_url,
|
||||
];
|
||||
|
||||
// Create unique CTA data for WP Rocket.
|
||||
if ( 'wp-rocket/wp-rocket' === $plugin ) {
|
||||
$url = 'https://wp-rocket.me/?utm_source=' . $wpr_referrer . '-coupon&utm_medium=plugin&utm_campaign=' . $wpr_referrer;
|
||||
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta'] = [
|
||||
'text' => 'Get it Now',
|
||||
'url' => $url,
|
||||
];
|
||||
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['link'] = $url;
|
||||
}
|
||||
|
||||
// Set activation text.
|
||||
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_path ) ) {
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta']['text'] = 'Activate';
|
||||
|
||||
if ( 'wp-rocket/wp-rocket' === $plugin ) {
|
||||
$plugins[ $cat ]['plugins'][ $plugin ]['cta']['url'] = $install_activate_url;
|
||||
}
|
||||
}
|
||||
|
||||
// Send inactive plugins to new array.
|
||||
$inactive_plugins[ $plugin ] = $plugins[ $cat ]['plugins'][ $plugin ];
|
||||
}
|
||||
|
||||
// Remove main plugin from categorized array.
|
||||
if ( isset( $plugins[ $cat ]['plugins'][ $main_plugin ] ) ) {
|
||||
unset( $plugins[ $cat ]['plugins'][ $main_plugin ] );
|
||||
}
|
||||
}
|
||||
|
||||
$uncategorized = array_merge( $inactive_plugins, $active_plugins );
|
||||
// Remove main plugin from uncategorized array.
|
||||
unset( $uncategorized[ $main_plugin ] );
|
||||
|
||||
return [
|
||||
'categorized' => $plugins,
|
||||
'uncategorized' => $uncategorized,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current URL.
|
||||
* Gotten from Imagify_Partner Package.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_current_url(): string {
|
||||
if ( ! isset( $_SERVER['SERVER_PORT'], $_SERVER['HTTP_HOST'] ) ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$port = (int) wp_unslash( $_SERVER['SERVER_PORT'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
|
||||
$port = 80 !== $port && 443 !== $port ? ( ':' . $port ) : '';
|
||||
$url = ! empty( $GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'] ) ? $GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI'] : ( ! empty( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
|
||||
|
||||
return 'http' . ( is_ssl() ? 's' : '' ) . '://' . $_SERVER['HTTP_HOST'] . $port . $url; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.MissingUnslash
|
||||
}
|
||||
}
|
||||
67
wp/wp-content/plugins/imagify/vendor/wp-media/plugin-family/src/Model/wp_media_plugins.php
vendored
Normal file
67
wp/wp-content/plugins/imagify/vendor/wp-media/plugin-family/src/Model/wp_media_plugins.php
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* WP Media plugin family data.
|
||||
*/
|
||||
|
||||
return [
|
||||
'optimize_performance' => [
|
||||
'title' => 'Optimize Performance',
|
||||
'plugins' => [
|
||||
'wp-rocket/wp-rocket' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-wp-rocket.svg',
|
||||
'width' => '50%',
|
||||
],
|
||||
'title' => 'Speed Up Your Website, Instantly',
|
||||
'desc' => 'WP Rocket is the easiest way to make your WordPress website faster and boost your Google PageSpeed score. Get more traffic, better engagement, and higher conversions effortlessly.',
|
||||
'link' => '',
|
||||
],
|
||||
'imagify/imagify' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-imagify.svg',
|
||||
'width' => '50%',
|
||||
],
|
||||
'title' => 'Speed Up Your Website With Lighter Images',
|
||||
'desc' => 'Imagify is the easiest WordPress image optimizer. It automatically compresses images, converts them to WebP and AVIF formats, and lets you resize and optimize with just one click!',
|
||||
'link' => 'https://imagify.io/',
|
||||
],
|
||||
],
|
||||
],
|
||||
'boost_traffic' => [
|
||||
'title' => 'Boost Traffic',
|
||||
'plugins' => [
|
||||
'seo-by-rank-math/rank-math' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-rank-math.svg',
|
||||
'width' => '60%',
|
||||
],
|
||||
'title' => 'The Swiss Army Knife of SEO Tools',
|
||||
'desc' => 'Rank Math SEO is the Best WordPress SEO plugin with the features of many SEO and AI SEO tools in a single package to help multiply your SEO traffic.',
|
||||
'link' => 'https://rankmath.com/wordpress/plugin/seo-suite/',
|
||||
],
|
||||
],
|
||||
],
|
||||
'protect_secure' => [
|
||||
'title' => 'Protect & Secure',
|
||||
'plugins' => [
|
||||
'backwpup/backwpup' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-backwpup.svg',
|
||||
'width' => '60%',
|
||||
],
|
||||
'title' => 'The Easiest Way to Protect Your Website',
|
||||
'desc' => 'BackWPup is the most comprehensive and user-friendly backup & restore plugin for WordPress. Easily schedule automatic backups, securely store and restore with just a few clicks!',
|
||||
'link' => 'https://backwpup.com/',
|
||||
],
|
||||
'uk-cookie-consent/uk-cookie-consent' => [
|
||||
'logo' => [
|
||||
'file' => 'logo-termly.svg',
|
||||
'width' => '50%',
|
||||
],
|
||||
'title' => 'GDPR/CCPA Cookie Consent Banner',
|
||||
'desc' => 'One of the easiest, most comprehensive, and popular cookie consent plugins available. Google Gold Certified Partner to quickly comply with data privacy laws from around the world.',
|
||||
'link' => 'https://termly.io/resources/articles/wordpress-cookies-guide/',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
?>
|
||||
|
||||
<div class="imagify-admin-bar-quota">
|
||||
<div class="imagify-abq-row">
|
||||
<?php if ( $data['plan_with_quota'] ) : ?>
|
||||
@@ -35,7 +34,7 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
<?php endif; ?>
|
||||
<p><?php echo $data['text']; ?></p>
|
||||
<p class="center txt-center text-center"><a class="imagify-upsell-admin-bar-button" href="<?php echo esc_url( $data['upgrade_link'] ); ?>" target="_blank"><?php echo $data['button_text']; ?></a></p>
|
||||
<a href="<?php echo esc_url( get_imagify_admin_url( 'dismiss-notice', 'upsell-admin-bar' ) ); ?>" class="imagify-notice-dismiss imagify-upsell-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'imagify' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice', 'imagify' ); ?></span></a>
|
||||
<a href="<?php echo esc_url( get_imagify_admin_url( 'dismiss-notice', 'upsell-admin-bar' ) ); ?>" class="imagify-notice-dismiss imagify-upsell-dismiss notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'imagify' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice', 'imagify' ); ?></span></a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
@@ -26,12 +26,10 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
<p>
|
||||
<span class="imagify-border-styled">
|
||||
<?php
|
||||
$attachments_number = imagify_count_attachments() + Imagify_Files_Stats::count_all_files();
|
||||
|
||||
printf(
|
||||
/* translators: %s is a formatted number (don't use %d). */
|
||||
_n( 'You have %s original image', 'You have %s original images', $attachments_number, 'imagify' ),
|
||||
'</span><span class="imagify-big-number">' . number_format_i18n( $attachments_number ) . '</span><span class="imagify-border-styled">'
|
||||
_n( 'You have %s original image', 'You have %s original images', $data['attachments_number'], 'imagify' ),
|
||||
'</span><span class="imagify-big-number">' . number_format_i18n( $data['attachments_number'] ) . '</span><span class="imagify-border-styled">'
|
||||
);
|
||||
?>
|
||||
</span>
|
||||
@@ -125,13 +123,7 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
</span>
|
||||
|
||||
<p class="imagify-price-complement">
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s is a formatted price. */
|
||||
__( '%s per<br>additional Gb', 'imagify' ),
|
||||
'<span class="imagify-price-add-data"></span>'
|
||||
);
|
||||
?>
|
||||
<span class="imagify-price-add-data"></span>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
@@ -219,7 +211,7 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
?>
|
||||
|
||||
<div class="imagify-modal-views imagify-plans-selection-view" id="imagify-plans-selection-view" aria-hidden="true">
|
||||
<p class="imagify-modal-title"><?php _e( 'Choose a plan', 'imagify' ); ?></p>
|
||||
<p class="imagify-modal-title"><?php _e( 'Choose the Perfect Plan for Your Needs', 'imagify' ); ?></p>
|
||||
<ul class="imagify-tabs" role="tablist">
|
||||
<li class="imagify-tab imagify-current">
|
||||
<a href="#imagify-pricing-tab-monthly" role="tab" aria-controls="imagify-pricing-tab-monthly" aria-selected="true">
|
||||
@@ -237,26 +229,36 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
|
||||
<div class="imagify-tab-content imagify-current" id="imagify-pricing-tab-monthly" role="tabpanel">
|
||||
|
||||
<div class="imagify-modal-section section-gray">
|
||||
<p><?php esc_html_e( 'Monthly plans come with credits which is renewed every months. The billing happens automatically each month or year depending the billing period you choose.', 'imagify' ); ?></p>
|
||||
<div class="imagify-modal-section">
|
||||
<p><?php esc_html_e( 'Pick the plan that fits your image optimization goals and unlock the full potential of Imagify!', 'imagify' ); ?></p>
|
||||
</div>
|
||||
|
||||
<?php $this->print_template( 'part-settings-discount-banner' ); ?>
|
||||
|
||||
<div class="imagify-inline-options imagify-small-options imagify-radio-line">
|
||||
<input id="imagify-pricing-montly" type="radio" value="monthly" name="plan-pricing" checked="checked">
|
||||
<label for="imagify-pricing-montly"><?php esc_html_e( 'Monthly', 'imagify' ); ?></label>
|
||||
<div class="imagify-toggle-container">
|
||||
<span class="imagify-toggle-label">Monthly</span>
|
||||
<label class="imagify-switch">
|
||||
<input type="checkbox" id="imagify-toggle-plan">
|
||||
<span class="imagify-slider"></span>
|
||||
</label>
|
||||
<span class="imagify-toggle-label">Yearly</span>
|
||||
<div class="imagify-arrow-container">
|
||||
<img src="data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2765%27 height=%2729%27 fill=%27none%27%3E%3Cpath fill=%27%23B8BFC5%27 d=%27M1.566 14.504a.5.5 0 0 0-.562.43l-.594 4.46a.5.5 0 1 0 .99.133l.53-3.965 3.964.528a.5.5 0 0 0 .133-.99l-4.46-.596Zm40.077-1.475.495-.07-.495.07ZM64.5 1a.5.5 0 0 0-1 0h1ZM32.616 13.054l-.47.17.47-.17Zm-31.513 2.25C7.708 23.94 18.576 28.252 27.473 28c4.45-.125 8.465-1.395 11.202-3.904 2.758-2.527 4.158-6.255 3.463-11.138l-.99.141c.654 4.599-.664 7.983-3.148 10.26-2.505 2.295-6.258 3.52-10.555 3.642-8.6.243-19.153-3.942-25.548-12.305l-.794.608Zm41.035-2.346c-.413-2.903-1.816-4.72-3.496-5.83l-.551.833c1.448.957 2.685 2.526 3.057 5.138l.99-.14Zm-9.992.267c1.477 4.073 4.263 6.62 7.615 7.806 3.338 1.18 7.203 1 10.855-.299C57.919 18.135 64.5 11.018 64.5 1h-1c0 9.537-6.257 16.314-13.219 18.79-3.48 1.238-7.105 1.388-10.187.298-3.067-1.085-5.632-3.41-7.008-7.204l-.94.34Zm6.496-6.098c-1.925-1.272-3.97-.785-5.3.538-1.316 1.308-1.962 3.45-1.197 5.56l.94-.341c-.624-1.723-.095-3.46.962-4.51 1.042-1.036 2.568-1.388 4.044-.413l.551-.834Z%27/%3E%3C/svg%3E" />
|
||||
<img src="data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2766%27 height=%2729%27 fill=%27none%27%3E%3Cpath fill=%27%238BC34A%27 d=%27M2.632 14.009a1 1 0 0 0-1.123.859l-1.19 8.92a1 1 0 0 0 1.983.265l1.057-7.93 7.93 1.058a1 1 0 1 0 .264-1.983l-8.92-1.19Zm40.01-.98.99-.141-.99.14ZM66 1a1 1 0 1 0-2 0h2ZM33.616 13.054l-.94.341.94-.34Zm-31.91 2.553c6.71 8.775 17.736 13.149 26.78 12.893 4.528-.128 8.673-1.42 11.527-4.035 2.894-2.652 4.335-6.552 3.62-11.577l-1.98.282c.634 4.456-.643 7.669-2.991 9.82-2.389 2.189-6.01 3.392-10.232 3.511-8.451.239-18.846-3.883-25.136-12.109l-1.588 1.216Zm41.927-2.719c-.434-3.05-1.92-4.991-3.715-6.178l-1.103 1.668c1.332.88 2.487 2.325 2.838 4.792l1.98-.282Zm-10.958.507c1.529 4.213 4.425 6.871 7.92 8.107 3.466 1.226 7.45 1.03 11.188-.299C59.257 18.546 66 11.258 66 1h-2c0 9.296-6.095 15.904-12.887 18.319-3.394 1.207-6.899 1.342-9.852.297-2.925-1.034-5.38-3.248-6.705-6.903l-1.88.682Zm7.243-6.685c-2.15-1.421-4.454-.866-5.929.6-1.446 1.438-2.149 3.782-1.313 6.085l1.88-.682c-.555-1.529-.083-3.063.844-3.985.898-.893 2.164-1.176 3.415-.35l1.103-1.668Z%27/%3E%3C/svg%3E" />
|
||||
</div>
|
||||
<div class="imagify-badge-container">
|
||||
<span class="imagify-badge">2 MONTHS FREE</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input id="imagify-pricing-yearly" type="radio" value="yearly" name="plan-pricing">
|
||||
<label for="imagify-pricing-yearly"><?php esc_html_e( 'Yearly', 'imagify' ); ?><span class="imagify-2-free imagify-b-right"><?php esc_html_e( '2 months free', 'imagify' ); ?></span></label>
|
||||
</div><!-- .imagify-radio-line -->
|
||||
|
||||
|
||||
<div class="imagify-pricing-table imagify-month-selected">
|
||||
<div class="imagify-pricing-table imagify-month-selected" id="imagify_all_plan_view">
|
||||
|
||||
<script type="text/html" id="imagify-offer-monthly-template"><div class="imagify-offer-line imagify-offer-monthlies imagify-flex-table">
|
||||
<div class="imagify-col-details imagify-col-label">
|
||||
<p class="imagify-label-plans"></p>
|
||||
</div>
|
||||
<div class="imagify-col-details">
|
||||
<p class="imagify-label">
|
||||
<p>
|
||||
<span class="imagify-the-offer">
|
||||
<span class="imagify-offer-size"></span>
|
||||
<span class="imagify-offer-by"><?php esc_html_e( '/month', 'imagify' ); ?></span>
|
||||
@@ -277,8 +279,8 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
<span class="imagify-dollars">$</span>
|
||||
<span class="imagify-number-block">
|
||||
<span class="imagify-switch-my"></span>
|
||||
<span class="imagify-price-by"><?php esc_html_e( '/month', 'imagify' ); ?></span>
|
||||
</span>
|
||||
<span class="imagify-price-by"><?php esc_html_e( '/month', 'imagify' ); ?></span>
|
||||
</span>
|
||||
|
||||
<span class="imagify-recommend" aria-hidden="true"><?php esc_html_e( 'We recommend for you', 'imagify' ); ?></span>
|
||||
@@ -287,7 +289,7 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
<?php
|
||||
printf(
|
||||
/* translators: %s is a formatted price. */
|
||||
__( '%s per<br>additional Gb', 'imagify' ),
|
||||
__( 'Unlimited upload size<br />Unlimited websites<br />%s', 'imagify' ),
|
||||
'<span class="imagify-price-add-data"></span>'
|
||||
);
|
||||
?>
|
||||
@@ -295,23 +297,13 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
|
||||
</div><!-- .imagify-col-price -->
|
||||
|
||||
<div class="imagify-col-other-actions">
|
||||
<div class="imagify-col-other-actions imagify-choose-plan-col">
|
||||
<button type="button" class="button imagify-button-secondary mini imagify-payment-btn-select-plan"><?php esc_html_e( 'Choose plan', 'imagify' ); ?></button>
|
||||
</div>
|
||||
</div><!-- .imagify-offer-line --></script>
|
||||
</div><!-- .imagify-pricing-table -->
|
||||
|
||||
<div class="imagify-cols">
|
||||
<div class="imagify-col imagify-txt-start">
|
||||
<p class="imagify-special-needs">
|
||||
<strong><?php esc_html_e( 'Need more?', 'imagify' ); ?></strong>
|
||||
<span><?php esc_html_e( 'for special needs', 'imagify' ); ?></span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="imagify-col imagify-txt-end">
|
||||
<p><a class="button imagify-button-ghost imagify-button-medium imagify-mt1 imagify-mb1 imagify-mr1" href="<?php echo esc_html( imagify_get_external_url( 'contact' ) ); ?>" target="_blank"><i class="dashicons dashicons-email" aria-hidden="true"></i> <?php esc_html_e( 'Contact Us', 'imagify' ); ?></a></p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="imagify-footer-lines">You can upgrade, downgrade or cancel your plan at any time!</p>
|
||||
|
||||
</div><!-- .imagify-tab-content -->
|
||||
<div class="imagify-tab-content" id="imagify-pricing-tab-onetime" role="tabpanel">
|
||||
@@ -387,46 +379,6 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
|
||||
</div><!-- .imagify-modal-main -->
|
||||
|
||||
<div class="imagify-modal-sidebar">
|
||||
<div class="imagify-modal-sidebar-content imagify-txt-start">
|
||||
<p class="imagify-modal-sidebar-title"><?php esc_html_e( 'What do our users think about Imagify', 'imagify' ); ?></p>
|
||||
|
||||
<div class="imagify-modal-testimony">
|
||||
<div class="imagify-modal-testimony-person">
|
||||
<span class="imagify-modal-avatar">
|
||||
<img src="<?php echo IMAGIFY_ASSETS_IMG_URL; ?>pic-srhdesign.jpg" alt="">
|
||||
</span>
|
||||
<p class="imagify-modal-identity">
|
||||
<a href="https://twitter.com/SRHDesign/status/686486119249260544" target="_blank">@SRHDesign</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="imagify-modal-testimony-content">
|
||||
<p>@imagify is an awesome tool that is powerful & easy to use. It's fast, rivals and surpasses other established plugins/software. Awesome!</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="imagify-modal-testimony">
|
||||
<div class="imagify-modal-testimony-person">
|
||||
<span class="imagify-modal-avatar">
|
||||
<img src="<?php echo IMAGIFY_ASSETS_IMG_URL; ?>pic-ericwaltr.jpg" alt="">
|
||||
</span>
|
||||
<p class="imagify-modal-identity">
|
||||
<a href="https://twitter.com/EricWaltR/status/679053496382038016" target="_blank">@EricWaltr</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="imagify-modal-testimony-content">
|
||||
<p>Clearly @imagify is the most awesome tool to compress images on your website! A must try</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="imagify-modal-sidebar-trust imagify-txt-center">
|
||||
<p class="imagify-secondary">
|
||||
<img src="<?php echo IMAGIFY_ASSETS_IMG_URL; ?>icon-lock.png" srcset="<?php echo IMAGIFY_ASSETS_IMG_URL; ?>icon-lock.svg 2x" width="16" height="19" alt=""> <?php esc_html_e( 'Secure Credit Card Payment', 'imagify' ); ?></p>
|
||||
<p><?php esc_html_e( 'This is secure 128-bits SSL encrypted payment', 'imagify' ); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- .imagify-modal-sidebar -->
|
||||
|
||||
<div class="imagify-modal-loader"></div>
|
||||
</div><!-- .imagify-modal-content-->
|
||||
</div><!-- .imagify-payment-modal -->
|
||||
|
||||
@@ -160,8 +160,6 @@ defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
|
||||
</div><!-- .imagify-settings-section -->
|
||||
|
||||
<?php
|
||||
$this->print_template( 'modal-payment' );
|
||||
|
||||
if ( Imagify_Requirements::is_api_key_valid() ) {
|
||||
$display_infos = get_transient( 'imagify_bulk_optimization_infos' );
|
||||
|
||||
|
||||
@@ -104,27 +104,40 @@ $wrapper_class = isset( $notices[ $notice ] ) || isset( $plugins['wp-rocket/wp-r
|
||||
<div class="imagify-settings-main-content imagify-pb0<?php echo $hidden_class; ?>">
|
||||
<div class="imagify-settings-section imagify-clear">
|
||||
<div>
|
||||
<h2 class="imagify-options-title"><?php _e( 'Display Options', 'imagify' ); ?></h2>
|
||||
|
||||
<p class="imagify-options-subtitle"><?php _e( 'Show Toolbar Menu', 'imagify' ); ?></p>
|
||||
|
||||
<div class="imagify-col">
|
||||
<p>
|
||||
<h2 class="imagify-options-title"><?php _e( 'Our Plugins', 'imagify' ); ?></h2>
|
||||
<p class="imagify-options-subtitle"><?php _e( 'Build better, faster, safer', 'imagify' ); ?></p>
|
||||
<p class="">
|
||||
<?php
|
||||
$settings->field_checkbox( array(
|
||||
'option_name' => 'admin_bar_menu',
|
||||
'label' => __( 'I want this awesome quick access menu on my Toolbar.', 'imagify' ),
|
||||
) );
|
||||
_e( 'Beyond Imagify, there\'s a whole family of plugins designed to help you build better, faster, and safer websites. Each one is crafted with our unique blend of expertise, simplicity, and
|
||||
outstanding support. Combine our plugins below to build incredible WordPress websites!', 'imagify');
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
<div class="imagify-col">
|
||||
<p>
|
||||
<img class="imagify-menu-bar-img" src="<?php echo esc_url( IMAGIFY_ASSETS_IMG_URL . 'imagify-menu-bar-' . $lang . '.jpg' ); ?>" width="273" height="239" alt="">
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
</p>
|
||||
<?php foreach ( $data['plugin_family'] as $plugin => $plugin_data ) : ?>
|
||||
<div class="imagify-plugin-family-col">
|
||||
<div class="imagify-card">
|
||||
<div class="imagify-card-header">
|
||||
<div class="imagify-card-logo">
|
||||
<img src="<?php echo esc_url( IMAGIFY_ASSETS_IMG_URL . $plugin_data['logo']['file'] ); ?>" loading="lazy" style="width: <?php echo esc_attr( $plugin_data['logo']['width'] ); ?>">
|
||||
</div>
|
||||
<h4><?php echo esc_html( $plugin_data['title'] ); ?></h4>
|
||||
</div>
|
||||
<div class="imagify-card-body">
|
||||
<p>
|
||||
<?php echo esc_html( $plugin_data['desc'] ); ?>
|
||||
</p>
|
||||
</div>
|
||||
<div class="imagify-card-footer">
|
||||
<?php if ( '#' === $plugin_data['cta']['url'] ) : ?>
|
||||
<span><?php echo esc_html( $plugin_data['cta']['text'] ); ?></span><span class="dashicons dashicons-yes"></span>
|
||||
<?php else : ?>
|
||||
<a href="<?php echo esc_url( $plugin_data['cta']['url'] ); ?>" class="imagify-card-btn imagify-btn-cta" <?php echo 'Get it Now' === $plugin_data['cta']['text'] ? 'target="_blank"' : ''; ?> rel="noopener"><?php echo esc_html( $plugin_data['cta']['text'] ); ?></a>
|
||||
<a href="<?php echo esc_url( $plugin_data['link'] ); ?>" target="_blank" rel="noopener"><?php echo esc_html( 'Learn more' ); ?></a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
endforeach;
|
||||
/**
|
||||
* List of partners affected by this option.
|
||||
* For internal use only.
|
||||
@@ -139,9 +152,8 @@ $wrapper_class = isset( $notices[ $notice ] ) || isset( $plugins['wp-rocket/wp-r
|
||||
|
||||
if ( $partners ) {
|
||||
?>
|
||||
<h2 class="imagify-options-title"><?php esc_html_e( 'Partners', 'imagify' ); ?></h2>
|
||||
<p class="imagify-options-subtitle" id="imagify-partners-label">
|
||||
<?php esc_html_e( 'Partners', 'imagify' ); ?>
|
||||
|
||||
<span class="imagify-info">
|
||||
<span class="dashicons dashicons-info"></span>
|
||||
<a href="#imagify-partners-info" class="imagify-modal-trigger"><?php _e( 'More info?', 'imagify' ); ?></a>
|
||||
@@ -177,7 +189,6 @@ $wrapper_class = isset( $notices[ $notice ] ) || isset( $plugins['wp-rocket/wp-r
|
||||
$this->print_template( 'modal-settings-infos' );
|
||||
$this->print_template( 'modal-settings-partners-infos' );
|
||||
$this->print_template( 'modal-settings-visual-comparison' );
|
||||
$this->print_template( 'modal-payment' );
|
||||
?>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -26,12 +26,14 @@ if (
|
||||
<div class="imagify-col-content imagify-block-secondary imagify-mt2">
|
||||
<div class="best-plan<?php echo $api_key_valid ? '' : ' hidden'; ?>">
|
||||
<h3 class="imagify-user-best-plan-title">
|
||||
<?php esc_html_e( 'You\'re new to Imagify?', 'imagify' ); ?>
|
||||
<?php esc_html_e( 'Unlock Imagify\'s full potential', 'imagify' ); ?>
|
||||
</h3>
|
||||
<p><?php esc_html_e( 'Let us help you by analyzing your existing images and determine the best plan for you.', 'imagify' ); ?></p>
|
||||
<button id="imagify-get-pricing-modal" data-nonce="<?php echo wp_create_nonce( 'imagify_get_pricing_' . get_current_user_id() ); ?>" data-target="#imagify-pricing-modal" type="button" class="imagify-modal-trigger imagify-button imagify-button-light imagify-full-width">
|
||||
<i class="dashicons dashicons-dashboard" aria-hidden="true"></i>
|
||||
<span class="button-text"><?php esc_html_e( 'What plan do I need?', 'imagify' ); ?></span>
|
||||
<p><?php esc_html_e( 'Expand your image quota and eliminate upload limits.', 'imagify' ); ?></p>
|
||||
<button data-nonce="<?php echo wp_create_nonce( 'imagify_get_pricing_' . get_current_user_id() ); ?>" data-target="#imagify-pricing-modal" type="button" class="imagify-modal-trigger imagify-button imagify-button-light imagify-full-width imagify-upsell-cta imagify-get-pricing-modal">
|
||||
<span class="button-text"><?php esc_html_e( 'Upgrade Now', 'imagify' ); ?></span>
|
||||
<svg class="imagify-svg-icon" width="23px" height="23px">
|
||||
<use href="#imagify_arrow_long_right"></use>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div><!-- .imagify-col-content -->
|
||||
@@ -87,9 +89,21 @@ if (
|
||||
<p><?php echo $upgrade; ?></p>
|
||||
<p><?php echo $price; ?></p>
|
||||
|
||||
<a href="<?php echo esc_url( $upgrade_link ); ?>" target="_blank" rel="noopener noreferrer" class="imagify-upsell-button"><span class="imagify-upsell-arrow"><?php esc_html_e( 'Upgrade now', 'imagify' ); ?></span></a>
|
||||
<a href="<?php echo esc_url( get_imagify_admin_url( 'dismiss-notice', 'upsell-banner' ) ); ?>" class="imagify-notice-dismiss imagify-upsell-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'imagify' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice', 'imagify' ); ?></span></a>
|
||||
<a href="<?php echo esc_url( $upgrade_link ); ?>" target="_blank" rel="noopener noreferrer" class="imagify-upsell-button imagify-full-width imagify-upsell-cta">
|
||||
<?php esc_html_e( 'Upgrade now', 'imagify' ); ?>
|
||||
<svg class="imagify-svg-icon" width="23px" height="23px">
|
||||
<use href="#imagify_arrow_long_right"></use>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="<?php echo esc_url( get_imagify_admin_url( 'dismiss-notice', 'upsell-banner' ) ); ?>" class="imagify-notice-dismiss notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'imagify' ); ?>"><span class="screen-reader-text"><?php esc_html_e( 'Dismiss this notice', 'imagify' ); ?></span></a>
|
||||
</div><!-- .imagify-col-content -->
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<svg style="display: none;">
|
||||
<symbol id="imagify_arrow_long_right" viewBox="0 0 512.00 512.00">
|
||||
<path d="M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z" fill="currentColor"/>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user