diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e5a6d4e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +.gitattributes export-ignore +.gitignore export-ignore +.project export-ignore +/nbproject export-ignore +phpdoc.dist.xml export-ignore diff --git a/.gitignore b/.gitignore index 1187c59..19f2280 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,14 @@ /cms/data/modules/* !/cms/data/layouts/ /cms/data/layouts/* +/conlite/includes/include.style_edit_form_1.php +/cms/config.local.php +/cms/dflip/ +/cms/js/firstlevel/ +/conlite/external/**/.git +/conlite/logs/debug.log +/cms/data/config/production/config.mod_rewrite.php +/cms/data/config/production/config.local.php +/cms/cache/* +composer.phar +/conlite/vendor/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..2931201 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "conlite/plugins/cl-newsletter"] + path = conlite/plugins/cl-newsletter + url = https://gitport.de/ConLite/cl-newsletter.git +[submodule "conlite/plugins/cl-content-allocation"] + path = conlite/plugins/cl-content-allocation + url = https://gitport.de/ConLite/cl-content-allocation.git diff --git a/.htaccess b/.htaccess index 6762b78..a4a8c5f 100644 --- a/.htaccess +++ b/.htaccess @@ -14,7 +14,11 @@ # $Id: htaccess_simple.txt 145 2019-10-25 16:00:47Z oldperl $ ################################################################################ -#SetEnv CONLITE_ENVIRONMENT development +# easily set this enviroment variable to the config you want to use +# add a config folder with the same name in data/config and cms/data/config +# and use your custom config for development + +#SetEnv CONLITE_ENVIRONMENT develop @@ -33,7 +37,7 @@ RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} ftp://.*$ [NC,OR] RewriteCond %{QUERY_STRING} http[s]*://.*$ [NC] - RewriteRule ^.* - [F,L] # all matching conditions from above will end in nirvana + RewriteRule ^.* - [F,L,DPI] # all matching conditions from above will end in nirvana # Rewrite request to root to front_content.php RewriteRule ^$ front_content.php [QSA,L] @@ -44,7 +48,7 @@ RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d - RewriteRule ^.*$ - [NC,L] + RewriteRule ^.*$ - [NC,L,DPI] # Pass other requests to front_content.php RewriteRule ^.*$ front_content.php [QSA,NC,L] diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/ConLite.iml b/.idea/ConLite.iml new file mode 100644 index 0000000..acfbd0f --- /dev/null +++ b/.idea/ConLite.iml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/GitLink.xml b/.idea/GitLink.xml new file mode 100644 index 0000000..5143819 --- /dev/null +++ b/.idea/GitLink.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/clphp8.iml b/.idea/clphp8.iml new file mode 100644 index 0000000..b893c37 --- /dev/null +++ b/.idea/clphp8.iml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeception.xml b/.idea/codeception.xml new file mode 100644 index 0000000..6f70668 --- /dev/null +++ b/.idea/codeception.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..a2b5907 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + mariadb + true + org.mariadb.jdbc.Driver + jdbc:mariadb://localhost:3306/dev_clphp74 + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/deployment.xml b/.idea/deployment.xml new file mode 100644 index 0000000..353c755 --- /dev/null +++ b/.idea/deployment.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..743b270 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..3cf5a81 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/phpspec.xml b/.idea/phpspec.xml new file mode 100644 index 0000000..c5034e9 --- /dev/null +++ b/.idea/phpspec.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml new file mode 100644 index 0000000..6f5a4c4 --- /dev/null +++ b/.idea/phpunit.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..ddb69a7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..aeb022b --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,236 @@ + + + + + + + + + + + + $PROJECT_DIR$/composer.json + + + + + + + + + + + + + + + + + + + + + { + "keyToString": { + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "WebServerToolWindowFactoryState": "false", + "last_opened_file_path": "/var/www/html/clphp8/cms/data/modules/cl_contactform/php", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs_package_manager_path": "npm", + "settings.editor.selected.configurable": "preferences.pluginManager", + "vue.rearranger.settings.migration": "true" + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1682358089636 + + + 1682442332378 + + + 1682442467699 + + + 1682442642783 + + + 1682445298959 + + + 1682445879204 + + + 1682446236100 + + + 1682446918410 + + + 1682450834252 + + + 1682513087275 + + + + + + + + + + + + + + + + + + +  '; - html += '
'; - - } else { - // Implied consent disclosure - html += scriptsDisclosure + settings.impliedDisclosureText + ' ' + settings.privacyPolicyLinkText + '.'; - html += '
'; - } - html += ''; - $('body').append(html); - - // Serve the disclosure, and be smarter about branching - var dp = settings.position.toLowerCase(); - if(dp != 'top' && dp!= 'bottom') { - dp = 'top'; - } - var opts = new Array(); - if(dp == 'top') { - opts['in'] = {'top':'0'}; - opts['out'] = {'top':'-300'}; - } else { - opts['in'] = {'bottom':'0'}; - opts['out'] = {'bottom':'-300'}; - } - - // Start animation - $('#cookiesdirective').animate(opts['in'], 1000, function() { - // Set event handlers depending on type of disclosure - if(settings.explicitConsent) { - // Explicit, need to check a box and click a button - $('#explicitsubmit').click(function() { - if($('#epdagree').is(':checked')) { - // Set a cookie to prevent this being displayed again - setCookie('cookiesDirective',1,365); - // Close the overlay - $('#cookiesdirective').animate(opts['out'],1000,function() { - // Remove the elements from the DOM and reload page - $('#cookiesdirective').remove(); - location.reload(true); - }); - } else { - // We need the box checked we want "explicit consent", display message - $('#epdnotick').css('display', 'block'); - } - }); - } else { - // Implied consent, just a button to close it - $('#impliedsubmit').click(function() { - // Set a cookie to prevent this being displayed again - setCookie('cookiesDirective',1,365); - // Close the overlay - $('#cookiesdirective').animate(opts['out'],1000,function() { - // Remove the elements from the DOM and reload page - $('#cookiesdirective').remove(); - }); - }); - } - - // Set a timer to remove the warning after 'settings.duration' seconds - setTimeout(function(){ - $('#cookiesdirective').animate({ - opacity:'0' - },2000, function(){ - $('#cookiesdirective').css(dp,'-300px'); - }); - }, settings.duration * 1000); - }); - } -})(jQuery); +/* Cookies Directive - The rewrite. Now a jQuery plugin + * Version: 2.0.1 + * Author: Ollie Phillips test + * 24 October 2013 + */ + +;(function($) { + $.cookiesDirective = function(options) { + + // Default Cookies Directive Settings + var settings = $.extend({ + //Options + explicitConsent: true, + position: 'top', + duration: 10, + limit: 0, + message: null, + cookieScripts: null, + privacyPolicyUri: 'privacy.html', + inlineAction: false, + scriptWrapper: function(){}, + // Styling + fontFamily: 'helvetica', + fontColor: '#FFFFFF', + fontSize: '13px', + backgroundColor: '#000000', + backgroundOpacity: '80', + linkColor: '#CA0000', + // Messages + multipleCookieScriptBeginningLabel: ' We use ', + and: ' and ', + multipleCookieScriptEndLabel: ' scripts, which all set cookies. ', + singleCookieScriptBeginningLabel: ' We use a ', + singleCookieScriptEndLabel: ' script which sets cookies.', + explicitCookieDeletionWarning: 'You may delete and block all cookies from this site, but parts of the site will not work.', + explicitFindOutMore: 'To find out more about cookies on this website, see our', + privacyPolicyLinkText: ' privacy policy', + explicitCheckboxLabel: 'You must tick the "I accept cookies from this site" box to accept', + explicitCookieAcceptanceLabel: 'I accept cookies from this site', + explicitCookieAcceptButtonText: 'Continue', + impliedDisclosureText: ' More details can be found in our', + impliedSubmitText: 'Do not show this message again', + }, options); + + // Perform consent checks + if(!getCookie('cookiesDirective')) { + if(settings.limit > 0) { + // Display limit in force, record the view + if(!getCookie('cookiesDisclosureCount')) { + setCookie('cookiesDisclosureCount',1,1); + } else { + var disclosureCount = getCookie('cookiesDisclosureCount'); + disclosureCount ++; + setCookie('cookiesDisclosureCount',disclosureCount,1); + } + + // Have we reached the display limit, if not make disclosure + if(settings.limit >= getCookie('cookiesDisclosureCount')) { + disclosure(settings); + } + } else { + // No display limit + disclosure(settings); + } + + // If we don't require explicit consent, load up our script wrapping function + if(!settings.explicitConsent) { + settings.scriptWrapper.call(); + } + } else { + // Cookies accepted, load script wrapping function + settings.scriptWrapper.call(); + } + }; + + // Used to load external javascript files into the DOM + $.cookiesDirective.loadScript = function(options) { + var settings = $.extend({ + uri: '', + appendTo: 'body' + }, options); + + var elementId = String(settings.appendTo); + var sA = document.createElement("script"); + sA.src = settings.uri; + sA.type = "text/javascript"; + sA.onload = sA.onreadystatechange = function() { + if ((!sA.readyState || sA.readyState == "loaded" || sA.readyState == "complete")) { + return; + } + } + switch(settings.appendTo) { + case 'head': + $('head').append(sA); + break; + case 'body': + $('body').append(sA); + break; + default: + $('#' + elementId).append(sA); + } + } + + // Helper scripts + // Get cookie + var getCookie = function(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for(var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==' ') c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; + } + + // Set cookie + var setCookie = function(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } + else var expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; + } + + // Detect IE < 9 + var checkIE = function(){ + var version; + if (navigator.appName == 'Microsoft Internet Explorer') { + var ua = navigator.userAgent; + var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); + if (re.exec(ua) != null) { + version = parseFloat(RegExp.$1); + } + if (version <= 8.0) { + return true; + } else { + if(version == 9.0) { + if(document.compatMode == "BackCompat") { + // IE9 in quirks mode won't run the script properly, set to emulate IE8 + var mA = document.createElement("meta"); + mA.content = "IE=EmulateIE8"; + document.getElementsByTagName('head')[0].appendChild(mA); + return true; + } else { + return false; + } + } + return false; + } + } else { + return false; + } + } + + // Disclosure routines + var disclosure = function(options) { + var settings = options; + settings.css = 'fixed'; + + // IE 9 and lower has issues with position:fixed, either out the box or in compatibility mode - fix that + if(checkIE()) { + settings.position = 'top'; + settings.css = 'absolute'; + } + + // Any cookie setting scripts to disclose + var scriptsDisclosure = ''; + if (settings.cookieScripts) { + var scripts = settings.cookieScripts.split(','); + var scriptsCount = scripts.length; + var scriptDisclosureTxt = ''; + if(scriptsCount>1) { + for(var t=0; t < scriptsCount - 1; t++) { + scriptDisclosureTxt += scripts[t] + ', '; + } + + scriptsDisclosure = settings.multipleCookieScriptBeginningLabel + scriptDisclosureTxt.substring(0, scriptDisclosureTxt.length - 2) + settings.and + scripts[scriptsCount - 1] + settings.multipleCookieScriptEndLabel; + } else { + scriptsDisclosure = setting.singleCookieScriptBeginningLabel + scripts[0] + settings.singleCookieScriptEndLabel; + } + } + + // Create overlay, vary the disclosure based on explicit/implied consent + // Set our disclosure/message if one not supplied + var html = ''; + html += '
'; + html += '
'; + html += '
'; + + if(!settings.message) { + if(settings.explicitConsent) { + // Explicit consent message + settings.message = 'This site uses cookies. Some of the cookies we '; + settings.message += 'use are essential for parts of the site to operate and have already been set.'; + } else { + // Implied consent message + settings.message = 'We have placed cookies on your computer to help make this website better.'; + } + } + html += settings.message; + + // Build the rest of the disclosure for implied and explicit consent + if(settings.explicitConsent) { + // Explicit consent disclosure + html += scriptsDisclosure + settings.explicitCookieDeletionWarning; + html += settings.explicitFindOutMore + ''+ settings.privacyPolicyLinkText +'.'; + html += '' + html += '
' + settings.explicitCookieAcceptanceLabel + ' '; + html += '
'; + + } else { + // Implied consent disclosure + html += scriptsDisclosure + settings.impliedDisclosureText + ' ' + settings.privacyPolicyLinkText + '.'; + html += '
'; + } + html += '
'; + $('body').append(html); + + // Serve the disclosure, and be smarter about branching + var dp = settings.position.toLowerCase(); + if(dp != 'top' && dp!= 'bottom') { + dp = 'top'; + } + var opts = new Array(); + if(dp == 'top') { + opts['in'] = {'top':'0'}; + opts['out'] = {'top':'-300'}; + } else { + opts['in'] = {'bottom':'0'}; + opts['out'] = {'bottom':'-300'}; + } + + // Start animation + $('#cookiesdirective').animate(opts['in'], 1000, function() { + // Set event handlers depending on type of disclosure + if(settings.explicitConsent) { + // Explicit, need to check a box and click a button + $('#explicitsubmit').click(function() { + if($('#epdagree').is(':checked')) { + // Set a cookie to prevent this being displayed again + setCookie('cookiesDirective',1,365); + // Close the overlay + $('#cookiesdirective').animate(opts['out'],1000,function() { + // Remove the elements from the DOM and reload page + $('#cookiesdirective').remove(); + location.reload(true); + }); + } else { + // We need the box checked we want "explicit consent", display message + $('#epdnotick').css('display', 'block'); + } + }); + } else { + // Implied consent, just a button to close it + $('#impliedsubmit').click(function() { + // Set a cookie to prevent this being displayed again + setCookie('cookiesDirective',1,365); + // Close the overlay + $('#cookiesdirective').animate(opts['out'],1000,function() { + // Remove the elements from the DOM and reload page + $('#cookiesdirective').remove(); + }); + }); + } + + // Set a timer to remove the warning after 'settings.duration' seconds + setTimeout(function(){ + $('#cookiesdirective').animate({ + opacity:'0' + },2000, function(){ + $('#cookiesdirective').css(dp,'-300px'); + }); + }, settings.duration * 1000); + }); + } +})(jQuery); diff --git a/cms/templates/cms_filelist_style_default.html b/cms/templates/cms_filelist_style_default.html index 010eeeb..3949b8f 100644 --- a/cms/templates/cms_filelist_style_default.html +++ b/cms/templates/cms_filelist_style_default.html @@ -1,18 +1,18 @@ - -

{TITLE}

- - -
- {FILENAME} ({FILEEXTENSION})
- {LABEL_FILESIZE} {FILESIZE} {FILESIZE_UNIT}
- {LABEL_UPLOAD_DATE} {FILECREATIONDATE}
- {FILEMETA_DESCRIPTION} -
- + +

{TITLE}

+ + +
+ {FILENAME} ({FILEEXTENSION})
+ {LABEL_FILESIZE} {FILESIZE} {FILESIZE_UNIT}
+ {LABEL_UPLOAD_DATE} {FILECREATIONDATE}
+ {FILEMETA_DESCRIPTION} +
+
\ No newline at end of file diff --git a/cms/cache/.gitignore b/cms/upload/.gitignore similarity index 63% rename from cms/cache/.gitignore rename to cms/upload/.gitignore index 86d0cb2..70825cd 100644 --- a/cms/cache/.gitignore +++ b/cms/upload/.gitignore @@ -1,4 +1,6 @@ # Ignore everything in this directory * # Except this file -!.gitignore \ No newline at end of file +!.gitignore +!/Flexslider +!/Gallery \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..d41d9be --- /dev/null +++ b/composer.json @@ -0,0 +1,26 @@ +{ + "name": "org.conlite/conlite", + "description": "ConLite vendor libs", + "license": "GPL-3.0-or-later", + "authors": [ + { + "name": "oldperl", + "email": "ortwin.pinke@php-backoffice.de" + } + ], + "require": { + "php": "^8.0", + "phpmailer/phpmailer": "v6.8.0", + "twig/twig": "^3.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.0", + "rector/rector": "^0.15" + }, + "autoload": { + "psr-4": { + "ConLite\\": "conlite/classes" + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..8ecd8e7 --- /dev/null +++ b/composer.lock @@ -0,0 +1,2067 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "e2e5a5a59b3e9cdbc2023d399f119469", + "packages": [ + { + "name": "phpmailer/phpmailer", + "version": "v6.8.0", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "df16b615e371d81fb79e506277faea67a1be18f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/df16b615e371d81fb79e506277faea67a1be18f1", + "reference": "df16b615e371d81fb79e506277faea67a1be18f1", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.7.1", + "yoast/phpunit-polyfills": "^1.0.4" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.0" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2023-03-06T14:43:22+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "twig/twig", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "5cf942bbab3df42afa918caeba947f1b690af64b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/5cf942bbab3df42afa918caeba947f1b690af64b", + "reference": "5cf942bbab3df42afa918caeba947f1b690af64b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-07-26T07:16:09+00:00" + } + ], + "packages-dev": [ + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" + }, + "time": "2023-03-05T19:49:14+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.10.14", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "d232901b09e67538e5c86a724be841bea5768a7c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d232901b09e67538e5c86a724be841bea5768a7c", + "reference": "d232901b09e67538e5c86a724be841bea5768a7c", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2023-04-19T13:47:27+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "884a0da7f9f46f28b2cb69134217fd810b793974" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/884a0da7f9f46f28b2cb69134217fd810b793974", + "reference": "884a0da7f9f46f28b2cb69134217fd810b793974", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-04-17T12:15:40+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/fd9329ab3368f59fe1fe808a189c51086bd4b6bd", + "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-10T16:53:14+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:46+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "6f0cd95be71add539f8fd2be25b2a4a29789000b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6f0cd95be71add539f8fd2be25b2a4a29789000b", + "reference": "6f0cd95be71add539f8fd2be25b2a4a29789000b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.0", + "sebastian/global-state": "^6.0", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.1.2" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-04-22T07:38:19+00:00" + }, + { + "name": "rector/rector", + "version": "0.15.25", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "015935c7ed9e48a4f5895ba974f337e20a263841" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/015935c7ed9e48a4f5895ba974f337e20a263841", + "reference": "015935c7ed9e48a4f5895ba974f337e20a263841", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.10.14" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.15-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/0.15.25" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2023-04-20T16:07:39+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:15+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/72f01e6586e0caf6af81297897bd112eb7e9627c", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:07:16+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:47+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-05-01T07:48:21+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-04-11T05:39:26+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:49+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "aab257c712de87b90194febd52e4d184551c2d44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44", + "reference": "aab257c712de87b90194febd52e4d184551c2d44", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:07:38+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:02+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/conlib/db_mysqli.inc b/conlib/db_mysqli.inc index 91c5ef6..5cfd720 100644 --- a/conlib/db_mysqli.inc +++ b/conlib/db_mysqli.inc @@ -92,6 +92,10 @@ class DB_Sql extends DB_Sql_Abstract { return null; } + // PHP 8.1 fix + $driver = new mysqli_driver(); + $driver->report_mode = MYSQLI_REPORT_OFF; + $dbh = mysqli_init(); //print_r($dbh); if (!$dbh) { @@ -123,7 +127,7 @@ class DB_Sql extends DB_Sql_Abstract { $aCon['socket'] = null; } if (!isset($aCon['flags'])) { - $aCon['flags'] = null; + $aCon['flags'] = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT; } if (!isset($aCon['database'])) { $aCon['database'] = null; @@ -134,10 +138,10 @@ class DB_Sql extends DB_Sql_Abstract { ); - if (isset($aCon['charset'])) { - @mysqli_set_charset($dbh, $aCon['charset']); + if (!empty($aCon['charset'])) { + mysqli_set_charset($dbh, $aCon['charset']); } else { - @mysqli_set_charset($dbh, 'utf8'); + mysqli_set_charset($dbh, 'utf8'); } //echo mysqli_character_set_name($dbh); @@ -326,30 +330,30 @@ class DB_Sql extends DB_Sql_Abstract { } /** - * @see DB_Sql_Abstract::_metaData() - * * Due to compatibility problems with Table we changed the behavior - * of metadata(); - * depending on $full, metadata returns the following values: - * - * - full is false (default): - * $result[]: - * [0]["table"] table name - * [0]["name"] field name - * [0]["type"] field type - * [0]["len"] field length - * [0]["flags"] field flags - * - * - full is true - * $result[]: - * ["num_fields"] number of metadata records - * [0]["table"] table name - * [0]["name"] field name - * [0]["type"] field type - * [0]["len"] field length - * [0]["flags"] field flags - * ["meta"][field name] index of field named "field name" - * This last one could be used if you have a field name, but no index. - * Test: if (isset($result['meta']['myfield'])) { ... + * @see DB_Sql_Abstract::_metaData() + * * Due to compatibility problems with Table we changed the behavior + * of metadata(); + * depending on $full, metadata returns the following values: + * + * - full is false (default): + * $result[]: + * [0]["table"] table name + * [0]["name"] field name + * [0]["type"] field type + * [0]["len"] field length + * [0]["flags"] field flags + * + * - full is true + * $result[]: + * ["num_fields"] number of metadata records + * [0]["table"] table name + * [0]["name"] field name + * [0]["type"] field type + * [0]["len"] field length + * [0]["flags"] field flags + * ["meta"][field name] index of field named "field name" + * This last one could be used if you have a field name, but no index. + * Test: if (isset($result['meta']['myfield'])) { ... */ protected function _metaData($table = '', $full = false) { $count = 0; @@ -392,7 +396,7 @@ class DB_Sql extends DB_Sql_Abstract { $count = 0; while ($finfo = $id->fetch_field()) { - //rint_r($finfo); + //rint_r($finfo); $res[$count]['table'] = $finfo->table; $res[$count]['name'] = $finfo->name; $res[$count]['type'] = $this->_aDataTypes[$finfo->type]; @@ -420,10 +424,13 @@ class DB_Sql extends DB_Sql_Abstract { * @see DB_Sql_Abstract::escape() */ public function escape($sString) { + if(is_null($sString)) { + $sString = ''; + } $sResult = ''; if (is_resource($this->Link_ID) || $this->connect()) { $sResult = mysqli_real_escape_string($this->Link_ID, $sString); - }; + } return $sResult; } @@ -440,7 +447,7 @@ class DB_Sql extends DB_Sql_Abstract { $return[$i]['table_name'] = $info[0]; $return[$i]['tablespace_name'] = $this->Database; $return[$i]['database'] = $this->Database; - $i ++; + $i++; } mysqli_free_result($h); diff --git a/conlib/local.php b/conlib/local.php index b15c158..b622ed6 100644 --- a/conlib/local.php +++ b/conlib/local.php @@ -41,6 +41,7 @@ if (!defined('CON_FRAMEWORK')) { * DB-class for all DB handling */ class DB_ConLite extends DB_Sql { + protected bool $NoRecord; /** * Constructor of database class. @@ -58,13 +59,13 @@ class DB_ConLite extends DB_Sql { * - $options['enableProfiling'] (bool) Optional, flag to enable profiling * @return void */ - public function __construct(array $options = array()) { + public function __construct(array $options = []) { global $cachemeta; parent::__construct($options); if (!is_array($cachemeta)) { - $cachemeta = array(); + $cachemeta = []; } // TODO check this out @@ -108,7 +109,7 @@ class DB_ConLite extends DB_Sql { */ public function copyResultToArray($sTable = '') { - $aValues = array(); + $aValues = []; $aMetadata = $this->metadata($sTable); @@ -131,17 +132,8 @@ class DB_ConLite extends DB_Sql { * * @deprecated since version 2.0.0, use DB_ConLite instead */ -class DB_Contenido extends DB_ConLite { - - /** - * - * @deprecated since version 2.0.0 - * @param array $options - */ - public function __construct(array $options = array()) { - parent::__construct($options); - } - +class DB_Contenido extends DB_ConLite +{ } class Contenido_CT_Sql extends CT_Sql { @@ -175,17 +167,12 @@ class Contenido_CT_Sql extends CT_Sql { * @param string $id The session id (hash) * @param string $name Name of the session * @param string $str The value to store - * @return bool */ - public function ac_store($id, $name, $str) { - switch ($this->encoding_mode) { - case 'slashes': - $str = addslashes($name . ':' . $str); - break; - case 'base64': - default: - $str = base64_encode($name . ':' . $str); - } + public function ac_store($id, $name, $str): bool { + $str = match ($this->encoding_mode) { + 'slashes' => addslashes($name . ':' . $str), + default => base64_encode($name . ':' . $str), + }; $name = addslashes($name); $now = date('YmdHis', time()); @@ -194,7 +181,7 @@ class Contenido_CT_Sql extends CT_Sql { "REPLACE INTO %s (sid, name, val, changed) VALUES ('%s', '%s', '%s', '%s')", $this->database_table, $id, $name, $str, $now ); - return ($this->db->query($iquery)) ? true : false; + return (bool) $this->db->query($iquery); } } @@ -279,14 +266,12 @@ class Contenido_CT_Shm extends CT_Shm { class Contenido_CT_Session extends CT_Session { public function __construct() { - $this->ac_start(array( + $this->ac_start([ 'namespace' => 'contenido_ct_session_ns', - 'session.hash_function' => '1', // use sha-1 function - 'session.hash_bits_per_character' => '5', // and set 5 character to achieve 32 chars -# 'session.save_path' => 'your path', -# 'session.name' => 'your session name', -# 'session.gc_maxlifetime' => 'your lifetime in seconds', - )); + 'session.hash_function' => '1', + // use sha-1 function + 'session.hash_bits_per_character' => '5', + ]); } } @@ -320,8 +305,8 @@ class Contenido_Session extends Session { } public function delete() { - $oCol = new InUseCollection(); - $oCol->removeSessionMarks($this->id); + $inUseCollection = new InUseCollection(); + $inUseCollection->removeSessionMarks($this->id); parent::delete(); } @@ -435,6 +420,8 @@ class Contenido_Challenge_Auth extends Auth { } public function auth_validatelogin() { + $pass = null; + $uid = null; global $username, $password, $challenge, $response, $timestamp; if ($password == '') { @@ -522,7 +509,7 @@ class Contenido_Challenge_Crypt_Auth extends Auth { public function auth_loglogin($uid) { global $cfg, $client, $lang, $auth, $sess, $saveLoginTime; - $perm = new Contenido_Perm(); + $contenidoPerm = new Contenido_Perm(); $timestamp = date('Y-m-d H:i:s'); $idcatart = '0'; @@ -539,7 +526,7 @@ class Contenido_Challenge_Crypt_Auth extends Auth { $iTmpClient = $this->db->f('idclient'); $iTmpLang = $this->db->f('idlang'); - if ($perm->have_perm_client_lang($iTmpClient, $iTmpLang)) { + if ($contenidoPerm->have_perm_client_lang($iTmpClient, $iTmpLang)) { $client = $iTmpClient; $lang = $iTmpLang; $bFound = true; @@ -564,7 +551,7 @@ class Contenido_Challenge_Crypt_Auth extends Auth { return; } - $idaction = $perm->getIDForAction('login'); + $idaction = $contenidoPerm->getIDForAction('login'); $lastentry = $this->db->nextid($cfg['tab']['actionlog']); $sql = "INSERT INTO @@ -584,9 +571,12 @@ class Contenido_Challenge_Crypt_Auth extends Auth { } public function auth_validatelogin() { + $uid = null; + $perm = null; + $pass = null; global $username, $password, $challenge, $response, $formtimestamp, $auth_handlers; - $gperm = array(); + $gperm = []; if ($password == '') { return false; @@ -621,11 +611,9 @@ class Contenido_Challenge_Crypt_Auth extends Auth { $pass = $this->db->f('password'); ## Password is stored as a md5 hash $bInMaintenance = false; - if ($sMaintenanceMode == 'enabled') { - #sysadmins are allowed to login every time - if (!preg_match('/sysadmin/', $perm)) { - $bInMaintenance = true; - } + #sysadmins are allowed to login every time + if ($sMaintenanceMode == 'enabled' && !preg_match('/sysadmin/', $perm)) { + $bInMaintenance = true; } if ($bInMaintenance) { @@ -634,14 +622,11 @@ class Contenido_Challenge_Crypt_Auth extends Auth { unset($pass); } - if (is_array($auth_handlers) && !$bInMaintenance) { - if (array_key_exists($pass, $auth_handlers)) { - $success = call_user_func($auth_handlers[$pass], $username, $password); - - if ($success) { - $uid = md5($username); - $pass = md5($password); - } + if (is_array($auth_handlers) && !$bInMaintenance && array_key_exists($pass, $auth_handlers)) { + $success = call_user_func($auth_handlers[$pass], $username, $password); + if ($success) { + $uid = md5($username); + $pass = md5($password); } } } @@ -663,9 +648,7 @@ class Contenido_Challenge_Crypt_Auth extends Auth { $gperm[] = $this->db->f('perms'); } - if (is_array($gperm)) { - $perm = implode(',', $gperm); - } + $perm = implode(',', $gperm); if ($response == '') { ## True when JS is disabled if (md5($password) != $pass) { ## md5 hash for non-JavaScript browsers @@ -717,8 +700,6 @@ class Contenido_Frontend_Challenge_Crypt_Auth extends Auth { global $password; if ($password == '') { - /* Stay as nobody when an empty password is passed */ - $uid = $this->auth['uname'] = $this->auth['uid'] = 'nobody'; return false; } @@ -735,13 +716,18 @@ class Contenido_Frontend_Challenge_Crypt_Auth extends Auth { } public function auth_validatelogin() { + $perm = null; + $gperm = []; + $pass = null; global $username, $password, $challenge, $response, $auth_handlers, $client; $client = (int) $client; if (isset($username)) { - $this->auth['uname'] = $username; ## This provides access for 'loginform.ihtml' - } else if ($this->nobody) { ## provides for 'default login cancel' + $this->auth['uname'] = $username; + ## This provides access for 'loginform.ihtml' + } elseif ($this->nobody) { + ## provides for 'default login cancel' $uid = $this->auth['uname'] = $this->auth['uid'] = 'nobody'; return $uid; } @@ -767,13 +753,11 @@ class Contenido_Frontend_Challenge_Crypt_Auth extends Auth { $perm = $this->db->f('perms'); $pass = $this->db->f('password'); ## Password is stored as a md5 hash - if (is_array($auth_handlers)) { - if (array_key_exists($pass, $auth_handlers)) { - $success = call_user_func($auth_handlers[$pass], $username, $password); - if ($success) { - $uid = md5($username); - $pass = md5($password); - } + if (is_array($auth_handlers) && array_key_exists($pass, $auth_handlers)) { + $success = call_user_func($auth_handlers[$pass], $username, $password); + if ($success) { + $uid = md5($username); + $pass = md5($password); } } } @@ -795,9 +779,7 @@ class Contenido_Frontend_Challenge_Crypt_Auth extends Auth { $gperm[] = $this->db->f('perms'); } - if (is_array($gperm)) { - $perm = implode(',', $gperm); - } + $perm = implode(',', $gperm); } } @@ -836,16 +818,16 @@ function register_auth_handler($aHandlers) { global $auth_handlers; if (!is_array($auth_handlers)) { - $auth_handlers = array(); + $auth_handlers = []; } if (!is_array($aHandlers)) { - $aHandlers = Array($aHandlers); + $aHandlers = [$aHandlers]; } - foreach ($aHandlers as $sHandler) { - if (!in_array($sHandler, $auth_handlers)) { - $auth_handlers[md5($sHandler)] = $sHandler; + foreach ($aHandlers as $aHandler) { + if (!in_array($aHandler, $auth_handlers)) { + $auth_handlers[md5($aHandler)] = $aHandler; } } } diff --git a/conlib/perm.inc b/conlib/perm.inc index 9c41d13..50719b3 100644 --- a/conlib/perm.inc +++ b/conlib/perm.inc @@ -232,8 +232,8 @@ class Contenido_Perm { return true; } elseif ($item_rights[$area] != "noright") { - $groupsForUser = $this->getGroupsForUser($auth->auth[uid]); - $groupsForUser[] = $auth->auth[uid]; + $groupsForUser = $this->getGroupsForUser($auth->auth['uid']); + $groupsForUser[] = $auth->auth['uid']; $tmp_userstring = implode("','", $groupsForUser); @@ -596,8 +596,8 @@ class Contenido_Perm { } } elseif ($item_rights[$value] != "noright") { - $groupsForUser = $this->getGroupsForUser($auth->auth[uid]); - $groupsForUser[] = $auth->auth[uid]; + $groupsForUser = $this->getGroupsForUser($auth->auth['uid']); + $groupsForUser[] = $auth->auth['uid']; //else search for rights for this user in this area $sql = "SELECT diff --git a/conlib/prepend.php b/conlib/prepend.php index b64b5ee..44acf91 100644 --- a/conlib/prepend.php +++ b/conlib/prepend.php @@ -35,8 +35,8 @@ if (!defined('CON_FRAMEWORK')) { die('Illegal call'); } -$_PHPLIB = array(); -$_PHPLIB['libdir'] = str_replace ('\\', '/', dirname(__FILE__) . '/'); +$_PHPLIB = []; +$_PHPLIB['libdir'] = str_replace ('\\', '/', __DIR__ . '/'); global $cfg; diff --git a/conlib/session.inc b/conlib/session.inc index a6b6a14..bbecd6a 100644 --- a/conlib/session.inc +++ b/conlib/session.inc @@ -318,12 +318,12 @@ class cSession { break; case "object": ## $$var is an object. Enumerate the slots and serialize them. - eval("\$k = \$${var}->classname; \$l = reset(\$${var}->persistent_slots);"); + eval("\$k = \${$var}->classname; \$l = reset(\${$var}->persistent_slots);"); $str.="\$$var = new $k; "; while ($l) { ## Structural recursion. $this->serialize($var . "->" . $l, $str); - eval("\$l = next(\$${var}->persistent_slots);"); + eval("\$l = next(\${$var}->persistent_slots);"); } break; diff --git a/conlite/backend_search.php b/conlite/backend_search.php index b6d5c2c..e63390f 100644 --- a/conlite/backend_search.php +++ b/conlite/backend_search.php @@ -330,13 +330,9 @@ if( sizeof($_GET) == 0 && isset($_POST['save_search']) ) // STORED SEARCH HAS BEEN CALLED elseif( sizeof($_GET) > 0) { - $itemtypeReq = $_GET['itemtype']; - $itemidReq = $_GET['itemid']; - // Do we have the request parameters we need to fetch search values of stored search ? - if( (isset($itemtypeReq) && strlen($itemtypeReq)>0) && - (isset($itemidReq) && strlen($itemidReq)>0) - ) - { + $itemtypeReq = (isset($itemtypeReq))?$_GET['itemtype']:''; + $itemidReq = (isset($itemidReq))?$_GET['itemid']:''; + if(strlen($itemtypeReq) > 0 && strlen($itemidReq) > 0) { $searchResults = getSearchResults($itemidReq, $itemtypeReq); $sSearchStr_tmp = $searchResults[$save_title]; $iSearchID_tmp = $searchResults[$save_id]; @@ -403,13 +399,13 @@ if ($iSearchID_tmp > 0) { } // Date if ($sSearchStrDateType_tmp != 'n/a') { - if (($sSearchStrDateFromDay_tmp > 0) && ($sSearchStrDateFromMonth_tmp > 0) && ($sSearchStrDateFromYear_tmp > 0)) { + if (!empty($sSearchStrDateFromDay_tmp) && !empty($sSearchStrDateFromMonth_tmp) && !empty($sSearchStrDateFromYear_tmp)) { $sSearchStrDateFrom = $sSearchStrDateFromYear_tmp.'-'.$sSearchStrDateFromMonth_tmp.'-'.$sSearchStrDateFromDay_tmp.' 00:00:00'; } else { $sSearchStrDateFrom = ''; } - if (($sSearchStrDateToDay_tmp > 0) && ($sSearchStrDateToMonth_tmp > 0) && ($sSearchStrDateToYear_tmp > 0)) { + if (!empty($sSearchStrDateToDay_tmp) && !empty($sSearchStrDateToMonth_tmp) && !empty($sSearchStrDateToYear_tmp)) { $sSearchStrDateTo = $sSearchStrDateToYear_tmp.'-'.$sSearchStrDateToMonth_tmp.'-'.$sSearchStrDateToDay_tmp.' 23:59:59'; } else { $sSearchStrDateTo = ''; @@ -559,8 +555,8 @@ if (empty($where) || $iAffectedRows <= 0) { #Check rights per cat if (!$check_rights) { //hotfix timo trautmann 2008-12-10 also check rights in associated groups - $aGroupsForUser = $perm->getGroupsForUser($auth->auth[uid]); - $aGroupsForUser[] = $auth->auth[uid]; + $aGroupsForUser = $perm->getGroupsForUser($auth->auth['uid']); + $aGroupsForUser[] = $auth->auth['uid']; $sTmpUserString = implode("','", $aGroupsForUser); #Check if any rights are applied to current user or his groups @@ -623,7 +619,9 @@ if (empty($where) || $iAffectedRows <= 0) { // fuer den ersten gefundenen Artikel die Werte fuer CategoryID und TemplateID merken if ($i == 0) { $iIDCat = $idcat; - $iIDTpl = $idtpl; + if(!empty($idtpl)) { + $iIDTpl = $idtpl; + } } /* Funktion zum umwandeln in Startartikel/normale Artikel*/ @@ -637,8 +635,10 @@ if (empty($where) || $iAffectedRows <= 0) { } } else { if( $startidartlang == $idartlang ) { + $sFlagTitle = i18n('Flag as normal article'); $makeStartarticle = "\"{$sFlagTitle}\""; } else { + $sFlagTitle = i18n('Flag as start article'); $makeStartarticle = "\"{$sFlagTitle}\""; } } @@ -703,7 +703,7 @@ if (empty($where) || $iAffectedRows <= 0) { } if ($perm->have_perm_area_action_item("con", "con_deleteart",$idcat)) { - $delete = "
$db->f('title')", "deleteArticle($idart,$idcat)")\" title=\"$sDeleteArticle\">\"$sDeleteArticle\"
"; + $delete = "
".$db->f('title')."", "deleteArticle($idart,$idcat)")\" title=\"$sDeleteArticle\">\"$sDeleteArticle\"
"; }else { $delete = ""; } @@ -717,8 +717,6 @@ if (empty($where) || $iAffectedRows <= 0) { $sTemplateName \"$sReminder\" - $properties - $tplconfig $duplicate $delete @@ -746,7 +744,7 @@ if (empty($where) || $iAffectedRows <= 0) { # Save Search Parameters ########################### -if($bHit && sizeof($_GET) == 0 && isset($_POST) ) { +if(!empty($bHit) && sizeof($_GET) == 0 && isset($_POST) ) { // Build form with hidden fields that contain all search parameters to be stored using generic db $searchForm = '