Plugin Directory

Changeset 3433301


Ignore:
Timestamp:
01/06/2026 07:36:06 AM (3 months ago)
Author:
masoudin
Message:

Release version 4.3.1

Location:
advanced-media-offloader/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • advanced-media-offloader/trunk/advanced-media-offloader.php

    r3422598 r3433301  
    44 * Plugin URI:        https://wpfitter.com/plugins/advanced-media-offloader/
    55 * Description:       Save server space & speed up your site by automatically offloading media to Amazon S3, Cloudflare R2, DigitalOcean Spaces, Backblaze B2 and more.
    6  * Version:           4.3.0
     6 * Version:           4.3.1
    77 * Requires at least: 5.6
    88 * Requires PHP:      8.1
  • advanced-media-offloader/trunk/assets/css/admin.css

    r3396217 r3433301  
     1/* ==========================================================================
     2   Advanced Media Offloader - Admin Styles
     3   ========================================================================== */
     4
     5/* Design Tokens - Consistent spacing and colors */
     6:root {
     7    --advmo-spacing-xs: 4px;
     8    --advmo-spacing-sm: 8px;
     9    --advmo-spacing-md: 16px;
     10    --advmo-spacing-lg: 24px;
     11    --advmo-spacing-xl: 32px;
     12   
     13    --advmo-color-text-primary: #1d2327;
     14    --advmo-color-text-secondary: #50575e;
     15    --advmo-color-text-muted: #787c82;
     16    --advmo-color-border: #dcdcde;
     17    --advmo-color-border-light: #e7e8ea;
     18    --advmo-color-bg-subtle: #f6f7f7;
     19    --advmo-color-accent: #2271b1;
     20    --advmo-color-accent-hover: #135e96;
     21    --advmo-color-success: #00a32a;
     22    --advmo-color-warning: #dba617;
     23    --advmo-color-error: #d63638;
     24   
     25    --advmo-radius-sm: 4px;
     26    --advmo-radius-md: 6px;
     27    --advmo-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
     28    --advmo-shadow-md: 0 1px 3px rgba(0, 0, 0, 0.08);
     29    --advmo-transition-fast: 150ms ease;
     30    --advmo-transition-normal: 200ms ease;
     31}
     32
    133/* General styles */
    234#advmo .wrap {
    335    max-width: 1280px;
    436    margin: 0 auto;
    5     padding: 0 30px;
     37    padding: 0 var(--advmo-spacing-lg);
    638}
    739
    840/* Form styles */
    941#advmo form {
    10     margin-top: 20px;
     42    margin-top: var(--advmo-spacing-lg);
    1143}
    1244
     
    2052#advmo .form-table th {
    2153    font-weight: 600;
    22     padding: 20px 10px 20px 0;
     54    padding: var(--advmo-spacing-lg) var(--advmo-spacing-md) var(--advmo-spacing-lg) 0;
    2355    width: 200px;
    2456    vertical-align: top;
     57    color: var(--advmo-color-text-primary);
     58    font-size: 13px;
     59    line-height: 1.5;
    2560}
    2661
    2762#advmo .form-table td {
    28     padding: 20px 10px;
     63    padding: var(--advmo-spacing-lg) var(--advmo-spacing-md);
    2964    vertical-align: top;
    3065}
     
    3671    width: 100%;
    3772    max-width: 400px;
    38     padding: 8px;
    39     border: 1px solid #ddd;
    40     border-radius: 4px;
     73    padding: 10px 12px;
     74    border: 1px solid var(--advmo-color-border);
     75    border-radius: var(--advmo-radius-sm);
     76    font-size: 14px;
     77    line-height: 1.4;
     78    color: var(--advmo-color-text-primary);
     79    background-color: #fff;
     80    transition: border-color var(--advmo-transition-fast), box-shadow var(--advmo-transition-fast);
     81}
     82
     83#advmo select:hover,
     84#advmo input[type="text"]:hover,
     85#advmo input[type="password"]:hover {
     86    border-color: var(--advmo-color-accent);
     87}
     88
     89#advmo select:focus,
     90#advmo input[type="text"]:focus,
     91#advmo input[type="password"]:focus {
     92    border-color: var(--advmo-color-accent);
     93    box-shadow: 0 0 0 2px rgba(34, 113, 177, 0.15);
     94    outline: none;
    4195}
    4296
    4397/* Checkbox style */
    4498#advmo input[type="checkbox"] {
    45     margin-right: 10px;
    46 }
    47 
    48 /* Description style */
     99    margin-right: var(--advmo-spacing-sm);
     100}
     101
     102/* Description style - Improved readability */
    49103#advmo .description {
    50     font-style: italic;
    51     color: #666;
    52     margin-top: 5px;
     104    font-style: normal;
     105    color: var(--advmo-color-text-muted);
     106    margin-top: var(--advmo-spacing-sm);
     107    font-size: 13px;
     108    line-height: 1.6;
    53109}
    54110
     
    80136/* Notification styles */
    81137#advmo .advmo-notification {
    82     padding: 10px 15px;
    83     border-radius: 3px;
    84     margin-top: 20px;
     138    padding: var(--advmo-spacing-md);
     139    border-radius: var(--advmo-radius-sm);
     140    margin-top: var(--advmo-spacing-lg);
     141    font-size: 13px;
     142    line-height: 1.5;
     143    border: 1px solid;
    85144}
    86145
    87146#advmo .advmo-notification.success {
    88     background-color: #dff0d8;
    89     border: 1px solid #d6e9c6;
    90     color: #3c763d;
     147    background-color: #ecfdf3;
     148    border-color: #a3e6cd;
     149    color: #065f46;
    91150}
    92151
    93152#advmo .advmo-notification.error {
    94     background-color: #f2dede;
    95     border: 1px solid #ebccd1;
    96     color: #a94442;
     153    background-color: #fef2f2;
     154    border-color: #fecaca;
     155    color: #991b1b;
    97156}
    98157
     
    104163/* Feedback Messages */
    105164.advmo-last-check {
    106     padding: 10px;
    107     margin-bottom: 10px !important;
    108     border-radius: 4px;
    109     transition: opacity 0.5s ease-out;
    110     width: 60%;
     165    padding: var(--advmo-spacing-md);
     166    margin-bottom: var(--advmo-spacing-md) !important;
     167    border-radius: var(--advmo-radius-sm);
     168    transition: opacity 0.3s ease-out;
     169    max-width: 400px;
     170    font-size: 13px;
     171    border: 1px solid;
    111172}
    112173
    113174@media screen and (max-width: 782px) {
    114175    .advmo-last-check {
    115         width: 100%;
     176        max-width: 100%;
    116177    }
    117178}
    118179
    119180.advmo-last-check.connected {
    120     background: #edfaef;
    121     color: #287d3c;
    122     border-left: 4px solid #28a745;
     181    background: #ecfdf3;
     182    color: #065f46;
     183    border-color: #a3e6cd;
    123184}
    124185
    125186.advmo-last-check.disconnected {
    126     background: #fff5f5;
    127     color: #da1414;
    128     border-left: 4px solid #dc3545;
     187    background: #fef2f2;
     188    color: #991b1b;
     189    border-color: #fecaca;
    129190}
    130191
     
    175236}
    176237
    177 /* Form table styles */
     238/* ==========================================================================
     239   Section Cards - Clean, modern card design
     240   ========================================================================== */
    178241#advmo .advmo-section {
    179     background-color: #f9f9f9;
    180     border: 1px solid #e0e0e0;
    181     box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); /* Light shadow */
    182     margin-top: 2rem;
     242    background-color: #fff;
     243    border: 1px solid var(--advmo-color-border);
     244    border-radius: var(--advmo-radius-md);
     245    box-shadow: var(--advmo-shadow-sm);
     246    margin-top: var(--advmo-spacing-xl);
     247    overflow: hidden;
    183248}
    184249
    185250#advmo .advmo-section-header {
    186     padding: 1rem;
    187     border-bottom: 1px solid #e5e5e5;
    188     font-size: 1rem;
    189     color: #666666;
    190     font-weight: normal;
    191     background: #fff;
     251    padding: var(--advmo-spacing-md) var(--advmo-spacing-lg);
     252    border-bottom: 1px solid var(--advmo-color-border-light);
     253    background: var(--advmo-color-bg-subtle);
    192254}
    193255
    194256#advmo .advmo-section-header h2 {
    195     font-size: 1.2rem;
    196     font-weight: bold;
    197     color: #333333;
     257    font-size: 14px;
     258    font-weight: 600;
     259    color: var(--advmo-color-text-primary);
     260    margin: 0 0 var(--advmo-spacing-xs) 0;
     261    letter-spacing: -0.01em;
     262}
     263
     264#advmo .advmo-section-header p {
     265    font-size: 13px;
     266    color: var(--advmo-color-text-secondary);
     267    margin: 0;
     268    line-height: 1.5;
    198269}
    199270
    200271#advmo .form-table {
    201272    margin: 0;
     273    background: #fff;
    202274}
    203275
    204276#advmo .form-table th {
    205     background-color: #f9f9f9;
    206     border-bottom: 1px solid #e5e5e5;
    207     font-size: 0.9125rem;
     277    background-color: #fff;
     278    border-bottom: 1px solid var(--advmo-color-border-light);
     279    font-size: 13px;
     280    color: var(--advmo-color-text-primary);
    208281}
    209282
    210283#advmo .form-table td {
    211     border-bottom: 1px solid #f0f0f0;
     284    border-bottom: 1px solid var(--advmo-color-border-light);
     285    background: #fff;
    212286}
    213287
     
    219293#advmo .form-table tbody tr th {
    220294    vertical-align: top;
    221     padding-left: 1rem;
    222 }
    223 
    224 /* Submit button styling */
     295    padding-left: var(--advmo-spacing-lg);
     296}
     297
     298/* ==========================================================================
     299   Submit Button - Primary action styling
     300   ========================================================================== */
    225301#advmo .submit {
    226     margin-top: 30px;
    227     text-align: center;
     302    margin-top: var(--advmo-spacing-xl);
     303    padding-top: var(--advmo-spacing-lg);
     304    text-align: left;
     305    border-top: 1px solid var(--advmo-color-border-light);
    228306}
    229307
    230308#advmo .button-primary {
    231     background-color: #0073aa; /* WordPress blue */
     309    background-color: var(--advmo-color-accent);
    232310    color: #ffffff;
    233     font-weight: bold;
    234     padding: 10px 20px;
    235     border-radius: 4px;
    236     border: none;
     311    font-weight: 500;
     312    font-size: 13px;
     313    padding: 10px 24px;
     314    border-radius: var(--advmo-radius-sm);
     315    border: 1px solid var(--advmo-color-accent);
    237316    cursor: pointer;
    238     transition: background-color 0.2s ease-in-out;
     317    transition: all var(--advmo-transition-fast);
     318    box-shadow: var(--advmo-shadow-sm);
    239319}
    240320
    241321#advmo .button-primary:hover,
    242322#advmo .button-primary:focus {
    243     background-color: #005177;
    244 }
    245 
    246 /* Responsive adjustments */
     323    background-color: var(--advmo-color-accent-hover);
     324    border-color: var(--advmo-color-accent-hover);
     325    box-shadow: var(--advmo-shadow-md);
     326}
     327
     328#advmo .button-primary:focus {
     329    outline: 2px solid var(--advmo-color-accent);
     330    outline-offset: 2px;
     331}
     332
     333/* Responsive adjustments for form table */
    247334@media screen and (max-width: 782px) {
    248335    #advmo .form-table th,
    249336    #advmo .form-table td {
    250         padding: 15px;
    251     }
    252 }
    253 
     337        padding: var(--advmo-spacing-md);
     338    }
     339}
     340
     341/* ==========================================================================
     342   Radio Options - Card-style selection for mutually exclusive choices
     343   ========================================================================== */
    254344.advmo-radio-group {
    255     margin-bottom: 20px;
     345    display: flex;
     346    flex-direction: column;
     347    gap: var(--advmo-spacing-md);
    256348}
    257349
    258350.advmo-radio-option {
    259     margin-bottom: 20px;
     351    position: relative;
     352    padding: var(--advmo-spacing-md);
     353    padding-left: calc(var(--advmo-spacing-md) + 28px);
     354    background: var(--advmo-color-bg-subtle);
     355    border: 1px solid var(--advmo-color-border-light);
     356    border-radius: var(--advmo-radius-sm);
     357    transition: all var(--advmo-transition-fast);
     358}
     359
     360.advmo-radio-option:hover {
     361    border-color: var(--advmo-color-border);
     362    background: #fff;
     363}
     364
     365.advmo-radio-option:has(input[type="radio"]:checked) {
     366    border-color: var(--advmo-color-accent);
     367    background: #fff;
     368    box-shadow: 0 0 0 1px var(--advmo-color-accent);
    260369}
    261370
    262371.advmo-radio-option input[type="radio"] {
    263     margin-right: 10px;
     372    position: absolute;
     373    left: var(--advmo-spacing-md);
     374    top: calc(var(--advmo-spacing-md) + 2px);
     375    margin: 0;
     376    cursor: pointer;
    264377}
    265378
    266379.advmo-radio-option label {
    267     font-weight: bold;
    268     display: inline-block;
    269     margin-bottom: 5px;
     380    font-weight: 600;
     381    font-size: 13px;
     382    display: block;
     383    margin-bottom: var(--advmo-spacing-xs);
    270384    cursor: pointer;
     385    color: var(--advmo-color-text-primary);
     386    transition: color var(--advmo-transition-fast);
    271387}
    272388
    273389.advmo-radio-option .description {
    274     margin-left: 24px;
    275     color: #666;
    276     font-size: 13px;
    277     line-height: 1.5;
    278 }
    279 
     390    margin: 0;
     391    color: var(--advmo-color-text-muted);
     392    font-size: 13px;
     393    line-height: 1.6;
     394}
     395
     396/* Subtle highlight on selection - not jarring color change */
    280397.advmo-radio-option input[type="radio"]:checked + label {
    281     color: #0073aa;
     398    color: var(--advmo-color-text-primary);
    282399}
    283400
    284401@media screen and (max-width: 782px) {
    285402    .advmo-radio-option {
    286         margin-bottom: 25px;
    287     }
    288 }
    289 
    290 /* Checkboxes */
     403        padding: var(--advmo-spacing-md);
     404        padding-left: calc(var(--advmo-spacing-md) + 32px);
     405    }
     406   
     407    .advmo-radio-option input[type="radio"] {
     408        width: 20px;
     409        height: 20px;
     410    }
     411}
     412
     413/* ==========================================================================
     414   Checkbox Options - Toggle-style for on/off settings
     415   ========================================================================== */
    291416.advmo-checkbox-option {
    292     margin-bottom: 20px;
    293     padding-left: 24px;
    294417    position: relative;
     418    padding-left: 28px;
     419    margin-bottom: 0;
    295420}
    296421
     
    298423    position: absolute;
    299424    left: 0;
    300     top: 5px;
     425    top: 2px;
     426    margin: 0;
     427    cursor: pointer;
    301428}
    302429
    303430.advmo-checkbox-option label {
    304     font-weight: bold;
     431    font-weight: 600;
     432    font-size: 13px;
    305433    cursor: pointer;
    306434    display: inline-block;
    307     margin-bottom: 5px;
     435    margin-bottom: var(--advmo-spacing-xs);
     436    color: var(--advmo-color-text-primary);
     437    transition: color var(--advmo-transition-fast);
    308438}
    309439
    310440.advmo-checkbox-option .description {
    311     margin-top: 5px;
    312     color: #666;
    313     font-size: 13px;
    314     line-height: 1.5;
    315 }
    316 
     441    margin-top: var(--advmo-spacing-xs);
     442    color: var(--advmo-color-text-muted);
     443    font-size: 13px;
     444    line-height: 1.6;
     445}
     446
     447/* Keep label color consistent - no jarring blue change */
    317448.advmo-checkbox-option input[type="checkbox"]:checked + label {
    318     color: #0073aa;
    319 }
    320 
    321 /* Input below Checkbox */
    322 
    323 .advmo-checkbox-option input[type="input"]#path_prefix {
     449    color: var(--advmo-color-text-primary);
     450}
     451
     452/* Input below Checkbox - for path prefix field */
     453.advmo-checkbox-option input[type="text"]#path_prefix {
    324454    width: 100%;
    325     max-width: 300px;
    326     padding: 8px;
    327     margin-top: 5px;
    328     border: 1px solid #ddd;
    329     border-radius: 4px;
     455    max-width: 320px;
     456    padding: 10px 12px;
     457    margin-top: var(--advmo-spacing-sm);
     458    border: 1px solid var(--advmo-color-border);
     459    border-radius: var(--advmo-radius-sm);
    330460    font-size: 14px;
    331     color: #333;
    332     transition: all 0.3s ease;
    333 }
    334 
    335 .advmo-checkbox-option input[type="input"]#path_prefix:focus {
    336     border-color: #007cba;
    337     box-shadow: 0 0 0 1px #007cba;
    338     outline: 2px solid transparent;
    339 }
    340 
    341 .advmo-checkbox-option input[type="input"]#path_prefix:disabled {
    342     background-color: #f0f0f0;
    343     color: #888;
     461    color: var(--advmo-color-text-primary);
     462    font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace;
     463    transition: all var(--advmo-transition-fast);
     464}
     465
     466.advmo-checkbox-option input[type="text"]#path_prefix:hover:not(:disabled) {
     467    border-color: var(--advmo-color-accent);
     468}
     469
     470.advmo-checkbox-option input[type="text"]#path_prefix:focus {
     471    border-color: var(--advmo-color-accent);
     472    box-shadow: 0 0 0 2px rgba(34, 113, 177, 0.15);
     473    outline: none;
     474}
     475
     476.advmo-checkbox-option input[type="text"]#path_prefix:disabled {
     477    background-color: var(--advmo-color-bg-subtle);
     478    color: var(--advmo-color-text-muted);
    344479    cursor: not-allowed;
     480    border-color: var(--advmo-color-border-light);
    345481}
    346482
     
    351487
    352488    .advmo-checkbox-option input[type="checkbox"] {
    353         width: 25px;
    354         height: 25px;
     489        width: 20px;
     490        height: 20px;
    355491    }
    356492
    357493    .advmo-checkbox-option label {
    358         line-height: 25px;
    359     }
    360 }
    361 
     494        line-height: 1.4;
     495        padding-top: 2px;
     496    }
     497}
     498
     499/* Code snippets */
    362500.advmo-code-snippet {
    363     margin-top: 20px;
    364     padding: 10px;
    365     border-radius: 3px;
    366     background-color: #f9f9f9;
    367     border: 1px;
    368 }
    369 
    370 /* Add Your CSS Codes Here */
     501    margin-top: var(--advmo-spacing-md);
     502    padding: var(--advmo-spacing-md);
     503    border-radius: var(--advmo-radius-sm);
     504    background-color: var(--advmo-color-bg-subtle);
     505    border: 1px solid var(--advmo-color-border-light);
     506    font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, monospace;
     507    font-size: 12px;
     508}
     509
     510/* ==========================================================================
     511   Page Layout and Header
     512   ========================================================================== */
    371513#wpcontent {
    372514    background: #f0f0f1;
     
    384526    display: flex;
    385527    flex-direction: row;
     528    align-items: center;
    386529    background: #fff;
    387     padding: 23px 30px;
    388 }
     530    padding: var(--advmo-spacing-lg);
     531    border-bottom: 1px solid var(--advmo-color-border-light);
     532}
     533
    389534.advmo-topbar .advmo-header h1 {
    390     font-size: 1.1rem;
     535    font-size: 15px;
     536    font-weight: 600;
    391537    display: flex;
    392538    align-items: center;
    393     gap: 0.6rem;
    394     color: #424242;
     539    gap: var(--advmo-spacing-sm);
     540    color: var(--advmo-color-text-primary);
     541    margin: 0;
     542    letter-spacing: -0.01em;
    395543}
    396544
     
    398546    display: flex;
    399547    align-items: center;
    400     font-size: clamp(14px, 1.5vw, 16px);
     548    font-size: 13px;
    401549    font-weight: 500;
    402550    margin-left: auto;
    403551    text-decoration: none;
    404     color: #6f6f84;
     552    color: var(--advmo-color-text-secondary);
    405553    outline: none !important;
    406554    box-shadow: none !important;
    407 }
    408 
    409 .advmo-topbar .advmo-header a:active,
    410 .advmo-topbar .advmo-header a :hover {
    411     color: #3a3a56;
     555    padding: var(--advmo-spacing-xs) var(--advmo-spacing-sm);
     556    border-radius: var(--advmo-radius-sm);
     557    transition: all var(--advmo-transition-fast);
     558}
     559
     560.advmo-topbar .advmo-header a:hover {
     561    color: var(--advmo-color-text-primary);
     562    background: var(--advmo-color-bg-subtle);
    412563}
    413564
    414565.advmo-topbar .advmo-header a svg {
    415     margin-right: 6px;
    416 }
    417 
     566    margin-right: var(--advmo-spacing-xs);
     567}
     568
     569/* Navigation Menu */
    418570.advmo-topbar .advmo-menu {
    419     padding: 0 30px;
     571    padding: 0 var(--advmo-spacing-lg);
     572    background: #fff;
    420573}
    421574
     
    423576    display: flex;
    424577    flex-wrap: wrap;
    425     border-bottom: 1px solid #dadadf;
     578    gap: var(--advmo-spacing-lg);
     579    border-bottom: 1px solid var(--advmo-color-border);
    426580}
    427581
    428582.advmo-topbar .advmo-menu nav a {
    429     padding: 20.5px 0 17.5px;
     583    padding: var(--advmo-spacing-md) 0;
    430584    text-decoration: none;
    431     font-size: 15px;
    432     line-height: 18px;
    433     color: #3a3a56;
    434     margin-right: 30px;
     585    font-size: 13px;
     586    font-weight: 500;
     587    line-height: 1.4;
     588    color: var(--advmo-color-text-secondary);
    435589    outline: none;
    436590    box-shadow: none;
    437     border-bottom: 3px solid rgba(0, 0, 0, 0);
     591    border-bottom: 2px solid transparent;
    438592    margin-bottom: -1px;
    439     transition: all 0.2s ease;
     593    transition: all var(--advmo-transition-fast);
    440594}
    441595
    442596.advmo-topbar .advmo-menu nav a:hover {
    443     border-bottom: 3px solid #1a325e;
     597    color: var(--advmo-color-text-primary);
     598    border-bottom-color: var(--advmo-color-border);
    444599}
    445600
    446601.advmo-topbar .advmo-menu nav a.active,
    447 .advmo-topbar.advmo-menu nav a:focus {
    448     color: #09092c;
    449     font-weight: 500;
    450     border-color: #1a325e;
     602.advmo-topbar .advmo-menu nav a:focus {
     603    color: var(--advmo-color-accent);
     604    border-bottom-color: var(--advmo-color-accent);
    451605}
    452606
     
    455609    text-align: left;
    456610    white-space: pre-wrap;
    457     background: #f0f0f1;
    458     padding: 10px;
    459     border-radius: 3px;
    460 }
    461 
    462 /* Credential fields styles */
     611    word-break: break-all;
     612}
     613
     614/* ==========================================================================
     615   Credential Fields - Clean form layout for sensitive data
     616   ========================================================================== */
    463617.advmo-credentials-container {
    464     margin-top: 15px;
    465 }
    466 
     618    margin-top: 0;
     619}
     620
     621/* Info notices - subtle, non-competing with form fields */
    467622.advmo-credentials-info {
    468     padding: 12px;
    469     margin-bottom: 20px;
    470     border-left: 4px solid #72aee6;
     623    padding: var(--advmo-spacing-md);
     624    margin-bottom: var(--advmo-spacing-lg);
     625    background: #f0f6fc;
     626    border: 1px solid #c5d9ed;
     627    border-radius: var(--advmo-radius-sm);
     628    border-left: none;
    471629}
    472630
    473631.advmo-credentials-info p {
    474632    margin: 0;
     633    font-size: 13px;
     634    line-height: 1.6;
     635    color: var(--advmo-color-text-secondary);
     636}
     637
     638.advmo-credentials-info strong {
     639    color: var(--advmo-color-text-primary);
     640}
     641
     642.advmo-credentials-info code {
     643    background: rgba(0, 0, 0, 0.06);
     644    padding: 2px 6px;
     645    border-radius: 3px;
     646    font-size: 12px;
     647}
     648
     649/* Provider description notice */
     650.advmo-provider-description {
     651    margin-bottom: var(--advmo-spacing-lg) !important;
     652    padding: var(--advmo-spacing-md) !important;
     653    background: #f0f6fc !important;
     654    border: 1px solid #c5d9ed !important;
     655    border-radius: var(--advmo-radius-sm) !important;
     656}
     657
     658.advmo-provider-description p {
     659    margin: 0 !important;
     660    font-size: 13px;
     661    line-height: 1.6;
     662    color: var(--advmo-color-text-secondary);
    475663}
    476664
    477665.advmo-credential-fields {
    478     display: flex;
    479     flex-direction: column;
    480     gap: 20px;
    481     margin-bottom: 20px;
     666    display: grid;
     667    grid-template-columns: 1fr;
     668    gap: var(--advmo-spacing-lg);
     669    margin-bottom: var(--advmo-spacing-lg);
    482670}
    483671
     
    485673    display: flex;
    486674    flex-direction: column;
    487     gap: 8px;
     675    gap: var(--advmo-spacing-xs);
    488676}
    489677
    490678.advmo-credential-field label {
    491679    font-weight: 600;
    492     color: #1d2327;
     680    font-size: 13px;
     681    color: var(--advmo-color-text-primary);
    493682    display: block;
    494683}
     
    496685.advmo-credential-field input[type="text"],
    497686.advmo-credential-field input[type="password"] {
    498     padding: 8px 12px;
    499     border: 1px solid #8c8f94;
    500     border-radius: 4px;
     687    padding: 10px 12px;
     688    border: 1px solid var(--advmo-color-border);
     689    border-radius: var(--advmo-radius-sm);
    501690    font-size: 14px;
    502     line-height: 1.5;
     691    line-height: 1.4;
    503692    background-color: #fff;
    504     transition: border-color 0.2s ease;
     693    transition: border-color var(--advmo-transition-fast), box-shadow var(--advmo-transition-fast);
     694}
     695
     696.advmo-credential-field input[type="text"]:hover,
     697.advmo-credential-field input[type="password"]:hover {
     698    border-color: var(--advmo-color-accent);
    505699}
    506700
    507701.advmo-credential-field input[type="text"]:focus,
    508702.advmo-credential-field input[type="password"]:focus {
    509     border-color: #2271b1;
     703    border-color: var(--advmo-color-accent);
    510704    outline: none;
    511     box-shadow: 0 0 0 1px #2271b1;
     705    box-shadow: 0 0 0 2px rgba(34, 113, 177, 0.15);
    512706}
    513707
    514708.advmo-credential-field .description {
    515709    margin: 0;
    516     font-size: 13px;
    517     color: #646970;
     710    font-size: 12px;
     711    line-height: 1.5;
     712    color: var(--advmo-color-text-muted);
    518713}
    519714
     
    589784}
    590785
    591 /* Connection status badge */
     786/* ==========================================================================
     787   Connection Status Badge - Clear success/warning states
     788   ========================================================================== */
    592789.advmo-connection-status {
    593790    display: inline-flex;
    594791    align-items: center;
    595     gap: 8px;
    596     padding: 12px 16px;
    597     border-radius: 6px;
    598     margin: 20px 0 15px 0;
    599     font-size: 14px;
     792    gap: var(--advmo-spacing-sm);
     793    padding: var(--advmo-spacing-md);
     794    border-radius: var(--advmo-radius-sm);
     795    margin: var(--advmo-spacing-lg) 0 var(--advmo-spacing-md) 0;
     796    font-size: 13px;
    600797    font-weight: 500;
    601     border-left: 4px solid;
    602     transition: all 0.3s ease;
    603     animation: slideIn 0.4s ease-out;
    604 }
    605 
    606 @keyframes slideIn {
     798    border: 1px solid;
     799    transition: all var(--advmo-transition-normal);
     800    animation: advmoSlideIn 0.3s ease-out;
     801}
     802
     803@keyframes advmoSlideIn {
    607804    from {
    608805        opacity: 0;
    609         transform: translateY(-10px);
     806        transform: translateY(-8px);
    610807    }
    611808    to {
     
    616813
    617814.advmo-connection-status.connected {
    618     background-color: #d4edda;
    619     border-color: #28a745;
    620     color: #155724;
     815    background-color: #ecfdf3;
     816    border-color: #a3e6cd;
     817    color: #065f46;
    621818}
    622819
    623820.advmo-connection-status.disconnected {
    624     background-color: #fff3cd;
    625     border-color: #ffc107;
    626     color: #856404;
     821    background-color: #fffbeb;
     822    border-color: #fde68a;
     823    color: #92400e;
    627824}
    628825
    629826.advmo-connection-status .dashicons {
    630     width: 20px;
    631     height: 20px;
    632     font-size: 20px;
    633 }
    634 
    635 .advmo-connection-status.connected .dashicons {
    636     color: #28a745;
    637 }
    638 
    639 .advmo-connection-status.disconnected .dashicons {
    640     color: #ffc107;
    641 }
    642 
    643 .advmo-status-text {
    644     font-weight: 600;
    645 }
    646 
    647 .advmo-status-time {
    648     color: inherit;
    649     opacity: 0.8;
    650     font-size: 13px;
    651     margin-left: 8px;
    652 }
    653 
    654 /* Credentials action buttons */
    655 .advmo-credentials-actions {
    656     display: flex;
    657     gap: 12px;
    658     align-items: center;
    659     margin-top: 5px;
    660     flex-wrap: wrap;
    661 }
    662 
    663 .advmo-save-credentials {
    664     font-size: 14px !important;
    665     padding: 8px 18px !important;
    666     height: auto;
    667     line-height: 1.5 !important;
    668     display: inline-flex !important;
    669     align-items: center;
    670     gap: 6px;
    671     font-weight: 500 !important;
    672 }
    673 
    674 .advmo-save-credentials .dashicons {
    675827    width: 18px;
    676828    height: 18px;
    677829    font-size: 18px;
     830    display: flex;
     831    align-items: center;
     832    justify-content: center;
     833}
     834
     835.advmo-connection-status.connected .dashicons {
     836    color: #059669;
     837}
     838
     839.advmo-connection-status.disconnected .dashicons {
     840    color: #d97706;
     841}
     842
     843.advmo-status-text {
     844    font-weight: 600;
     845}
     846
     847.advmo-status-time {
     848    color: inherit;
     849    opacity: 0.75;
     850    font-size: 12px;
     851    margin-left: var(--advmo-spacing-sm);
     852}
     853
     854/* ==========================================================================
     855   Action Buttons - Consistent button styling
     856   ========================================================================== */
     857.advmo-credentials-actions {
     858    display: flex;
     859    gap: var(--advmo-spacing-md);
     860    align-items: center;
     861    margin-top: var(--advmo-spacing-sm);
     862    flex-wrap: wrap;
     863}
     864
     865.advmo-save-credentials {
     866    font-size: 13px !important;
     867    padding: 8px 16px !important;
     868    height: auto !important;
     869    line-height: 1.5 !important;
     870    display: inline-flex !important;
     871    align-items: center;
     872    gap: var(--advmo-spacing-xs);
     873    font-weight: 500 !important;
     874    border-radius: var(--advmo-radius-sm) !important;
     875    transition: all var(--advmo-transition-fast) !important;
     876}
     877
     878.advmo-save-credentials .dashicons {
     879    width: 16px;
     880    height: 16px;
     881    font-size: 16px;
    678882    line-height: 1;
    679883    display: inline-flex;
    680884    align-items: center;
    681885    justify-content: center;
    682     margin-top: -1px;
    683886}
    684887
    685888.advmo_js_test_connection {
    686     font-size: 14px;
     889    font-size: 13px;
    687890    padding: 8px 16px;
    688891    height: auto;
    689892    line-height: 1.5;
    690     transition: all 0.2s ease;
     893    border-radius: var(--advmo-radius-sm);
     894    transition: all var(--advmo-transition-fast);
    691895}
    692896
     
    705909    content: "";
    706910    position: absolute;
    707     width: 16px;
    708     height: 16px;
     911    width: 14px;
     912    height: 14px;
    709913    top: 50%;
    710914    left: 50%;
    711     margin-left: -8px;
    712     margin-top: -8px;
    713     border: 2px solid #f3f3f3;
    714     border-top: 2px solid #2271b1;
     915    margin-left: -7px;
     916    margin-top: -7px;
     917    border: 2px solid rgba(0, 0, 0, 0.1);
     918    border-top-color: var(--advmo-color-accent);
    715919    border-radius: 50%;
    716     animation: spin 0.8s linear infinite;
    717 }
    718 
    719 @keyframes spin {
     920    animation: advmoSpin 0.6s linear infinite;
     921}
     922
     923@keyframes advmoSpin {
    720924    0% { transform: rotate(0deg); }
    721925    100% { transform: rotate(360deg); }
    722926}
    723927
    724 /* Responsive adjustments */
     928/* Responsive adjustments for credentials */
    725929@media screen and (max-width: 782px) {
    726930    .advmo-credential-fields {
    727         gap: 15px;
     931        gap: var(--advmo-spacing-md);
    728932    }
    729933   
     
    742946    .advmo-status-time {
    743947        flex-basis: 100%;
    744         margin-left: 28px;
    745         margin-top: 4px;
     948        margin-left: 26px;
     949        margin-top: var(--advmo-spacing-xs);
    746950    }
    747951   
    748952    .advmo-credentials-actions {
    749         gap: 10px;
     953        gap: var(--advmo-spacing-sm);
    750954        width: 100%;
    751955    }
     
    755959        flex: 1;
    756960        justify-content: center;
    757         min-width: 140px;
     961        min-width: 130px;
    758962    }
    759963}
     
    783987.advmo-section-overlay::after {
    784988    content: "";
    785     width: 40px;
    786     height: 40px;
    787     border: 4px solid #f3f3f3;
    788     border-top: 4px solid #2271b1;
     989    width: 32px;
     990    height: 32px;
     991    border: 3px solid rgba(0, 0, 0, 0.1);
     992    border-top-color: var(--advmo-color-accent);
    789993    border-radius: 50%;
    790     animation: spin 0.8s linear infinite;
     994    animation: advmoSpin 0.6s linear infinite;
    791995}
    792996
     
    8001004    content: "";
    8011005    position: absolute;
    802     width: 16px;
    803     height: 16px;
     1006    width: 14px;
     1007    height: 14px;
    8041008    top: 50%;
    8051009    left: 50%;
    806     margin-left: -8px;
    807     margin-top: -8px;
    808     border: 2px solid #f3f3f3;
    809     border-top: 2px solid #2271b1;
     1010    margin-left: -7px;
     1011    margin-top: -7px;
     1012    border: 2px solid rgba(255, 255, 255, 0.3);
     1013    border-top-color: #fff;
    8101014    border-radius: 50%;
    811     animation: spin 0.8s linear infinite;
    812     opacity: 1;
     1015    animation: advmoSpin 0.6s linear infinite;
    8131016}
    8141017
     
    8281031    content: "";
    8291032    position: absolute;
    830     width: 16px;
    831     height: 16px;
     1033    width: 14px;
     1034    height: 14px;
    8321035    top: 50%;
    8331036    left: 50%;
    834     margin-left: -8px;
    835     margin-top: -8px;
    836     border: 2px solid #f3f3f3;
    837     border-top: 2px solid #2271b1;
     1037    margin-left: -7px;
     1038    margin-top: -7px;
     1039    border: 2px solid rgba(255, 255, 255, 0.3);
     1040    border-top-color: #fff;
    8381041    border-radius: 50%;
    839     animation: spin 0.8s linear infinite;
     1042    animation: advmoSpin 0.6s linear infinite;
    8401043}
    8411044
     
    8491052#advmo .button-primary.success,
    8501053.advmo-save-credentials.success {
    851     background-color: #00a32a !important;
    852     border-color: #00a32a !important;
    853     animation: successPulse 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
    854     transition: background-color 0.3s ease, border-color 0.3s ease;
     1054    background-color: var(--advmo-color-success) !important;
     1055    border-color: var(--advmo-color-success) !important;
     1056    animation: advmoSuccessPulse 0.4s ease;
     1057    transition: background-color var(--advmo-transition-normal), border-color var(--advmo-transition-normal);
    8551058}
    8561059
    8571060#advmo .button-primary.success .dashicons,
    8581061.advmo-save-credentials.success .dashicons {
    859     animation: checkmarkAppear 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) 0.1s backwards;
    860 }
    861 
    862 @keyframes successPulse {
     1062    animation: advmoCheckmarkAppear 0.3s ease 0.1s backwards;
     1063}
     1064
     1065@keyframes advmoSuccessPulse {
    8631066    0% {
    8641067        transform: scale(1);
    8651068    }
    8661069    50% {
    867         transform: scale(1.08);
     1070        transform: scale(1.04);
    8681071    }
    8691072    100% {
     
    8721075}
    8731076
    874 @keyframes checkmarkAppear {
     1077@keyframes advmoCheckmarkAppear {
    8751078    0% {
    8761079        opacity: 0;
    877         transform: scale(0.5) rotate(-10deg);
     1080        transform: scale(0.6);
    8781081    }
    8791082    100% {
    8801083        opacity: 1;
    881         transform: scale(1) rotate(0deg);
     1084        transform: scale(1);
    8821085    }
    8831086}
     
    8911094/* Error messages for AJAX */
    8921095.advmo-ajax-error {
    893     animation: slideDown 0.3s ease-out;
    894 }
    895 
    896 @keyframes slideDown {
     1096    animation: advmoSlideDown 0.3s ease-out;
     1097}
     1098
     1099@keyframes advmoSlideDown {
    8971100    from {
    8981101        opacity: 0;
    899         transform: translateY(-10px);
     1102        transform: translateY(-8px);
    9001103    }
    9011104    to {
  • advanced-media-offloader/trunk/includes/Abstracts/S3_Provider.php

    r3422598 r3433301  
    6666    {
    6767        $client = $this->getClient();
     68
     69        // Allow filtering/disabling ACL. Return empty string or false to omit ACL.
     70        $acl = apply_filters('advmo_object_acl', 'public-read', $file, $key);
     71
     72        $params = [
     73            'Bucket' => $this->getBucket(),
     74            'Key' => $key,
     75            'SourceFile' => $file,
     76        ];
     77
     78        // Only add ACL if a non-empty value is provided
     79        if (!empty($acl)) {
     80            $params['ACL'] = $acl;
     81        }
     82
    6883        try {
    69             $result = $client->putObject([
    70                 'Bucket' => $this->getBucket(),
    71                 'Key' => $key,
    72                 'SourceFile' => $file,
    73                 'ACL' => 'public-read',
    74             ]);
     84            $result = $client->putObject($params);
    7585            return $client->getObjectUrl($this->getBucket(), $key);
    7686        } catch (\Exception $e) {
  • advanced-media-offloader/trunk/includes/Admin/GeneralSettings.php

    r3401549 r3433301  
    264264        echo '<div class="advmo-radio-option">';
    265265        echo '<input type="radio" id="retention_policy" name="advmo_settings[retention_policy]" value="0" ' . checked(0, $retention_policy, false) . '/>';
    266         echo '<label for="retention_policy_none">' . esc_html__('Retain Local Files', 'advanced-media-offloader') . '</label>';
     266        echo '<label for="retention_policy">' . esc_html__('Retain Local Files', 'advanced-media-offloader') . '</label>';
    267267        echo '<p class="description">' . esc_html__('Keep all files on your local server after offloading to the cloud. This option provides redundancy but uses more local storage.', 'advanced-media-offloader') . '</p>';
    268268        echo '</div>';
  • advanced-media-offloader/trunk/includes/BulkOffloadHandler.php

    r3422598 r3433301  
    298298
    299299                // Skip massive files entirely (> 10MB)
    300                 if ($file_size > 10) {
     300                if ($file_size > 25) {
    301301                    $error_msg = sprintf(
    302302                        __('File exceeds maximum size (%s MB) for bulk processing', 'advanced-media-offloader'),
    303                         '10'
     303                        '25'
    304304                    );
    305305                    update_post_meta($attachment_id, 'advmo_error_log', $error_msg);
     
    359359
    360360                    // Skip massive files
    361                     if ($file_size > 100) {
     361                    if ($file_size > 25) {
    362362                        continue;
    363363                    }
  • advanced-media-offloader/trunk/includes/CLI/OffloadCommand.php

    r3396217 r3433301  
    301301                );
    302302            } else {
    303                 $query = $wpdb->prepare(
    304                     "SELECT p.ID FROM {$wpdb->posts} p
     303                // No user-supplied values, so no need for prepare()
     304                // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table names are from $wpdb
     305                $query = "SELECT p.ID FROM {$wpdb->posts} p
    305306                    LEFT JOIN {$wpdb->postmeta} pm1 ON p.ID = pm1.post_id AND pm1.meta_key = 'advmo_offloaded'
    306307                    LEFT JOIN {$wpdb->postmeta} pm2 ON p.ID = pm2.post_id AND pm2.meta_key = 'advmo_error_log'
     
    308309                    AND (pm1.meta_value IS NULL OR pm1.meta_value = '')
    309310                    AND pm2.meta_id IS NULL
    310                     ORDER BY p.post_date ASC"
    311                 );
     311                    ORDER BY p.post_date ASC";
    312312            }
    313313        } else {
     
    324324                );
    325325            } else {
    326                 $query = $wpdb->prepare(
    327                     "SELECT p.ID FROM {$wpdb->posts} p
     326                // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table names are from $wpdb
     327                $query = "SELECT p.ID FROM {$wpdb->posts} p
    328328                    LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = 'advmo_offloaded'
    329329                    WHERE p.post_type = 'attachment'
    330330                    AND (pm.meta_value IS NULL OR pm.meta_value = '')
    331                     ORDER BY p.post_date ASC"
    332                 );
     331                    ORDER BY p.post_date ASC";
    333332            }
    334333        }
  • advanced-media-offloader/trunk/readme.txt

    r3422598 r3433301  
    66Tested up to: 6.9
    77Requires PHP: 8.1
    8 Stable tag: 4.3.0
     8Stable tag: 4.3.1
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    4646* **Mirror Deletion** - Optionally remove files from cloud storage when deleted from WordPress
    4747* **Custom Paths** - Configure custom path prefixes in your cloud storage
    48 * **Developer-Friendly** - Action hooks for extending functionality
    49 
     48* **Developer-Friendly** - Extensive action and filter hooks for extending functionality ([View Documentation](https://wpfitter.com/documents/advanced-media-offloader/development-hooks/))
     49
     50= Developer Documentation =
     51
     52For developers looking to extend or customize the plugin behavior, we provide comprehensive documentation for all available hooks:
     53
     54**[View Developer Hooks Documentation →](https://wpfitter.com/documents/advanced-media-offloader/development-hooks/)**
     55
     56Quick example - skip offloading files larger than 5MB:
     57
     58`
     59add_filter('advmo_should_offload_attachment', function($should_offload, $attachment_id) {
     60    $file = get_attached_file($attachment_id);
     61    if ($file && filesize($file) > 5 * 1024 * 1024) {
     62        return false;
     63    }
     64    return $should_offload;
     65}, 10, 2);
     66`
    5067
    5168== Installation ==
     
    100117    define('ADVMO_AWS_SECRET', 'your-secret-key');
    101118    define('ADVMO_AWS_BUCKET', 'your-bucket-name');
    102     define('ADVMO_AWS_REGION', 'your-bukcet-region');
     119    define('ADVMO_AWS_REGION', 'your-bucket-region');
    103120    define('ADVMO_AWS_DOMAIN', 'your-domain-url');
    104121`
     
    119136    define('ADVMO_WASABI_SECRET', 'your-secret-key');
    120137    define('ADVMO_WASABI_BUCKET', 'your-bucket-name');
    121     define('ADVMO_WASABI_REGION', 'your-bukcet-region');
     138    define('ADVMO_WASABI_REGION', 'your-bucket-region');
    122139    define('ADVMO_WASABI_DOMAIN', 'your-domain-url');
    123140`
     
    1691864. Consider using a CDN for global distributions
    170187
     188= How do I configure public access for my bucket? =
     189
     190By default, the plugin sets `public-read` ACL on uploaded objects. However, some providers don't support ACLs, and AWS S3 has ACLs disabled by default on new buckets since April 2023. You should configure bucket-level public access using your provider's bucket policies.
     191
     192If you encounter `AccessControlListNotSupported` errors or need to disable ACLs, add the following code to your theme's `functions.php` or a custom plugin:
     193
     194`
     195add_filter('advmo_object_acl', '__return_false');
     196`
     197
    171198== Changelog ==
     199= 4.3.1 =
     200* Added: `advmo_object_acl` filter to customize or disable object-level ACL permissions
     201
    172202= 4.3.0 =
    173203* Added: New visual badges in Media Library show offload status at a glance. Cloud icon for offloaded files, warning icon for failed uploads.
     
    358388
    359389== Upgrade Notice ==
     390= 4.3.1 =
     391New `advmo_object_acl` filter allows disabling ACLs for providers like Cloudflare R2 or AWS S3 buckets with ACLs disabled.
     392
    360393= 4.3.0 =
    361394New visual badges in Media Library show offload status at a glance. Cloud icon for offloaded files, warning icon for failed uploads.
  • advanced-media-offloader/trunk/utility-functions.php

    r3422598 r3433301  
    1515        if (file_exists(ADVMO_PATH . 'templates/' . $template . '.php')) {
    1616            include ADVMO_PATH . 'templates/' . $template . '.php';
    17         }
    18     }
    19 }
    20 
    21 /**
    22  * Debug function to var_dump a variable.
    23  *
    24  * @param mixed $var The variable to dump.
    25  * @param bool $die Whether to die after dumping.
    26  * @return void
    27  */
    28 if (!function_exists('advmo_vd')) {
    29     function advmo_vd($var, bool $die = false): void
    30     {
    31         echo '<pre style="direction: ltr">';
    32         var_dump($var);
    33         echo '</pre>';
    34         if ($die) {
    35             die();
    3617        }
    3718    }
  • advanced-media-offloader/trunk/vendor/composer/installed.php

    r3422598 r3433301  
    33namespace WPFitter;
    44
    5 return array('root' => array('name' => '__root__', 'pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '90c2aedf97f6918149117e98944ea9318dc92461', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \false), 'versions' => array('__root__' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => '90c2aedf97f6918149117e98944ea9318dc92461', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'aws/aws-crt-php' => array('pretty_version' => 'v1.2.7', 'version' => '1.2.7.0', 'reference' => 'd71d9906c7bb63a28295447ba12e74723bd3730e', 'type' => 'library', 'install_path' => __DIR__ . '/../aws/aws-crt-php', 'aliases' => array(), 'dev_requirement' => \false), 'aws/aws-sdk-php' => array('pretty_version' => '3.334.6', 'version' => '3.334.6.0', 'reference' => '2b0be3aded849d3b7bb0b53ea3295c7cecdeeee7', 'type' => 'library', 'install_path' => __DIR__ . '/../aws/aws-sdk-php', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/guzzle' => array('pretty_version' => '7.9.2', 'version' => '7.9.2.0', 'reference' => 'd281ed313b989f213357e3be1a179f02196ac99b', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/promises' => array('pretty_version' => '2.0.4', 'version' => '2.0.4.0', 'reference' => 'f9c436286ab2892c7db7be8c8da4ef61ccf7b455', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/psr7' => array('pretty_version' => '2.7.0', 'version' => '2.7.0.0', 'reference' => 'a70f5c95fb43bc83f07c9c948baa0dc1829bf201', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => \false), 'mtdowling/jmespath.php' => array('pretty_version' => '2.8.0', 'version' => '2.8.0.0', 'reference' => 'a2a865e05d5f420b50cc2f85bb78d565db12a6bc', 'type' => 'library', 'install_path' => __DIR__ . '/../mtdowling/jmespath.php', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client' => array('pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-factory' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-message' => array('pretty_version' => '2.0', 'version' => '2.0.0.0', 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-message-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'ralouphie/getallheaders' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.5.1', 'version' => '3.5.1.0', 'reference' => '74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-mbstring' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => \false)));
     5return array('root' => array('name' => '__root__', 'pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'e93db3193fa9abd81f6214fe25b042775a80d99a', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \false), 'versions' => array('__root__' => array('pretty_version' => 'dev-main', 'version' => 'dev-main', 'reference' => 'e93db3193fa9abd81f6214fe25b042775a80d99a', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'aws/aws-crt-php' => array('pretty_version' => 'v1.2.7', 'version' => '1.2.7.0', 'reference' => 'd71d9906c7bb63a28295447ba12e74723bd3730e', 'type' => 'library', 'install_path' => __DIR__ . '/../aws/aws-crt-php', 'aliases' => array(), 'dev_requirement' => \false), 'aws/aws-sdk-php' => array('pretty_version' => '3.334.6', 'version' => '3.334.6.0', 'reference' => '2b0be3aded849d3b7bb0b53ea3295c7cecdeeee7', 'type' => 'library', 'install_path' => __DIR__ . '/../aws/aws-sdk-php', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/guzzle' => array('pretty_version' => '7.9.2', 'version' => '7.9.2.0', 'reference' => 'd281ed313b989f213357e3be1a179f02196ac99b', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/promises' => array('pretty_version' => '2.0.4', 'version' => '2.0.4.0', 'reference' => 'f9c436286ab2892c7db7be8c8da4ef61ccf7b455', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/psr7' => array('pretty_version' => '2.7.0', 'version' => '2.7.0.0', 'reference' => 'a70f5c95fb43bc83f07c9c948baa0dc1829bf201', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => \false), 'mtdowling/jmespath.php' => array('pretty_version' => '2.8.0', 'version' => '2.8.0.0', 'reference' => 'a2a865e05d5f420b50cc2f85bb78d565db12a6bc', 'type' => 'library', 'install_path' => __DIR__ . '/../mtdowling/jmespath.php', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client' => array('pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-factory' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-message' => array('pretty_version' => '2.0', 'version' => '2.0.0.0', 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-message-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'ralouphie/getallheaders' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.5.1', 'version' => '3.5.1.0', 'reference' => '74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/polyfill-mbstring' => array('pretty_version' => 'v1.31.0', 'version' => '1.31.0.0', 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => \false)));
Note: See TracChangeset for help on using the changeset viewer.