Changeset 3433301
- Timestamp:
- 01/06/2026 07:36:06 AM (3 months ago)
- Location:
- advanced-media-offloader/trunk
- Files:
-
- 9 edited
-
advanced-media-offloader.php (modified) (1 diff)
-
assets/css/admin.css (modified) (26 diffs)
-
includes/Abstracts/S3_Provider.php (modified) (1 diff)
-
includes/Admin/GeneralSettings.php (modified) (1 diff)
-
includes/BulkOffloadHandler.php (modified) (2 diffs)
-
includes/CLI/OffloadCommand.php (modified) (3 diffs)
-
readme.txt (modified) (6 diffs)
-
utility-functions.php (modified) (1 diff)
-
vendor/composer/installed.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
advanced-media-offloader/trunk/advanced-media-offloader.php
r3422598 r3433301 4 4 * Plugin URI: https://wpfitter.com/plugins/advanced-media-offloader/ 5 5 * 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. 06 * Version: 4.3.1 7 7 * Requires at least: 5.6 8 8 * 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 1 33 /* General styles */ 2 34 #advmo .wrap { 3 35 max-width: 1280px; 4 36 margin: 0 auto; 5 padding: 0 30px;37 padding: 0 var(--advmo-spacing-lg); 6 38 } 7 39 8 40 /* Form styles */ 9 41 #advmo form { 10 margin-top: 20px;42 margin-top: var(--advmo-spacing-lg); 11 43 } 12 44 … … 20 52 #advmo .form-table th { 21 53 font-weight: 600; 22 padding: 20px 10px 20px0;54 padding: var(--advmo-spacing-lg) var(--advmo-spacing-md) var(--advmo-spacing-lg) 0; 23 55 width: 200px; 24 56 vertical-align: top; 57 color: var(--advmo-color-text-primary); 58 font-size: 13px; 59 line-height: 1.5; 25 60 } 26 61 27 62 #advmo .form-table td { 28 padding: 20px 10px;63 padding: var(--advmo-spacing-lg) var(--advmo-spacing-md); 29 64 vertical-align: top; 30 65 } … … 36 71 width: 100%; 37 72 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; 41 95 } 42 96 43 97 /* Checkbox style */ 44 98 #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 */ 49 103 #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; 53 109 } 54 110 … … 80 136 /* Notification styles */ 81 137 #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; 85 144 } 86 145 87 146 #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; 91 150 } 92 151 93 152 #advmo .advmo-notification.error { 94 background-color: #f 2dede;95 border : 1px solid #ebccd1;96 color: # a94442;153 background-color: #fef2f2; 154 border-color: #fecaca; 155 color: #991b1b; 97 156 } 98 157 … … 104 163 /* Feedback Messages */ 105 164 .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; 111 172 } 112 173 113 174 @media screen and (max-width: 782px) { 114 175 .advmo-last-check { 115 width: 100%;176 max-width: 100%; 116 177 } 117 178 } 118 179 119 180 .advmo-last-check.connected { 120 background: #e dfaef;121 color: # 287d3c;122 border- left: 4px solid #28a745;181 background: #ecfdf3; 182 color: #065f46; 183 border-color: #a3e6cd; 123 184 } 124 185 125 186 .advmo-last-check.disconnected { 126 background: #f ff5f5;127 color: # da1414;128 border- left: 4px solid #dc3545;187 background: #fef2f2; 188 color: #991b1b; 189 border-color: #fecaca; 129 190 } 130 191 … … 175 236 } 176 237 177 /* Form table styles */ 238 /* ========================================================================== 239 Section Cards - Clean, modern card design 240 ========================================================================== */ 178 241 #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; 183 248 } 184 249 185 250 #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); 192 254 } 193 255 194 256 #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; 198 269 } 199 270 200 271 #advmo .form-table { 201 272 margin: 0; 273 background: #fff; 202 274 } 203 275 204 276 #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); 208 281 } 209 282 210 283 #advmo .form-table td { 211 border-bottom: 1px solid #f0f0f0; 284 border-bottom: 1px solid var(--advmo-color-border-light); 285 background: #fff; 212 286 } 213 287 … … 219 293 #advmo .form-table tbody tr th { 220 294 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 ========================================================================== */ 225 301 #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); 228 306 } 229 307 230 308 #advmo .button-primary { 231 background-color: #0073aa; /* WordPress blue */309 background-color: var(--advmo-color-accent); 232 310 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); 237 316 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); 239 319 } 240 320 241 321 #advmo .button-primary:hover, 242 322 #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 */ 247 334 @media screen and (max-width: 782px) { 248 335 #advmo .form-table th, 249 336 #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 ========================================================================== */ 254 344 .advmo-radio-group { 255 margin-bottom: 20px; 345 display: flex; 346 flex-direction: column; 347 gap: var(--advmo-spacing-md); 256 348 } 257 349 258 350 .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); 260 369 } 261 370 262 371 .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; 264 377 } 265 378 266 379 .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); 270 384 cursor: pointer; 385 color: var(--advmo-color-text-primary); 386 transition: color var(--advmo-transition-fast); 271 387 } 272 388 273 389 .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 */ 280 397 .advmo-radio-option input[type="radio"]:checked + label { 281 color: #0073aa;398 color: var(--advmo-color-text-primary); 282 399 } 283 400 284 401 @media screen and (max-width: 782px) { 285 402 .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 ========================================================================== */ 291 416 .advmo-checkbox-option { 292 margin-bottom: 20px;293 padding-left: 24px;294 417 position: relative; 418 padding-left: 28px; 419 margin-bottom: 0; 295 420 } 296 421 … … 298 423 position: absolute; 299 424 left: 0; 300 top: 5px; 425 top: 2px; 426 margin: 0; 427 cursor: pointer; 301 428 } 302 429 303 430 .advmo-checkbox-option label { 304 font-weight: bold; 431 font-weight: 600; 432 font-size: 13px; 305 433 cursor: pointer; 306 434 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); 308 438 } 309 439 310 440 .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 */ 317 448 .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 { 324 454 width: 100%; 325 max-width: 3 00px;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); 330 460 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); 344 479 cursor: not-allowed; 480 border-color: var(--advmo-color-border-light); 345 481 } 346 482 … … 351 487 352 488 .advmo-checkbox-option input[type="checkbox"] { 353 width: 2 5px;354 height: 2 5px;489 width: 20px; 490 height: 20px; 355 491 } 356 492 357 493 .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 */ 362 500 .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 ========================================================================== */ 371 513 #wpcontent { 372 514 background: #f0f0f1; … … 384 526 display: flex; 385 527 flex-direction: row; 528 align-items: center; 386 529 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 389 534 .advmo-topbar .advmo-header h1 { 390 font-size: 1.1rem; 535 font-size: 15px; 536 font-weight: 600; 391 537 display: flex; 392 538 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; 395 543 } 396 544 … … 398 546 display: flex; 399 547 align-items: center; 400 font-size: clamp(14px, 1.5vw, 16px);548 font-size: 13px; 401 549 font-weight: 500; 402 550 margin-left: auto; 403 551 text-decoration: none; 404 color: #6f6f84;552 color: var(--advmo-color-text-secondary); 405 553 outline: none !important; 406 554 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); 412 563 } 413 564 414 565 .advmo-topbar .advmo-header a svg { 415 margin-right: 6px; 416 } 417 566 margin-right: var(--advmo-spacing-xs); 567 } 568 569 /* Navigation Menu */ 418 570 .advmo-topbar .advmo-menu { 419 padding: 0 30px; 571 padding: 0 var(--advmo-spacing-lg); 572 background: #fff; 420 573 } 421 574 … … 423 576 display: flex; 424 577 flex-wrap: wrap; 425 border-bottom: 1px solid #dadadf; 578 gap: var(--advmo-spacing-lg); 579 border-bottom: 1px solid var(--advmo-color-border); 426 580 } 427 581 428 582 .advmo-topbar .advmo-menu nav a { 429 padding: 20.5px 0 17.5px;583 padding: var(--advmo-spacing-md) 0; 430 584 text-decoration: none; 431 font-size: 1 5px;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); 435 589 outline: none; 436 590 box-shadow: none; 437 border-bottom: 3px solid rgba(0, 0, 0, 0);591 border-bottom: 2px solid transparent; 438 592 margin-bottom: -1px; 439 transition: all 0.2s ease;593 transition: all var(--advmo-transition-fast); 440 594 } 441 595 442 596 .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); 444 599 } 445 600 446 601 .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); 451 605 } 452 606 … … 455 609 text-align: left; 456 610 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 ========================================================================== */ 463 617 .advmo-credentials-container { 464 margin-top: 15px; 465 } 466 618 margin-top: 0; 619 } 620 621 /* Info notices - subtle, non-competing with form fields */ 467 622 .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; 471 629 } 472 630 473 631 .advmo-credentials-info p { 474 632 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); 475 663 } 476 664 477 665 .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); 482 670 } 483 671 … … 485 673 display: flex; 486 674 flex-direction: column; 487 gap: 8px;675 gap: var(--advmo-spacing-xs); 488 676 } 489 677 490 678 .advmo-credential-field label { 491 679 font-weight: 600; 492 color: #1d2327; 680 font-size: 13px; 681 color: var(--advmo-color-text-primary); 493 682 display: block; 494 683 } … … 496 685 .advmo-credential-field input[type="text"], 497 686 .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); 501 690 font-size: 14px; 502 line-height: 1. 5;691 line-height: 1.4; 503 692 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); 505 699 } 506 700 507 701 .advmo-credential-field input[type="text"]:focus, 508 702 .advmo-credential-field input[type="password"]:focus { 509 border-color: #2271b1;703 border-color: var(--advmo-color-accent); 510 704 outline: none; 511 box-shadow: 0 0 0 1px #2271b1;705 box-shadow: 0 0 0 2px rgba(34, 113, 177, 0.15); 512 706 } 513 707 514 708 .advmo-credential-field .description { 515 709 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); 518 713 } 519 714 … … 589 784 } 590 785 591 /* Connection status badge */ 786 /* ========================================================================== 787 Connection Status Badge - Clear success/warning states 788 ========================================================================== */ 592 789 .advmo-connection-status { 593 790 display: inline-flex; 594 791 align-items: center; 595 gap: 8px;596 padding: 12px 16px;597 border-radius: 6px;598 margin: 20px 0 15px0;599 font-size: 1 4px;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; 600 797 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 { 607 804 from { 608 805 opacity: 0; 609 transform: translateY(- 10px);806 transform: translateY(-8px); 610 807 } 611 808 to { … … 616 813 617 814 .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; 621 818 } 622 819 623 820 .advmo-connection-status.disconnected { 624 background-color: #fff 3cd;625 border-color: #f fc107;626 color: # 856404;821 background-color: #fffbeb; 822 border-color: #fde68a; 823 color: #92400e; 627 824 } 628 825 629 826 .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 {675 827 width: 18px; 676 828 height: 18px; 677 829 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; 678 882 line-height: 1; 679 883 display: inline-flex; 680 884 align-items: center; 681 885 justify-content: center; 682 margin-top: -1px;683 886 } 684 887 685 888 .advmo_js_test_connection { 686 font-size: 1 4px;889 font-size: 13px; 687 890 padding: 8px 16px; 688 891 height: auto; 689 892 line-height: 1.5; 690 transition: all 0.2s ease; 893 border-radius: var(--advmo-radius-sm); 894 transition: all var(--advmo-transition-fast); 691 895 } 692 896 … … 705 909 content: ""; 706 910 position: absolute; 707 width: 1 6px;708 height: 1 6px;911 width: 14px; 912 height: 14px; 709 913 top: 50%; 710 914 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); 715 919 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 { 720 924 0% { transform: rotate(0deg); } 721 925 100% { transform: rotate(360deg); } 722 926 } 723 927 724 /* Responsive adjustments */928 /* Responsive adjustments for credentials */ 725 929 @media screen and (max-width: 782px) { 726 930 .advmo-credential-fields { 727 gap: 15px;931 gap: var(--advmo-spacing-md); 728 932 } 729 933 … … 742 946 .advmo-status-time { 743 947 flex-basis: 100%; 744 margin-left: 2 8px;745 margin-top: 4px;948 margin-left: 26px; 949 margin-top: var(--advmo-spacing-xs); 746 950 } 747 951 748 952 .advmo-credentials-actions { 749 gap: 10px;953 gap: var(--advmo-spacing-sm); 750 954 width: 100%; 751 955 } … … 755 959 flex: 1; 756 960 justify-content: center; 757 min-width: 1 40px;961 min-width: 130px; 758 962 } 759 963 } … … 783 987 .advmo-section-overlay::after { 784 988 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); 789 993 border-radius: 50%; 790 animation: spin 0.8s linear infinite;994 animation: advmoSpin 0.6s linear infinite; 791 995 } 792 996 … … 800 1004 content: ""; 801 1005 position: absolute; 802 width: 1 6px;803 height: 1 6px;1006 width: 14px; 1007 height: 14px; 804 1008 top: 50%; 805 1009 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; 810 1014 border-radius: 50%; 811 animation: spin 0.8s linear infinite; 812 opacity: 1; 1015 animation: advmoSpin 0.6s linear infinite; 813 1016 } 814 1017 … … 828 1031 content: ""; 829 1032 position: absolute; 830 width: 1 6px;831 height: 1 6px;1033 width: 14px; 1034 height: 14px; 832 1035 top: 50%; 833 1036 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; 838 1041 border-radius: 50%; 839 animation: spin 0.8s linear infinite;1042 animation: advmoSpin 0.6s linear infinite; 840 1043 } 841 1044 … … 849 1052 #advmo .button-primary.success, 850 1053 .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); 855 1058 } 856 1059 857 1060 #advmo .button-primary.success .dashicons, 858 1061 .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 { 863 1066 0% { 864 1067 transform: scale(1); 865 1068 } 866 1069 50% { 867 transform: scale(1.0 8);1070 transform: scale(1.04); 868 1071 } 869 1072 100% { … … 872 1075 } 873 1076 874 @keyframes checkmarkAppear {1077 @keyframes advmoCheckmarkAppear { 875 1078 0% { 876 1079 opacity: 0; 877 transform: scale(0. 5) rotate(-10deg);1080 transform: scale(0.6); 878 1081 } 879 1082 100% { 880 1083 opacity: 1; 881 transform: scale(1) rotate(0deg);1084 transform: scale(1); 882 1085 } 883 1086 } … … 891 1094 /* Error messages for AJAX */ 892 1095 .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 { 897 1100 from { 898 1101 opacity: 0; 899 transform: translateY(- 10px);1102 transform: translateY(-8px); 900 1103 } 901 1104 to { -
advanced-media-offloader/trunk/includes/Abstracts/S3_Provider.php
r3422598 r3433301 66 66 { 67 67 $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 68 83 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); 75 85 return $client->getObjectUrl($this->getBucket(), $key); 76 86 } catch (\Exception $e) { -
advanced-media-offloader/trunk/includes/Admin/GeneralSettings.php
r3401549 r3433301 264 264 echo '<div class="advmo-radio-option">'; 265 265 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>'; 267 267 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>'; 268 268 echo '</div>'; -
advanced-media-offloader/trunk/includes/BulkOffloadHandler.php
r3422598 r3433301 298 298 299 299 // Skip massive files entirely (> 10MB) 300 if ($file_size > 10) {300 if ($file_size > 25) { 301 301 $error_msg = sprintf( 302 302 __('File exceeds maximum size (%s MB) for bulk processing', 'advanced-media-offloader'), 303 ' 10'303 '25' 304 304 ); 305 305 update_post_meta($attachment_id, 'advmo_error_log', $error_msg); … … 359 359 360 360 // Skip massive files 361 if ($file_size > 100) {361 if ($file_size > 25) { 362 362 continue; 363 363 } -
advanced-media-offloader/trunk/includes/CLI/OffloadCommand.php
r3396217 r3433301 301 301 ); 302 302 } 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 305 306 LEFT JOIN {$wpdb->postmeta} pm1 ON p.ID = pm1.post_id AND pm1.meta_key = 'advmo_offloaded' 306 307 LEFT JOIN {$wpdb->postmeta} pm2 ON p.ID = pm2.post_id AND pm2.meta_key = 'advmo_error_log' … … 308 309 AND (pm1.meta_value IS NULL OR pm1.meta_value = '') 309 310 AND pm2.meta_id IS NULL 310 ORDER BY p.post_date ASC" 311 ); 311 ORDER BY p.post_date ASC"; 312 312 } 313 313 } else { … … 324 324 ); 325 325 } else { 326 $query = $wpdb->prepare(327 "SELECT p.ID FROM {$wpdb->posts} p326 // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table names are from $wpdb 327 $query = "SELECT p.ID FROM {$wpdb->posts} p 328 328 LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id AND pm.meta_key = 'advmo_offloaded' 329 329 WHERE p.post_type = 'attachment' 330 330 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"; 333 332 } 334 333 } -
advanced-media-offloader/trunk/readme.txt
r3422598 r3433301 6 6 Tested up to: 6.9 7 7 Requires PHP: 8.1 8 Stable tag: 4.3. 08 Stable tag: 4.3.1 9 9 License: GPLv2 or later 10 10 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 46 46 * **Mirror Deletion** - Optionally remove files from cloud storage when deleted from WordPress 47 47 * **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 52 For 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 56 Quick example - skip offloading files larger than 5MB: 57 58 ` 59 add_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 ` 50 67 51 68 == Installation == … … 100 117 define('ADVMO_AWS_SECRET', 'your-secret-key'); 101 118 define('ADVMO_AWS_BUCKET', 'your-bucket-name'); 102 define('ADVMO_AWS_REGION', 'your-bu kcet-region');119 define('ADVMO_AWS_REGION', 'your-bucket-region'); 103 120 define('ADVMO_AWS_DOMAIN', 'your-domain-url'); 104 121 ` … … 119 136 define('ADVMO_WASABI_SECRET', 'your-secret-key'); 120 137 define('ADVMO_WASABI_BUCKET', 'your-bucket-name'); 121 define('ADVMO_WASABI_REGION', 'your-bu kcet-region');138 define('ADVMO_WASABI_REGION', 'your-bucket-region'); 122 139 define('ADVMO_WASABI_DOMAIN', 'your-domain-url'); 123 140 ` … … 169 186 4. Consider using a CDN for global distributions 170 187 188 = How do I configure public access for my bucket? = 189 190 By 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 192 If 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 ` 195 add_filter('advmo_object_acl', '__return_false'); 196 ` 197 171 198 == Changelog == 199 = 4.3.1 = 200 * Added: `advmo_object_acl` filter to customize or disable object-level ACL permissions 201 172 202 = 4.3.0 = 173 203 * Added: New visual badges in Media Library show offload status at a glance. Cloud icon for offloaded files, warning icon for failed uploads. … … 358 388 359 389 == Upgrade Notice == 390 = 4.3.1 = 391 New `advmo_object_acl` filter allows disabling ACLs for providers like Cloudflare R2 or AWS S3 buckets with ACLs disabled. 392 360 393 = 4.3.0 = 361 394 New 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 15 15 if (file_exists(ADVMO_PATH . 'templates/' . $template . '.php')) { 16 16 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 void27 */28 if (!function_exists('advmo_vd')) {29 function advmo_vd($var, bool $die = false): void30 {31 echo '<pre style="direction: ltr">';32 var_dump($var);33 echo '</pre>';34 if ($die) {35 die();36 17 } 37 18 } -
advanced-media-offloader/trunk/vendor/composer/installed.php
r3422598 r3433301 3 3 namespace WPFitter; 4 4 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)));5 return 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.