Changeset 3251291
- Timestamp:
- 03/05/2025 07:09:12 PM (13 months ago)
- Location:
- cookielegit
- Files:
-
- 5 added
- 32 edited
- 1 copied
-
assets/banner-1544x500.png (added)
-
assets/banner-772x250.png (added)
-
assets/icon-128x128.png (added)
-
assets/icon-256x256.png (added)
-
assets/icon.svg (added)
-
tags/1.1.0 (copied) (copied from cookielegit/trunk)
-
tags/1.1.0/.distignore (modified) (1 diff)
-
tags/1.1.0/CHANGELOG.md (modified) (1 diff)
-
tags/1.1.0/assets/scripts/admin.js (modified) (1 diff)
-
tags/1.1.0/assets/scripts/public.js (modified) (3 diffs)
-
tags/1.1.0/assets/scripts/public/cookielegit.js (modified) (18 diffs)
-
tags/1.1.0/composer.json (modified) (2 diffs)
-
tags/1.1.0/composer.lock (modified) (6 diffs)
-
tags/1.1.0/cookie-legit-functions.php (modified) (2 diffs)
-
tags/1.1.0/cookie-legit.php (modified) (3 diffs)
-
tags/1.1.0/dist/admin.js (modified) (1 diff)
-
tags/1.1.0/dist/public.js (modified) (1 diff)
-
tags/1.1.0/readme.txt (modified) (2 diffs)
-
tags/1.1.0/src/admin/class-cookie-legit-admin-pages.php (modified) (1 diff)
-
tags/1.1.0/src/models/class-cookie-legit-settings.php (modified) (20 diffs)
-
tags/1.1.0/src/public/class-cookie-legit-notice.php (modified) (1 diff)
-
tags/1.1.0/view/admin/settings/partials/pixel_fields.php (modified) (1 diff)
-
trunk/.distignore (modified) (1 diff)
-
trunk/CHANGELOG.md (modified) (1 diff)
-
trunk/assets/scripts/admin.js (modified) (1 diff)
-
trunk/assets/scripts/public.js (modified) (3 diffs)
-
trunk/assets/scripts/public/cookielegit.js (modified) (18 diffs)
-
trunk/composer.json (modified) (2 diffs)
-
trunk/composer.lock (modified) (6 diffs)
-
trunk/cookie-legit-functions.php (modified) (2 diffs)
-
trunk/cookie-legit.php (modified) (3 diffs)
-
trunk/dist/admin.js (modified) (1 diff)
-
trunk/dist/public.js (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/src/admin/class-cookie-legit-admin-pages.php (modified) (1 diff)
-
trunk/src/models/class-cookie-legit-settings.php (modified) (20 diffs)
-
trunk/src/public/class-cookie-legit-notice.php (modified) (1 diff)
-
trunk/view/admin/settings/partials/pixel_fields.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
cookielegit/tags/1.1.0/.distignore
r3148254 r3251291 14 14 .travis.yml 15 15 tests 16 Dockerfile 17 docker-compose.yml 18 .env 19 .env.example 20 .php-cs-fixer.* -
cookielegit/tags/1.1.0/CHANGELOG.md
r3149580 r3251291 1 1 # Changelog 2 3 ## [1.1.0](https://github.com/WebdesignSeolab/cookie-legit/compare/v1.0.2...v1.1.0) (2025-03-05) 4 5 6 ### Features 7 8 * add function in setting class for single setting retrievel ([#17](https://github.com/WebdesignSeolab/cookie-legit/issues/17)) ([756d202](https://github.com/WebdesignSeolab/cookie-legit/commit/756d2028bad8401fe10b85542624f3a0febe0a04)) 9 * Google Tag Manager tag integration ([#20](https://github.com/WebdesignSeolab/cookie-legit/issues/20)) ([7e500ac](https://github.com/WebdesignSeolab/cookie-legit/commit/7e500acc983a3a72e13e83b8a1479248275d7026)) 2 10 3 11 ## [1.0.2](https://github.com/WebdesignSeolab/cookie-legit/compare/v1.0.1...v1.0.2) (2024-09-10) -
cookielegit/tags/1.1.0/assets/scripts/admin.js
r3148248 r3251291 12 12 if(active) { 13 13 $('.row-pixel:not(.row-google_tag_manager)').addClass('hide') 14 $('.row-google-tag').removeClass('hide') 14 15 } else { 16 $('.row-google-tag').addClass('hide') 15 17 $('.row-pixel:not(.row-google_tag_manager)').removeClass('hide') 16 18 } -
cookielegit/tags/1.1.0/assets/scripts/public.js
r3148281 r3251291 1 1 import CookieLegitNotice from "./public/cookielegit"; 2 3 window.cookieLegitGtmCaller = function(gtmConsentUpdate) { 4 CookieLegitNotice.subscribe('consent-given', gtmConsentUpdate) 5 } 2 6 3 7 jQuery(function($) { 4 8 5 9 const updateBlocked = function() { 6 console.log('should update screens')7 10 $("iframe[data-cl-src]").each(function() { 8 11 $(this).attr("src", $(this).attr("data-cl-src")); … … 15 18 } 16 19 17 CookieLegitNotice.subscribe("consent-given", updateBlocked); 20 CookieLegitNotice.subscribe('consent-given', updateBlocked); 21 22 let callCount = 0; 23 CookieLegitNotice.subscribe('consent-given', function(args) { 24 callCount++ 25 26 console.log(`Event 'consent-given' got called ${callCount} times with args: `, args) 27 }) 18 28 19 29 window.cookieLegitNotice = new CookieLegitNotice("body", { … … 21 31 userOpt: cl_config.user_opt !== "", 22 32 baseUrl: cl_config.ajax_url, 23 themeUrl: cl_config.themeUrl 33 themeUrl: cl_config.themeUrl, 34 googleTag: cl_config.googleTag !== '', 24 35 }); 25 36 }); -
cookielegit/tags/1.1.0/assets/scripts/public/cookielegit.js
r3148281 r3251291 7 7 #consentedTo = []; 8 8 9 CONSENT_SETTINGS_NAME = 'cl_cus'; 10 9 11 screens = ["notice", "preferences", "toggle-preferences"]; 10 12 … … 18 20 consentMode: false, 19 21 cookieDuration: 182, 20 themeUrl: null 22 themeUrl: null, 23 googleTag: false, 24 }; 25 26 consentCategories = { 27 cl_tracking: "marketingCookies", 28 cl_marketing: "advertisingCookies", 29 cl_essential: "essentialCookies", 21 30 }; 22 31 … … 38 47 39 48 buildStyle(cookieNotice) { 40 const tag = document.createElement( 'link');49 const tag = document.createElement("link"); 41 50 tag.href = this.#settings.themeUrl; 42 tag.rel = 'stylesheet';43 tag.id = 'cookielegit-css';51 tag.rel = "stylesheet"; 52 tag.id = "cookielegit-css"; 44 53 45 54 tag.onload = () => { 46 cookieNotice.style.display = '';47 } 55 cookieNotice.style.display = ""; 56 }; 48 57 49 58 document.head.append(tag); 50 51 59 } 52 60 … … 56 64 .forEach((cookie) => this.#consentedTo.push(cookie)); 57 65 58 if (this.#settings.consentMode && this.#consentedTo.length > 0) { 66 67 if (this.#consentedTo.length === 0) { 68 return; 69 } 70 71 if (this.#settings.consentMode && !this.#settings.googleTag) { 59 72 this.updateGTMConsent(); 60 } 61 62 if (this.#consentedTo.length > 0) { 73 63 74 CookieLegitNotice.#trigger('consent-given'); 64 } 75 76 return; 77 } 78 79 const googleConsentSettings = this.getTagConsentSettings(); 80 81 CookieLegitNotice.#trigger('consent-given', googleConsentSettings); 82 83 LegitCookies.create(this.CONSENT_SETTINGS_NAME, JSON.stringify(googleConsentSettings)); 65 84 } 66 85 … … 71 90 async insertNotice() { 72 91 let notice = await this.fetchNotice(); 92 73 93 this.#notice = document.createElement("div"); 94 74 95 this.#notice.id = "cookie-legit-notice-container"; 96 75 97 this.#notice.innerHTML = notice.html; 76 this.#notice.style.display = 'none'; 77 78 let screen = this.#consentedTo.length === 0 ? "notice" : "toggle-preferences"; 98 99 this.#notice.style.display = "none"; 100 101 let screen = 102 this.#consentedTo.length === 0 ? "notice" : "toggle-preferences"; 103 79 104 this.#notice.classList.add(screen); 80 105 81 106 this.#target.appendChild(this.#notice); 82 // this.changeScreen(screen); 107 83 108 this.setupEvents(); 84 109 … … 94 119 `${this.#settings.baseUrl}?action=get_cookie_notice` 95 120 ); 121 96 122 return await request.json(); 97 123 } … … 102 128 .querySelector(".cookie-legit-pref-btn") 103 129 .addEventListener("click", () => this.toggleUserPreferences()); 130 104 131 this.#notice 105 132 .querySelector(".cookie-legit-save-pref-btn") 106 133 .addEventListener("click", () => this.savePreferences()); 134 107 135 this.#notice 108 136 .querySelector(".cookie-legit-accept-pref-btn") … … 116 144 this.#notice 117 145 .querySelector(".cookie-legit-preferences-change") 118 .addEventListener("click", () => this.updatePreferences()); 146 .addEventListener("click", () => this.toggleUserPreferences()); 147 119 148 this.#notice 120 149 .querySelector(".cookie-legit-accept-btn") … … 136 165 savePreferences() { 137 166 this.changeScreen("toggle-preferences"); 167 138 168 this.cookieNames.forEach((cookieName) => { 139 169 let value = … … 143 173 LegitCookies.create(cookieName, value, this.#settings.cookieDuration); 144 174 }); 175 145 176 this.checkConsentCookies(); 146 177 } … … 148 179 updatePreferences() { 149 180 let screen = this.#settings.userOpt ? "preferences" : "notice"; 181 150 182 this.changeScreen(screen); 151 this.checkConsentCookies(); 152 CookieLegitNotice.#trigger('consent-updated'); 183 184 this.checkConsentCookies(); 185 186 CookieLegitNotice.#trigger("consent-updated"); 153 187 } 154 188 155 189 denyAllCookies() { 156 190 this.changeScreen("toggle-preferences"); 191 157 192 this.cookieNames.forEach((cookieName) => { 158 193 let value = cookieName === this.consentCookieName ? true : false; 159 194 LegitCookies.create(cookieName, value, this.#settings.cookieDuration); 160 195 }); 196 161 197 this.checkConsentCookies(); 162 198 } … … 166 202 (screen) => screen !== activeScreen 167 203 ); 204 168 205 this.#notice.classList.remove(...inactiveScreens); 206 169 207 this.#notice.classList.add(activeScreen); 170 208 } … … 180 218 181 219 async maybeInjectScripts() { 182 if (!this.#settings.userOpt || LegitCookies.find(this.consentCookieName) !== 'true') return; 220 if ( 221 !this.#settings.userOpt || 222 LegitCookies.find(this.consentCookieName) !== "true" 223 ) { 224 return; 225 } 226 183 227 let scriptReq = await fetch( 184 228 `${this.#settings.baseUrl}?action=get_tracking_scripts` … … 186 230 187 231 let scriptsWithPlacement = await scriptReq.json(); 232 188 233 for (const placement in scriptsWithPlacement) { 189 234 if (Object.hasOwnProperty.call(scriptsWithPlacement, placement)) { 235 190 236 const scripts = scriptsWithPlacement[placement]; 191 Object.values(scripts).forEach(script => { 237 238 Object.values(scripts).forEach((script) => { 239 192 240 if (!this.isJSON(script)) { 193 241 let tag = this.buildScript(placement, script); 242 194 243 document.querySelector(placement).append(tag); 195 244 } else { 196 245 script = JSON.parse(script); 246 197 247 for (const stype in script) { 248 198 249 if (Object.hasOwnProperty.call(script, stype)) { 199 250 const contents = script[stype]; 200 contents.forEach(content => { 201 let tag = this.buildScript(placement, content, stype === 'srcs'); 251 252 contents.forEach((content) => { 253 let tag = this.buildScript( 254 placement, 255 content, 256 stype === "srcs" 257 ); 258 202 259 document.querySelector(placement).append(tag); 203 }) 260 }); 204 261 } 205 262 } … … 219 276 0: "consent", 220 277 1: "update", 221 2: this.getGTMConsentObject() 278 2: this.getGTMConsentObject(), 222 279 }); 223 280 } … … 242 299 : "denied", 243 300 security_storage: "granted", 244 } 301 }; 245 302 } 246 303 247 304 isJSON(objectString) { 248 305 try { 249 let json = JSON.parse(objectString) 306 let json = JSON.parse(objectString); 250 307 } catch (e) { 251 308 return false; … … 256 313 257 314 buildScript(placement, scriptContent, isSrc = false) { 258 let tagName = placement === 'head' ? 'script' : 'noscript';315 let tagName = placement === "head" ? "script" : "noscript"; 259 316 let tag = document.createElement(tagName); 260 317 … … 268 325 } 269 326 327 getTagConsentSettings() { 328 const consentSettings = {}; 329 330 this.#consentedTo.forEach( consented => { 331 if (consented.name in this.consentCategories) { 332 consentSettings[this.consentCategories[consented.name]] = consented.value === "true"; 333 } 334 }); 335 336 return consentSettings; 337 } 338 270 339 static subscribe(event, callback) { 271 if (!this.#events[event]) 340 if (!this.#events[event]) { 272 341 return console.warn( 273 342 `Cannot subscribe to ${event} because it does not exist!` 274 343 ); 275 if (typeof callback !== "function") 344 } 345 346 if (typeof callback !== "function") { 276 347 return console.warn( 277 348 `Expected callback for ${event} got ${typeof callback}` 278 349 ); 350 } 351 279 352 this.#events[event].push(callback); 280 353 } 281 354 282 static #trigger(event ) {355 static #trigger(event, ...args) { 283 356 const callbacks = this.#events[event]; 284 357 285 if (!callbacks) return console.warn(`Cannot trigger ${event} because it does not exist!`); 358 if (!callbacks) 359 return console.warn(`Cannot trigger ${event} because it does not exist!`); 286 360 287 361 for (let callback of callbacks) { 288 callback( );362 callback(...args); 289 363 } 290 364 } -
cookielegit/tags/1.1.0/composer.json
r3148248 r3251291 9 9 "szepeviktor/phpstan-wordpress": "dev-master", 10 10 "wp-coding-standards/wpcs": "^3.0", 11 "phpstan/extension-installer": "1.4.x-dev" 11 "phpstan/extension-installer": "1.4.x-dev", 12 "friendsofphp/php-cs-fixer": "dev-master" 12 13 }, 13 14 "license": "GPL-3.0", … … 21 22 "name": "Cookie Legit", 22 23 "email": "devs@cookielegit.site" 24 }, 25 { 26 "name": "Duco Drupsteen", 27 "email": "duco@ducduc.nl" 23 28 } 24 29 ], -
cookielegit/tags/1.1.0/composer.lock
r3148248 r3251291 5 5 "This file is @generated automatically" 6 6 ], 7 "content-hash": "e 0db033eea721e161c8bae85bef572d4",7 "content-hash": "e85cbf755d5b1738dc56184df147b860", 8 8 "packages": [], 9 9 "packages-dev": [ 10 { 11 "name": "clue/ndjson-react", 12 "version": "1.x-dev", 13 "source": { 14 "type": "git", 15 "url": "https://github.com/clue/reactphp-ndjson.git", 16 "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e" 17 }, 18 "dist": { 19 "type": "zip", 20 "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/8fc557eaa902e4f1de171b5b4eaa6246fbe4118e", 21 "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e", 22 "shasum": "" 23 }, 24 "require": { 25 "php": ">=5.3", 26 "react/stream": "^1.2" 27 }, 28 "require-dev": { 29 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", 30 "react/event-loop": "^1.2" 31 }, 32 "default-branch": true, 33 "type": "library", 34 "autoload": { 35 "psr-4": { 36 "Clue\\React\\NDJson\\": "src/" 37 } 38 }, 39 "notification-url": "https://packagist.org/downloads/", 40 "license": [ 41 "MIT" 42 ], 43 "authors": [ 44 { 45 "name": "Christian Lück", 46 "email": "christian@clue.engineering" 47 } 48 ], 49 "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", 50 "homepage": "https://github.com/clue/reactphp-ndjson", 51 "keywords": [ 52 "NDJSON", 53 "json", 54 "jsonlines", 55 "newline", 56 "reactphp", 57 "streaming" 58 ], 59 "support": { 60 "issues": "https://github.com/clue/reactphp-ndjson/issues", 61 "source": "https://github.com/clue/reactphp-ndjson/tree/1.x" 62 }, 63 "funding": [ 64 { 65 "url": "https://clue.engineering/support", 66 "type": "custom" 67 }, 68 { 69 "url": "https://github.com/clue", 70 "type": "github" 71 } 72 ], 73 "time": "2023-11-24T09:04:50+00:00" 74 }, 75 { 76 "name": "composer/pcre", 77 "version": "dev-main", 78 "source": { 79 "type": "git", 80 "url": "https://github.com/composer/pcre.git", 81 "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49" 82 }, 83 "dist": { 84 "type": "zip", 85 "url": "https://api.github.com/repos/composer/pcre/zipball/deb3871d20d5012eb5faa5a9caa71c44f151db49", 86 "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49", 87 "shasum": "" 88 }, 89 "require": { 90 "php": "^7.4 || ^8.0" 91 }, 92 "conflict": { 93 "phpstan/phpstan": "<1.11.10" 94 }, 95 "require-dev": { 96 "phpstan/phpstan": "^1.12 || ^2", 97 "phpstan/phpstan-deprecation-rules": "^1 || ^2", 98 "phpstan/phpstan-strict-rules": "^1 || ^2", 99 "phpunit/phpunit": "^8 || ^9" 100 }, 101 "default-branch": true, 102 "type": "library", 103 "extra": { 104 "phpstan": { 105 "includes": [ 106 "extension.neon" 107 ] 108 }, 109 "branch-alias": { 110 "dev-main": "3.x-dev" 111 } 112 }, 113 "autoload": { 114 "psr-4": { 115 "Composer\\Pcre\\": "src" 116 } 117 }, 118 "notification-url": "https://packagist.org/downloads/", 119 "license": [ 120 "MIT" 121 ], 122 "authors": [ 123 { 124 "name": "Jordi Boggiano", 125 "email": "j.boggiano@seld.be", 126 "homepage": "http://seld.be" 127 } 128 ], 129 "description": "PCRE wrapping library that offers type-safe preg_* replacements.", 130 "keywords": [ 131 "PCRE", 132 "preg", 133 "regex", 134 "regular expression" 135 ], 136 "support": { 137 "issues": "https://github.com/composer/pcre/issues", 138 "source": "https://github.com/composer/pcre/tree/main" 139 }, 140 "funding": [ 141 { 142 "url": "https://packagist.com", 143 "type": "custom" 144 }, 145 { 146 "url": "https://github.com/composer", 147 "type": "github" 148 }, 149 { 150 "url": "https://tidelift.com/funding/github/packagist/composer/composer", 151 "type": "tidelift" 152 } 153 ], 154 "time": "2024-11-20T09:10:58+00:00" 155 }, 156 { 157 "name": "composer/semver", 158 "version": "dev-main", 159 "source": { 160 "type": "git", 161 "url": "https://github.com/composer/semver.git", 162 "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" 163 }, 164 "dist": { 165 "type": "zip", 166 "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", 167 "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", 168 "shasum": "" 169 }, 170 "require": { 171 "php": "^5.3.2 || ^7.0 || ^8.0" 172 }, 173 "require-dev": { 174 "phpstan/phpstan": "^1.11", 175 "symfony/phpunit-bridge": "^3 || ^7" 176 }, 177 "default-branch": true, 178 "type": "library", 179 "extra": { 180 "branch-alias": { 181 "dev-main": "3.x-dev" 182 } 183 }, 184 "autoload": { 185 "psr-4": { 186 "Composer\\Semver\\": "src" 187 } 188 }, 189 "notification-url": "https://packagist.org/downloads/", 190 "license": [ 191 "MIT" 192 ], 193 "authors": [ 194 { 195 "name": "Nils Adermann", 196 "email": "naderman@naderman.de", 197 "homepage": "http://www.naderman.de" 198 }, 199 { 200 "name": "Jordi Boggiano", 201 "email": "j.boggiano@seld.be", 202 "homepage": "http://seld.be" 203 }, 204 { 205 "name": "Rob Bast", 206 "email": "rob.bast@gmail.com", 207 "homepage": "http://robbast.nl" 208 } 209 ], 210 "description": "Semver library that offers utilities, version constraint parsing and validation.", 211 "keywords": [ 212 "semantic", 213 "semver", 214 "validation", 215 "versioning" 216 ], 217 "support": { 218 "irc": "ircs://irc.libera.chat:6697/composer", 219 "issues": "https://github.com/composer/semver/issues", 220 "source": "https://github.com/composer/semver/tree/3.4.3" 221 }, 222 "funding": [ 223 { 224 "url": "https://packagist.com", 225 "type": "custom" 226 }, 227 { 228 "url": "https://github.com/composer", 229 "type": "github" 230 }, 231 { 232 "url": "https://tidelift.com/funding/github/packagist/composer/composer", 233 "type": "tidelift" 234 } 235 ], 236 "time": "2024-09-19T14:15:21+00:00" 237 }, 238 { 239 "name": "composer/xdebug-handler", 240 "version": "3.0.5", 241 "source": { 242 "type": "git", 243 "url": "https://github.com/composer/xdebug-handler.git", 244 "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" 245 }, 246 "dist": { 247 "type": "zip", 248 "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", 249 "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", 250 "shasum": "" 251 }, 252 "require": { 253 "composer/pcre": "^1 || ^2 || ^3", 254 "php": "^7.2.5 || ^8.0", 255 "psr/log": "^1 || ^2 || ^3" 256 }, 257 "require-dev": { 258 "phpstan/phpstan": "^1.0", 259 "phpstan/phpstan-strict-rules": "^1.1", 260 "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" 261 }, 262 "type": "library", 263 "autoload": { 264 "psr-4": { 265 "Composer\\XdebugHandler\\": "src" 266 } 267 }, 268 "notification-url": "https://packagist.org/downloads/", 269 "license": [ 270 "MIT" 271 ], 272 "authors": [ 273 { 274 "name": "John Stevenson", 275 "email": "john-stevenson@blueyonder.co.uk" 276 } 277 ], 278 "description": "Restarts a process without Xdebug.", 279 "keywords": [ 280 "Xdebug", 281 "performance" 282 ], 283 "support": { 284 "irc": "ircs://irc.libera.chat:6697/composer", 285 "issues": "https://github.com/composer/xdebug-handler/issues", 286 "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" 287 }, 288 "funding": [ 289 { 290 "url": "https://packagist.com", 291 "type": "custom" 292 }, 293 { 294 "url": "https://github.com/composer", 295 "type": "github" 296 }, 297 { 298 "url": "https://tidelift.com/funding/github/packagist/composer/composer", 299 "type": "tidelift" 300 } 301 ], 302 "time": "2024-05-06T16:37:16+00:00" 303 }, 10 304 { 11 305 "name": "dealerdirect/phpcodesniffer-composer-installer", … … 156 450 ], 157 451 "time": "2024-06-20T19:34:15+00:00" 452 }, 453 { 454 "name": "evenement/evenement", 455 "version": "v3.0.2", 456 "source": { 457 "type": "git", 458 "url": "https://github.com/igorw/evenement.git", 459 "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" 460 }, 461 "dist": { 462 "type": "zip", 463 "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", 464 "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", 465 "shasum": "" 466 }, 467 "require": { 468 "php": ">=7.0" 469 }, 470 "require-dev": { 471 "phpunit/phpunit": "^9 || ^6" 472 }, 473 "type": "library", 474 "autoload": { 475 "psr-4": { 476 "Evenement\\": "src/" 477 } 478 }, 479 "notification-url": "https://packagist.org/downloads/", 480 "license": [ 481 "MIT" 482 ], 483 "authors": [ 484 { 485 "name": "Igor Wiedler", 486 "email": "igor@wiedler.ch" 487 } 488 ], 489 "description": "Événement is a very simple event dispatching library for PHP", 490 "keywords": [ 491 "event-dispatcher", 492 "event-emitter" 493 ], 494 "support": { 495 "issues": "https://github.com/igorw/evenement/issues", 496 "source": "https://github.com/igorw/evenement/tree/v3.0.2" 497 }, 498 "time": "2023-08-08T05:53:35+00:00" 499 }, 500 { 501 "name": "fidry/cpu-core-counter", 502 "version": "1.2.0", 503 "source": { 504 "type": "git", 505 "url": "https://github.com/theofidry/cpu-core-counter.git", 506 "reference": "8520451a140d3f46ac33042715115e290cf5785f" 507 }, 508 "dist": { 509 "type": "zip", 510 "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", 511 "reference": "8520451a140d3f46ac33042715115e290cf5785f", 512 "shasum": "" 513 }, 514 "require": { 515 "php": "^7.2 || ^8.0" 516 }, 517 "require-dev": { 518 "fidry/makefile": "^0.2.0", 519 "fidry/php-cs-fixer-config": "^1.1.2", 520 "phpstan/extension-installer": "^1.2.0", 521 "phpstan/phpstan": "^1.9.2", 522 "phpstan/phpstan-deprecation-rules": "^1.0.0", 523 "phpstan/phpstan-phpunit": "^1.2.2", 524 "phpstan/phpstan-strict-rules": "^1.4.4", 525 "phpunit/phpunit": "^8.5.31 || ^9.5.26", 526 "webmozarts/strict-phpunit": "^7.5" 527 }, 528 "type": "library", 529 "autoload": { 530 "psr-4": { 531 "Fidry\\CpuCoreCounter\\": "src/" 532 } 533 }, 534 "notification-url": "https://packagist.org/downloads/", 535 "license": [ 536 "MIT" 537 ], 538 "authors": [ 539 { 540 "name": "Théo FIDRY", 541 "email": "theo.fidry@gmail.com" 542 } 543 ], 544 "description": "Tiny utility to get the number of CPU cores.", 545 "keywords": [ 546 "CPU", 547 "core" 548 ], 549 "support": { 550 "issues": "https://github.com/theofidry/cpu-core-counter/issues", 551 "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" 552 }, 553 "funding": [ 554 { 555 "url": "https://github.com/theofidry", 556 "type": "github" 557 } 558 ], 559 "time": "2024-08-06T10:04:20+00:00" 560 }, 561 { 562 "name": "friendsofphp/php-cs-fixer", 563 "version": "dev-master", 564 "source": { 565 "type": "git", 566 "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", 567 "reference": "de9c8c6fcd7092158636d93def0067abdade87ab" 568 }, 569 "dist": { 570 "type": "zip", 571 "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/de9c8c6fcd7092158636d93def0067abdade87ab", 572 "reference": "de9c8c6fcd7092158636d93def0067abdade87ab", 573 "shasum": "" 574 }, 575 "require": { 576 "clue/ndjson-react": "^1.0", 577 "composer/semver": "^3.4", 578 "composer/xdebug-handler": "^3.0.3", 579 "ext-filter": "*", 580 "ext-json": "*", 581 "ext-tokenizer": "*", 582 "fidry/cpu-core-counter": "^1.2", 583 "php": "^7.4 || ^8.0", 584 "react/child-process": "^0.6.5", 585 "react/event-loop": "^1.0", 586 "react/promise": "^2.0 || ^3.0", 587 "react/socket": "^1.0", 588 "react/stream": "^1.0", 589 "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0", 590 "symfony/console": "^5.4 || ^6.4 || ^7.0", 591 "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", 592 "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", 593 "symfony/finder": "^5.4 || ^6.4 || ^7.0", 594 "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", 595 "symfony/polyfill-mbstring": "^1.31", 596 "symfony/polyfill-php80": "^1.31", 597 "symfony/polyfill-php81": "^1.31", 598 "symfony/process": "^5.4 || ^6.4 || ^7.2", 599 "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" 600 }, 601 "require-dev": { 602 "facile-it/paraunit": "^1.3.1 || ^2.5", 603 "infection/infection": "^0.29.10", 604 "justinrainbow/json-schema": "^5.3 || ^6.0", 605 "keradus/cli-executor": "^2.1", 606 "mikey179/vfsstream": "^1.6.12", 607 "php-coveralls/php-coveralls": "^2.7", 608 "php-cs-fixer/accessible-object": "^1.1", 609 "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", 610 "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", 611 "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.7", 612 "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.0", 613 "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.0" 614 }, 615 "suggest": { 616 "ext-dom": "For handling output formats in XML", 617 "ext-mbstring": "For handling non-UTF8 characters." 618 }, 619 "default-branch": true, 620 "bin": [ 621 "php-cs-fixer" 622 ], 623 "type": "application", 624 "autoload": { 625 "psr-4": { 626 "PhpCsFixer\\": "src/" 627 }, 628 "exclude-from-classmap": [ 629 "src/Fixer/Internal/*" 630 ] 631 }, 632 "notification-url": "https://packagist.org/downloads/", 633 "license": [ 634 "MIT" 635 ], 636 "authors": [ 637 { 638 "name": "Fabien Potencier", 639 "email": "fabien@symfony.com" 640 }, 641 { 642 "name": "Dariusz Rumiński", 643 "email": "dariusz.ruminski@gmail.com" 644 } 645 ], 646 "description": "A tool to automatically fix PHP code style", 647 "keywords": [ 648 "Static code analysis", 649 "fixer", 650 "standards", 651 "static analysis" 652 ], 653 "support": { 654 "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", 655 "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/master" 656 }, 657 "funding": [ 658 { 659 "url": "https://github.com/keradus", 660 "type": "github" 661 } 662 ], 663 "time": "2025-02-15T22:46:01+00:00" 158 664 }, 159 665 { … … 1137 1643 }, 1138 1644 { 1645 "name": "psr/container", 1646 "version": "dev-master", 1647 "source": { 1648 "type": "git", 1649 "url": "https://github.com/php-fig/container.git", 1650 "reference": "707984727bd5b2b670e59559d3ed2500240cf875" 1651 }, 1652 "dist": { 1653 "type": "zip", 1654 "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875", 1655 "reference": "707984727bd5b2b670e59559d3ed2500240cf875", 1656 "shasum": "" 1657 }, 1658 "require": { 1659 "php": ">=7.4.0" 1660 }, 1661 "default-branch": true, 1662 "type": "library", 1663 "extra": { 1664 "branch-alias": { 1665 "dev-master": "2.0.x-dev" 1666 } 1667 }, 1668 "autoload": { 1669 "psr-4": { 1670 "Psr\\Container\\": "src/" 1671 } 1672 }, 1673 "notification-url": "https://packagist.org/downloads/", 1674 "license": [ 1675 "MIT" 1676 ], 1677 "authors": [ 1678 { 1679 "name": "PHP-FIG", 1680 "homepage": "https://www.php-fig.org/" 1681 } 1682 ], 1683 "description": "Common Container Interface (PHP FIG PSR-11)", 1684 "homepage": "https://github.com/php-fig/container", 1685 "keywords": [ 1686 "PSR-11", 1687 "container", 1688 "container-interface", 1689 "container-interop", 1690 "psr" 1691 ], 1692 "support": { 1693 "issues": "https://github.com/php-fig/container/issues", 1694 "source": "https://github.com/php-fig/container" 1695 }, 1696 "time": "2023-09-22T11:11:30+00:00" 1697 }, 1698 { 1699 "name": "psr/event-dispatcher", 1700 "version": "dev-master", 1701 "source": { 1702 "type": "git", 1703 "url": "https://github.com/php-fig/event-dispatcher.git", 1704 "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874" 1705 }, 1706 "dist": { 1707 "type": "zip", 1708 "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", 1709 "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", 1710 "shasum": "" 1711 }, 1712 "require": { 1713 "php": ">=7.2.0" 1714 }, 1715 "suggest": { 1716 "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities" 1717 }, 1718 "default-branch": true, 1719 "type": "library", 1720 "extra": { 1721 "branch-alias": { 1722 "dev-master": "1.0.x-dev" 1723 } 1724 }, 1725 "autoload": { 1726 "psr-4": { 1727 "Psr\\EventDispatcher\\": "src/" 1728 } 1729 }, 1730 "notification-url": "https://packagist.org/downloads/", 1731 "license": [ 1732 "MIT" 1733 ], 1734 "authors": [ 1735 { 1736 "name": "PHP-FIG", 1737 "homepage": "https://www.php-fig.org/" 1738 } 1739 ], 1740 "description": "Standard interfaces for event handling.", 1741 "keywords": [ 1742 "events", 1743 "psr", 1744 "psr-14" 1745 ], 1746 "support": { 1747 "source": "https://github.com/php-fig/event-dispatcher" 1748 }, 1749 "time": "2024-03-17T21:29:03+00:00" 1750 }, 1751 { 1752 "name": "psr/log", 1753 "version": "dev-master", 1754 "source": { 1755 "type": "git", 1756 "url": "https://github.com/php-fig/log.git", 1757 "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" 1758 }, 1759 "dist": { 1760 "type": "zip", 1761 "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 1762 "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 1763 "shasum": "" 1764 }, 1765 "require": { 1766 "php": ">=8.0.0" 1767 }, 1768 "default-branch": true, 1769 "type": "library", 1770 "extra": { 1771 "branch-alias": { 1772 "dev-master": "3.x-dev" 1773 } 1774 }, 1775 "autoload": { 1776 "psr-4": { 1777 "Psr\\Log\\": "src" 1778 } 1779 }, 1780 "notification-url": "https://packagist.org/downloads/", 1781 "license": [ 1782 "MIT" 1783 ], 1784 "authors": [ 1785 { 1786 "name": "PHP-FIG", 1787 "homepage": "https://www.php-fig.org/" 1788 } 1789 ], 1790 "description": "Common interface for logging libraries", 1791 "homepage": "https://github.com/php-fig/log", 1792 "keywords": [ 1793 "log", 1794 "psr", 1795 "psr-3" 1796 ], 1797 "support": { 1798 "source": "https://github.com/php-fig/log/tree/3.0.2" 1799 }, 1800 "time": "2024-09-11T13:17:53+00:00" 1801 }, 1802 { 1803 "name": "react/cache", 1804 "version": "1.x-dev", 1805 "source": { 1806 "type": "git", 1807 "url": "https://github.com/reactphp/cache.git", 1808 "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605" 1809 }, 1810 "dist": { 1811 "type": "zip", 1812 "url": "https://api.github.com/repos/reactphp/cache/zipball/36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605", 1813 "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605", 1814 "shasum": "" 1815 }, 1816 "require": { 1817 "php": ">=5.3.0", 1818 "react/promise": "^3.0 || ^2.0 || ^1.1" 1819 }, 1820 "require-dev": { 1821 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" 1822 }, 1823 "default-branch": true, 1824 "type": "library", 1825 "autoload": { 1826 "psr-4": { 1827 "React\\Cache\\": "src/" 1828 } 1829 }, 1830 "notification-url": "https://packagist.org/downloads/", 1831 "license": [ 1832 "MIT" 1833 ], 1834 "authors": [ 1835 { 1836 "name": "Christian Lück", 1837 "email": "christian@clue.engineering", 1838 "homepage": "https://clue.engineering/" 1839 }, 1840 { 1841 "name": "Cees-Jan Kiewiet", 1842 "email": "reactphp@ceesjankiewiet.nl", 1843 "homepage": "https://wyrihaximus.net/" 1844 }, 1845 { 1846 "name": "Jan Sorgalla", 1847 "email": "jsorgalla@gmail.com", 1848 "homepage": "https://sorgalla.com/" 1849 }, 1850 { 1851 "name": "Chris Boden", 1852 "email": "cboden@gmail.com", 1853 "homepage": "https://cboden.dev/" 1854 } 1855 ], 1856 "description": "Async, Promise-based cache interface for ReactPHP", 1857 "keywords": [ 1858 "cache", 1859 "caching", 1860 "promise", 1861 "reactphp" 1862 ], 1863 "support": { 1864 "issues": "https://github.com/reactphp/cache/issues", 1865 "source": "https://github.com/reactphp/cache/tree/1.x" 1866 }, 1867 "funding": [ 1868 { 1869 "url": "https://opencollective.com/reactphp", 1870 "type": "open_collective" 1871 } 1872 ], 1873 "time": "2024-01-04T09:16:03+00:00" 1874 }, 1875 { 1876 "name": "react/child-process", 1877 "version": "0.6.x-dev", 1878 "source": { 1879 "type": "git", 1880 "url": "https://github.com/reactphp/child-process.git", 1881 "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" 1882 }, 1883 "dist": { 1884 "type": "zip", 1885 "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", 1886 "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", 1887 "shasum": "" 1888 }, 1889 "require": { 1890 "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 1891 "php": ">=5.3.0", 1892 "react/event-loop": "^1.2", 1893 "react/stream": "^1.4" 1894 }, 1895 "require-dev": { 1896 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", 1897 "react/socket": "^1.16", 1898 "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" 1899 }, 1900 "type": "library", 1901 "autoload": { 1902 "psr-4": { 1903 "React\\ChildProcess\\": "src/" 1904 } 1905 }, 1906 "notification-url": "https://packagist.org/downloads/", 1907 "license": [ 1908 "MIT" 1909 ], 1910 "authors": [ 1911 { 1912 "name": "Christian Lück", 1913 "email": "christian@clue.engineering", 1914 "homepage": "https://clue.engineering/" 1915 }, 1916 { 1917 "name": "Cees-Jan Kiewiet", 1918 "email": "reactphp@ceesjankiewiet.nl", 1919 "homepage": "https://wyrihaximus.net/" 1920 }, 1921 { 1922 "name": "Jan Sorgalla", 1923 "email": "jsorgalla@gmail.com", 1924 "homepage": "https://sorgalla.com/" 1925 }, 1926 { 1927 "name": "Chris Boden", 1928 "email": "cboden@gmail.com", 1929 "homepage": "https://cboden.dev/" 1930 } 1931 ], 1932 "description": "Event-driven library for executing child processes with ReactPHP.", 1933 "keywords": [ 1934 "event-driven", 1935 "process", 1936 "reactphp" 1937 ], 1938 "support": { 1939 "issues": "https://github.com/reactphp/child-process/issues", 1940 "source": "https://github.com/reactphp/child-process/tree/v0.6.6" 1941 }, 1942 "funding": [ 1943 { 1944 "url": "https://opencollective.com/reactphp", 1945 "type": "open_collective" 1946 } 1947 ], 1948 "time": "2025-01-01T16:37:48+00:00" 1949 }, 1950 { 1951 "name": "react/dns", 1952 "version": "1.x-dev", 1953 "source": { 1954 "type": "git", 1955 "url": "https://github.com/reactphp/dns.git", 1956 "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" 1957 }, 1958 "dist": { 1959 "type": "zip", 1960 "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", 1961 "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", 1962 "shasum": "" 1963 }, 1964 "require": { 1965 "php": ">=5.3.0", 1966 "react/cache": "^1.0 || ^0.6 || ^0.5", 1967 "react/event-loop": "^1.2", 1968 "react/promise": "^3.2 || ^2.7 || ^1.2.1" 1969 }, 1970 "require-dev": { 1971 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", 1972 "react/async": "^4.3 || ^3 || ^2", 1973 "react/promise-timer": "^1.11" 1974 }, 1975 "type": "library", 1976 "autoload": { 1977 "psr-4": { 1978 "React\\Dns\\": "src/" 1979 } 1980 }, 1981 "notification-url": "https://packagist.org/downloads/", 1982 "license": [ 1983 "MIT" 1984 ], 1985 "authors": [ 1986 { 1987 "name": "Christian Lück", 1988 "email": "christian@clue.engineering", 1989 "homepage": "https://clue.engineering/" 1990 }, 1991 { 1992 "name": "Cees-Jan Kiewiet", 1993 "email": "reactphp@ceesjankiewiet.nl", 1994 "homepage": "https://wyrihaximus.net/" 1995 }, 1996 { 1997 "name": "Jan Sorgalla", 1998 "email": "jsorgalla@gmail.com", 1999 "homepage": "https://sorgalla.com/" 2000 }, 2001 { 2002 "name": "Chris Boden", 2003 "email": "cboden@gmail.com", 2004 "homepage": "https://cboden.dev/" 2005 } 2006 ], 2007 "description": "Async DNS resolver for ReactPHP", 2008 "keywords": [ 2009 "async", 2010 "dns", 2011 "dns-resolver", 2012 "reactphp" 2013 ], 2014 "support": { 2015 "issues": "https://github.com/reactphp/dns/issues", 2016 "source": "https://github.com/reactphp/dns/tree/v1.13.0" 2017 }, 2018 "funding": [ 2019 { 2020 "url": "https://opencollective.com/reactphp", 2021 "type": "open_collective" 2022 } 2023 ], 2024 "time": "2024-06-13T14:18:03+00:00" 2025 }, 2026 { 2027 "name": "react/event-loop", 2028 "version": "1.x-dev", 2029 "source": { 2030 "type": "git", 2031 "url": "https://github.com/reactphp/event-loop.git", 2032 "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" 2033 }, 2034 "dist": { 2035 "type": "zip", 2036 "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", 2037 "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", 2038 "shasum": "" 2039 }, 2040 "require": { 2041 "php": ">=5.3.0" 2042 }, 2043 "require-dev": { 2044 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" 2045 }, 2046 "suggest": { 2047 "ext-pcntl": "For signal handling support when using the StreamSelectLoop" 2048 }, 2049 "default-branch": true, 2050 "type": "library", 2051 "autoload": { 2052 "psr-4": { 2053 "React\\EventLoop\\": "src/" 2054 } 2055 }, 2056 "notification-url": "https://packagist.org/downloads/", 2057 "license": [ 2058 "MIT" 2059 ], 2060 "authors": [ 2061 { 2062 "name": "Christian Lück", 2063 "email": "christian@clue.engineering", 2064 "homepage": "https://clue.engineering/" 2065 }, 2066 { 2067 "name": "Cees-Jan Kiewiet", 2068 "email": "reactphp@ceesjankiewiet.nl", 2069 "homepage": "https://wyrihaximus.net/" 2070 }, 2071 { 2072 "name": "Jan Sorgalla", 2073 "email": "jsorgalla@gmail.com", 2074 "homepage": "https://sorgalla.com/" 2075 }, 2076 { 2077 "name": "Chris Boden", 2078 "email": "cboden@gmail.com", 2079 "homepage": "https://cboden.dev/" 2080 } 2081 ], 2082 "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", 2083 "keywords": [ 2084 "asynchronous", 2085 "event-loop" 2086 ], 2087 "support": { 2088 "issues": "https://github.com/reactphp/event-loop/issues", 2089 "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" 2090 }, 2091 "funding": [ 2092 { 2093 "url": "https://opencollective.com/reactphp", 2094 "type": "open_collective" 2095 } 2096 ], 2097 "time": "2023-11-13T13:48:05+00:00" 2098 }, 2099 { 2100 "name": "react/promise", 2101 "version": "3.x-dev", 2102 "source": { 2103 "type": "git", 2104 "url": "https://github.com/reactphp/promise.git", 2105 "reference": "5f80055cc21ba7bcd3989e4902061fc12e2bcc1d" 2106 }, 2107 "dist": { 2108 "type": "zip", 2109 "url": "https://api.github.com/repos/reactphp/promise/zipball/5f80055cc21ba7bcd3989e4902061fc12e2bcc1d", 2110 "reference": "5f80055cc21ba7bcd3989e4902061fc12e2bcc1d", 2111 "shasum": "" 2112 }, 2113 "require": { 2114 "php": ">=7.1.0" 2115 }, 2116 "require-dev": { 2117 "phpstan/phpstan": "1.10.39 || 1.4.10", 2118 "phpunit/phpunit": "^9.6 || ^7.5" 2119 }, 2120 "default-branch": true, 2121 "type": "library", 2122 "autoload": { 2123 "files": [ 2124 "src/functions_include.php" 2125 ], 2126 "psr-4": { 2127 "React\\Promise\\": "src/" 2128 } 2129 }, 2130 "notification-url": "https://packagist.org/downloads/", 2131 "license": [ 2132 "MIT" 2133 ], 2134 "authors": [ 2135 { 2136 "name": "Jan Sorgalla", 2137 "email": "jsorgalla@gmail.com", 2138 "homepage": "https://sorgalla.com/" 2139 }, 2140 { 2141 "name": "Christian Lück", 2142 "email": "christian@clue.engineering", 2143 "homepage": "https://clue.engineering/" 2144 }, 2145 { 2146 "name": "Cees-Jan Kiewiet", 2147 "email": "reactphp@ceesjankiewiet.nl", 2148 "homepage": "https://wyrihaximus.net/" 2149 }, 2150 { 2151 "name": "Chris Boden", 2152 "email": "cboden@gmail.com", 2153 "homepage": "https://cboden.dev/" 2154 } 2155 ], 2156 "description": "A lightweight implementation of CommonJS Promises/A for PHP", 2157 "keywords": [ 2158 "promise", 2159 "promises" 2160 ], 2161 "support": { 2162 "issues": "https://github.com/reactphp/promise/issues", 2163 "source": "https://github.com/reactphp/promise/tree/3.x" 2164 }, 2165 "funding": [ 2166 { 2167 "url": "https://opencollective.com/reactphp", 2168 "type": "open_collective" 2169 } 2170 ], 2171 "time": "2024-11-19T18:32:50+00:00" 2172 }, 2173 { 2174 "name": "react/socket", 2175 "version": "1.x-dev", 2176 "source": { 2177 "type": "git", 2178 "url": "https://github.com/reactphp/socket.git", 2179 "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" 2180 }, 2181 "dist": { 2182 "type": "zip", 2183 "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", 2184 "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", 2185 "shasum": "" 2186 }, 2187 "require": { 2188 "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 2189 "php": ">=5.3.0", 2190 "react/dns": "^1.13", 2191 "react/event-loop": "^1.2", 2192 "react/promise": "^3.2 || ^2.6 || ^1.2.1", 2193 "react/stream": "^1.4" 2194 }, 2195 "require-dev": { 2196 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", 2197 "react/async": "^4.3 || ^3.3 || ^2", 2198 "react/promise-stream": "^1.4", 2199 "react/promise-timer": "^1.11" 2200 }, 2201 "type": "library", 2202 "autoload": { 2203 "psr-4": { 2204 "React\\Socket\\": "src/" 2205 } 2206 }, 2207 "notification-url": "https://packagist.org/downloads/", 2208 "license": [ 2209 "MIT" 2210 ], 2211 "authors": [ 2212 { 2213 "name": "Christian Lück", 2214 "email": "christian@clue.engineering", 2215 "homepage": "https://clue.engineering/" 2216 }, 2217 { 2218 "name": "Cees-Jan Kiewiet", 2219 "email": "reactphp@ceesjankiewiet.nl", 2220 "homepage": "https://wyrihaximus.net/" 2221 }, 2222 { 2223 "name": "Jan Sorgalla", 2224 "email": "jsorgalla@gmail.com", 2225 "homepage": "https://sorgalla.com/" 2226 }, 2227 { 2228 "name": "Chris Boden", 2229 "email": "cboden@gmail.com", 2230 "homepage": "https://cboden.dev/" 2231 } 2232 ], 2233 "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", 2234 "keywords": [ 2235 "Connection", 2236 "Socket", 2237 "async", 2238 "reactphp", 2239 "stream" 2240 ], 2241 "support": { 2242 "issues": "https://github.com/reactphp/socket/issues", 2243 "source": "https://github.com/reactphp/socket/tree/v1.16.0" 2244 }, 2245 "funding": [ 2246 { 2247 "url": "https://opencollective.com/reactphp", 2248 "type": "open_collective" 2249 } 2250 ], 2251 "time": "2024-07-26T10:38:09+00:00" 2252 }, 2253 { 2254 "name": "react/stream", 2255 "version": "1.x-dev", 2256 "source": { 2257 "type": "git", 2258 "url": "https://github.com/reactphp/stream.git", 2259 "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" 2260 }, 2261 "dist": { 2262 "type": "zip", 2263 "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", 2264 "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", 2265 "shasum": "" 2266 }, 2267 "require": { 2268 "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 2269 "php": ">=5.3.8", 2270 "react/event-loop": "^1.2" 2271 }, 2272 "require-dev": { 2273 "clue/stream-filter": "~1.2", 2274 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" 2275 }, 2276 "type": "library", 2277 "autoload": { 2278 "psr-4": { 2279 "React\\Stream\\": "src/" 2280 } 2281 }, 2282 "notification-url": "https://packagist.org/downloads/", 2283 "license": [ 2284 "MIT" 2285 ], 2286 "authors": [ 2287 { 2288 "name": "Christian Lück", 2289 "email": "christian@clue.engineering", 2290 "homepage": "https://clue.engineering/" 2291 }, 2292 { 2293 "name": "Cees-Jan Kiewiet", 2294 "email": "reactphp@ceesjankiewiet.nl", 2295 "homepage": "https://wyrihaximus.net/" 2296 }, 2297 { 2298 "name": "Jan Sorgalla", 2299 "email": "jsorgalla@gmail.com", 2300 "homepage": "https://sorgalla.com/" 2301 }, 2302 { 2303 "name": "Chris Boden", 2304 "email": "cboden@gmail.com", 2305 "homepage": "https://cboden.dev/" 2306 } 2307 ], 2308 "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", 2309 "keywords": [ 2310 "event-driven", 2311 "io", 2312 "non-blocking", 2313 "pipe", 2314 "reactphp", 2315 "readable", 2316 "stream", 2317 "writable" 2318 ], 2319 "support": { 2320 "issues": "https://github.com/reactphp/stream/issues", 2321 "source": "https://github.com/reactphp/stream/tree/v1.4.0" 2322 }, 2323 "funding": [ 2324 { 2325 "url": "https://opencollective.com/reactphp", 2326 "type": "open_collective" 2327 } 2328 ], 2329 "time": "2024-06-11T12:45:25+00:00" 2330 }, 2331 { 1139 2332 "name": "sebastian/cli-parser", 1140 2333 "version": "1.0.x-dev", … … 2180 3373 ], 2181 3374 "time": "2024-08-17T17:43:40+00:00" 3375 }, 3376 { 3377 "name": "symfony/console", 3378 "version": "7.3.x-dev", 3379 "source": { 3380 "type": "git", 3381 "url": "https://github.com/symfony/console.git", 3382 "reference": "eec43776d7ed956cbcc4ce92f7331c72fbf02040" 3383 }, 3384 "dist": { 3385 "type": "zip", 3386 "url": "https://api.github.com/repos/symfony/console/zipball/eec43776d7ed956cbcc4ce92f7331c72fbf02040", 3387 "reference": "eec43776d7ed956cbcc4ce92f7331c72fbf02040", 3388 "shasum": "" 3389 }, 3390 "require": { 3391 "php": ">=8.2", 3392 "symfony/deprecation-contracts": "^2.5|^3", 3393 "symfony/polyfill-mbstring": "~1.0", 3394 "symfony/service-contracts": "^2.5|^3", 3395 "symfony/string": "^6.4|^7.0" 3396 }, 3397 "conflict": { 3398 "symfony/dependency-injection": "<6.4", 3399 "symfony/dotenv": "<6.4", 3400 "symfony/event-dispatcher": "<6.4", 3401 "symfony/lock": "<6.4", 3402 "symfony/process": "<6.4" 3403 }, 3404 "provide": { 3405 "psr/log-implementation": "1.0|2.0|3.0" 3406 }, 3407 "require-dev": { 3408 "psr/log": "^1|^2|^3", 3409 "symfony/config": "^6.4|^7.0", 3410 "symfony/dependency-injection": "^6.4|^7.0", 3411 "symfony/event-dispatcher": "^6.4|^7.0", 3412 "symfony/http-foundation": "^6.4|^7.0", 3413 "symfony/http-kernel": "^6.4|^7.0", 3414 "symfony/lock": "^6.4|^7.0", 3415 "symfony/messenger": "^6.4|^7.0", 3416 "symfony/process": "^6.4|^7.0", 3417 "symfony/stopwatch": "^6.4|^7.0", 3418 "symfony/var-dumper": "^6.4|^7.0" 3419 }, 3420 "type": "library", 3421 "autoload": { 3422 "psr-4": { 3423 "Symfony\\Component\\Console\\": "" 3424 }, 3425 "exclude-from-classmap": [ 3426 "/Tests/" 3427 ] 3428 }, 3429 "notification-url": "https://packagist.org/downloads/", 3430 "license": [ 3431 "MIT" 3432 ], 3433 "authors": [ 3434 { 3435 "name": "Fabien Potencier", 3436 "email": "fabien@symfony.com" 3437 }, 3438 { 3439 "name": "Symfony Community", 3440 "homepage": "https://symfony.com/contributors" 3441 } 3442 ], 3443 "description": "Eases the creation of beautiful and testable command line interfaces", 3444 "homepage": "https://symfony.com", 3445 "keywords": [ 3446 "cli", 3447 "command-line", 3448 "console", 3449 "terminal" 3450 ], 3451 "support": { 3452 "source": "https://github.com/symfony/console/tree/7.3" 3453 }, 3454 "funding": [ 3455 { 3456 "url": "https://symfony.com/sponsor", 3457 "type": "custom" 3458 }, 3459 { 3460 "url": "https://github.com/fabpot", 3461 "type": "github" 3462 }, 3463 { 3464 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3465 "type": "tidelift" 3466 } 3467 ], 3468 "time": "2025-02-06T08:27:43+00:00" 3469 }, 3470 { 3471 "name": "symfony/deprecation-contracts", 3472 "version": "dev-main", 3473 "source": { 3474 "type": "git", 3475 "url": "https://github.com/symfony/deprecation-contracts.git", 3476 "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" 3477 }, 3478 "dist": { 3479 "type": "zip", 3480 "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", 3481 "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", 3482 "shasum": "" 3483 }, 3484 "require": { 3485 "php": ">=8.1" 3486 }, 3487 "default-branch": true, 3488 "type": "library", 3489 "extra": { 3490 "thanks": { 3491 "url": "https://github.com/symfony/contracts", 3492 "name": "symfony/contracts" 3493 }, 3494 "branch-alias": { 3495 "dev-main": "3.6-dev" 3496 } 3497 }, 3498 "autoload": { 3499 "files": [ 3500 "function.php" 3501 ] 3502 }, 3503 "notification-url": "https://packagist.org/downloads/", 3504 "license": [ 3505 "MIT" 3506 ], 3507 "authors": [ 3508 { 3509 "name": "Nicolas Grekas", 3510 "email": "p@tchwork.com" 3511 }, 3512 { 3513 "name": "Symfony Community", 3514 "homepage": "https://symfony.com/contributors" 3515 } 3516 ], 3517 "description": "A generic function and convention to trigger deprecation notices", 3518 "homepage": "https://symfony.com", 3519 "support": { 3520 "source": "https://github.com/symfony/deprecation-contracts/tree/main" 3521 }, 3522 "funding": [ 3523 { 3524 "url": "https://symfony.com/sponsor", 3525 "type": "custom" 3526 }, 3527 { 3528 "url": "https://github.com/fabpot", 3529 "type": "github" 3530 }, 3531 { 3532 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3533 "type": "tidelift" 3534 } 3535 ], 3536 "time": "2024-09-25T14:21:43+00:00" 3537 }, 3538 { 3539 "name": "symfony/event-dispatcher", 3540 "version": "7.3.x-dev", 3541 "source": { 3542 "type": "git", 3543 "url": "https://github.com/symfony/event-dispatcher.git", 3544 "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" 3545 }, 3546 "dist": { 3547 "type": "zip", 3548 "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", 3549 "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", 3550 "shasum": "" 3551 }, 3552 "require": { 3553 "php": ">=8.2", 3554 "symfony/event-dispatcher-contracts": "^2.5|^3" 3555 }, 3556 "conflict": { 3557 "symfony/dependency-injection": "<6.4", 3558 "symfony/service-contracts": "<2.5" 3559 }, 3560 "provide": { 3561 "psr/event-dispatcher-implementation": "1.0", 3562 "symfony/event-dispatcher-implementation": "2.0|3.0" 3563 }, 3564 "require-dev": { 3565 "psr/log": "^1|^2|^3", 3566 "symfony/config": "^6.4|^7.0", 3567 "symfony/dependency-injection": "^6.4|^7.0", 3568 "symfony/error-handler": "^6.4|^7.0", 3569 "symfony/expression-language": "^6.4|^7.0", 3570 "symfony/http-foundation": "^6.4|^7.0", 3571 "symfony/service-contracts": "^2.5|^3", 3572 "symfony/stopwatch": "^6.4|^7.0" 3573 }, 3574 "type": "library", 3575 "autoload": { 3576 "psr-4": { 3577 "Symfony\\Component\\EventDispatcher\\": "" 3578 }, 3579 "exclude-from-classmap": [ 3580 "/Tests/" 3581 ] 3582 }, 3583 "notification-url": "https://packagist.org/downloads/", 3584 "license": [ 3585 "MIT" 3586 ], 3587 "authors": [ 3588 { 3589 "name": "Fabien Potencier", 3590 "email": "fabien@symfony.com" 3591 }, 3592 { 3593 "name": "Symfony Community", 3594 "homepage": "https://symfony.com/contributors" 3595 } 3596 ], 3597 "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 3598 "homepage": "https://symfony.com", 3599 "support": { 3600 "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" 3601 }, 3602 "funding": [ 3603 { 3604 "url": "https://symfony.com/sponsor", 3605 "type": "custom" 3606 }, 3607 { 3608 "url": "https://github.com/fabpot", 3609 "type": "github" 3610 }, 3611 { 3612 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3613 "type": "tidelift" 3614 } 3615 ], 3616 "time": "2024-09-25T14:21:43+00:00" 3617 }, 3618 { 3619 "name": "symfony/event-dispatcher-contracts", 3620 "version": "dev-main", 3621 "source": { 3622 "type": "git", 3623 "url": "https://github.com/symfony/event-dispatcher-contracts.git", 3624 "reference": "59eb412e93815df44f05f342958efa9f46b1e586" 3625 }, 3626 "dist": { 3627 "type": "zip", 3628 "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", 3629 "reference": "59eb412e93815df44f05f342958efa9f46b1e586", 3630 "shasum": "" 3631 }, 3632 "require": { 3633 "php": ">=8.1", 3634 "psr/event-dispatcher": "^1" 3635 }, 3636 "default-branch": true, 3637 "type": "library", 3638 "extra": { 3639 "thanks": { 3640 "url": "https://github.com/symfony/contracts", 3641 "name": "symfony/contracts" 3642 }, 3643 "branch-alias": { 3644 "dev-main": "3.6-dev" 3645 } 3646 }, 3647 "autoload": { 3648 "psr-4": { 3649 "Symfony\\Contracts\\EventDispatcher\\": "" 3650 } 3651 }, 3652 "notification-url": "https://packagist.org/downloads/", 3653 "license": [ 3654 "MIT" 3655 ], 3656 "authors": [ 3657 { 3658 "name": "Nicolas Grekas", 3659 "email": "p@tchwork.com" 3660 }, 3661 { 3662 "name": "Symfony Community", 3663 "homepage": "https://symfony.com/contributors" 3664 } 3665 ], 3666 "description": "Generic abstractions related to dispatching event", 3667 "homepage": "https://symfony.com", 3668 "keywords": [ 3669 "abstractions", 3670 "contracts", 3671 "decoupling", 3672 "interfaces", 3673 "interoperability", 3674 "standards" 3675 ], 3676 "support": { 3677 "source": "https://github.com/symfony/event-dispatcher-contracts/tree/main" 3678 }, 3679 "funding": [ 3680 { 3681 "url": "https://symfony.com/sponsor", 3682 "type": "custom" 3683 }, 3684 { 3685 "url": "https://github.com/fabpot", 3686 "type": "github" 3687 }, 3688 { 3689 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3690 "type": "tidelift" 3691 } 3692 ], 3693 "time": "2024-09-25T14:21:43+00:00" 3694 }, 3695 { 3696 "name": "symfony/filesystem", 3697 "version": "7.3.x-dev", 3698 "source": { 3699 "type": "git", 3700 "url": "https://github.com/symfony/filesystem.git", 3701 "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" 3702 }, 3703 "dist": { 3704 "type": "zip", 3705 "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", 3706 "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", 3707 "shasum": "" 3708 }, 3709 "require": { 3710 "php": ">=8.2", 3711 "symfony/polyfill-ctype": "~1.8", 3712 "symfony/polyfill-mbstring": "~1.8" 3713 }, 3714 "require-dev": { 3715 "symfony/process": "^6.4|^7.0" 3716 }, 3717 "type": "library", 3718 "autoload": { 3719 "psr-4": { 3720 "Symfony\\Component\\Filesystem\\": "" 3721 }, 3722 "exclude-from-classmap": [ 3723 "/Tests/" 3724 ] 3725 }, 3726 "notification-url": "https://packagist.org/downloads/", 3727 "license": [ 3728 "MIT" 3729 ], 3730 "authors": [ 3731 { 3732 "name": "Fabien Potencier", 3733 "email": "fabien@symfony.com" 3734 }, 3735 { 3736 "name": "Symfony Community", 3737 "homepage": "https://symfony.com/contributors" 3738 } 3739 ], 3740 "description": "Provides basic utilities for the filesystem", 3741 "homepage": "https://symfony.com", 3742 "support": { 3743 "source": "https://github.com/symfony/filesystem/tree/v7.2.0" 3744 }, 3745 "funding": [ 3746 { 3747 "url": "https://symfony.com/sponsor", 3748 "type": "custom" 3749 }, 3750 { 3751 "url": "https://github.com/fabpot", 3752 "type": "github" 3753 }, 3754 { 3755 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3756 "type": "tidelift" 3757 } 3758 ], 3759 "time": "2024-10-25T15:15:23+00:00" 3760 }, 3761 { 3762 "name": "symfony/finder", 3763 "version": "7.3.x-dev", 3764 "source": { 3765 "type": "git", 3766 "url": "https://github.com/symfony/finder.git", 3767 "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" 3768 }, 3769 "dist": { 3770 "type": "zip", 3771 "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", 3772 "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", 3773 "shasum": "" 3774 }, 3775 "require": { 3776 "php": ">=8.2" 3777 }, 3778 "require-dev": { 3779 "symfony/filesystem": "^6.4|^7.0" 3780 }, 3781 "type": "library", 3782 "autoload": { 3783 "psr-4": { 3784 "Symfony\\Component\\Finder\\": "" 3785 }, 3786 "exclude-from-classmap": [ 3787 "/Tests/" 3788 ] 3789 }, 3790 "notification-url": "https://packagist.org/downloads/", 3791 "license": [ 3792 "MIT" 3793 ], 3794 "authors": [ 3795 { 3796 "name": "Fabien Potencier", 3797 "email": "fabien@symfony.com" 3798 }, 3799 { 3800 "name": "Symfony Community", 3801 "homepage": "https://symfony.com/contributors" 3802 } 3803 ], 3804 "description": "Finds files and directories via an intuitive fluent interface", 3805 "homepage": "https://symfony.com", 3806 "support": { 3807 "source": "https://github.com/symfony/finder/tree/7.3" 3808 }, 3809 "funding": [ 3810 { 3811 "url": "https://symfony.com/sponsor", 3812 "type": "custom" 3813 }, 3814 { 3815 "url": "https://github.com/fabpot", 3816 "type": "github" 3817 }, 3818 { 3819 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3820 "type": "tidelift" 3821 } 3822 ], 3823 "time": "2024-12-30T19:00:26+00:00" 3824 }, 3825 { 3826 "name": "symfony/options-resolver", 3827 "version": "7.3.x-dev", 3828 "source": { 3829 "type": "git", 3830 "url": "https://github.com/symfony/options-resolver.git", 3831 "reference": "62c278c5ba8c2904dc5665042c3d17e83829fd00" 3832 }, 3833 "dist": { 3834 "type": "zip", 3835 "url": "https://api.github.com/repos/symfony/options-resolver/zipball/62c278c5ba8c2904dc5665042c3d17e83829fd00", 3836 "reference": "62c278c5ba8c2904dc5665042c3d17e83829fd00", 3837 "shasum": "" 3838 }, 3839 "require": { 3840 "php": ">=8.2", 3841 "symfony/deprecation-contracts": "^2.5|^3" 3842 }, 3843 "type": "library", 3844 "autoload": { 3845 "psr-4": { 3846 "Symfony\\Component\\OptionsResolver\\": "" 3847 }, 3848 "exclude-from-classmap": [ 3849 "/Tests/" 3850 ] 3851 }, 3852 "notification-url": "https://packagist.org/downloads/", 3853 "license": [ 3854 "MIT" 3855 ], 3856 "authors": [ 3857 { 3858 "name": "Fabien Potencier", 3859 "email": "fabien@symfony.com" 3860 }, 3861 { 3862 "name": "Symfony Community", 3863 "homepage": "https://symfony.com/contributors" 3864 } 3865 ], 3866 "description": "Provides an improved replacement for the array_replace PHP function", 3867 "homepage": "https://symfony.com", 3868 "keywords": [ 3869 "config", 3870 "configuration", 3871 "options" 3872 ], 3873 "support": { 3874 "source": "https://github.com/symfony/options-resolver/tree/7.3" 3875 }, 3876 "funding": [ 3877 { 3878 "url": "https://symfony.com/sponsor", 3879 "type": "custom" 3880 }, 3881 { 3882 "url": "https://github.com/fabpot", 3883 "type": "github" 3884 }, 3885 { 3886 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3887 "type": "tidelift" 3888 } 3889 ], 3890 "time": "2025-01-12T17:25:01+00:00" 3891 }, 3892 { 3893 "name": "symfony/polyfill-ctype", 3894 "version": "1.x-dev", 3895 "source": { 3896 "type": "git", 3897 "url": "https://github.com/symfony/polyfill-ctype.git", 3898 "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" 3899 }, 3900 "dist": { 3901 "type": "zip", 3902 "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", 3903 "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", 3904 "shasum": "" 3905 }, 3906 "require": { 3907 "php": ">=7.2" 3908 }, 3909 "provide": { 3910 "ext-ctype": "*" 3911 }, 3912 "suggest": { 3913 "ext-ctype": "For best performance" 3914 }, 3915 "default-branch": true, 3916 "type": "library", 3917 "extra": { 3918 "thanks": { 3919 "url": "https://github.com/symfony/polyfill", 3920 "name": "symfony/polyfill" 3921 } 3922 }, 3923 "autoload": { 3924 "files": [ 3925 "bootstrap.php" 3926 ], 3927 "psr-4": { 3928 "Symfony\\Polyfill\\Ctype\\": "" 3929 } 3930 }, 3931 "notification-url": "https://packagist.org/downloads/", 3932 "license": [ 3933 "MIT" 3934 ], 3935 "authors": [ 3936 { 3937 "name": "Gert de Pagter", 3938 "email": "BackEndTea@gmail.com" 3939 }, 3940 { 3941 "name": "Symfony Community", 3942 "homepage": "https://symfony.com/contributors" 3943 } 3944 ], 3945 "description": "Symfony polyfill for ctype functions", 3946 "homepage": "https://symfony.com", 3947 "keywords": [ 3948 "compatibility", 3949 "ctype", 3950 "polyfill", 3951 "portable" 3952 ], 3953 "support": { 3954 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" 3955 }, 3956 "funding": [ 3957 { 3958 "url": "https://symfony.com/sponsor", 3959 "type": "custom" 3960 }, 3961 { 3962 "url": "https://github.com/fabpot", 3963 "type": "github" 3964 }, 3965 { 3966 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3967 "type": "tidelift" 3968 } 3969 ], 3970 "time": "2024-09-09T11:45:10+00:00" 3971 }, 3972 { 3973 "name": "symfony/polyfill-intl-grapheme", 3974 "version": "1.x-dev", 3975 "source": { 3976 "type": "git", 3977 "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 3978 "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" 3979 }, 3980 "dist": { 3981 "type": "zip", 3982 "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", 3983 "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", 3984 "shasum": "" 3985 }, 3986 "require": { 3987 "php": ">=7.2" 3988 }, 3989 "suggest": { 3990 "ext-intl": "For best performance" 3991 }, 3992 "default-branch": true, 3993 "type": "library", 3994 "extra": { 3995 "thanks": { 3996 "url": "https://github.com/symfony/polyfill", 3997 "name": "symfony/polyfill" 3998 } 3999 }, 4000 "autoload": { 4001 "files": [ 4002 "bootstrap.php" 4003 ], 4004 "psr-4": { 4005 "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 4006 } 4007 }, 4008 "notification-url": "https://packagist.org/downloads/", 4009 "license": [ 4010 "MIT" 4011 ], 4012 "authors": [ 4013 { 4014 "name": "Nicolas Grekas", 4015 "email": "p@tchwork.com" 4016 }, 4017 { 4018 "name": "Symfony Community", 4019 "homepage": "https://symfony.com/contributors" 4020 } 4021 ], 4022 "description": "Symfony polyfill for intl's grapheme_* functions", 4023 "homepage": "https://symfony.com", 4024 "keywords": [ 4025 "compatibility", 4026 "grapheme", 4027 "intl", 4028 "polyfill", 4029 "portable", 4030 "shim" 4031 ], 4032 "support": { 4033 "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" 4034 }, 4035 "funding": [ 4036 { 4037 "url": "https://symfony.com/sponsor", 4038 "type": "custom" 4039 }, 4040 { 4041 "url": "https://github.com/fabpot", 4042 "type": "github" 4043 }, 4044 { 4045 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4046 "type": "tidelift" 4047 } 4048 ], 4049 "time": "2024-09-09T11:45:10+00:00" 4050 }, 4051 { 4052 "name": "symfony/polyfill-intl-normalizer", 4053 "version": "1.x-dev", 4054 "source": { 4055 "type": "git", 4056 "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 4057 "reference": "3833d7255cc303546435cb650316bff708a1c75c" 4058 }, 4059 "dist": { 4060 "type": "zip", 4061 "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", 4062 "reference": "3833d7255cc303546435cb650316bff708a1c75c", 4063 "shasum": "" 4064 }, 4065 "require": { 4066 "php": ">=7.2" 4067 }, 4068 "suggest": { 4069 "ext-intl": "For best performance" 4070 }, 4071 "default-branch": true, 4072 "type": "library", 4073 "extra": { 4074 "thanks": { 4075 "url": "https://github.com/symfony/polyfill", 4076 "name": "symfony/polyfill" 4077 } 4078 }, 4079 "autoload": { 4080 "files": [ 4081 "bootstrap.php" 4082 ], 4083 "psr-4": { 4084 "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 4085 }, 4086 "classmap": [ 4087 "Resources/stubs" 4088 ] 4089 }, 4090 "notification-url": "https://packagist.org/downloads/", 4091 "license": [ 4092 "MIT" 4093 ], 4094 "authors": [ 4095 { 4096 "name": "Nicolas Grekas", 4097 "email": "p@tchwork.com" 4098 }, 4099 { 4100 "name": "Symfony Community", 4101 "homepage": "https://symfony.com/contributors" 4102 } 4103 ], 4104 "description": "Symfony polyfill for intl's Normalizer class and related functions", 4105 "homepage": "https://symfony.com", 4106 "keywords": [ 4107 "compatibility", 4108 "intl", 4109 "normalizer", 4110 "polyfill", 4111 "portable", 4112 "shim" 4113 ], 4114 "support": { 4115 "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" 4116 }, 4117 "funding": [ 4118 { 4119 "url": "https://symfony.com/sponsor", 4120 "type": "custom" 4121 }, 4122 { 4123 "url": "https://github.com/fabpot", 4124 "type": "github" 4125 }, 4126 { 4127 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4128 "type": "tidelift" 4129 } 4130 ], 4131 "time": "2024-09-09T11:45:10+00:00" 4132 }, 4133 { 4134 "name": "symfony/polyfill-mbstring", 4135 "version": "1.x-dev", 4136 "source": { 4137 "type": "git", 4138 "url": "https://github.com/symfony/polyfill-mbstring.git", 4139 "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" 4140 }, 4141 "dist": { 4142 "type": "zip", 4143 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", 4144 "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", 4145 "shasum": "" 4146 }, 4147 "require": { 4148 "ext-iconv": "*", 4149 "php": ">=7.2" 4150 }, 4151 "provide": { 4152 "ext-mbstring": "*" 4153 }, 4154 "suggest": { 4155 "ext-mbstring": "For best performance" 4156 }, 4157 "default-branch": true, 4158 "type": "library", 4159 "extra": { 4160 "thanks": { 4161 "url": "https://github.com/symfony/polyfill", 4162 "name": "symfony/polyfill" 4163 } 4164 }, 4165 "autoload": { 4166 "files": [ 4167 "bootstrap.php" 4168 ], 4169 "psr-4": { 4170 "Symfony\\Polyfill\\Mbstring\\": "" 4171 } 4172 }, 4173 "notification-url": "https://packagist.org/downloads/", 4174 "license": [ 4175 "MIT" 4176 ], 4177 "authors": [ 4178 { 4179 "name": "Nicolas Grekas", 4180 "email": "p@tchwork.com" 4181 }, 4182 { 4183 "name": "Symfony Community", 4184 "homepage": "https://symfony.com/contributors" 4185 } 4186 ], 4187 "description": "Symfony polyfill for the Mbstring extension", 4188 "homepage": "https://symfony.com", 4189 "keywords": [ 4190 "compatibility", 4191 "mbstring", 4192 "polyfill", 4193 "portable", 4194 "shim" 4195 ], 4196 "support": { 4197 "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x" 4198 }, 4199 "funding": [ 4200 { 4201 "url": "https://symfony.com/sponsor", 4202 "type": "custom" 4203 }, 4204 { 4205 "url": "https://github.com/fabpot", 4206 "type": "github" 4207 }, 4208 { 4209 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4210 "type": "tidelift" 4211 } 4212 ], 4213 "time": "2024-12-23T08:48:59+00:00" 2182 4214 }, 2183 4215 { … … 2257 4289 ], 2258 4290 "time": "2024-05-31T15:07:36+00:00" 4291 }, 4292 { 4293 "name": "symfony/polyfill-php80", 4294 "version": "1.x-dev", 4295 "source": { 4296 "type": "git", 4297 "url": "https://github.com/symfony/polyfill-php80.git", 4298 "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" 4299 }, 4300 "dist": { 4301 "type": "zip", 4302 "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", 4303 "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", 4304 "shasum": "" 4305 }, 4306 "require": { 4307 "php": ">=7.2" 4308 }, 4309 "default-branch": true, 4310 "type": "library", 4311 "extra": { 4312 "thanks": { 4313 "url": "https://github.com/symfony/polyfill", 4314 "name": "symfony/polyfill" 4315 } 4316 }, 4317 "autoload": { 4318 "files": [ 4319 "bootstrap.php" 4320 ], 4321 "psr-4": { 4322 "Symfony\\Polyfill\\Php80\\": "" 4323 }, 4324 "classmap": [ 4325 "Resources/stubs" 4326 ] 4327 }, 4328 "notification-url": "https://packagist.org/downloads/", 4329 "license": [ 4330 "MIT" 4331 ], 4332 "authors": [ 4333 { 4334 "name": "Ion Bazan", 4335 "email": "ion.bazan@gmail.com" 4336 }, 4337 { 4338 "name": "Nicolas Grekas", 4339 "email": "p@tchwork.com" 4340 }, 4341 { 4342 "name": "Symfony Community", 4343 "homepage": "https://symfony.com/contributors" 4344 } 4345 ], 4346 "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 4347 "homepage": "https://symfony.com", 4348 "keywords": [ 4349 "compatibility", 4350 "polyfill", 4351 "portable", 4352 "shim" 4353 ], 4354 "support": { 4355 "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" 4356 }, 4357 "funding": [ 4358 { 4359 "url": "https://symfony.com/sponsor", 4360 "type": "custom" 4361 }, 4362 { 4363 "url": "https://github.com/fabpot", 4364 "type": "github" 4365 }, 4366 { 4367 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4368 "type": "tidelift" 4369 } 4370 ], 4371 "time": "2024-09-09T11:45:10+00:00" 4372 }, 4373 { 4374 "name": "symfony/polyfill-php81", 4375 "version": "1.x-dev", 4376 "source": { 4377 "type": "git", 4378 "url": "https://github.com/symfony/polyfill-php81.git", 4379 "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" 4380 }, 4381 "dist": { 4382 "type": "zip", 4383 "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", 4384 "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", 4385 "shasum": "" 4386 }, 4387 "require": { 4388 "php": ">=7.2" 4389 }, 4390 "default-branch": true, 4391 "type": "library", 4392 "extra": { 4393 "thanks": { 4394 "url": "https://github.com/symfony/polyfill", 4395 "name": "symfony/polyfill" 4396 } 4397 }, 4398 "autoload": { 4399 "files": [ 4400 "bootstrap.php" 4401 ], 4402 "psr-4": { 4403 "Symfony\\Polyfill\\Php81\\": "" 4404 }, 4405 "classmap": [ 4406 "Resources/stubs" 4407 ] 4408 }, 4409 "notification-url": "https://packagist.org/downloads/", 4410 "license": [ 4411 "MIT" 4412 ], 4413 "authors": [ 4414 { 4415 "name": "Nicolas Grekas", 4416 "email": "p@tchwork.com" 4417 }, 4418 { 4419 "name": "Symfony Community", 4420 "homepage": "https://symfony.com/contributors" 4421 } 4422 ], 4423 "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", 4424 "homepage": "https://symfony.com", 4425 "keywords": [ 4426 "compatibility", 4427 "polyfill", 4428 "portable", 4429 "shim" 4430 ], 4431 "support": { 4432 "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" 4433 }, 4434 "funding": [ 4435 { 4436 "url": "https://symfony.com/sponsor", 4437 "type": "custom" 4438 }, 4439 { 4440 "url": "https://github.com/fabpot", 4441 "type": "github" 4442 }, 4443 { 4444 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4445 "type": "tidelift" 4446 } 4447 ], 4448 "time": "2024-09-09T11:45:10+00:00" 4449 }, 4450 { 4451 "name": "symfony/process", 4452 "version": "7.3.x-dev", 4453 "source": { 4454 "type": "git", 4455 "url": "https://github.com/symfony/process.git", 4456 "reference": "2b42be26326a4fae4313751b40a2ecb60e619311" 4457 }, 4458 "dist": { 4459 "type": "zip", 4460 "url": "https://api.github.com/repos/symfony/process/zipball/2b42be26326a4fae4313751b40a2ecb60e619311", 4461 "reference": "2b42be26326a4fae4313751b40a2ecb60e619311", 4462 "shasum": "" 4463 }, 4464 "require": { 4465 "php": ">=8.2" 4466 }, 4467 "type": "library", 4468 "autoload": { 4469 "psr-4": { 4470 "Symfony\\Component\\Process\\": "" 4471 }, 4472 "exclude-from-classmap": [ 4473 "/Tests/" 4474 ] 4475 }, 4476 "notification-url": "https://packagist.org/downloads/", 4477 "license": [ 4478 "MIT" 4479 ], 4480 "authors": [ 4481 { 4482 "name": "Fabien Potencier", 4483 "email": "fabien@symfony.com" 4484 }, 4485 { 4486 "name": "Symfony Community", 4487 "homepage": "https://symfony.com/contributors" 4488 } 4489 ], 4490 "description": "Executes commands in sub-processes", 4491 "homepage": "https://symfony.com", 4492 "support": { 4493 "source": "https://github.com/symfony/process/tree/7.3" 4494 }, 4495 "funding": [ 4496 { 4497 "url": "https://symfony.com/sponsor", 4498 "type": "custom" 4499 }, 4500 { 4501 "url": "https://github.com/fabpot", 4502 "type": "github" 4503 }, 4504 { 4505 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4506 "type": "tidelift" 4507 } 4508 ], 4509 "time": "2025-02-14T16:23:49+00:00" 4510 }, 4511 { 4512 "name": "symfony/service-contracts", 4513 "version": "dev-main", 4514 "source": { 4515 "type": "git", 4516 "url": "https://github.com/symfony/service-contracts.git", 4517 "reference": "5ad38698559cf88b6296629e19b15ef3239c9d7a" 4518 }, 4519 "dist": { 4520 "type": "zip", 4521 "url": "https://api.github.com/repos/symfony/service-contracts/zipball/5ad38698559cf88b6296629e19b15ef3239c9d7a", 4522 "reference": "5ad38698559cf88b6296629e19b15ef3239c9d7a", 4523 "shasum": "" 4524 }, 4525 "require": { 4526 "php": ">=8.1", 4527 "psr/container": "^1.1|^2.0", 4528 "symfony/deprecation-contracts": "^2.5|^3" 4529 }, 4530 "conflict": { 4531 "ext-psr": "<1.1|>=2" 4532 }, 4533 "default-branch": true, 4534 "type": "library", 4535 "extra": { 4536 "thanks": { 4537 "url": "https://github.com/symfony/contracts", 4538 "name": "symfony/contracts" 4539 }, 4540 "branch-alias": { 4541 "dev-main": "3.6-dev" 4542 } 4543 }, 4544 "autoload": { 4545 "psr-4": { 4546 "Symfony\\Contracts\\Service\\": "" 4547 }, 4548 "exclude-from-classmap": [ 4549 "/Test/" 4550 ] 4551 }, 4552 "notification-url": "https://packagist.org/downloads/", 4553 "license": [ 4554 "MIT" 4555 ], 4556 "authors": [ 4557 { 4558 "name": "Nicolas Grekas", 4559 "email": "p@tchwork.com" 4560 }, 4561 { 4562 "name": "Symfony Community", 4563 "homepage": "https://symfony.com/contributors" 4564 } 4565 ], 4566 "description": "Generic abstractions related to writing services", 4567 "homepage": "https://symfony.com", 4568 "keywords": [ 4569 "abstractions", 4570 "contracts", 4571 "decoupling", 4572 "interfaces", 4573 "interoperability", 4574 "standards" 4575 ], 4576 "support": { 4577 "source": "https://github.com/symfony/service-contracts/tree/main" 4578 }, 4579 "funding": [ 4580 { 4581 "url": "https://symfony.com/sponsor", 4582 "type": "custom" 4583 }, 4584 { 4585 "url": "https://github.com/fabpot", 4586 "type": "github" 4587 }, 4588 { 4589 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4590 "type": "tidelift" 4591 } 4592 ], 4593 "time": "2024-09-25T14:21:43+00:00" 4594 }, 4595 { 4596 "name": "symfony/stopwatch", 4597 "version": "7.3.x-dev", 4598 "source": { 4599 "type": "git", 4600 "url": "https://github.com/symfony/stopwatch.git", 4601 "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df" 4602 }, 4603 "dist": { 4604 "type": "zip", 4605 "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df", 4606 "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df", 4607 "shasum": "" 4608 }, 4609 "require": { 4610 "php": ">=8.2", 4611 "symfony/service-contracts": "^2.5|^3" 4612 }, 4613 "type": "library", 4614 "autoload": { 4615 "psr-4": { 4616 "Symfony\\Component\\Stopwatch\\": "" 4617 }, 4618 "exclude-from-classmap": [ 4619 "/Tests/" 4620 ] 4621 }, 4622 "notification-url": "https://packagist.org/downloads/", 4623 "license": [ 4624 "MIT" 4625 ], 4626 "authors": [ 4627 { 4628 "name": "Fabien Potencier", 4629 "email": "fabien@symfony.com" 4630 }, 4631 { 4632 "name": "Symfony Community", 4633 "homepage": "https://symfony.com/contributors" 4634 } 4635 ], 4636 "description": "Provides a way to profile code", 4637 "homepage": "https://symfony.com", 4638 "support": { 4639 "source": "https://github.com/symfony/stopwatch/tree/7.2" 4640 }, 4641 "funding": [ 4642 { 4643 "url": "https://symfony.com/sponsor", 4644 "type": "custom" 4645 }, 4646 { 4647 "url": "https://github.com/fabpot", 4648 "type": "github" 4649 }, 4650 { 4651 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4652 "type": "tidelift" 4653 } 4654 ], 4655 "time": "2024-12-18T14:28:33+00:00" 4656 }, 4657 { 4658 "name": "symfony/string", 4659 "version": "7.3.x-dev", 4660 "source": { 4661 "type": "git", 4662 "url": "https://github.com/symfony/string.git", 4663 "reference": "373a11f2d03e71934a0023888edf3328a583e4ec" 4664 }, 4665 "dist": { 4666 "type": "zip", 4667 "url": "https://api.github.com/repos/symfony/string/zipball/373a11f2d03e71934a0023888edf3328a583e4ec", 4668 "reference": "373a11f2d03e71934a0023888edf3328a583e4ec", 4669 "shasum": "" 4670 }, 4671 "require": { 4672 "php": ">=8.2", 4673 "symfony/polyfill-ctype": "~1.8", 4674 "symfony/polyfill-intl-grapheme": "~1.0", 4675 "symfony/polyfill-intl-normalizer": "~1.0", 4676 "symfony/polyfill-mbstring": "~1.0" 4677 }, 4678 "conflict": { 4679 "symfony/translation-contracts": "<2.5" 4680 }, 4681 "require-dev": { 4682 "symfony/emoji": "^7.1", 4683 "symfony/error-handler": "^6.4|^7.0", 4684 "symfony/http-client": "^6.4|^7.0", 4685 "symfony/intl": "^6.4|^7.0", 4686 "symfony/translation-contracts": "^2.5|^3.0", 4687 "symfony/var-exporter": "^6.4|^7.0" 4688 }, 4689 "type": "library", 4690 "autoload": { 4691 "files": [ 4692 "Resources/functions.php" 4693 ], 4694 "psr-4": { 4695 "Symfony\\Component\\String\\": "" 4696 }, 4697 "exclude-from-classmap": [ 4698 "/Tests/" 4699 ] 4700 }, 4701 "notification-url": "https://packagist.org/downloads/", 4702 "license": [ 4703 "MIT" 4704 ], 4705 "authors": [ 4706 { 4707 "name": "Nicolas Grekas", 4708 "email": "p@tchwork.com" 4709 }, 4710 { 4711 "name": "Symfony Community", 4712 "homepage": "https://symfony.com/contributors" 4713 } 4714 ], 4715 "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 4716 "homepage": "https://symfony.com", 4717 "keywords": [ 4718 "grapheme", 4719 "i18n", 4720 "string", 4721 "unicode", 4722 "utf-8", 4723 "utf8" 4724 ], 4725 "support": { 4726 "source": "https://github.com/symfony/string/tree/7.3" 4727 }, 4728 "funding": [ 4729 { 4730 "url": "https://symfony.com/sponsor", 4731 "type": "custom" 4732 }, 4733 { 4734 "url": "https://github.com/fabpot", 4735 "type": "github" 4736 }, 4737 { 4738 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4739 "type": "tidelift" 4740 } 4741 ], 4742 "time": "2025-01-05T16:34:30+00:00" 2259 4743 }, 2260 4744 { … … 2559 5043 "platform": [], 2560 5044 "platform-dev": [], 2561 "plugin-api-version": "2. 3.0"5045 "plugin-api-version": "2.6.0" 2562 5046 } -
cookielegit/tags/1.1.0/cookie-legit-functions.php
r3148248 r3251291 1 1 <?php 2 3 use Cookie_Legit\Models\Cookie_Legit_Settings; 2 4 3 5 /** … … 34 36 return null; 35 37 } 38 39 /** 40 * Get a CookieLegit setting 41 * @param string $group 42 * @param string $setting 43 * @param mixed $default 44 * @return mixed 45 */ 46 function cookie_legit_get_setting($group, $setting, $default = null) 47 { 48 return Cookie_Legit_Settings::get_setting($group, $setting, $default); 49 } -
cookielegit/tags/1.1.0/cookie-legit.php
r3149580 r3251291 5 5 * Plugin Name: CookieLegit 6 6 * Description: The last cookie manager you'll need 7 * Version: 1. 0.27 * Version: 1.1.0 8 8 * Author: CookieLegit 9 9 * Author URI: https://cookielegit.site/ … … 14 14 * License URI: https://www.gnu.org/licenses/gpl-3.0.html 15 15 * Requires at least: 5.8 16 * Tested up to: 6. 6.116 * Tested up to: 6.7.2 17 17 * Requires PHP: 8.0 18 18 */ … … 24 24 25 25 if (!defined('COOKIE_LEGIT_VERSION')) { 26 define('COOKIE_LEGIT_VERSION', '1. 0.0');26 define('COOKIE_LEGIT_VERSION', '1.1.0'); 27 27 } 28 28 -
cookielegit/tags/1.1.0/dist/admin.js
r3148248 r3251291 1 (()=>{var t={};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{var o;t.g.importScripts&&(o=t.g.location+"");var e=t.g.document;if(!o&&e&&(e.currentScript&&(o=e.currentScript.src),!o)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&!o;)o=n[i--].src}if(!o)throw new Error("Automatic publicPath is not supported in this browser");o=o.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=o})(),jQuery((function(t){t(".notice-type-option").on("change",(function(){const o=t(this).val();t(".banner-position-options").addClass("hide"),t(`.banner-position-options[data-notice-type="${o}"]`).removeClass("hide"),t(`.banner-position-options[data-notice-type="${o}"]`).find("input").first().prop("checked",!0)})),t("#pixel-settings-consent-mode").on("change",(function(){t(this).is(":checked")?t(".row-pixel:not(.row-google_tag_manager)").addClass("hide"):t(".row-pixel:not(.row-google_tag_manager)").removeClass("hide")})),t(window).on("scroll",(function(){const o=t(".cl-form-header"),e=t("#wpadminbar");o.offset().top===e.offset().top+e.height()?o.addClass("is-stuck"):o.removeClass("is-stuck")}))})),(()=>{"use strict";t.p})()})();1 (()=>{var o={};o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(o){if("object"==typeof window)return window}}(),(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var i=e.getElementsByTagName("script");if(i.length)for(var n=i.length-1;n>-1&&!t;)t=i[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t})(),jQuery((function(o){o(".notice-type-option").on("change",(function(){const t=o(this).val();o(".banner-position-options").addClass("hide"),o(`.banner-position-options[data-notice-type="${t}"]`).removeClass("hide"),o(`.banner-position-options[data-notice-type="${t}"]`).find("input").first().prop("checked",!0)})),o("#pixel-settings-consent-mode").on("change",(function(){o(this).is(":checked")?(o(".row-pixel:not(.row-google_tag_manager)").addClass("hide"),o(".row-google-tag").removeClass("hide")):(o(".row-google-tag").addClass("hide"),o(".row-pixel:not(.row-google_tag_manager)").removeClass("hide"))})),o(window).on("scroll",(function(){const t=o(".cl-form-header"),e=o("#wpadminbar");t.offset().top===e.offset().top+e.height()?t.addClass("is-stuck"):t.removeClass("is-stuck")}))})),(()=>{"use strict";o.p})()})(); -
cookielegit/tags/1.1.0/dist/public.js
r3148281 r3251291 1 (()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var s=n.getElementsByTagName("script");if(s.length)for(var i=s.length-1;i>-1&&!t;)t=s[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{class e{static list(){const e=[],t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const s=t[n].split("="),i=s[0];let c=s.length>1?s[1]:null;e.push({name:i,value:c})}return e}static find(e=""){return this.list().find((t=>t.name===e))||null}static create(e,t,n=1,s="/"){const i=new Date,c=new Date(i.getTime()+24*n*60*60*1e3);return document.cookie=`${e}=${t}; expires=${c}; path=${s}`,this}static delete(e){return document.cookie=`${e}=; Max-Age=-99999999;`,this}}class t{#e=null;#t=null;#n=null;#s=[];screens=["notice","preferences","toggle-preferences"];consentCookieName="cl_consent";cookieNames=["cl_consent","cl_essential","cl_tracking","cl_marketing"];defaultSettings={baseUrl:null,userOpt:!1,consentMode:!1,cookieDuration:182,themeUrl:null};static#i={"cookie-legit-init":[],"notice-loaded":[],"consent-given":[],"consent-updated":[]};constructor(e,t){return this.#n=Object.assign({},this.defaultSettings,t),this.#e=this.selectTarget(e),this.checkConsentCookies(),this.insertNotice(),this.maybeInjectScripts(),this}buildStyle(e){const t=document.createElement("link");t.href=this.#n.themeUrl,t.rel="stylesheet",t.id="cookielegit-css",t.onload=()=>{e.style.display=""},document.head.append(t)}checkConsentCookies(){e.list().filter((e=>e.name.startsWith("cl_"))).forEach((e=>this.#s.push(e))),this.#n.consentMode&&this.#s.length>0&&this.updateGTMConsent(),this.#s.length>0&&t.#c("consent-given")}selectTarget(e){return document.querySelector(e)}async insertNotice(){let e=await this.fetchNotice();this.#t=document.createElement("div"),this.#t.id="cookie-legit-notice-container",this.#t.innerHTML=e.html,this.#t.style.display="none";let t=0===this.#s.length?"notice":"toggle-preferences";this.#t.classList.add(t),this.#e.appendChild(this.#t),this.setupEvents(),this.#n.userOpt&&this.setPrefToggles(),this.buildStyle(this.#t)}async fetchNotice(){const e=await fetch(`${this.#n.baseUrl}?action=get_cookie_notice`);return await e.json()}setupEvents(){this.#n.userOpt?(this.#t.querySelector(".cookie-legit-pref-btn").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-save-pref-btn").addEventListener("click",(()=>this.savePreferences())),this.#t.querySelector(".cookie-legit-accept-pref-btn").addEventListener("click",(()=>this.acceptAllCookies()))):this.#t.querySelector(".cookie-legit-deny-btn").addEventListener("click",(()=>this.denyAllCookies())),this.#t.querySelector(".cookie-legit-preferences-change").addEventListener("click",(()=>this.updatePreferences())),this.#t.querySelector(".cookie-legit-accept-btn").addEventListener("click",(()=>this.acceptAllCookies()))}toggleUserPreferences(){this.changeScreen("preferences")}acceptAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{e.create(t,!0,this.#n.cookieDuration)})),this.checkConsentCookies()}savePreferences(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName||this.#t.querySelector(`input[name=${t}]`).checked;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}updatePreferences(){let e=this.#n.userOpt?"preferences":"notice";this.changeScreen(e),this.checkConsentCookies(),t.#c("consent-updated")}denyAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}changeScreen(e){let t=this.screens.filter((t=>t!==e));this.#t.classList.remove(...t),this.#t.classList.add(e)}setPrefToggles(){this.#s.forEach((e=>{let t=this.#t.querySelector(`input[name=${e.name}]`);t&&(t.checked="true"===e.value)}))}async maybeInjectScripts(){if(!this.#n.userOpt||"true"!==e.find(this.consentCookieName))return;let t=await fetch(`${this.#n.baseUrl}?action=get_tracking_scripts`),n=await t.json();for(const e in n)if(Object.hasOwnProperty.call(n,e)){const t=n[e];Object.values(t).forEach((t=>{if(this.isJSON(t)){t=JSON.parse(t);for(const n in t)Object.hasOwnProperty.call(t,n)&&t[n].forEach((t=>{let s=this.buildScript(e,t,"srcs"===n);document.querySelector(e).append(s)}))}else{let n=this.buildScript(e,t);document.querySelector(e).append(n)}}))}}updateGTMConsent(){if("function"==typeof gtag)return gtag("consent","update",this.getGTMConsentObject());window.dataLayer=window.dataLayer||[],window.dataLayer.push({0:"consent",1:"update",2:this.getGTMConsentObject()})}getGTMConsentObject(){return{ad_storage:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_user_data:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_personalization:"true"===e.find("cl_marketing")?.value?"granted":"denied",analytics_storage:"true"===e.find("cl_tracking")?.value?"granted":"denied",security_storage:"granted"}}isJSON(e){try{JSON.parse(e)}catch(e){return!1}return!0}buildScript(e,t,n=!1){let s="head"===e?"script":"noscript",i=document.createElement(s);return n?(i.src=t,i):(i.textContent=t,i)}static subscribe(e,t){return this.#i[e]?"function"!=typeof t?console.warn(`Expected callback for ${e} got ${typeof t}`):void this.#i[e].push(t):console.warn(`Cannot subscribe to ${e} because it does not exist!`)}static#c(e){const t=this.#i[e];if(!t)return console.warn(`Cannot trigger ${e} because it does not exist!`);for(let e of t)e()}}jQuery((function(e){t.subscribe("consent-given",(function(){console.log("should update screens"),e("iframe[data-cl-src]").each((function(){e(this).attr("src",e(this).attr("data-cl-src"))})),e("script[type=cookielegitblock]").each((function(){e(this).attr("src",e(this).attr("data-cl-src")),e(this).attr("type",e(this).attr("data-cl-type"))}))})),window.cookieLegitNotice=new t("body",{consentMode:""!==cl_config.consent_mode,userOpt:""!==cl_config.user_opt,baseUrl:cl_config.ajax_url,themeUrl:cl_config.themeUrl})}))})(),e.p})();1 (()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var i=n.getElementsByTagName("script");if(i.length)for(var s=i.length-1;s>-1&&!t;)t=i[s--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{class e{static list(){const e=[],t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const i=t[n].split("="),s=i[0];let c=i.length>1?i[1]:null;e.push({name:s,value:c})}return e}static find(e=""){return this.list().find((t=>t.name===e))||null}static create(e,t,n=1,i="/"){const s=new Date,c=new Date(s.getTime()+24*n*60*60*1e3);return document.cookie=`${e}=${t}; expires=${c}; path=${i}`,this}static delete(e){return document.cookie=`${e}=; Max-Age=-99999999;`,this}}class t{#e=null;#t=null;#n=null;#i=[];CONSENT_SETTINGS_NAME="cl_cus";screens=["notice","preferences","toggle-preferences"];consentCookieName="cl_consent";cookieNames=["cl_consent","cl_essential","cl_tracking","cl_marketing"];defaultSettings={baseUrl:null,userOpt:!1,consentMode:!1,cookieDuration:182,themeUrl:null,googleTag:!1};consentCategories={cl_tracking:"marketingCookies",cl_marketing:"advertisingCookies",cl_essential:"essentialCookies"};static#s={"cookie-legit-init":[],"notice-loaded":[],"consent-given":[],"consent-updated":[]};constructor(e,t){return this.#n=Object.assign({},this.defaultSettings,t),this.#e=this.selectTarget(e),this.checkConsentCookies(),this.insertNotice(),this.maybeInjectScripts(),this}buildStyle(e){const t=document.createElement("link");t.href=this.#n.themeUrl,t.rel="stylesheet",t.id="cookielegit-css",t.onload=()=>{e.style.display=""},document.head.append(t)}checkConsentCookies(){if(e.list().filter((e=>e.name.startsWith("cl_"))).forEach((e=>this.#i.push(e))),0===this.#i.length)return;if(this.#n.consentMode&&!this.#n.googleTag)return this.updateGTMConsent(),void t.#c("consent-given");const n=this.getTagConsentSettings();t.#c("consent-given",n),e.create(this.CONSENT_SETTINGS_NAME,JSON.stringify(n))}selectTarget(e){return document.querySelector(e)}async insertNotice(){let e=await this.fetchNotice();this.#t=document.createElement("div"),this.#t.id="cookie-legit-notice-container",this.#t.innerHTML=e.html,this.#t.style.display="none";let t=0===this.#i.length?"notice":"toggle-preferences";this.#t.classList.add(t),this.#e.appendChild(this.#t),this.setupEvents(),this.#n.userOpt&&this.setPrefToggles(),this.buildStyle(this.#t)}async fetchNotice(){const e=await fetch(`${this.#n.baseUrl}?action=get_cookie_notice`);return await e.json()}setupEvents(){this.#n.userOpt?(this.#t.querySelector(".cookie-legit-pref-btn").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-save-pref-btn").addEventListener("click",(()=>this.savePreferences())),this.#t.querySelector(".cookie-legit-accept-pref-btn").addEventListener("click",(()=>this.acceptAllCookies()))):this.#t.querySelector(".cookie-legit-deny-btn").addEventListener("click",(()=>this.denyAllCookies())),this.#t.querySelector(".cookie-legit-preferences-change").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-accept-btn").addEventListener("click",(()=>this.acceptAllCookies()))}toggleUserPreferences(){this.changeScreen("preferences")}acceptAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{e.create(t,!0,this.#n.cookieDuration)})),this.checkConsentCookies()}savePreferences(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName||this.#t.querySelector(`input[name=${t}]`).checked;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}updatePreferences(){let e=this.#n.userOpt?"preferences":"notice";this.changeScreen(e),this.checkConsentCookies(),t.#c("consent-updated")}denyAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}changeScreen(e){let t=this.screens.filter((t=>t!==e));this.#t.classList.remove(...t),this.#t.classList.add(e)}setPrefToggles(){this.#i.forEach((e=>{let t=this.#t.querySelector(`input[name=${e.name}]`);t&&(t.checked="true"===e.value)}))}async maybeInjectScripts(){if(!this.#n.userOpt||"true"!==e.find(this.consentCookieName))return;let t=await fetch(`${this.#n.baseUrl}?action=get_tracking_scripts`),n=await t.json();for(const e in n)if(Object.hasOwnProperty.call(n,e)){const t=n[e];Object.values(t).forEach((t=>{if(this.isJSON(t)){t=JSON.parse(t);for(const n in t)Object.hasOwnProperty.call(t,n)&&t[n].forEach((t=>{let i=this.buildScript(e,t,"srcs"===n);document.querySelector(e).append(i)}))}else{let n=this.buildScript(e,t);document.querySelector(e).append(n)}}))}}updateGTMConsent(){if("function"==typeof gtag)return gtag("consent","update",this.getGTMConsentObject());window.dataLayer=window.dataLayer||[],window.dataLayer.push({0:"consent",1:"update",2:this.getGTMConsentObject()})}getGTMConsentObject(){return{ad_storage:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_user_data:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_personalization:"true"===e.find("cl_marketing")?.value?"granted":"denied",analytics_storage:"true"===e.find("cl_tracking")?.value?"granted":"denied",security_storage:"granted"}}isJSON(e){try{JSON.parse(e)}catch(e){return!1}return!0}buildScript(e,t,n=!1){let i="head"===e?"script":"noscript",s=document.createElement(i);return n?(s.src=t,s):(s.textContent=t,s)}getTagConsentSettings(){const e={};return this.#i.forEach((t=>{t.name in this.consentCategories&&(e[this.consentCategories[t.name]]="true"===t.value)})),e}static subscribe(e,t){return this.#s[e]?"function"!=typeof t?console.warn(`Expected callback for ${e} got ${typeof t}`):void this.#s[e].push(t):console.warn(`Cannot subscribe to ${e} because it does not exist!`)}static#c(e,...t){const n=this.#s[e];if(!n)return console.warn(`Cannot trigger ${e} because it does not exist!`);for(let e of n)e(...t)}}window.cookieLegitGtmCaller=function(e){t.subscribe("consent-given",e)},jQuery((function(e){t.subscribe("consent-given",(function(){e("iframe[data-cl-src]").each((function(){e(this).attr("src",e(this).attr("data-cl-src"))})),e("script[type=cookielegitblock]").each((function(){e(this).attr("src",e(this).attr("data-cl-src")),e(this).attr("type",e(this).attr("data-cl-type"))}))}));let n=0;t.subscribe("consent-given",(function(e){n++,console.log(`Event 'consent-given' got called ${n} times with args: `,e)})),window.cookieLegitNotice=new t("body",{consentMode:""!==cl_config.consent_mode,userOpt:""!==cl_config.user_opt,baseUrl:cl_config.ajax_url,themeUrl:cl_config.themeUrl,googleTag:""!==cl_config.googleTag})}))})(),e.p})(); -
cookielegit/tags/1.1.0/readme.txt
r3149580 r3251291 4 4 Tags: CMP, Cookies, Cookie banner, Consent Mode v2, GDPR 5 5 Requires at least: 5.8 6 Tested up to: 6. 6.17 Stable tag: 1. 0.26 Tested up to: 6.7.2 7 Stable tag: 1.1.0 8 8 Requires PHP: 8.0.0 9 9 License: GPLv3 … … 90 90 == Changelog == 91 91 92 # v1.1.0 93 - Added global function for retrieving settings for future performance updates 94 - Added new setting for google tag usage. (Google Tag Template out soon) 95 - Disable use of `gtag` when google tag template is used. 96 92 97 # v1.0.2 93 98 - Style loaded async to prevent invalid caching -
cookielegit/tags/1.1.0/src/admin/class-cookie-legit-admin-pages.php
r3148248 r3251291 22 22 $consent_mode = (isset($pixel_settings['consent_mode']) && $pixel_settings['consent_mode'] === 'on'); 23 23 24 $google_tag = (isset($pixel_settings['google_tag']) && $pixel_settings['google_tag'] === 'on'); 25 24 26 Cookie_Legit_View_Loader::load('admin.settings.settings', [ 25 27 'notice_settings' => $notice_settings, 26 28 'pixel_settings' => $pixel_settings, 27 29 'consent_mode' => $consent_mode, 30 'google_tag' => $google_tag, 28 31 'blocking_settings' => $blocking_settings, 29 32 'active_screen' => $active_screen, -
cookielegit/tags/1.1.0/src/models/class-cookie-legit-settings.php
r3148248 r3251291 5 5 class Cookie_Legit_Settings 6 6 { 7 8 7 /** 9 8 * The setting group to register under 10 9 * @var string 11 10 */ 12 public static $settingGroup = "cookie-legit-options-group";11 public static $settingGroup = 'cookie-legit-options-group'; 13 12 14 13 /** … … 17 16 */ 18 17 public static $settingPrefix = 'cookie_legit_'; 18 19 /** 20 * Default setting groups for cookie legit 21 * @var array<string> 22 */ 23 public static $settingGroups = [ 24 'notice', 25 'pixel', 26 'blocking' 27 ]; 19 28 20 29 /** … … 29 38 'type' => 'banner', 30 39 'position' => 'bottom', 31 'text' => esc_html__( "This website uses cookies to ensure the best user experience.", 'cookie-legit'),40 'text' => esc_html__('This website uses cookies to ensure the best user experience.', 'cookie-legit'), 32 41 'style' => array( 33 'background_color' => "#FFFFFF",34 'color' => "#000000",35 'border_radius' => "0"42 'background_color' => '#FFFFFF', 43 'color' => '#000000', 44 'border_radius' => '0' 36 45 ), 37 46 ), … … 40 49 'link' => '/privacy', 41 50 'style' => array( 42 'color' => "#28A745"51 'color' => '#28A745' 43 52 ), 44 53 ), … … 47 56 'text' => esc_html__('Change preferences', 'cookie-legit'), 48 57 'style' => array( 49 'background_color' => "#FFFFFF",50 'color' => "#000000",58 'background_color' => '#FFFFFF', 59 'color' => '#000000', 51 60 'border_radius' => 5 52 61 ), … … 55 64 'text' => esc_html__('Save preferences', 'cookie-legit'), 56 65 'style' => array( 57 'background_color' => "#ffffff",58 'color' => "#000000",66 'background_color' => '#ffffff', 67 'color' => '#000000', 59 68 'border_radius' => 5 60 69 ), … … 63 72 'text' => esc_html__('Accept', 'cookie-legit'), 64 73 'style' => array( 65 'background_color' => "#28A745",66 'color' => "#FFFFFF",74 'background_color' => '#28A745', 75 'color' => '#FFFFFF', 67 76 'border_radius' => 5 68 77 ), … … 71 80 'text' => esc_html__('Deny', 'cookie-legit'), 72 81 'style' => array( 73 'background_color' => "#FFFFFF",74 'color' => "#000000",82 'background_color' => '#FFFFFF', 83 'color' => '#000000', 75 84 'border_radius' => 5 76 85 ), … … 79 88 'texts' => array( 80 89 'essential' => array( 81 'title' => esc_html__( "Essential cookies", 'cookie-legit'),82 "description" => esc_html__("Cookies that make the website function as intended", 'cookie-legit')90 'title' => esc_html__('Essential cookies', 'cookie-legit'), 91 'description' => esc_html__('Cookies that make the website function as intended', 'cookie-legit') 83 92 ), 84 93 'tracking' => array( 85 'title' => esc_html__( "Analytical cookies", 'cookie-legit'),86 'description' => esc_html__( "Cookies that keep track of you.", 'cookie-legit'),94 'title' => esc_html__('Analytical cookies', 'cookie-legit'), 95 'description' => esc_html__('Cookies that keep track of you.', 'cookie-legit'), 87 96 ), 88 97 'marketing' => array( 89 'title' => esc_html__( "Marketing cookies", 'cookie-legit'),90 'description' => esc_html__( "Cookies with marketing purpose.", 'cookie-legit'),98 'title' => esc_html__('Marketing cookies', 'cookie-legit'), 99 'description' => esc_html__('Cookies with marketing purpose.', 'cookie-legit'), 91 100 ) 92 101 ), … … 100 109 'meta_pixel' => '', 101 110 ), 102 'consent_mode' => false 111 'consent_mode' => false, 112 'google_tag' => false, 103 113 ), 104 114 'blocking' => array( … … 162 172 'type' => 'text', 163 173 'position' => 'text', 164 'text' => "text",174 'text' => 'text', 165 175 'style' => array( 166 'background_color' => "color",167 'color' => "color",168 'border_radius' => "text"176 'background_color' => 'color', 177 'color' => 'color', 178 'border_radius' => 'text' 169 179 ), 170 180 ), … … 173 183 'link' => 'url', 174 184 'style' => array( 175 'color' => "color"185 'color' => 'color' 176 186 ), 177 187 ), … … 180 190 'text' => 'text', 181 191 'style' => array( 182 'background_color' => "color",183 'color' => "color",184 'border_radius' => "text"192 'background_color' => 'color', 193 'color' => 'color', 194 'border_radius' => 'text' 185 195 ), 186 196 ), … … 188 198 'text' => 'Save preferences', 189 199 'style' => array( 190 'background_color' => "color",191 ' text_color' => "color",192 'border_radius' => "text"200 'background_color' => 'color', 201 'color' => 'color', 202 'border_radius' => 'text' 193 203 ), 194 204 ), … … 196 206 'text' => 'text', 197 207 'style' => array( 198 'background_color' => "color",199 'color' => "text",200 'border_radius' => "text"208 'background_color' => 'color', 209 'color' => 'text', 210 'border_radius' => 'text' 201 211 ), 202 212 ), … … 204 214 'text' => 'text', 205 215 'style' => array( 206 'background_color' => "color",207 'color' => "color",208 'border_radius' => "text"216 'background_color' => 'color', 217 'color' => 'color', 218 'border_radius' => 'text' 209 219 ), 210 220 ), … … 212 222 'texts' => array( 213 223 'essential' => array( 214 'title' => "text",215 "description" => "textarea"224 'title' => 'text', 225 'description' => 'textarea' 216 226 ), 217 227 'tracking' => array( 218 'title' => "text",219 'description' => "textarea",228 'title' => 'text', 229 'description' => 'textarea', 220 230 ), 221 231 'marketing' => array( 222 'title' => "text",223 'description' => "textarea",232 'title' => 'text', 233 'description' => 'textarea', 224 234 ) 225 235 ), 226 236 'user_opt' => 'text', 227 237 'consent_mode' => 'text', 238 'google_tag' => 'text', 228 239 'codes' => array( 229 240 'google_tag_manager' => 'text', … … 244 255 'scripts' => array( 245 256 'block' => 'text', 246 'excludes' => "textarea"257 'excludes' => 'textarea' 247 258 ), 248 259 'give_some_love' => 'text' … … 265 276 { 266 277 return apply_filters('cookie_legit_setting_types', self::$defaultSettingTypes); 278 } 279 280 /** 281 * @return array<string> $settingGroups 282 */ 283 public static function get_setting_groups() 284 { 285 return apply_filters('cookie_legit_setting_groups', self::$settingGroups); 286 } 287 288 /** 289 * Get single setting 290 * @param string $group 291 * @param string $setting 292 * @param mixed $default 293 * @return mixed A single setting or group of settings 294 * @throws \Exception 295 */ 296 public static function get_setting($group, $setting = null, $default = null) 297 { 298 $groups = self::get_setting_groups(); 299 300 if(!in_array($group, $groups)) { 301 trigger_error(__CLASS__ .'::' . __FUNCTION__ . " $group is not a valid setting group", E_USER_WARNING); 302 return $default; 303 } 304 305 $defaultSettings = self::get_default_settings()[$group]; 306 307 $getSettingGroup = "get_{$group}_settings"; 308 309 $settings = self::$getSettingGroup(false); 310 311 return self::filter_settings($setting, $settings, $defaultSettings) ?? $default; 312 } 313 314 /** 315 * @param string $setting 316 * @param mixed $settings 317 * @param mixed $default 318 * @return mixed The setting 319 */ 320 private static function filter_settings($setting, $settings, $default) 321 { 322 $parts = explode('.', $setting); 323 324 $settingValue = $settings; 325 $defaultValue = $default; 326 327 foreach($parts as $key) { 328 $settingValue = $settingValue[$key] ?? null; 329 $defaultValue = $defaultValue[$key] ?? null; 330 } 331 332 if($settingValue === null && $defaultValue === null) { 333 trigger_error(__CLASS__ . '::' . __FUNCTION__ . " $setting does not exist", E_USER_WARNING); 334 return null; 335 } 336 337 return $settingValue ?? $defaultValue; 267 338 } 268 339 … … 404 475 405 476 if (cookie_legit_is_translatable()) { 406 return "_". cookie_legit_current_language();477 return '_' . cookie_legit_current_language(); 407 478 } 408 479 -
cookielegit/tags/1.1.0/src/public/class-cookie-legit-notice.php
r3148281 r3251291 24 24 'user_opt' => (isset($notice_settings['user_opt']) && $notice_settings['user_opt'] === 'on'), 25 25 'ajax_url' => admin_url('admin-ajax.php'), 26 'themeUrl' => COOKIE_LEGIT_URL . 'dist/public.css' 26 'themeUrl' => COOKIE_LEGIT_URL . 'dist/public.css', 27 'googleTag' => isset($pixel_settings['google_tag']) && $pixel_settings['google_tag'] === 'on', 27 28 )); 28 29 } -
cookielegit/tags/1.1.0/view/admin/settings/partials/pixel_fields.php
r3148248 r3251291 20 20 } ?>> 21 21 <label for="pixel-settings-consent-mode"></label> 22 </div> 23 </div> 24 </div> 25 <div class="cl-form-row row-google-tag<?php if(!$consent_mode) echo esc_attr(' hide'); ?>"> 26 <div class="cl-label-wrapper"> 27 <label><?php esc_html_e('I use the Google Tag', 'cookie-legit'); ?></label> 28 <p><?php esc_html_e('If enabled the plugin assumes you have integrated our Google Tag into Tag Manager. This provides the best integration when you use Tags that are not owned by Google.', 'cookie-legit'); ?></p> 29 </div> 30 <div class="cl-values-wrapper"> 31 <div class="cl-toggle-input"> 32 <input type="checkbox" name="pixels_settings[google_tag]" id="pixel-settings-google-tag" <?php if ($google_tag) { 33 echo esc_attr('checked'); 34 } ?>> 35 <label for="pixel-settings-google-tag"></label> 22 36 </div> 23 37 </div> -
cookielegit/trunk/.distignore
r3148254 r3251291 14 14 .travis.yml 15 15 tests 16 Dockerfile 17 docker-compose.yml 18 .env 19 .env.example 20 .php-cs-fixer.* -
cookielegit/trunk/CHANGELOG.md
r3149580 r3251291 1 1 # Changelog 2 3 ## [1.1.0](https://github.com/WebdesignSeolab/cookie-legit/compare/v1.0.2...v1.1.0) (2025-03-05) 4 5 6 ### Features 7 8 * add function in setting class for single setting retrievel ([#17](https://github.com/WebdesignSeolab/cookie-legit/issues/17)) ([756d202](https://github.com/WebdesignSeolab/cookie-legit/commit/756d2028bad8401fe10b85542624f3a0febe0a04)) 9 * Google Tag Manager tag integration ([#20](https://github.com/WebdesignSeolab/cookie-legit/issues/20)) ([7e500ac](https://github.com/WebdesignSeolab/cookie-legit/commit/7e500acc983a3a72e13e83b8a1479248275d7026)) 2 10 3 11 ## [1.0.2](https://github.com/WebdesignSeolab/cookie-legit/compare/v1.0.1...v1.0.2) (2024-09-10) -
cookielegit/trunk/assets/scripts/admin.js
r3148248 r3251291 12 12 if(active) { 13 13 $('.row-pixel:not(.row-google_tag_manager)').addClass('hide') 14 $('.row-google-tag').removeClass('hide') 14 15 } else { 16 $('.row-google-tag').addClass('hide') 15 17 $('.row-pixel:not(.row-google_tag_manager)').removeClass('hide') 16 18 } -
cookielegit/trunk/assets/scripts/public.js
r3148281 r3251291 1 1 import CookieLegitNotice from "./public/cookielegit"; 2 3 window.cookieLegitGtmCaller = function(gtmConsentUpdate) { 4 CookieLegitNotice.subscribe('consent-given', gtmConsentUpdate) 5 } 2 6 3 7 jQuery(function($) { 4 8 5 9 const updateBlocked = function() { 6 console.log('should update screens')7 10 $("iframe[data-cl-src]").each(function() { 8 11 $(this).attr("src", $(this).attr("data-cl-src")); … … 15 18 } 16 19 17 CookieLegitNotice.subscribe("consent-given", updateBlocked); 20 CookieLegitNotice.subscribe('consent-given', updateBlocked); 21 22 let callCount = 0; 23 CookieLegitNotice.subscribe('consent-given', function(args) { 24 callCount++ 25 26 console.log(`Event 'consent-given' got called ${callCount} times with args: `, args) 27 }) 18 28 19 29 window.cookieLegitNotice = new CookieLegitNotice("body", { … … 21 31 userOpt: cl_config.user_opt !== "", 22 32 baseUrl: cl_config.ajax_url, 23 themeUrl: cl_config.themeUrl 33 themeUrl: cl_config.themeUrl, 34 googleTag: cl_config.googleTag !== '', 24 35 }); 25 36 }); -
cookielegit/trunk/assets/scripts/public/cookielegit.js
r3148281 r3251291 7 7 #consentedTo = []; 8 8 9 CONSENT_SETTINGS_NAME = 'cl_cus'; 10 9 11 screens = ["notice", "preferences", "toggle-preferences"]; 10 12 … … 18 20 consentMode: false, 19 21 cookieDuration: 182, 20 themeUrl: null 22 themeUrl: null, 23 googleTag: false, 24 }; 25 26 consentCategories = { 27 cl_tracking: "marketingCookies", 28 cl_marketing: "advertisingCookies", 29 cl_essential: "essentialCookies", 21 30 }; 22 31 … … 38 47 39 48 buildStyle(cookieNotice) { 40 const tag = document.createElement( 'link');49 const tag = document.createElement("link"); 41 50 tag.href = this.#settings.themeUrl; 42 tag.rel = 'stylesheet';43 tag.id = 'cookielegit-css';51 tag.rel = "stylesheet"; 52 tag.id = "cookielegit-css"; 44 53 45 54 tag.onload = () => { 46 cookieNotice.style.display = '';47 } 55 cookieNotice.style.display = ""; 56 }; 48 57 49 58 document.head.append(tag); 50 51 59 } 52 60 … … 56 64 .forEach((cookie) => this.#consentedTo.push(cookie)); 57 65 58 if (this.#settings.consentMode && this.#consentedTo.length > 0) { 66 67 if (this.#consentedTo.length === 0) { 68 return; 69 } 70 71 if (this.#settings.consentMode && !this.#settings.googleTag) { 59 72 this.updateGTMConsent(); 60 } 61 62 if (this.#consentedTo.length > 0) { 73 63 74 CookieLegitNotice.#trigger('consent-given'); 64 } 75 76 return; 77 } 78 79 const googleConsentSettings = this.getTagConsentSettings(); 80 81 CookieLegitNotice.#trigger('consent-given', googleConsentSettings); 82 83 LegitCookies.create(this.CONSENT_SETTINGS_NAME, JSON.stringify(googleConsentSettings)); 65 84 } 66 85 … … 71 90 async insertNotice() { 72 91 let notice = await this.fetchNotice(); 92 73 93 this.#notice = document.createElement("div"); 94 74 95 this.#notice.id = "cookie-legit-notice-container"; 96 75 97 this.#notice.innerHTML = notice.html; 76 this.#notice.style.display = 'none'; 77 78 let screen = this.#consentedTo.length === 0 ? "notice" : "toggle-preferences"; 98 99 this.#notice.style.display = "none"; 100 101 let screen = 102 this.#consentedTo.length === 0 ? "notice" : "toggle-preferences"; 103 79 104 this.#notice.classList.add(screen); 80 105 81 106 this.#target.appendChild(this.#notice); 82 // this.changeScreen(screen); 107 83 108 this.setupEvents(); 84 109 … … 94 119 `${this.#settings.baseUrl}?action=get_cookie_notice` 95 120 ); 121 96 122 return await request.json(); 97 123 } … … 102 128 .querySelector(".cookie-legit-pref-btn") 103 129 .addEventListener("click", () => this.toggleUserPreferences()); 130 104 131 this.#notice 105 132 .querySelector(".cookie-legit-save-pref-btn") 106 133 .addEventListener("click", () => this.savePreferences()); 134 107 135 this.#notice 108 136 .querySelector(".cookie-legit-accept-pref-btn") … … 116 144 this.#notice 117 145 .querySelector(".cookie-legit-preferences-change") 118 .addEventListener("click", () => this.updatePreferences()); 146 .addEventListener("click", () => this.toggleUserPreferences()); 147 119 148 this.#notice 120 149 .querySelector(".cookie-legit-accept-btn") … … 136 165 savePreferences() { 137 166 this.changeScreen("toggle-preferences"); 167 138 168 this.cookieNames.forEach((cookieName) => { 139 169 let value = … … 143 173 LegitCookies.create(cookieName, value, this.#settings.cookieDuration); 144 174 }); 175 145 176 this.checkConsentCookies(); 146 177 } … … 148 179 updatePreferences() { 149 180 let screen = this.#settings.userOpt ? "preferences" : "notice"; 181 150 182 this.changeScreen(screen); 151 this.checkConsentCookies(); 152 CookieLegitNotice.#trigger('consent-updated'); 183 184 this.checkConsentCookies(); 185 186 CookieLegitNotice.#trigger("consent-updated"); 153 187 } 154 188 155 189 denyAllCookies() { 156 190 this.changeScreen("toggle-preferences"); 191 157 192 this.cookieNames.forEach((cookieName) => { 158 193 let value = cookieName === this.consentCookieName ? true : false; 159 194 LegitCookies.create(cookieName, value, this.#settings.cookieDuration); 160 195 }); 196 161 197 this.checkConsentCookies(); 162 198 } … … 166 202 (screen) => screen !== activeScreen 167 203 ); 204 168 205 this.#notice.classList.remove(...inactiveScreens); 206 169 207 this.#notice.classList.add(activeScreen); 170 208 } … … 180 218 181 219 async maybeInjectScripts() { 182 if (!this.#settings.userOpt || LegitCookies.find(this.consentCookieName) !== 'true') return; 220 if ( 221 !this.#settings.userOpt || 222 LegitCookies.find(this.consentCookieName) !== "true" 223 ) { 224 return; 225 } 226 183 227 let scriptReq = await fetch( 184 228 `${this.#settings.baseUrl}?action=get_tracking_scripts` … … 186 230 187 231 let scriptsWithPlacement = await scriptReq.json(); 232 188 233 for (const placement in scriptsWithPlacement) { 189 234 if (Object.hasOwnProperty.call(scriptsWithPlacement, placement)) { 235 190 236 const scripts = scriptsWithPlacement[placement]; 191 Object.values(scripts).forEach(script => { 237 238 Object.values(scripts).forEach((script) => { 239 192 240 if (!this.isJSON(script)) { 193 241 let tag = this.buildScript(placement, script); 242 194 243 document.querySelector(placement).append(tag); 195 244 } else { 196 245 script = JSON.parse(script); 246 197 247 for (const stype in script) { 248 198 249 if (Object.hasOwnProperty.call(script, stype)) { 199 250 const contents = script[stype]; 200 contents.forEach(content => { 201 let tag = this.buildScript(placement, content, stype === 'srcs'); 251 252 contents.forEach((content) => { 253 let tag = this.buildScript( 254 placement, 255 content, 256 stype === "srcs" 257 ); 258 202 259 document.querySelector(placement).append(tag); 203 }) 260 }); 204 261 } 205 262 } … … 219 276 0: "consent", 220 277 1: "update", 221 2: this.getGTMConsentObject() 278 2: this.getGTMConsentObject(), 222 279 }); 223 280 } … … 242 299 : "denied", 243 300 security_storage: "granted", 244 } 301 }; 245 302 } 246 303 247 304 isJSON(objectString) { 248 305 try { 249 let json = JSON.parse(objectString) 306 let json = JSON.parse(objectString); 250 307 } catch (e) { 251 308 return false; … … 256 313 257 314 buildScript(placement, scriptContent, isSrc = false) { 258 let tagName = placement === 'head' ? 'script' : 'noscript';315 let tagName = placement === "head" ? "script" : "noscript"; 259 316 let tag = document.createElement(tagName); 260 317 … … 268 325 } 269 326 327 getTagConsentSettings() { 328 const consentSettings = {}; 329 330 this.#consentedTo.forEach( consented => { 331 if (consented.name in this.consentCategories) { 332 consentSettings[this.consentCategories[consented.name]] = consented.value === "true"; 333 } 334 }); 335 336 return consentSettings; 337 } 338 270 339 static subscribe(event, callback) { 271 if (!this.#events[event]) 340 if (!this.#events[event]) { 272 341 return console.warn( 273 342 `Cannot subscribe to ${event} because it does not exist!` 274 343 ); 275 if (typeof callback !== "function") 344 } 345 346 if (typeof callback !== "function") { 276 347 return console.warn( 277 348 `Expected callback for ${event} got ${typeof callback}` 278 349 ); 350 } 351 279 352 this.#events[event].push(callback); 280 353 } 281 354 282 static #trigger(event ) {355 static #trigger(event, ...args) { 283 356 const callbacks = this.#events[event]; 284 357 285 if (!callbacks) return console.warn(`Cannot trigger ${event} because it does not exist!`); 358 if (!callbacks) 359 return console.warn(`Cannot trigger ${event} because it does not exist!`); 286 360 287 361 for (let callback of callbacks) { 288 callback( );362 callback(...args); 289 363 } 290 364 } -
cookielegit/trunk/composer.json
r3148248 r3251291 9 9 "szepeviktor/phpstan-wordpress": "dev-master", 10 10 "wp-coding-standards/wpcs": "^3.0", 11 "phpstan/extension-installer": "1.4.x-dev" 11 "phpstan/extension-installer": "1.4.x-dev", 12 "friendsofphp/php-cs-fixer": "dev-master" 12 13 }, 13 14 "license": "GPL-3.0", … … 21 22 "name": "Cookie Legit", 22 23 "email": "devs@cookielegit.site" 24 }, 25 { 26 "name": "Duco Drupsteen", 27 "email": "duco@ducduc.nl" 23 28 } 24 29 ], -
cookielegit/trunk/composer.lock
r3148248 r3251291 5 5 "This file is @generated automatically" 6 6 ], 7 "content-hash": "e 0db033eea721e161c8bae85bef572d4",7 "content-hash": "e85cbf755d5b1738dc56184df147b860", 8 8 "packages": [], 9 9 "packages-dev": [ 10 { 11 "name": "clue/ndjson-react", 12 "version": "1.x-dev", 13 "source": { 14 "type": "git", 15 "url": "https://github.com/clue/reactphp-ndjson.git", 16 "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e" 17 }, 18 "dist": { 19 "type": "zip", 20 "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/8fc557eaa902e4f1de171b5b4eaa6246fbe4118e", 21 "reference": "8fc557eaa902e4f1de171b5b4eaa6246fbe4118e", 22 "shasum": "" 23 }, 24 "require": { 25 "php": ">=5.3", 26 "react/stream": "^1.2" 27 }, 28 "require-dev": { 29 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", 30 "react/event-loop": "^1.2" 31 }, 32 "default-branch": true, 33 "type": "library", 34 "autoload": { 35 "psr-4": { 36 "Clue\\React\\NDJson\\": "src/" 37 } 38 }, 39 "notification-url": "https://packagist.org/downloads/", 40 "license": [ 41 "MIT" 42 ], 43 "authors": [ 44 { 45 "name": "Christian Lück", 46 "email": "christian@clue.engineering" 47 } 48 ], 49 "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", 50 "homepage": "https://github.com/clue/reactphp-ndjson", 51 "keywords": [ 52 "NDJSON", 53 "json", 54 "jsonlines", 55 "newline", 56 "reactphp", 57 "streaming" 58 ], 59 "support": { 60 "issues": "https://github.com/clue/reactphp-ndjson/issues", 61 "source": "https://github.com/clue/reactphp-ndjson/tree/1.x" 62 }, 63 "funding": [ 64 { 65 "url": "https://clue.engineering/support", 66 "type": "custom" 67 }, 68 { 69 "url": "https://github.com/clue", 70 "type": "github" 71 } 72 ], 73 "time": "2023-11-24T09:04:50+00:00" 74 }, 75 { 76 "name": "composer/pcre", 77 "version": "dev-main", 78 "source": { 79 "type": "git", 80 "url": "https://github.com/composer/pcre.git", 81 "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49" 82 }, 83 "dist": { 84 "type": "zip", 85 "url": "https://api.github.com/repos/composer/pcre/zipball/deb3871d20d5012eb5faa5a9caa71c44f151db49", 86 "reference": "deb3871d20d5012eb5faa5a9caa71c44f151db49", 87 "shasum": "" 88 }, 89 "require": { 90 "php": "^7.4 || ^8.0" 91 }, 92 "conflict": { 93 "phpstan/phpstan": "<1.11.10" 94 }, 95 "require-dev": { 96 "phpstan/phpstan": "^1.12 || ^2", 97 "phpstan/phpstan-deprecation-rules": "^1 || ^2", 98 "phpstan/phpstan-strict-rules": "^1 || ^2", 99 "phpunit/phpunit": "^8 || ^9" 100 }, 101 "default-branch": true, 102 "type": "library", 103 "extra": { 104 "phpstan": { 105 "includes": [ 106 "extension.neon" 107 ] 108 }, 109 "branch-alias": { 110 "dev-main": "3.x-dev" 111 } 112 }, 113 "autoload": { 114 "psr-4": { 115 "Composer\\Pcre\\": "src" 116 } 117 }, 118 "notification-url": "https://packagist.org/downloads/", 119 "license": [ 120 "MIT" 121 ], 122 "authors": [ 123 { 124 "name": "Jordi Boggiano", 125 "email": "j.boggiano@seld.be", 126 "homepage": "http://seld.be" 127 } 128 ], 129 "description": "PCRE wrapping library that offers type-safe preg_* replacements.", 130 "keywords": [ 131 "PCRE", 132 "preg", 133 "regex", 134 "regular expression" 135 ], 136 "support": { 137 "issues": "https://github.com/composer/pcre/issues", 138 "source": "https://github.com/composer/pcre/tree/main" 139 }, 140 "funding": [ 141 { 142 "url": "https://packagist.com", 143 "type": "custom" 144 }, 145 { 146 "url": "https://github.com/composer", 147 "type": "github" 148 }, 149 { 150 "url": "https://tidelift.com/funding/github/packagist/composer/composer", 151 "type": "tidelift" 152 } 153 ], 154 "time": "2024-11-20T09:10:58+00:00" 155 }, 156 { 157 "name": "composer/semver", 158 "version": "dev-main", 159 "source": { 160 "type": "git", 161 "url": "https://github.com/composer/semver.git", 162 "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" 163 }, 164 "dist": { 165 "type": "zip", 166 "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", 167 "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", 168 "shasum": "" 169 }, 170 "require": { 171 "php": "^5.3.2 || ^7.0 || ^8.0" 172 }, 173 "require-dev": { 174 "phpstan/phpstan": "^1.11", 175 "symfony/phpunit-bridge": "^3 || ^7" 176 }, 177 "default-branch": true, 178 "type": "library", 179 "extra": { 180 "branch-alias": { 181 "dev-main": "3.x-dev" 182 } 183 }, 184 "autoload": { 185 "psr-4": { 186 "Composer\\Semver\\": "src" 187 } 188 }, 189 "notification-url": "https://packagist.org/downloads/", 190 "license": [ 191 "MIT" 192 ], 193 "authors": [ 194 { 195 "name": "Nils Adermann", 196 "email": "naderman@naderman.de", 197 "homepage": "http://www.naderman.de" 198 }, 199 { 200 "name": "Jordi Boggiano", 201 "email": "j.boggiano@seld.be", 202 "homepage": "http://seld.be" 203 }, 204 { 205 "name": "Rob Bast", 206 "email": "rob.bast@gmail.com", 207 "homepage": "http://robbast.nl" 208 } 209 ], 210 "description": "Semver library that offers utilities, version constraint parsing and validation.", 211 "keywords": [ 212 "semantic", 213 "semver", 214 "validation", 215 "versioning" 216 ], 217 "support": { 218 "irc": "ircs://irc.libera.chat:6697/composer", 219 "issues": "https://github.com/composer/semver/issues", 220 "source": "https://github.com/composer/semver/tree/3.4.3" 221 }, 222 "funding": [ 223 { 224 "url": "https://packagist.com", 225 "type": "custom" 226 }, 227 { 228 "url": "https://github.com/composer", 229 "type": "github" 230 }, 231 { 232 "url": "https://tidelift.com/funding/github/packagist/composer/composer", 233 "type": "tidelift" 234 } 235 ], 236 "time": "2024-09-19T14:15:21+00:00" 237 }, 238 { 239 "name": "composer/xdebug-handler", 240 "version": "3.0.5", 241 "source": { 242 "type": "git", 243 "url": "https://github.com/composer/xdebug-handler.git", 244 "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" 245 }, 246 "dist": { 247 "type": "zip", 248 "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", 249 "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", 250 "shasum": "" 251 }, 252 "require": { 253 "composer/pcre": "^1 || ^2 || ^3", 254 "php": "^7.2.5 || ^8.0", 255 "psr/log": "^1 || ^2 || ^3" 256 }, 257 "require-dev": { 258 "phpstan/phpstan": "^1.0", 259 "phpstan/phpstan-strict-rules": "^1.1", 260 "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" 261 }, 262 "type": "library", 263 "autoload": { 264 "psr-4": { 265 "Composer\\XdebugHandler\\": "src" 266 } 267 }, 268 "notification-url": "https://packagist.org/downloads/", 269 "license": [ 270 "MIT" 271 ], 272 "authors": [ 273 { 274 "name": "John Stevenson", 275 "email": "john-stevenson@blueyonder.co.uk" 276 } 277 ], 278 "description": "Restarts a process without Xdebug.", 279 "keywords": [ 280 "Xdebug", 281 "performance" 282 ], 283 "support": { 284 "irc": "ircs://irc.libera.chat:6697/composer", 285 "issues": "https://github.com/composer/xdebug-handler/issues", 286 "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" 287 }, 288 "funding": [ 289 { 290 "url": "https://packagist.com", 291 "type": "custom" 292 }, 293 { 294 "url": "https://github.com/composer", 295 "type": "github" 296 }, 297 { 298 "url": "https://tidelift.com/funding/github/packagist/composer/composer", 299 "type": "tidelift" 300 } 301 ], 302 "time": "2024-05-06T16:37:16+00:00" 303 }, 10 304 { 11 305 "name": "dealerdirect/phpcodesniffer-composer-installer", … … 156 450 ], 157 451 "time": "2024-06-20T19:34:15+00:00" 452 }, 453 { 454 "name": "evenement/evenement", 455 "version": "v3.0.2", 456 "source": { 457 "type": "git", 458 "url": "https://github.com/igorw/evenement.git", 459 "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" 460 }, 461 "dist": { 462 "type": "zip", 463 "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", 464 "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", 465 "shasum": "" 466 }, 467 "require": { 468 "php": ">=7.0" 469 }, 470 "require-dev": { 471 "phpunit/phpunit": "^9 || ^6" 472 }, 473 "type": "library", 474 "autoload": { 475 "psr-4": { 476 "Evenement\\": "src/" 477 } 478 }, 479 "notification-url": "https://packagist.org/downloads/", 480 "license": [ 481 "MIT" 482 ], 483 "authors": [ 484 { 485 "name": "Igor Wiedler", 486 "email": "igor@wiedler.ch" 487 } 488 ], 489 "description": "Événement is a very simple event dispatching library for PHP", 490 "keywords": [ 491 "event-dispatcher", 492 "event-emitter" 493 ], 494 "support": { 495 "issues": "https://github.com/igorw/evenement/issues", 496 "source": "https://github.com/igorw/evenement/tree/v3.0.2" 497 }, 498 "time": "2023-08-08T05:53:35+00:00" 499 }, 500 { 501 "name": "fidry/cpu-core-counter", 502 "version": "1.2.0", 503 "source": { 504 "type": "git", 505 "url": "https://github.com/theofidry/cpu-core-counter.git", 506 "reference": "8520451a140d3f46ac33042715115e290cf5785f" 507 }, 508 "dist": { 509 "type": "zip", 510 "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", 511 "reference": "8520451a140d3f46ac33042715115e290cf5785f", 512 "shasum": "" 513 }, 514 "require": { 515 "php": "^7.2 || ^8.0" 516 }, 517 "require-dev": { 518 "fidry/makefile": "^0.2.0", 519 "fidry/php-cs-fixer-config": "^1.1.2", 520 "phpstan/extension-installer": "^1.2.0", 521 "phpstan/phpstan": "^1.9.2", 522 "phpstan/phpstan-deprecation-rules": "^1.0.0", 523 "phpstan/phpstan-phpunit": "^1.2.2", 524 "phpstan/phpstan-strict-rules": "^1.4.4", 525 "phpunit/phpunit": "^8.5.31 || ^9.5.26", 526 "webmozarts/strict-phpunit": "^7.5" 527 }, 528 "type": "library", 529 "autoload": { 530 "psr-4": { 531 "Fidry\\CpuCoreCounter\\": "src/" 532 } 533 }, 534 "notification-url": "https://packagist.org/downloads/", 535 "license": [ 536 "MIT" 537 ], 538 "authors": [ 539 { 540 "name": "Théo FIDRY", 541 "email": "theo.fidry@gmail.com" 542 } 543 ], 544 "description": "Tiny utility to get the number of CPU cores.", 545 "keywords": [ 546 "CPU", 547 "core" 548 ], 549 "support": { 550 "issues": "https://github.com/theofidry/cpu-core-counter/issues", 551 "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" 552 }, 553 "funding": [ 554 { 555 "url": "https://github.com/theofidry", 556 "type": "github" 557 } 558 ], 559 "time": "2024-08-06T10:04:20+00:00" 560 }, 561 { 562 "name": "friendsofphp/php-cs-fixer", 563 "version": "dev-master", 564 "source": { 565 "type": "git", 566 "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", 567 "reference": "de9c8c6fcd7092158636d93def0067abdade87ab" 568 }, 569 "dist": { 570 "type": "zip", 571 "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/de9c8c6fcd7092158636d93def0067abdade87ab", 572 "reference": "de9c8c6fcd7092158636d93def0067abdade87ab", 573 "shasum": "" 574 }, 575 "require": { 576 "clue/ndjson-react": "^1.0", 577 "composer/semver": "^3.4", 578 "composer/xdebug-handler": "^3.0.3", 579 "ext-filter": "*", 580 "ext-json": "*", 581 "ext-tokenizer": "*", 582 "fidry/cpu-core-counter": "^1.2", 583 "php": "^7.4 || ^8.0", 584 "react/child-process": "^0.6.5", 585 "react/event-loop": "^1.0", 586 "react/promise": "^2.0 || ^3.0", 587 "react/socket": "^1.0", 588 "react/stream": "^1.0", 589 "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0", 590 "symfony/console": "^5.4 || ^6.4 || ^7.0", 591 "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", 592 "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", 593 "symfony/finder": "^5.4 || ^6.4 || ^7.0", 594 "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", 595 "symfony/polyfill-mbstring": "^1.31", 596 "symfony/polyfill-php80": "^1.31", 597 "symfony/polyfill-php81": "^1.31", 598 "symfony/process": "^5.4 || ^6.4 || ^7.2", 599 "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" 600 }, 601 "require-dev": { 602 "facile-it/paraunit": "^1.3.1 || ^2.5", 603 "infection/infection": "^0.29.10", 604 "justinrainbow/json-schema": "^5.3 || ^6.0", 605 "keradus/cli-executor": "^2.1", 606 "mikey179/vfsstream": "^1.6.12", 607 "php-coveralls/php-coveralls": "^2.7", 608 "php-cs-fixer/accessible-object": "^1.1", 609 "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", 610 "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", 611 "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.7", 612 "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.0", 613 "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.0" 614 }, 615 "suggest": { 616 "ext-dom": "For handling output formats in XML", 617 "ext-mbstring": "For handling non-UTF8 characters." 618 }, 619 "default-branch": true, 620 "bin": [ 621 "php-cs-fixer" 622 ], 623 "type": "application", 624 "autoload": { 625 "psr-4": { 626 "PhpCsFixer\\": "src/" 627 }, 628 "exclude-from-classmap": [ 629 "src/Fixer/Internal/*" 630 ] 631 }, 632 "notification-url": "https://packagist.org/downloads/", 633 "license": [ 634 "MIT" 635 ], 636 "authors": [ 637 { 638 "name": "Fabien Potencier", 639 "email": "fabien@symfony.com" 640 }, 641 { 642 "name": "Dariusz Rumiński", 643 "email": "dariusz.ruminski@gmail.com" 644 } 645 ], 646 "description": "A tool to automatically fix PHP code style", 647 "keywords": [ 648 "Static code analysis", 649 "fixer", 650 "standards", 651 "static analysis" 652 ], 653 "support": { 654 "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", 655 "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/master" 656 }, 657 "funding": [ 658 { 659 "url": "https://github.com/keradus", 660 "type": "github" 661 } 662 ], 663 "time": "2025-02-15T22:46:01+00:00" 158 664 }, 159 665 { … … 1137 1643 }, 1138 1644 { 1645 "name": "psr/container", 1646 "version": "dev-master", 1647 "source": { 1648 "type": "git", 1649 "url": "https://github.com/php-fig/container.git", 1650 "reference": "707984727bd5b2b670e59559d3ed2500240cf875" 1651 }, 1652 "dist": { 1653 "type": "zip", 1654 "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875", 1655 "reference": "707984727bd5b2b670e59559d3ed2500240cf875", 1656 "shasum": "" 1657 }, 1658 "require": { 1659 "php": ">=7.4.0" 1660 }, 1661 "default-branch": true, 1662 "type": "library", 1663 "extra": { 1664 "branch-alias": { 1665 "dev-master": "2.0.x-dev" 1666 } 1667 }, 1668 "autoload": { 1669 "psr-4": { 1670 "Psr\\Container\\": "src/" 1671 } 1672 }, 1673 "notification-url": "https://packagist.org/downloads/", 1674 "license": [ 1675 "MIT" 1676 ], 1677 "authors": [ 1678 { 1679 "name": "PHP-FIG", 1680 "homepage": "https://www.php-fig.org/" 1681 } 1682 ], 1683 "description": "Common Container Interface (PHP FIG PSR-11)", 1684 "homepage": "https://github.com/php-fig/container", 1685 "keywords": [ 1686 "PSR-11", 1687 "container", 1688 "container-interface", 1689 "container-interop", 1690 "psr" 1691 ], 1692 "support": { 1693 "issues": "https://github.com/php-fig/container/issues", 1694 "source": "https://github.com/php-fig/container" 1695 }, 1696 "time": "2023-09-22T11:11:30+00:00" 1697 }, 1698 { 1699 "name": "psr/event-dispatcher", 1700 "version": "dev-master", 1701 "source": { 1702 "type": "git", 1703 "url": "https://github.com/php-fig/event-dispatcher.git", 1704 "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874" 1705 }, 1706 "dist": { 1707 "type": "zip", 1708 "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", 1709 "reference": "bbd9eacc080d33861e5b5c75b3b8c4d7e6d01874", 1710 "shasum": "" 1711 }, 1712 "require": { 1713 "php": ">=7.2.0" 1714 }, 1715 "suggest": { 1716 "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities" 1717 }, 1718 "default-branch": true, 1719 "type": "library", 1720 "extra": { 1721 "branch-alias": { 1722 "dev-master": "1.0.x-dev" 1723 } 1724 }, 1725 "autoload": { 1726 "psr-4": { 1727 "Psr\\EventDispatcher\\": "src/" 1728 } 1729 }, 1730 "notification-url": "https://packagist.org/downloads/", 1731 "license": [ 1732 "MIT" 1733 ], 1734 "authors": [ 1735 { 1736 "name": "PHP-FIG", 1737 "homepage": "https://www.php-fig.org/" 1738 } 1739 ], 1740 "description": "Standard interfaces for event handling.", 1741 "keywords": [ 1742 "events", 1743 "psr", 1744 "psr-14" 1745 ], 1746 "support": { 1747 "source": "https://github.com/php-fig/event-dispatcher" 1748 }, 1749 "time": "2024-03-17T21:29:03+00:00" 1750 }, 1751 { 1752 "name": "psr/log", 1753 "version": "dev-master", 1754 "source": { 1755 "type": "git", 1756 "url": "https://github.com/php-fig/log.git", 1757 "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" 1758 }, 1759 "dist": { 1760 "type": "zip", 1761 "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 1762 "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 1763 "shasum": "" 1764 }, 1765 "require": { 1766 "php": ">=8.0.0" 1767 }, 1768 "default-branch": true, 1769 "type": "library", 1770 "extra": { 1771 "branch-alias": { 1772 "dev-master": "3.x-dev" 1773 } 1774 }, 1775 "autoload": { 1776 "psr-4": { 1777 "Psr\\Log\\": "src" 1778 } 1779 }, 1780 "notification-url": "https://packagist.org/downloads/", 1781 "license": [ 1782 "MIT" 1783 ], 1784 "authors": [ 1785 { 1786 "name": "PHP-FIG", 1787 "homepage": "https://www.php-fig.org/" 1788 } 1789 ], 1790 "description": "Common interface for logging libraries", 1791 "homepage": "https://github.com/php-fig/log", 1792 "keywords": [ 1793 "log", 1794 "psr", 1795 "psr-3" 1796 ], 1797 "support": { 1798 "source": "https://github.com/php-fig/log/tree/3.0.2" 1799 }, 1800 "time": "2024-09-11T13:17:53+00:00" 1801 }, 1802 { 1803 "name": "react/cache", 1804 "version": "1.x-dev", 1805 "source": { 1806 "type": "git", 1807 "url": "https://github.com/reactphp/cache.git", 1808 "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605" 1809 }, 1810 "dist": { 1811 "type": "zip", 1812 "url": "https://api.github.com/repos/reactphp/cache/zipball/36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605", 1813 "reference": "36c51f36d5f3c23cfcc2b5dc5e443bb5ff085605", 1814 "shasum": "" 1815 }, 1816 "require": { 1817 "php": ">=5.3.0", 1818 "react/promise": "^3.0 || ^2.0 || ^1.1" 1819 }, 1820 "require-dev": { 1821 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" 1822 }, 1823 "default-branch": true, 1824 "type": "library", 1825 "autoload": { 1826 "psr-4": { 1827 "React\\Cache\\": "src/" 1828 } 1829 }, 1830 "notification-url": "https://packagist.org/downloads/", 1831 "license": [ 1832 "MIT" 1833 ], 1834 "authors": [ 1835 { 1836 "name": "Christian Lück", 1837 "email": "christian@clue.engineering", 1838 "homepage": "https://clue.engineering/" 1839 }, 1840 { 1841 "name": "Cees-Jan Kiewiet", 1842 "email": "reactphp@ceesjankiewiet.nl", 1843 "homepage": "https://wyrihaximus.net/" 1844 }, 1845 { 1846 "name": "Jan Sorgalla", 1847 "email": "jsorgalla@gmail.com", 1848 "homepage": "https://sorgalla.com/" 1849 }, 1850 { 1851 "name": "Chris Boden", 1852 "email": "cboden@gmail.com", 1853 "homepage": "https://cboden.dev/" 1854 } 1855 ], 1856 "description": "Async, Promise-based cache interface for ReactPHP", 1857 "keywords": [ 1858 "cache", 1859 "caching", 1860 "promise", 1861 "reactphp" 1862 ], 1863 "support": { 1864 "issues": "https://github.com/reactphp/cache/issues", 1865 "source": "https://github.com/reactphp/cache/tree/1.x" 1866 }, 1867 "funding": [ 1868 { 1869 "url": "https://opencollective.com/reactphp", 1870 "type": "open_collective" 1871 } 1872 ], 1873 "time": "2024-01-04T09:16:03+00:00" 1874 }, 1875 { 1876 "name": "react/child-process", 1877 "version": "0.6.x-dev", 1878 "source": { 1879 "type": "git", 1880 "url": "https://github.com/reactphp/child-process.git", 1881 "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" 1882 }, 1883 "dist": { 1884 "type": "zip", 1885 "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", 1886 "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", 1887 "shasum": "" 1888 }, 1889 "require": { 1890 "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 1891 "php": ">=5.3.0", 1892 "react/event-loop": "^1.2", 1893 "react/stream": "^1.4" 1894 }, 1895 "require-dev": { 1896 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", 1897 "react/socket": "^1.16", 1898 "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" 1899 }, 1900 "type": "library", 1901 "autoload": { 1902 "psr-4": { 1903 "React\\ChildProcess\\": "src/" 1904 } 1905 }, 1906 "notification-url": "https://packagist.org/downloads/", 1907 "license": [ 1908 "MIT" 1909 ], 1910 "authors": [ 1911 { 1912 "name": "Christian Lück", 1913 "email": "christian@clue.engineering", 1914 "homepage": "https://clue.engineering/" 1915 }, 1916 { 1917 "name": "Cees-Jan Kiewiet", 1918 "email": "reactphp@ceesjankiewiet.nl", 1919 "homepage": "https://wyrihaximus.net/" 1920 }, 1921 { 1922 "name": "Jan Sorgalla", 1923 "email": "jsorgalla@gmail.com", 1924 "homepage": "https://sorgalla.com/" 1925 }, 1926 { 1927 "name": "Chris Boden", 1928 "email": "cboden@gmail.com", 1929 "homepage": "https://cboden.dev/" 1930 } 1931 ], 1932 "description": "Event-driven library for executing child processes with ReactPHP.", 1933 "keywords": [ 1934 "event-driven", 1935 "process", 1936 "reactphp" 1937 ], 1938 "support": { 1939 "issues": "https://github.com/reactphp/child-process/issues", 1940 "source": "https://github.com/reactphp/child-process/tree/v0.6.6" 1941 }, 1942 "funding": [ 1943 { 1944 "url": "https://opencollective.com/reactphp", 1945 "type": "open_collective" 1946 } 1947 ], 1948 "time": "2025-01-01T16:37:48+00:00" 1949 }, 1950 { 1951 "name": "react/dns", 1952 "version": "1.x-dev", 1953 "source": { 1954 "type": "git", 1955 "url": "https://github.com/reactphp/dns.git", 1956 "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" 1957 }, 1958 "dist": { 1959 "type": "zip", 1960 "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", 1961 "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", 1962 "shasum": "" 1963 }, 1964 "require": { 1965 "php": ">=5.3.0", 1966 "react/cache": "^1.0 || ^0.6 || ^0.5", 1967 "react/event-loop": "^1.2", 1968 "react/promise": "^3.2 || ^2.7 || ^1.2.1" 1969 }, 1970 "require-dev": { 1971 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", 1972 "react/async": "^4.3 || ^3 || ^2", 1973 "react/promise-timer": "^1.11" 1974 }, 1975 "type": "library", 1976 "autoload": { 1977 "psr-4": { 1978 "React\\Dns\\": "src/" 1979 } 1980 }, 1981 "notification-url": "https://packagist.org/downloads/", 1982 "license": [ 1983 "MIT" 1984 ], 1985 "authors": [ 1986 { 1987 "name": "Christian Lück", 1988 "email": "christian@clue.engineering", 1989 "homepage": "https://clue.engineering/" 1990 }, 1991 { 1992 "name": "Cees-Jan Kiewiet", 1993 "email": "reactphp@ceesjankiewiet.nl", 1994 "homepage": "https://wyrihaximus.net/" 1995 }, 1996 { 1997 "name": "Jan Sorgalla", 1998 "email": "jsorgalla@gmail.com", 1999 "homepage": "https://sorgalla.com/" 2000 }, 2001 { 2002 "name": "Chris Boden", 2003 "email": "cboden@gmail.com", 2004 "homepage": "https://cboden.dev/" 2005 } 2006 ], 2007 "description": "Async DNS resolver for ReactPHP", 2008 "keywords": [ 2009 "async", 2010 "dns", 2011 "dns-resolver", 2012 "reactphp" 2013 ], 2014 "support": { 2015 "issues": "https://github.com/reactphp/dns/issues", 2016 "source": "https://github.com/reactphp/dns/tree/v1.13.0" 2017 }, 2018 "funding": [ 2019 { 2020 "url": "https://opencollective.com/reactphp", 2021 "type": "open_collective" 2022 } 2023 ], 2024 "time": "2024-06-13T14:18:03+00:00" 2025 }, 2026 { 2027 "name": "react/event-loop", 2028 "version": "1.x-dev", 2029 "source": { 2030 "type": "git", 2031 "url": "https://github.com/reactphp/event-loop.git", 2032 "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" 2033 }, 2034 "dist": { 2035 "type": "zip", 2036 "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", 2037 "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", 2038 "shasum": "" 2039 }, 2040 "require": { 2041 "php": ">=5.3.0" 2042 }, 2043 "require-dev": { 2044 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" 2045 }, 2046 "suggest": { 2047 "ext-pcntl": "For signal handling support when using the StreamSelectLoop" 2048 }, 2049 "default-branch": true, 2050 "type": "library", 2051 "autoload": { 2052 "psr-4": { 2053 "React\\EventLoop\\": "src/" 2054 } 2055 }, 2056 "notification-url": "https://packagist.org/downloads/", 2057 "license": [ 2058 "MIT" 2059 ], 2060 "authors": [ 2061 { 2062 "name": "Christian Lück", 2063 "email": "christian@clue.engineering", 2064 "homepage": "https://clue.engineering/" 2065 }, 2066 { 2067 "name": "Cees-Jan Kiewiet", 2068 "email": "reactphp@ceesjankiewiet.nl", 2069 "homepage": "https://wyrihaximus.net/" 2070 }, 2071 { 2072 "name": "Jan Sorgalla", 2073 "email": "jsorgalla@gmail.com", 2074 "homepage": "https://sorgalla.com/" 2075 }, 2076 { 2077 "name": "Chris Boden", 2078 "email": "cboden@gmail.com", 2079 "homepage": "https://cboden.dev/" 2080 } 2081 ], 2082 "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", 2083 "keywords": [ 2084 "asynchronous", 2085 "event-loop" 2086 ], 2087 "support": { 2088 "issues": "https://github.com/reactphp/event-loop/issues", 2089 "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" 2090 }, 2091 "funding": [ 2092 { 2093 "url": "https://opencollective.com/reactphp", 2094 "type": "open_collective" 2095 } 2096 ], 2097 "time": "2023-11-13T13:48:05+00:00" 2098 }, 2099 { 2100 "name": "react/promise", 2101 "version": "3.x-dev", 2102 "source": { 2103 "type": "git", 2104 "url": "https://github.com/reactphp/promise.git", 2105 "reference": "5f80055cc21ba7bcd3989e4902061fc12e2bcc1d" 2106 }, 2107 "dist": { 2108 "type": "zip", 2109 "url": "https://api.github.com/repos/reactphp/promise/zipball/5f80055cc21ba7bcd3989e4902061fc12e2bcc1d", 2110 "reference": "5f80055cc21ba7bcd3989e4902061fc12e2bcc1d", 2111 "shasum": "" 2112 }, 2113 "require": { 2114 "php": ">=7.1.0" 2115 }, 2116 "require-dev": { 2117 "phpstan/phpstan": "1.10.39 || 1.4.10", 2118 "phpunit/phpunit": "^9.6 || ^7.5" 2119 }, 2120 "default-branch": true, 2121 "type": "library", 2122 "autoload": { 2123 "files": [ 2124 "src/functions_include.php" 2125 ], 2126 "psr-4": { 2127 "React\\Promise\\": "src/" 2128 } 2129 }, 2130 "notification-url": "https://packagist.org/downloads/", 2131 "license": [ 2132 "MIT" 2133 ], 2134 "authors": [ 2135 { 2136 "name": "Jan Sorgalla", 2137 "email": "jsorgalla@gmail.com", 2138 "homepage": "https://sorgalla.com/" 2139 }, 2140 { 2141 "name": "Christian Lück", 2142 "email": "christian@clue.engineering", 2143 "homepage": "https://clue.engineering/" 2144 }, 2145 { 2146 "name": "Cees-Jan Kiewiet", 2147 "email": "reactphp@ceesjankiewiet.nl", 2148 "homepage": "https://wyrihaximus.net/" 2149 }, 2150 { 2151 "name": "Chris Boden", 2152 "email": "cboden@gmail.com", 2153 "homepage": "https://cboden.dev/" 2154 } 2155 ], 2156 "description": "A lightweight implementation of CommonJS Promises/A for PHP", 2157 "keywords": [ 2158 "promise", 2159 "promises" 2160 ], 2161 "support": { 2162 "issues": "https://github.com/reactphp/promise/issues", 2163 "source": "https://github.com/reactphp/promise/tree/3.x" 2164 }, 2165 "funding": [ 2166 { 2167 "url": "https://opencollective.com/reactphp", 2168 "type": "open_collective" 2169 } 2170 ], 2171 "time": "2024-11-19T18:32:50+00:00" 2172 }, 2173 { 2174 "name": "react/socket", 2175 "version": "1.x-dev", 2176 "source": { 2177 "type": "git", 2178 "url": "https://github.com/reactphp/socket.git", 2179 "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" 2180 }, 2181 "dist": { 2182 "type": "zip", 2183 "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", 2184 "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", 2185 "shasum": "" 2186 }, 2187 "require": { 2188 "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 2189 "php": ">=5.3.0", 2190 "react/dns": "^1.13", 2191 "react/event-loop": "^1.2", 2192 "react/promise": "^3.2 || ^2.6 || ^1.2.1", 2193 "react/stream": "^1.4" 2194 }, 2195 "require-dev": { 2196 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", 2197 "react/async": "^4.3 || ^3.3 || ^2", 2198 "react/promise-stream": "^1.4", 2199 "react/promise-timer": "^1.11" 2200 }, 2201 "type": "library", 2202 "autoload": { 2203 "psr-4": { 2204 "React\\Socket\\": "src/" 2205 } 2206 }, 2207 "notification-url": "https://packagist.org/downloads/", 2208 "license": [ 2209 "MIT" 2210 ], 2211 "authors": [ 2212 { 2213 "name": "Christian Lück", 2214 "email": "christian@clue.engineering", 2215 "homepage": "https://clue.engineering/" 2216 }, 2217 { 2218 "name": "Cees-Jan Kiewiet", 2219 "email": "reactphp@ceesjankiewiet.nl", 2220 "homepage": "https://wyrihaximus.net/" 2221 }, 2222 { 2223 "name": "Jan Sorgalla", 2224 "email": "jsorgalla@gmail.com", 2225 "homepage": "https://sorgalla.com/" 2226 }, 2227 { 2228 "name": "Chris Boden", 2229 "email": "cboden@gmail.com", 2230 "homepage": "https://cboden.dev/" 2231 } 2232 ], 2233 "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", 2234 "keywords": [ 2235 "Connection", 2236 "Socket", 2237 "async", 2238 "reactphp", 2239 "stream" 2240 ], 2241 "support": { 2242 "issues": "https://github.com/reactphp/socket/issues", 2243 "source": "https://github.com/reactphp/socket/tree/v1.16.0" 2244 }, 2245 "funding": [ 2246 { 2247 "url": "https://opencollective.com/reactphp", 2248 "type": "open_collective" 2249 } 2250 ], 2251 "time": "2024-07-26T10:38:09+00:00" 2252 }, 2253 { 2254 "name": "react/stream", 2255 "version": "1.x-dev", 2256 "source": { 2257 "type": "git", 2258 "url": "https://github.com/reactphp/stream.git", 2259 "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" 2260 }, 2261 "dist": { 2262 "type": "zip", 2263 "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", 2264 "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", 2265 "shasum": "" 2266 }, 2267 "require": { 2268 "evenement/evenement": "^3.0 || ^2.0 || ^1.0", 2269 "php": ">=5.3.8", 2270 "react/event-loop": "^1.2" 2271 }, 2272 "require-dev": { 2273 "clue/stream-filter": "~1.2", 2274 "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" 2275 }, 2276 "type": "library", 2277 "autoload": { 2278 "psr-4": { 2279 "React\\Stream\\": "src/" 2280 } 2281 }, 2282 "notification-url": "https://packagist.org/downloads/", 2283 "license": [ 2284 "MIT" 2285 ], 2286 "authors": [ 2287 { 2288 "name": "Christian Lück", 2289 "email": "christian@clue.engineering", 2290 "homepage": "https://clue.engineering/" 2291 }, 2292 { 2293 "name": "Cees-Jan Kiewiet", 2294 "email": "reactphp@ceesjankiewiet.nl", 2295 "homepage": "https://wyrihaximus.net/" 2296 }, 2297 { 2298 "name": "Jan Sorgalla", 2299 "email": "jsorgalla@gmail.com", 2300 "homepage": "https://sorgalla.com/" 2301 }, 2302 { 2303 "name": "Chris Boden", 2304 "email": "cboden@gmail.com", 2305 "homepage": "https://cboden.dev/" 2306 } 2307 ], 2308 "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", 2309 "keywords": [ 2310 "event-driven", 2311 "io", 2312 "non-blocking", 2313 "pipe", 2314 "reactphp", 2315 "readable", 2316 "stream", 2317 "writable" 2318 ], 2319 "support": { 2320 "issues": "https://github.com/reactphp/stream/issues", 2321 "source": "https://github.com/reactphp/stream/tree/v1.4.0" 2322 }, 2323 "funding": [ 2324 { 2325 "url": "https://opencollective.com/reactphp", 2326 "type": "open_collective" 2327 } 2328 ], 2329 "time": "2024-06-11T12:45:25+00:00" 2330 }, 2331 { 1139 2332 "name": "sebastian/cli-parser", 1140 2333 "version": "1.0.x-dev", … … 2180 3373 ], 2181 3374 "time": "2024-08-17T17:43:40+00:00" 3375 }, 3376 { 3377 "name": "symfony/console", 3378 "version": "7.3.x-dev", 3379 "source": { 3380 "type": "git", 3381 "url": "https://github.com/symfony/console.git", 3382 "reference": "eec43776d7ed956cbcc4ce92f7331c72fbf02040" 3383 }, 3384 "dist": { 3385 "type": "zip", 3386 "url": "https://api.github.com/repos/symfony/console/zipball/eec43776d7ed956cbcc4ce92f7331c72fbf02040", 3387 "reference": "eec43776d7ed956cbcc4ce92f7331c72fbf02040", 3388 "shasum": "" 3389 }, 3390 "require": { 3391 "php": ">=8.2", 3392 "symfony/deprecation-contracts": "^2.5|^3", 3393 "symfony/polyfill-mbstring": "~1.0", 3394 "symfony/service-contracts": "^2.5|^3", 3395 "symfony/string": "^6.4|^7.0" 3396 }, 3397 "conflict": { 3398 "symfony/dependency-injection": "<6.4", 3399 "symfony/dotenv": "<6.4", 3400 "symfony/event-dispatcher": "<6.4", 3401 "symfony/lock": "<6.4", 3402 "symfony/process": "<6.4" 3403 }, 3404 "provide": { 3405 "psr/log-implementation": "1.0|2.0|3.0" 3406 }, 3407 "require-dev": { 3408 "psr/log": "^1|^2|^3", 3409 "symfony/config": "^6.4|^7.0", 3410 "symfony/dependency-injection": "^6.4|^7.0", 3411 "symfony/event-dispatcher": "^6.4|^7.0", 3412 "symfony/http-foundation": "^6.4|^7.0", 3413 "symfony/http-kernel": "^6.4|^7.0", 3414 "symfony/lock": "^6.4|^7.0", 3415 "symfony/messenger": "^6.4|^7.0", 3416 "symfony/process": "^6.4|^7.0", 3417 "symfony/stopwatch": "^6.4|^7.0", 3418 "symfony/var-dumper": "^6.4|^7.0" 3419 }, 3420 "type": "library", 3421 "autoload": { 3422 "psr-4": { 3423 "Symfony\\Component\\Console\\": "" 3424 }, 3425 "exclude-from-classmap": [ 3426 "/Tests/" 3427 ] 3428 }, 3429 "notification-url": "https://packagist.org/downloads/", 3430 "license": [ 3431 "MIT" 3432 ], 3433 "authors": [ 3434 { 3435 "name": "Fabien Potencier", 3436 "email": "fabien@symfony.com" 3437 }, 3438 { 3439 "name": "Symfony Community", 3440 "homepage": "https://symfony.com/contributors" 3441 } 3442 ], 3443 "description": "Eases the creation of beautiful and testable command line interfaces", 3444 "homepage": "https://symfony.com", 3445 "keywords": [ 3446 "cli", 3447 "command-line", 3448 "console", 3449 "terminal" 3450 ], 3451 "support": { 3452 "source": "https://github.com/symfony/console/tree/7.3" 3453 }, 3454 "funding": [ 3455 { 3456 "url": "https://symfony.com/sponsor", 3457 "type": "custom" 3458 }, 3459 { 3460 "url": "https://github.com/fabpot", 3461 "type": "github" 3462 }, 3463 { 3464 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3465 "type": "tidelift" 3466 } 3467 ], 3468 "time": "2025-02-06T08:27:43+00:00" 3469 }, 3470 { 3471 "name": "symfony/deprecation-contracts", 3472 "version": "dev-main", 3473 "source": { 3474 "type": "git", 3475 "url": "https://github.com/symfony/deprecation-contracts.git", 3476 "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" 3477 }, 3478 "dist": { 3479 "type": "zip", 3480 "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", 3481 "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", 3482 "shasum": "" 3483 }, 3484 "require": { 3485 "php": ">=8.1" 3486 }, 3487 "default-branch": true, 3488 "type": "library", 3489 "extra": { 3490 "thanks": { 3491 "url": "https://github.com/symfony/contracts", 3492 "name": "symfony/contracts" 3493 }, 3494 "branch-alias": { 3495 "dev-main": "3.6-dev" 3496 } 3497 }, 3498 "autoload": { 3499 "files": [ 3500 "function.php" 3501 ] 3502 }, 3503 "notification-url": "https://packagist.org/downloads/", 3504 "license": [ 3505 "MIT" 3506 ], 3507 "authors": [ 3508 { 3509 "name": "Nicolas Grekas", 3510 "email": "p@tchwork.com" 3511 }, 3512 { 3513 "name": "Symfony Community", 3514 "homepage": "https://symfony.com/contributors" 3515 } 3516 ], 3517 "description": "A generic function and convention to trigger deprecation notices", 3518 "homepage": "https://symfony.com", 3519 "support": { 3520 "source": "https://github.com/symfony/deprecation-contracts/tree/main" 3521 }, 3522 "funding": [ 3523 { 3524 "url": "https://symfony.com/sponsor", 3525 "type": "custom" 3526 }, 3527 { 3528 "url": "https://github.com/fabpot", 3529 "type": "github" 3530 }, 3531 { 3532 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3533 "type": "tidelift" 3534 } 3535 ], 3536 "time": "2024-09-25T14:21:43+00:00" 3537 }, 3538 { 3539 "name": "symfony/event-dispatcher", 3540 "version": "7.3.x-dev", 3541 "source": { 3542 "type": "git", 3543 "url": "https://github.com/symfony/event-dispatcher.git", 3544 "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" 3545 }, 3546 "dist": { 3547 "type": "zip", 3548 "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", 3549 "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", 3550 "shasum": "" 3551 }, 3552 "require": { 3553 "php": ">=8.2", 3554 "symfony/event-dispatcher-contracts": "^2.5|^3" 3555 }, 3556 "conflict": { 3557 "symfony/dependency-injection": "<6.4", 3558 "symfony/service-contracts": "<2.5" 3559 }, 3560 "provide": { 3561 "psr/event-dispatcher-implementation": "1.0", 3562 "symfony/event-dispatcher-implementation": "2.0|3.0" 3563 }, 3564 "require-dev": { 3565 "psr/log": "^1|^2|^3", 3566 "symfony/config": "^6.4|^7.0", 3567 "symfony/dependency-injection": "^6.4|^7.0", 3568 "symfony/error-handler": "^6.4|^7.0", 3569 "symfony/expression-language": "^6.4|^7.0", 3570 "symfony/http-foundation": "^6.4|^7.0", 3571 "symfony/service-contracts": "^2.5|^3", 3572 "symfony/stopwatch": "^6.4|^7.0" 3573 }, 3574 "type": "library", 3575 "autoload": { 3576 "psr-4": { 3577 "Symfony\\Component\\EventDispatcher\\": "" 3578 }, 3579 "exclude-from-classmap": [ 3580 "/Tests/" 3581 ] 3582 }, 3583 "notification-url": "https://packagist.org/downloads/", 3584 "license": [ 3585 "MIT" 3586 ], 3587 "authors": [ 3588 { 3589 "name": "Fabien Potencier", 3590 "email": "fabien@symfony.com" 3591 }, 3592 { 3593 "name": "Symfony Community", 3594 "homepage": "https://symfony.com/contributors" 3595 } 3596 ], 3597 "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 3598 "homepage": "https://symfony.com", 3599 "support": { 3600 "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" 3601 }, 3602 "funding": [ 3603 { 3604 "url": "https://symfony.com/sponsor", 3605 "type": "custom" 3606 }, 3607 { 3608 "url": "https://github.com/fabpot", 3609 "type": "github" 3610 }, 3611 { 3612 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3613 "type": "tidelift" 3614 } 3615 ], 3616 "time": "2024-09-25T14:21:43+00:00" 3617 }, 3618 { 3619 "name": "symfony/event-dispatcher-contracts", 3620 "version": "dev-main", 3621 "source": { 3622 "type": "git", 3623 "url": "https://github.com/symfony/event-dispatcher-contracts.git", 3624 "reference": "59eb412e93815df44f05f342958efa9f46b1e586" 3625 }, 3626 "dist": { 3627 "type": "zip", 3628 "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", 3629 "reference": "59eb412e93815df44f05f342958efa9f46b1e586", 3630 "shasum": "" 3631 }, 3632 "require": { 3633 "php": ">=8.1", 3634 "psr/event-dispatcher": "^1" 3635 }, 3636 "default-branch": true, 3637 "type": "library", 3638 "extra": { 3639 "thanks": { 3640 "url": "https://github.com/symfony/contracts", 3641 "name": "symfony/contracts" 3642 }, 3643 "branch-alias": { 3644 "dev-main": "3.6-dev" 3645 } 3646 }, 3647 "autoload": { 3648 "psr-4": { 3649 "Symfony\\Contracts\\EventDispatcher\\": "" 3650 } 3651 }, 3652 "notification-url": "https://packagist.org/downloads/", 3653 "license": [ 3654 "MIT" 3655 ], 3656 "authors": [ 3657 { 3658 "name": "Nicolas Grekas", 3659 "email": "p@tchwork.com" 3660 }, 3661 { 3662 "name": "Symfony Community", 3663 "homepage": "https://symfony.com/contributors" 3664 } 3665 ], 3666 "description": "Generic abstractions related to dispatching event", 3667 "homepage": "https://symfony.com", 3668 "keywords": [ 3669 "abstractions", 3670 "contracts", 3671 "decoupling", 3672 "interfaces", 3673 "interoperability", 3674 "standards" 3675 ], 3676 "support": { 3677 "source": "https://github.com/symfony/event-dispatcher-contracts/tree/main" 3678 }, 3679 "funding": [ 3680 { 3681 "url": "https://symfony.com/sponsor", 3682 "type": "custom" 3683 }, 3684 { 3685 "url": "https://github.com/fabpot", 3686 "type": "github" 3687 }, 3688 { 3689 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3690 "type": "tidelift" 3691 } 3692 ], 3693 "time": "2024-09-25T14:21:43+00:00" 3694 }, 3695 { 3696 "name": "symfony/filesystem", 3697 "version": "7.3.x-dev", 3698 "source": { 3699 "type": "git", 3700 "url": "https://github.com/symfony/filesystem.git", 3701 "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" 3702 }, 3703 "dist": { 3704 "type": "zip", 3705 "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", 3706 "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", 3707 "shasum": "" 3708 }, 3709 "require": { 3710 "php": ">=8.2", 3711 "symfony/polyfill-ctype": "~1.8", 3712 "symfony/polyfill-mbstring": "~1.8" 3713 }, 3714 "require-dev": { 3715 "symfony/process": "^6.4|^7.0" 3716 }, 3717 "type": "library", 3718 "autoload": { 3719 "psr-4": { 3720 "Symfony\\Component\\Filesystem\\": "" 3721 }, 3722 "exclude-from-classmap": [ 3723 "/Tests/" 3724 ] 3725 }, 3726 "notification-url": "https://packagist.org/downloads/", 3727 "license": [ 3728 "MIT" 3729 ], 3730 "authors": [ 3731 { 3732 "name": "Fabien Potencier", 3733 "email": "fabien@symfony.com" 3734 }, 3735 { 3736 "name": "Symfony Community", 3737 "homepage": "https://symfony.com/contributors" 3738 } 3739 ], 3740 "description": "Provides basic utilities for the filesystem", 3741 "homepage": "https://symfony.com", 3742 "support": { 3743 "source": "https://github.com/symfony/filesystem/tree/v7.2.0" 3744 }, 3745 "funding": [ 3746 { 3747 "url": "https://symfony.com/sponsor", 3748 "type": "custom" 3749 }, 3750 { 3751 "url": "https://github.com/fabpot", 3752 "type": "github" 3753 }, 3754 { 3755 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3756 "type": "tidelift" 3757 } 3758 ], 3759 "time": "2024-10-25T15:15:23+00:00" 3760 }, 3761 { 3762 "name": "symfony/finder", 3763 "version": "7.3.x-dev", 3764 "source": { 3765 "type": "git", 3766 "url": "https://github.com/symfony/finder.git", 3767 "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d" 3768 }, 3769 "dist": { 3770 "type": "zip", 3771 "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d", 3772 "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d", 3773 "shasum": "" 3774 }, 3775 "require": { 3776 "php": ">=8.2" 3777 }, 3778 "require-dev": { 3779 "symfony/filesystem": "^6.4|^7.0" 3780 }, 3781 "type": "library", 3782 "autoload": { 3783 "psr-4": { 3784 "Symfony\\Component\\Finder\\": "" 3785 }, 3786 "exclude-from-classmap": [ 3787 "/Tests/" 3788 ] 3789 }, 3790 "notification-url": "https://packagist.org/downloads/", 3791 "license": [ 3792 "MIT" 3793 ], 3794 "authors": [ 3795 { 3796 "name": "Fabien Potencier", 3797 "email": "fabien@symfony.com" 3798 }, 3799 { 3800 "name": "Symfony Community", 3801 "homepage": "https://symfony.com/contributors" 3802 } 3803 ], 3804 "description": "Finds files and directories via an intuitive fluent interface", 3805 "homepage": "https://symfony.com", 3806 "support": { 3807 "source": "https://github.com/symfony/finder/tree/7.3" 3808 }, 3809 "funding": [ 3810 { 3811 "url": "https://symfony.com/sponsor", 3812 "type": "custom" 3813 }, 3814 { 3815 "url": "https://github.com/fabpot", 3816 "type": "github" 3817 }, 3818 { 3819 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3820 "type": "tidelift" 3821 } 3822 ], 3823 "time": "2024-12-30T19:00:26+00:00" 3824 }, 3825 { 3826 "name": "symfony/options-resolver", 3827 "version": "7.3.x-dev", 3828 "source": { 3829 "type": "git", 3830 "url": "https://github.com/symfony/options-resolver.git", 3831 "reference": "62c278c5ba8c2904dc5665042c3d17e83829fd00" 3832 }, 3833 "dist": { 3834 "type": "zip", 3835 "url": "https://api.github.com/repos/symfony/options-resolver/zipball/62c278c5ba8c2904dc5665042c3d17e83829fd00", 3836 "reference": "62c278c5ba8c2904dc5665042c3d17e83829fd00", 3837 "shasum": "" 3838 }, 3839 "require": { 3840 "php": ">=8.2", 3841 "symfony/deprecation-contracts": "^2.5|^3" 3842 }, 3843 "type": "library", 3844 "autoload": { 3845 "psr-4": { 3846 "Symfony\\Component\\OptionsResolver\\": "" 3847 }, 3848 "exclude-from-classmap": [ 3849 "/Tests/" 3850 ] 3851 }, 3852 "notification-url": "https://packagist.org/downloads/", 3853 "license": [ 3854 "MIT" 3855 ], 3856 "authors": [ 3857 { 3858 "name": "Fabien Potencier", 3859 "email": "fabien@symfony.com" 3860 }, 3861 { 3862 "name": "Symfony Community", 3863 "homepage": "https://symfony.com/contributors" 3864 } 3865 ], 3866 "description": "Provides an improved replacement for the array_replace PHP function", 3867 "homepage": "https://symfony.com", 3868 "keywords": [ 3869 "config", 3870 "configuration", 3871 "options" 3872 ], 3873 "support": { 3874 "source": "https://github.com/symfony/options-resolver/tree/7.3" 3875 }, 3876 "funding": [ 3877 { 3878 "url": "https://symfony.com/sponsor", 3879 "type": "custom" 3880 }, 3881 { 3882 "url": "https://github.com/fabpot", 3883 "type": "github" 3884 }, 3885 { 3886 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3887 "type": "tidelift" 3888 } 3889 ], 3890 "time": "2025-01-12T17:25:01+00:00" 3891 }, 3892 { 3893 "name": "symfony/polyfill-ctype", 3894 "version": "1.x-dev", 3895 "source": { 3896 "type": "git", 3897 "url": "https://github.com/symfony/polyfill-ctype.git", 3898 "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" 3899 }, 3900 "dist": { 3901 "type": "zip", 3902 "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", 3903 "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", 3904 "shasum": "" 3905 }, 3906 "require": { 3907 "php": ">=7.2" 3908 }, 3909 "provide": { 3910 "ext-ctype": "*" 3911 }, 3912 "suggest": { 3913 "ext-ctype": "For best performance" 3914 }, 3915 "default-branch": true, 3916 "type": "library", 3917 "extra": { 3918 "thanks": { 3919 "url": "https://github.com/symfony/polyfill", 3920 "name": "symfony/polyfill" 3921 } 3922 }, 3923 "autoload": { 3924 "files": [ 3925 "bootstrap.php" 3926 ], 3927 "psr-4": { 3928 "Symfony\\Polyfill\\Ctype\\": "" 3929 } 3930 }, 3931 "notification-url": "https://packagist.org/downloads/", 3932 "license": [ 3933 "MIT" 3934 ], 3935 "authors": [ 3936 { 3937 "name": "Gert de Pagter", 3938 "email": "BackEndTea@gmail.com" 3939 }, 3940 { 3941 "name": "Symfony Community", 3942 "homepage": "https://symfony.com/contributors" 3943 } 3944 ], 3945 "description": "Symfony polyfill for ctype functions", 3946 "homepage": "https://symfony.com", 3947 "keywords": [ 3948 "compatibility", 3949 "ctype", 3950 "polyfill", 3951 "portable" 3952 ], 3953 "support": { 3954 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" 3955 }, 3956 "funding": [ 3957 { 3958 "url": "https://symfony.com/sponsor", 3959 "type": "custom" 3960 }, 3961 { 3962 "url": "https://github.com/fabpot", 3963 "type": "github" 3964 }, 3965 { 3966 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3967 "type": "tidelift" 3968 } 3969 ], 3970 "time": "2024-09-09T11:45:10+00:00" 3971 }, 3972 { 3973 "name": "symfony/polyfill-intl-grapheme", 3974 "version": "1.x-dev", 3975 "source": { 3976 "type": "git", 3977 "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 3978 "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" 3979 }, 3980 "dist": { 3981 "type": "zip", 3982 "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", 3983 "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", 3984 "shasum": "" 3985 }, 3986 "require": { 3987 "php": ">=7.2" 3988 }, 3989 "suggest": { 3990 "ext-intl": "For best performance" 3991 }, 3992 "default-branch": true, 3993 "type": "library", 3994 "extra": { 3995 "thanks": { 3996 "url": "https://github.com/symfony/polyfill", 3997 "name": "symfony/polyfill" 3998 } 3999 }, 4000 "autoload": { 4001 "files": [ 4002 "bootstrap.php" 4003 ], 4004 "psr-4": { 4005 "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 4006 } 4007 }, 4008 "notification-url": "https://packagist.org/downloads/", 4009 "license": [ 4010 "MIT" 4011 ], 4012 "authors": [ 4013 { 4014 "name": "Nicolas Grekas", 4015 "email": "p@tchwork.com" 4016 }, 4017 { 4018 "name": "Symfony Community", 4019 "homepage": "https://symfony.com/contributors" 4020 } 4021 ], 4022 "description": "Symfony polyfill for intl's grapheme_* functions", 4023 "homepage": "https://symfony.com", 4024 "keywords": [ 4025 "compatibility", 4026 "grapheme", 4027 "intl", 4028 "polyfill", 4029 "portable", 4030 "shim" 4031 ], 4032 "support": { 4033 "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" 4034 }, 4035 "funding": [ 4036 { 4037 "url": "https://symfony.com/sponsor", 4038 "type": "custom" 4039 }, 4040 { 4041 "url": "https://github.com/fabpot", 4042 "type": "github" 4043 }, 4044 { 4045 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4046 "type": "tidelift" 4047 } 4048 ], 4049 "time": "2024-09-09T11:45:10+00:00" 4050 }, 4051 { 4052 "name": "symfony/polyfill-intl-normalizer", 4053 "version": "1.x-dev", 4054 "source": { 4055 "type": "git", 4056 "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 4057 "reference": "3833d7255cc303546435cb650316bff708a1c75c" 4058 }, 4059 "dist": { 4060 "type": "zip", 4061 "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", 4062 "reference": "3833d7255cc303546435cb650316bff708a1c75c", 4063 "shasum": "" 4064 }, 4065 "require": { 4066 "php": ">=7.2" 4067 }, 4068 "suggest": { 4069 "ext-intl": "For best performance" 4070 }, 4071 "default-branch": true, 4072 "type": "library", 4073 "extra": { 4074 "thanks": { 4075 "url": "https://github.com/symfony/polyfill", 4076 "name": "symfony/polyfill" 4077 } 4078 }, 4079 "autoload": { 4080 "files": [ 4081 "bootstrap.php" 4082 ], 4083 "psr-4": { 4084 "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 4085 }, 4086 "classmap": [ 4087 "Resources/stubs" 4088 ] 4089 }, 4090 "notification-url": "https://packagist.org/downloads/", 4091 "license": [ 4092 "MIT" 4093 ], 4094 "authors": [ 4095 { 4096 "name": "Nicolas Grekas", 4097 "email": "p@tchwork.com" 4098 }, 4099 { 4100 "name": "Symfony Community", 4101 "homepage": "https://symfony.com/contributors" 4102 } 4103 ], 4104 "description": "Symfony polyfill for intl's Normalizer class and related functions", 4105 "homepage": "https://symfony.com", 4106 "keywords": [ 4107 "compatibility", 4108 "intl", 4109 "normalizer", 4110 "polyfill", 4111 "portable", 4112 "shim" 4113 ], 4114 "support": { 4115 "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" 4116 }, 4117 "funding": [ 4118 { 4119 "url": "https://symfony.com/sponsor", 4120 "type": "custom" 4121 }, 4122 { 4123 "url": "https://github.com/fabpot", 4124 "type": "github" 4125 }, 4126 { 4127 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4128 "type": "tidelift" 4129 } 4130 ], 4131 "time": "2024-09-09T11:45:10+00:00" 4132 }, 4133 { 4134 "name": "symfony/polyfill-mbstring", 4135 "version": "1.x-dev", 4136 "source": { 4137 "type": "git", 4138 "url": "https://github.com/symfony/polyfill-mbstring.git", 4139 "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" 4140 }, 4141 "dist": { 4142 "type": "zip", 4143 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", 4144 "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", 4145 "shasum": "" 4146 }, 4147 "require": { 4148 "ext-iconv": "*", 4149 "php": ">=7.2" 4150 }, 4151 "provide": { 4152 "ext-mbstring": "*" 4153 }, 4154 "suggest": { 4155 "ext-mbstring": "For best performance" 4156 }, 4157 "default-branch": true, 4158 "type": "library", 4159 "extra": { 4160 "thanks": { 4161 "url": "https://github.com/symfony/polyfill", 4162 "name": "symfony/polyfill" 4163 } 4164 }, 4165 "autoload": { 4166 "files": [ 4167 "bootstrap.php" 4168 ], 4169 "psr-4": { 4170 "Symfony\\Polyfill\\Mbstring\\": "" 4171 } 4172 }, 4173 "notification-url": "https://packagist.org/downloads/", 4174 "license": [ 4175 "MIT" 4176 ], 4177 "authors": [ 4178 { 4179 "name": "Nicolas Grekas", 4180 "email": "p@tchwork.com" 4181 }, 4182 { 4183 "name": "Symfony Community", 4184 "homepage": "https://symfony.com/contributors" 4185 } 4186 ], 4187 "description": "Symfony polyfill for the Mbstring extension", 4188 "homepage": "https://symfony.com", 4189 "keywords": [ 4190 "compatibility", 4191 "mbstring", 4192 "polyfill", 4193 "portable", 4194 "shim" 4195 ], 4196 "support": { 4197 "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x" 4198 }, 4199 "funding": [ 4200 { 4201 "url": "https://symfony.com/sponsor", 4202 "type": "custom" 4203 }, 4204 { 4205 "url": "https://github.com/fabpot", 4206 "type": "github" 4207 }, 4208 { 4209 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4210 "type": "tidelift" 4211 } 4212 ], 4213 "time": "2024-12-23T08:48:59+00:00" 2182 4214 }, 2183 4215 { … … 2257 4289 ], 2258 4290 "time": "2024-05-31T15:07:36+00:00" 4291 }, 4292 { 4293 "name": "symfony/polyfill-php80", 4294 "version": "1.x-dev", 4295 "source": { 4296 "type": "git", 4297 "url": "https://github.com/symfony/polyfill-php80.git", 4298 "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" 4299 }, 4300 "dist": { 4301 "type": "zip", 4302 "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", 4303 "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", 4304 "shasum": "" 4305 }, 4306 "require": { 4307 "php": ">=7.2" 4308 }, 4309 "default-branch": true, 4310 "type": "library", 4311 "extra": { 4312 "thanks": { 4313 "url": "https://github.com/symfony/polyfill", 4314 "name": "symfony/polyfill" 4315 } 4316 }, 4317 "autoload": { 4318 "files": [ 4319 "bootstrap.php" 4320 ], 4321 "psr-4": { 4322 "Symfony\\Polyfill\\Php80\\": "" 4323 }, 4324 "classmap": [ 4325 "Resources/stubs" 4326 ] 4327 }, 4328 "notification-url": "https://packagist.org/downloads/", 4329 "license": [ 4330 "MIT" 4331 ], 4332 "authors": [ 4333 { 4334 "name": "Ion Bazan", 4335 "email": "ion.bazan@gmail.com" 4336 }, 4337 { 4338 "name": "Nicolas Grekas", 4339 "email": "p@tchwork.com" 4340 }, 4341 { 4342 "name": "Symfony Community", 4343 "homepage": "https://symfony.com/contributors" 4344 } 4345 ], 4346 "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 4347 "homepage": "https://symfony.com", 4348 "keywords": [ 4349 "compatibility", 4350 "polyfill", 4351 "portable", 4352 "shim" 4353 ], 4354 "support": { 4355 "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" 4356 }, 4357 "funding": [ 4358 { 4359 "url": "https://symfony.com/sponsor", 4360 "type": "custom" 4361 }, 4362 { 4363 "url": "https://github.com/fabpot", 4364 "type": "github" 4365 }, 4366 { 4367 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4368 "type": "tidelift" 4369 } 4370 ], 4371 "time": "2024-09-09T11:45:10+00:00" 4372 }, 4373 { 4374 "name": "symfony/polyfill-php81", 4375 "version": "1.x-dev", 4376 "source": { 4377 "type": "git", 4378 "url": "https://github.com/symfony/polyfill-php81.git", 4379 "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" 4380 }, 4381 "dist": { 4382 "type": "zip", 4383 "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", 4384 "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", 4385 "shasum": "" 4386 }, 4387 "require": { 4388 "php": ">=7.2" 4389 }, 4390 "default-branch": true, 4391 "type": "library", 4392 "extra": { 4393 "thanks": { 4394 "url": "https://github.com/symfony/polyfill", 4395 "name": "symfony/polyfill" 4396 } 4397 }, 4398 "autoload": { 4399 "files": [ 4400 "bootstrap.php" 4401 ], 4402 "psr-4": { 4403 "Symfony\\Polyfill\\Php81\\": "" 4404 }, 4405 "classmap": [ 4406 "Resources/stubs" 4407 ] 4408 }, 4409 "notification-url": "https://packagist.org/downloads/", 4410 "license": [ 4411 "MIT" 4412 ], 4413 "authors": [ 4414 { 4415 "name": "Nicolas Grekas", 4416 "email": "p@tchwork.com" 4417 }, 4418 { 4419 "name": "Symfony Community", 4420 "homepage": "https://symfony.com/contributors" 4421 } 4422 ], 4423 "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", 4424 "homepage": "https://symfony.com", 4425 "keywords": [ 4426 "compatibility", 4427 "polyfill", 4428 "portable", 4429 "shim" 4430 ], 4431 "support": { 4432 "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" 4433 }, 4434 "funding": [ 4435 { 4436 "url": "https://symfony.com/sponsor", 4437 "type": "custom" 4438 }, 4439 { 4440 "url": "https://github.com/fabpot", 4441 "type": "github" 4442 }, 4443 { 4444 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4445 "type": "tidelift" 4446 } 4447 ], 4448 "time": "2024-09-09T11:45:10+00:00" 4449 }, 4450 { 4451 "name": "symfony/process", 4452 "version": "7.3.x-dev", 4453 "source": { 4454 "type": "git", 4455 "url": "https://github.com/symfony/process.git", 4456 "reference": "2b42be26326a4fae4313751b40a2ecb60e619311" 4457 }, 4458 "dist": { 4459 "type": "zip", 4460 "url": "https://api.github.com/repos/symfony/process/zipball/2b42be26326a4fae4313751b40a2ecb60e619311", 4461 "reference": "2b42be26326a4fae4313751b40a2ecb60e619311", 4462 "shasum": "" 4463 }, 4464 "require": { 4465 "php": ">=8.2" 4466 }, 4467 "type": "library", 4468 "autoload": { 4469 "psr-4": { 4470 "Symfony\\Component\\Process\\": "" 4471 }, 4472 "exclude-from-classmap": [ 4473 "/Tests/" 4474 ] 4475 }, 4476 "notification-url": "https://packagist.org/downloads/", 4477 "license": [ 4478 "MIT" 4479 ], 4480 "authors": [ 4481 { 4482 "name": "Fabien Potencier", 4483 "email": "fabien@symfony.com" 4484 }, 4485 { 4486 "name": "Symfony Community", 4487 "homepage": "https://symfony.com/contributors" 4488 } 4489 ], 4490 "description": "Executes commands in sub-processes", 4491 "homepage": "https://symfony.com", 4492 "support": { 4493 "source": "https://github.com/symfony/process/tree/7.3" 4494 }, 4495 "funding": [ 4496 { 4497 "url": "https://symfony.com/sponsor", 4498 "type": "custom" 4499 }, 4500 { 4501 "url": "https://github.com/fabpot", 4502 "type": "github" 4503 }, 4504 { 4505 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4506 "type": "tidelift" 4507 } 4508 ], 4509 "time": "2025-02-14T16:23:49+00:00" 4510 }, 4511 { 4512 "name": "symfony/service-contracts", 4513 "version": "dev-main", 4514 "source": { 4515 "type": "git", 4516 "url": "https://github.com/symfony/service-contracts.git", 4517 "reference": "5ad38698559cf88b6296629e19b15ef3239c9d7a" 4518 }, 4519 "dist": { 4520 "type": "zip", 4521 "url": "https://api.github.com/repos/symfony/service-contracts/zipball/5ad38698559cf88b6296629e19b15ef3239c9d7a", 4522 "reference": "5ad38698559cf88b6296629e19b15ef3239c9d7a", 4523 "shasum": "" 4524 }, 4525 "require": { 4526 "php": ">=8.1", 4527 "psr/container": "^1.1|^2.0", 4528 "symfony/deprecation-contracts": "^2.5|^3" 4529 }, 4530 "conflict": { 4531 "ext-psr": "<1.1|>=2" 4532 }, 4533 "default-branch": true, 4534 "type": "library", 4535 "extra": { 4536 "thanks": { 4537 "url": "https://github.com/symfony/contracts", 4538 "name": "symfony/contracts" 4539 }, 4540 "branch-alias": { 4541 "dev-main": "3.6-dev" 4542 } 4543 }, 4544 "autoload": { 4545 "psr-4": { 4546 "Symfony\\Contracts\\Service\\": "" 4547 }, 4548 "exclude-from-classmap": [ 4549 "/Test/" 4550 ] 4551 }, 4552 "notification-url": "https://packagist.org/downloads/", 4553 "license": [ 4554 "MIT" 4555 ], 4556 "authors": [ 4557 { 4558 "name": "Nicolas Grekas", 4559 "email": "p@tchwork.com" 4560 }, 4561 { 4562 "name": "Symfony Community", 4563 "homepage": "https://symfony.com/contributors" 4564 } 4565 ], 4566 "description": "Generic abstractions related to writing services", 4567 "homepage": "https://symfony.com", 4568 "keywords": [ 4569 "abstractions", 4570 "contracts", 4571 "decoupling", 4572 "interfaces", 4573 "interoperability", 4574 "standards" 4575 ], 4576 "support": { 4577 "source": "https://github.com/symfony/service-contracts/tree/main" 4578 }, 4579 "funding": [ 4580 { 4581 "url": "https://symfony.com/sponsor", 4582 "type": "custom" 4583 }, 4584 { 4585 "url": "https://github.com/fabpot", 4586 "type": "github" 4587 }, 4588 { 4589 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4590 "type": "tidelift" 4591 } 4592 ], 4593 "time": "2024-09-25T14:21:43+00:00" 4594 }, 4595 { 4596 "name": "symfony/stopwatch", 4597 "version": "7.3.x-dev", 4598 "source": { 4599 "type": "git", 4600 "url": "https://github.com/symfony/stopwatch.git", 4601 "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df" 4602 }, 4603 "dist": { 4604 "type": "zip", 4605 "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df", 4606 "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df", 4607 "shasum": "" 4608 }, 4609 "require": { 4610 "php": ">=8.2", 4611 "symfony/service-contracts": "^2.5|^3" 4612 }, 4613 "type": "library", 4614 "autoload": { 4615 "psr-4": { 4616 "Symfony\\Component\\Stopwatch\\": "" 4617 }, 4618 "exclude-from-classmap": [ 4619 "/Tests/" 4620 ] 4621 }, 4622 "notification-url": "https://packagist.org/downloads/", 4623 "license": [ 4624 "MIT" 4625 ], 4626 "authors": [ 4627 { 4628 "name": "Fabien Potencier", 4629 "email": "fabien@symfony.com" 4630 }, 4631 { 4632 "name": "Symfony Community", 4633 "homepage": "https://symfony.com/contributors" 4634 } 4635 ], 4636 "description": "Provides a way to profile code", 4637 "homepage": "https://symfony.com", 4638 "support": { 4639 "source": "https://github.com/symfony/stopwatch/tree/7.2" 4640 }, 4641 "funding": [ 4642 { 4643 "url": "https://symfony.com/sponsor", 4644 "type": "custom" 4645 }, 4646 { 4647 "url": "https://github.com/fabpot", 4648 "type": "github" 4649 }, 4650 { 4651 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4652 "type": "tidelift" 4653 } 4654 ], 4655 "time": "2024-12-18T14:28:33+00:00" 4656 }, 4657 { 4658 "name": "symfony/string", 4659 "version": "7.3.x-dev", 4660 "source": { 4661 "type": "git", 4662 "url": "https://github.com/symfony/string.git", 4663 "reference": "373a11f2d03e71934a0023888edf3328a583e4ec" 4664 }, 4665 "dist": { 4666 "type": "zip", 4667 "url": "https://api.github.com/repos/symfony/string/zipball/373a11f2d03e71934a0023888edf3328a583e4ec", 4668 "reference": "373a11f2d03e71934a0023888edf3328a583e4ec", 4669 "shasum": "" 4670 }, 4671 "require": { 4672 "php": ">=8.2", 4673 "symfony/polyfill-ctype": "~1.8", 4674 "symfony/polyfill-intl-grapheme": "~1.0", 4675 "symfony/polyfill-intl-normalizer": "~1.0", 4676 "symfony/polyfill-mbstring": "~1.0" 4677 }, 4678 "conflict": { 4679 "symfony/translation-contracts": "<2.5" 4680 }, 4681 "require-dev": { 4682 "symfony/emoji": "^7.1", 4683 "symfony/error-handler": "^6.4|^7.0", 4684 "symfony/http-client": "^6.4|^7.0", 4685 "symfony/intl": "^6.4|^7.0", 4686 "symfony/translation-contracts": "^2.5|^3.0", 4687 "symfony/var-exporter": "^6.4|^7.0" 4688 }, 4689 "type": "library", 4690 "autoload": { 4691 "files": [ 4692 "Resources/functions.php" 4693 ], 4694 "psr-4": { 4695 "Symfony\\Component\\String\\": "" 4696 }, 4697 "exclude-from-classmap": [ 4698 "/Tests/" 4699 ] 4700 }, 4701 "notification-url": "https://packagist.org/downloads/", 4702 "license": [ 4703 "MIT" 4704 ], 4705 "authors": [ 4706 { 4707 "name": "Nicolas Grekas", 4708 "email": "p@tchwork.com" 4709 }, 4710 { 4711 "name": "Symfony Community", 4712 "homepage": "https://symfony.com/contributors" 4713 } 4714 ], 4715 "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 4716 "homepage": "https://symfony.com", 4717 "keywords": [ 4718 "grapheme", 4719 "i18n", 4720 "string", 4721 "unicode", 4722 "utf-8", 4723 "utf8" 4724 ], 4725 "support": { 4726 "source": "https://github.com/symfony/string/tree/7.3" 4727 }, 4728 "funding": [ 4729 { 4730 "url": "https://symfony.com/sponsor", 4731 "type": "custom" 4732 }, 4733 { 4734 "url": "https://github.com/fabpot", 4735 "type": "github" 4736 }, 4737 { 4738 "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4739 "type": "tidelift" 4740 } 4741 ], 4742 "time": "2025-01-05T16:34:30+00:00" 2259 4743 }, 2260 4744 { … … 2559 5043 "platform": [], 2560 5044 "platform-dev": [], 2561 "plugin-api-version": "2. 3.0"5045 "plugin-api-version": "2.6.0" 2562 5046 } -
cookielegit/trunk/cookie-legit-functions.php
r3148248 r3251291 1 1 <?php 2 3 use Cookie_Legit\Models\Cookie_Legit_Settings; 2 4 3 5 /** … … 34 36 return null; 35 37 } 38 39 /** 40 * Get a CookieLegit setting 41 * @param string $group 42 * @param string $setting 43 * @param mixed $default 44 * @return mixed 45 */ 46 function cookie_legit_get_setting($group, $setting, $default = null) 47 { 48 return Cookie_Legit_Settings::get_setting($group, $setting, $default); 49 } -
cookielegit/trunk/cookie-legit.php
r3149580 r3251291 5 5 * Plugin Name: CookieLegit 6 6 * Description: The last cookie manager you'll need 7 * Version: 1. 0.27 * Version: 1.1.0 8 8 * Author: CookieLegit 9 9 * Author URI: https://cookielegit.site/ … … 14 14 * License URI: https://www.gnu.org/licenses/gpl-3.0.html 15 15 * Requires at least: 5.8 16 * Tested up to: 6. 6.116 * Tested up to: 6.7.2 17 17 * Requires PHP: 8.0 18 18 */ … … 24 24 25 25 if (!defined('COOKIE_LEGIT_VERSION')) { 26 define('COOKIE_LEGIT_VERSION', '1. 0.0');26 define('COOKIE_LEGIT_VERSION', '1.1.0'); 27 27 } 28 28 -
cookielegit/trunk/dist/admin.js
r3148248 r3251291 1 (()=>{var t={};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),(()=>{var o;t.g.importScripts&&(o=t.g.location+"");var e=t.g.document;if(!o&&e&&(e.currentScript&&(o=e.currentScript.src),!o)){var n=e.getElementsByTagName("script");if(n.length)for(var i=n.length-1;i>-1&&!o;)o=n[i--].src}if(!o)throw new Error("Automatic publicPath is not supported in this browser");o=o.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t.p=o})(),jQuery((function(t){t(".notice-type-option").on("change",(function(){const o=t(this).val();t(".banner-position-options").addClass("hide"),t(`.banner-position-options[data-notice-type="${o}"]`).removeClass("hide"),t(`.banner-position-options[data-notice-type="${o}"]`).find("input").first().prop("checked",!0)})),t("#pixel-settings-consent-mode").on("change",(function(){t(this).is(":checked")?t(".row-pixel:not(.row-google_tag_manager)").addClass("hide"):t(".row-pixel:not(.row-google_tag_manager)").removeClass("hide")})),t(window).on("scroll",(function(){const o=t(".cl-form-header"),e=t("#wpadminbar");o.offset().top===e.offset().top+e.height()?o.addClass("is-stuck"):o.removeClass("is-stuck")}))})),(()=>{"use strict";t.p})()})();1 (()=>{var o={};o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(o){if("object"==typeof window)return window}}(),(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var i=e.getElementsByTagName("script");if(i.length)for(var n=i.length-1;n>-1&&!t;)t=i[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t})(),jQuery((function(o){o(".notice-type-option").on("change",(function(){const t=o(this).val();o(".banner-position-options").addClass("hide"),o(`.banner-position-options[data-notice-type="${t}"]`).removeClass("hide"),o(`.banner-position-options[data-notice-type="${t}"]`).find("input").first().prop("checked",!0)})),o("#pixel-settings-consent-mode").on("change",(function(){o(this).is(":checked")?(o(".row-pixel:not(.row-google_tag_manager)").addClass("hide"),o(".row-google-tag").removeClass("hide")):(o(".row-google-tag").addClass("hide"),o(".row-pixel:not(.row-google_tag_manager)").removeClass("hide"))})),o(window).on("scroll",(function(){const t=o(".cl-form-header"),e=o("#wpadminbar");t.offset().top===e.offset().top+e.height()?t.addClass("is-stuck"):t.removeClass("is-stuck")}))})),(()=>{"use strict";o.p})()})(); -
cookielegit/trunk/dist/public.js
r3148281 r3251291 1 (()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var s=n.getElementsByTagName("script");if(s.length)for(var i=s.length-1;i>-1&&!t;)t=s[i--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{class e{static list(){const e=[],t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const s=t[n].split("="),i=s[0];let c=s.length>1?s[1]:null;e.push({name:i,value:c})}return e}static find(e=""){return this.list().find((t=>t.name===e))||null}static create(e,t,n=1,s="/"){const i=new Date,c=new Date(i.getTime()+24*n*60*60*1e3);return document.cookie=`${e}=${t}; expires=${c}; path=${s}`,this}static delete(e){return document.cookie=`${e}=; Max-Age=-99999999;`,this}}class t{#e=null;#t=null;#n=null;#s=[];screens=["notice","preferences","toggle-preferences"];consentCookieName="cl_consent";cookieNames=["cl_consent","cl_essential","cl_tracking","cl_marketing"];defaultSettings={baseUrl:null,userOpt:!1,consentMode:!1,cookieDuration:182,themeUrl:null};static#i={"cookie-legit-init":[],"notice-loaded":[],"consent-given":[],"consent-updated":[]};constructor(e,t){return this.#n=Object.assign({},this.defaultSettings,t),this.#e=this.selectTarget(e),this.checkConsentCookies(),this.insertNotice(),this.maybeInjectScripts(),this}buildStyle(e){const t=document.createElement("link");t.href=this.#n.themeUrl,t.rel="stylesheet",t.id="cookielegit-css",t.onload=()=>{e.style.display=""},document.head.append(t)}checkConsentCookies(){e.list().filter((e=>e.name.startsWith("cl_"))).forEach((e=>this.#s.push(e))),this.#n.consentMode&&this.#s.length>0&&this.updateGTMConsent(),this.#s.length>0&&t.#c("consent-given")}selectTarget(e){return document.querySelector(e)}async insertNotice(){let e=await this.fetchNotice();this.#t=document.createElement("div"),this.#t.id="cookie-legit-notice-container",this.#t.innerHTML=e.html,this.#t.style.display="none";let t=0===this.#s.length?"notice":"toggle-preferences";this.#t.classList.add(t),this.#e.appendChild(this.#t),this.setupEvents(),this.#n.userOpt&&this.setPrefToggles(),this.buildStyle(this.#t)}async fetchNotice(){const e=await fetch(`${this.#n.baseUrl}?action=get_cookie_notice`);return await e.json()}setupEvents(){this.#n.userOpt?(this.#t.querySelector(".cookie-legit-pref-btn").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-save-pref-btn").addEventListener("click",(()=>this.savePreferences())),this.#t.querySelector(".cookie-legit-accept-pref-btn").addEventListener("click",(()=>this.acceptAllCookies()))):this.#t.querySelector(".cookie-legit-deny-btn").addEventListener("click",(()=>this.denyAllCookies())),this.#t.querySelector(".cookie-legit-preferences-change").addEventListener("click",(()=>this.updatePreferences())),this.#t.querySelector(".cookie-legit-accept-btn").addEventListener("click",(()=>this.acceptAllCookies()))}toggleUserPreferences(){this.changeScreen("preferences")}acceptAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{e.create(t,!0,this.#n.cookieDuration)})),this.checkConsentCookies()}savePreferences(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName||this.#t.querySelector(`input[name=${t}]`).checked;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}updatePreferences(){let e=this.#n.userOpt?"preferences":"notice";this.changeScreen(e),this.checkConsentCookies(),t.#c("consent-updated")}denyAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}changeScreen(e){let t=this.screens.filter((t=>t!==e));this.#t.classList.remove(...t),this.#t.classList.add(e)}setPrefToggles(){this.#s.forEach((e=>{let t=this.#t.querySelector(`input[name=${e.name}]`);t&&(t.checked="true"===e.value)}))}async maybeInjectScripts(){if(!this.#n.userOpt||"true"!==e.find(this.consentCookieName))return;let t=await fetch(`${this.#n.baseUrl}?action=get_tracking_scripts`),n=await t.json();for(const e in n)if(Object.hasOwnProperty.call(n,e)){const t=n[e];Object.values(t).forEach((t=>{if(this.isJSON(t)){t=JSON.parse(t);for(const n in t)Object.hasOwnProperty.call(t,n)&&t[n].forEach((t=>{let s=this.buildScript(e,t,"srcs"===n);document.querySelector(e).append(s)}))}else{let n=this.buildScript(e,t);document.querySelector(e).append(n)}}))}}updateGTMConsent(){if("function"==typeof gtag)return gtag("consent","update",this.getGTMConsentObject());window.dataLayer=window.dataLayer||[],window.dataLayer.push({0:"consent",1:"update",2:this.getGTMConsentObject()})}getGTMConsentObject(){return{ad_storage:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_user_data:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_personalization:"true"===e.find("cl_marketing")?.value?"granted":"denied",analytics_storage:"true"===e.find("cl_tracking")?.value?"granted":"denied",security_storage:"granted"}}isJSON(e){try{JSON.parse(e)}catch(e){return!1}return!0}buildScript(e,t,n=!1){let s="head"===e?"script":"noscript",i=document.createElement(s);return n?(i.src=t,i):(i.textContent=t,i)}static subscribe(e,t){return this.#i[e]?"function"!=typeof t?console.warn(`Expected callback for ${e} got ${typeof t}`):void this.#i[e].push(t):console.warn(`Cannot subscribe to ${e} because it does not exist!`)}static#c(e){const t=this.#i[e];if(!t)return console.warn(`Cannot trigger ${e} because it does not exist!`);for(let e of t)e()}}jQuery((function(e){t.subscribe("consent-given",(function(){console.log("should update screens"),e("iframe[data-cl-src]").each((function(){e(this).attr("src",e(this).attr("data-cl-src"))})),e("script[type=cookielegitblock]").each((function(){e(this).attr("src",e(this).attr("data-cl-src")),e(this).attr("type",e(this).attr("data-cl-type"))}))})),window.cookieLegitNotice=new t("body",{consentMode:""!==cl_config.consent_mode,userOpt:""!==cl_config.user_opt,baseUrl:cl_config.ajax_url,themeUrl:cl_config.themeUrl})}))})(),e.p})();1 (()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var i=n.getElementsByTagName("script");if(i.length)for(var s=i.length-1;s>-1&&!t;)t=i[s--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),(()=>{class e{static list(){const e=[],t=document.cookie.split("; ");for(let n=0;n<t.length;n++){const i=t[n].split("="),s=i[0];let c=i.length>1?i[1]:null;e.push({name:s,value:c})}return e}static find(e=""){return this.list().find((t=>t.name===e))||null}static create(e,t,n=1,i="/"){const s=new Date,c=new Date(s.getTime()+24*n*60*60*1e3);return document.cookie=`${e}=${t}; expires=${c}; path=${i}`,this}static delete(e){return document.cookie=`${e}=; Max-Age=-99999999;`,this}}class t{#e=null;#t=null;#n=null;#i=[];CONSENT_SETTINGS_NAME="cl_cus";screens=["notice","preferences","toggle-preferences"];consentCookieName="cl_consent";cookieNames=["cl_consent","cl_essential","cl_tracking","cl_marketing"];defaultSettings={baseUrl:null,userOpt:!1,consentMode:!1,cookieDuration:182,themeUrl:null,googleTag:!1};consentCategories={cl_tracking:"marketingCookies",cl_marketing:"advertisingCookies",cl_essential:"essentialCookies"};static#s={"cookie-legit-init":[],"notice-loaded":[],"consent-given":[],"consent-updated":[]};constructor(e,t){return this.#n=Object.assign({},this.defaultSettings,t),this.#e=this.selectTarget(e),this.checkConsentCookies(),this.insertNotice(),this.maybeInjectScripts(),this}buildStyle(e){const t=document.createElement("link");t.href=this.#n.themeUrl,t.rel="stylesheet",t.id="cookielegit-css",t.onload=()=>{e.style.display=""},document.head.append(t)}checkConsentCookies(){if(e.list().filter((e=>e.name.startsWith("cl_"))).forEach((e=>this.#i.push(e))),0===this.#i.length)return;if(this.#n.consentMode&&!this.#n.googleTag)return this.updateGTMConsent(),void t.#c("consent-given");const n=this.getTagConsentSettings();t.#c("consent-given",n),e.create(this.CONSENT_SETTINGS_NAME,JSON.stringify(n))}selectTarget(e){return document.querySelector(e)}async insertNotice(){let e=await this.fetchNotice();this.#t=document.createElement("div"),this.#t.id="cookie-legit-notice-container",this.#t.innerHTML=e.html,this.#t.style.display="none";let t=0===this.#i.length?"notice":"toggle-preferences";this.#t.classList.add(t),this.#e.appendChild(this.#t),this.setupEvents(),this.#n.userOpt&&this.setPrefToggles(),this.buildStyle(this.#t)}async fetchNotice(){const e=await fetch(`${this.#n.baseUrl}?action=get_cookie_notice`);return await e.json()}setupEvents(){this.#n.userOpt?(this.#t.querySelector(".cookie-legit-pref-btn").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-save-pref-btn").addEventListener("click",(()=>this.savePreferences())),this.#t.querySelector(".cookie-legit-accept-pref-btn").addEventListener("click",(()=>this.acceptAllCookies()))):this.#t.querySelector(".cookie-legit-deny-btn").addEventListener("click",(()=>this.denyAllCookies())),this.#t.querySelector(".cookie-legit-preferences-change").addEventListener("click",(()=>this.toggleUserPreferences())),this.#t.querySelector(".cookie-legit-accept-btn").addEventListener("click",(()=>this.acceptAllCookies()))}toggleUserPreferences(){this.changeScreen("preferences")}acceptAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{e.create(t,!0,this.#n.cookieDuration)})),this.checkConsentCookies()}savePreferences(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName||this.#t.querySelector(`input[name=${t}]`).checked;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}updatePreferences(){let e=this.#n.userOpt?"preferences":"notice";this.changeScreen(e),this.checkConsentCookies(),t.#c("consent-updated")}denyAllCookies(){this.changeScreen("toggle-preferences"),this.cookieNames.forEach((t=>{let n=t===this.consentCookieName;e.create(t,n,this.#n.cookieDuration)})),this.checkConsentCookies()}changeScreen(e){let t=this.screens.filter((t=>t!==e));this.#t.classList.remove(...t),this.#t.classList.add(e)}setPrefToggles(){this.#i.forEach((e=>{let t=this.#t.querySelector(`input[name=${e.name}]`);t&&(t.checked="true"===e.value)}))}async maybeInjectScripts(){if(!this.#n.userOpt||"true"!==e.find(this.consentCookieName))return;let t=await fetch(`${this.#n.baseUrl}?action=get_tracking_scripts`),n=await t.json();for(const e in n)if(Object.hasOwnProperty.call(n,e)){const t=n[e];Object.values(t).forEach((t=>{if(this.isJSON(t)){t=JSON.parse(t);for(const n in t)Object.hasOwnProperty.call(t,n)&&t[n].forEach((t=>{let i=this.buildScript(e,t,"srcs"===n);document.querySelector(e).append(i)}))}else{let n=this.buildScript(e,t);document.querySelector(e).append(n)}}))}}updateGTMConsent(){if("function"==typeof gtag)return gtag("consent","update",this.getGTMConsentObject());window.dataLayer=window.dataLayer||[],window.dataLayer.push({0:"consent",1:"update",2:this.getGTMConsentObject()})}getGTMConsentObject(){return{ad_storage:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_user_data:"true"===e.find("cl_marketing")?.value?"granted":"denied",ad_personalization:"true"===e.find("cl_marketing")?.value?"granted":"denied",analytics_storage:"true"===e.find("cl_tracking")?.value?"granted":"denied",security_storage:"granted"}}isJSON(e){try{JSON.parse(e)}catch(e){return!1}return!0}buildScript(e,t,n=!1){let i="head"===e?"script":"noscript",s=document.createElement(i);return n?(s.src=t,s):(s.textContent=t,s)}getTagConsentSettings(){const e={};return this.#i.forEach((t=>{t.name in this.consentCategories&&(e[this.consentCategories[t.name]]="true"===t.value)})),e}static subscribe(e,t){return this.#s[e]?"function"!=typeof t?console.warn(`Expected callback for ${e} got ${typeof t}`):void this.#s[e].push(t):console.warn(`Cannot subscribe to ${e} because it does not exist!`)}static#c(e,...t){const n=this.#s[e];if(!n)return console.warn(`Cannot trigger ${e} because it does not exist!`);for(let e of n)e(...t)}}window.cookieLegitGtmCaller=function(e){t.subscribe("consent-given",e)},jQuery((function(e){t.subscribe("consent-given",(function(){e("iframe[data-cl-src]").each((function(){e(this).attr("src",e(this).attr("data-cl-src"))})),e("script[type=cookielegitblock]").each((function(){e(this).attr("src",e(this).attr("data-cl-src")),e(this).attr("type",e(this).attr("data-cl-type"))}))}));let n=0;t.subscribe("consent-given",(function(e){n++,console.log(`Event 'consent-given' got called ${n} times with args: `,e)})),window.cookieLegitNotice=new t("body",{consentMode:""!==cl_config.consent_mode,userOpt:""!==cl_config.user_opt,baseUrl:cl_config.ajax_url,themeUrl:cl_config.themeUrl,googleTag:""!==cl_config.googleTag})}))})(),e.p})(); -
cookielegit/trunk/readme.txt
r3149580 r3251291 4 4 Tags: CMP, Cookies, Cookie banner, Consent Mode v2, GDPR 5 5 Requires at least: 5.8 6 Tested up to: 6. 6.17 Stable tag: 1. 0.26 Tested up to: 6.7.2 7 Stable tag: 1.1.0 8 8 Requires PHP: 8.0.0 9 9 License: GPLv3 … … 90 90 == Changelog == 91 91 92 # v1.1.0 93 - Added global function for retrieving settings for future performance updates 94 - Added new setting for google tag usage. (Google Tag Template out soon) 95 - Disable use of `gtag` when google tag template is used. 96 92 97 # v1.0.2 93 98 - Style loaded async to prevent invalid caching -
cookielegit/trunk/src/admin/class-cookie-legit-admin-pages.php
r3148248 r3251291 22 22 $consent_mode = (isset($pixel_settings['consent_mode']) && $pixel_settings['consent_mode'] === 'on'); 23 23 24 $google_tag = (isset($pixel_settings['google_tag']) && $pixel_settings['google_tag'] === 'on'); 25 24 26 Cookie_Legit_View_Loader::load('admin.settings.settings', [ 25 27 'notice_settings' => $notice_settings, 26 28 'pixel_settings' => $pixel_settings, 27 29 'consent_mode' => $consent_mode, 30 'google_tag' => $google_tag, 28 31 'blocking_settings' => $blocking_settings, 29 32 'active_screen' => $active_screen, -
cookielegit/trunk/src/models/class-cookie-legit-settings.php
r3148248 r3251291 5 5 class Cookie_Legit_Settings 6 6 { 7 8 7 /** 9 8 * The setting group to register under 10 9 * @var string 11 10 */ 12 public static $settingGroup = "cookie-legit-options-group";11 public static $settingGroup = 'cookie-legit-options-group'; 13 12 14 13 /** … … 17 16 */ 18 17 public static $settingPrefix = 'cookie_legit_'; 18 19 /** 20 * Default setting groups for cookie legit 21 * @var array<string> 22 */ 23 public static $settingGroups = [ 24 'notice', 25 'pixel', 26 'blocking' 27 ]; 19 28 20 29 /** … … 29 38 'type' => 'banner', 30 39 'position' => 'bottom', 31 'text' => esc_html__( "This website uses cookies to ensure the best user experience.", 'cookie-legit'),40 'text' => esc_html__('This website uses cookies to ensure the best user experience.', 'cookie-legit'), 32 41 'style' => array( 33 'background_color' => "#FFFFFF",34 'color' => "#000000",35 'border_radius' => "0"42 'background_color' => '#FFFFFF', 43 'color' => '#000000', 44 'border_radius' => '0' 36 45 ), 37 46 ), … … 40 49 'link' => '/privacy', 41 50 'style' => array( 42 'color' => "#28A745"51 'color' => '#28A745' 43 52 ), 44 53 ), … … 47 56 'text' => esc_html__('Change preferences', 'cookie-legit'), 48 57 'style' => array( 49 'background_color' => "#FFFFFF",50 'color' => "#000000",58 'background_color' => '#FFFFFF', 59 'color' => '#000000', 51 60 'border_radius' => 5 52 61 ), … … 55 64 'text' => esc_html__('Save preferences', 'cookie-legit'), 56 65 'style' => array( 57 'background_color' => "#ffffff",58 'color' => "#000000",66 'background_color' => '#ffffff', 67 'color' => '#000000', 59 68 'border_radius' => 5 60 69 ), … … 63 72 'text' => esc_html__('Accept', 'cookie-legit'), 64 73 'style' => array( 65 'background_color' => "#28A745",66 'color' => "#FFFFFF",74 'background_color' => '#28A745', 75 'color' => '#FFFFFF', 67 76 'border_radius' => 5 68 77 ), … … 71 80 'text' => esc_html__('Deny', 'cookie-legit'), 72 81 'style' => array( 73 'background_color' => "#FFFFFF",74 'color' => "#000000",82 'background_color' => '#FFFFFF', 83 'color' => '#000000', 75 84 'border_radius' => 5 76 85 ), … … 79 88 'texts' => array( 80 89 'essential' => array( 81 'title' => esc_html__( "Essential cookies", 'cookie-legit'),82 "description" => esc_html__("Cookies that make the website function as intended", 'cookie-legit')90 'title' => esc_html__('Essential cookies', 'cookie-legit'), 91 'description' => esc_html__('Cookies that make the website function as intended', 'cookie-legit') 83 92 ), 84 93 'tracking' => array( 85 'title' => esc_html__( "Analytical cookies", 'cookie-legit'),86 'description' => esc_html__( "Cookies that keep track of you.", 'cookie-legit'),94 'title' => esc_html__('Analytical cookies', 'cookie-legit'), 95 'description' => esc_html__('Cookies that keep track of you.', 'cookie-legit'), 87 96 ), 88 97 'marketing' => array( 89 'title' => esc_html__( "Marketing cookies", 'cookie-legit'),90 'description' => esc_html__( "Cookies with marketing purpose.", 'cookie-legit'),98 'title' => esc_html__('Marketing cookies', 'cookie-legit'), 99 'description' => esc_html__('Cookies with marketing purpose.', 'cookie-legit'), 91 100 ) 92 101 ), … … 100 109 'meta_pixel' => '', 101 110 ), 102 'consent_mode' => false 111 'consent_mode' => false, 112 'google_tag' => false, 103 113 ), 104 114 'blocking' => array( … … 162 172 'type' => 'text', 163 173 'position' => 'text', 164 'text' => "text",174 'text' => 'text', 165 175 'style' => array( 166 'background_color' => "color",167 'color' => "color",168 'border_radius' => "text"176 'background_color' => 'color', 177 'color' => 'color', 178 'border_radius' => 'text' 169 179 ), 170 180 ), … … 173 183 'link' => 'url', 174 184 'style' => array( 175 'color' => "color"185 'color' => 'color' 176 186 ), 177 187 ), … … 180 190 'text' => 'text', 181 191 'style' => array( 182 'background_color' => "color",183 'color' => "color",184 'border_radius' => "text"192 'background_color' => 'color', 193 'color' => 'color', 194 'border_radius' => 'text' 185 195 ), 186 196 ), … … 188 198 'text' => 'Save preferences', 189 199 'style' => array( 190 'background_color' => "color",191 ' text_color' => "color",192 'border_radius' => "text"200 'background_color' => 'color', 201 'color' => 'color', 202 'border_radius' => 'text' 193 203 ), 194 204 ), … … 196 206 'text' => 'text', 197 207 'style' => array( 198 'background_color' => "color",199 'color' => "text",200 'border_radius' => "text"208 'background_color' => 'color', 209 'color' => 'text', 210 'border_radius' => 'text' 201 211 ), 202 212 ), … … 204 214 'text' => 'text', 205 215 'style' => array( 206 'background_color' => "color",207 'color' => "color",208 'border_radius' => "text"216 'background_color' => 'color', 217 'color' => 'color', 218 'border_radius' => 'text' 209 219 ), 210 220 ), … … 212 222 'texts' => array( 213 223 'essential' => array( 214 'title' => "text",215 "description" => "textarea"224 'title' => 'text', 225 'description' => 'textarea' 216 226 ), 217 227 'tracking' => array( 218 'title' => "text",219 'description' => "textarea",228 'title' => 'text', 229 'description' => 'textarea', 220 230 ), 221 231 'marketing' => array( 222 'title' => "text",223 'description' => "textarea",232 'title' => 'text', 233 'description' => 'textarea', 224 234 ) 225 235 ), 226 236 'user_opt' => 'text', 227 237 'consent_mode' => 'text', 238 'google_tag' => 'text', 228 239 'codes' => array( 229 240 'google_tag_manager' => 'text', … … 244 255 'scripts' => array( 245 256 'block' => 'text', 246 'excludes' => "textarea"257 'excludes' => 'textarea' 247 258 ), 248 259 'give_some_love' => 'text' … … 265 276 { 266 277 return apply_filters('cookie_legit_setting_types', self::$defaultSettingTypes); 278 } 279 280 /** 281 * @return array<string> $settingGroups 282 */ 283 public static function get_setting_groups() 284 { 285 return apply_filters('cookie_legit_setting_groups', self::$settingGroups); 286 } 287 288 /** 289 * Get single setting 290 * @param string $group 291 * @param string $setting 292 * @param mixed $default 293 * @return mixed A single setting or group of settings 294 * @throws \Exception 295 */ 296 public static function get_setting($group, $setting = null, $default = null) 297 { 298 $groups = self::get_setting_groups(); 299 300 if(!in_array($group, $groups)) { 301 trigger_error(__CLASS__ .'::' . __FUNCTION__ . " $group is not a valid setting group", E_USER_WARNING); 302 return $default; 303 } 304 305 $defaultSettings = self::get_default_settings()[$group]; 306 307 $getSettingGroup = "get_{$group}_settings"; 308 309 $settings = self::$getSettingGroup(false); 310 311 return self::filter_settings($setting, $settings, $defaultSettings) ?? $default; 312 } 313 314 /** 315 * @param string $setting 316 * @param mixed $settings 317 * @param mixed $default 318 * @return mixed The setting 319 */ 320 private static function filter_settings($setting, $settings, $default) 321 { 322 $parts = explode('.', $setting); 323 324 $settingValue = $settings; 325 $defaultValue = $default; 326 327 foreach($parts as $key) { 328 $settingValue = $settingValue[$key] ?? null; 329 $defaultValue = $defaultValue[$key] ?? null; 330 } 331 332 if($settingValue === null && $defaultValue === null) { 333 trigger_error(__CLASS__ . '::' . __FUNCTION__ . " $setting does not exist", E_USER_WARNING); 334 return null; 335 } 336 337 return $settingValue ?? $defaultValue; 267 338 } 268 339 … … 404 475 405 476 if (cookie_legit_is_translatable()) { 406 return "_". cookie_legit_current_language();477 return '_' . cookie_legit_current_language(); 407 478 } 408 479 -
cookielegit/trunk/src/public/class-cookie-legit-notice.php
r3148281 r3251291 24 24 'user_opt' => (isset($notice_settings['user_opt']) && $notice_settings['user_opt'] === 'on'), 25 25 'ajax_url' => admin_url('admin-ajax.php'), 26 'themeUrl' => COOKIE_LEGIT_URL . 'dist/public.css' 26 'themeUrl' => COOKIE_LEGIT_URL . 'dist/public.css', 27 'googleTag' => isset($pixel_settings['google_tag']) && $pixel_settings['google_tag'] === 'on', 27 28 )); 28 29 } -
cookielegit/trunk/view/admin/settings/partials/pixel_fields.php
r3148248 r3251291 20 20 } ?>> 21 21 <label for="pixel-settings-consent-mode"></label> 22 </div> 23 </div> 24 </div> 25 <div class="cl-form-row row-google-tag<?php if(!$consent_mode) echo esc_attr(' hide'); ?>"> 26 <div class="cl-label-wrapper"> 27 <label><?php esc_html_e('I use the Google Tag', 'cookie-legit'); ?></label> 28 <p><?php esc_html_e('If enabled the plugin assumes you have integrated our Google Tag into Tag Manager. This provides the best integration when you use Tags that are not owned by Google.', 'cookie-legit'); ?></p> 29 </div> 30 <div class="cl-values-wrapper"> 31 <div class="cl-toggle-input"> 32 <input type="checkbox" name="pixels_settings[google_tag]" id="pixel-settings-google-tag" <?php if ($google_tag) { 33 echo esc_attr('checked'); 34 } ?>> 35 <label for="pixel-settings-google-tag"></label> 22 36 </div> 23 37 </div>
Note: See TracChangeset
for help on using the changeset viewer.