From 7040b1b8e5fcc27f23297fefecaaf879fffc76f8 Mon Sep 17 00:00:00 2001 From: James Shiffer Date: Sat, 14 May 2022 16:44:50 -0700 Subject: [PATCH] Fembooru changes --- composer.json | 25 +- composer.lock | 1636 +-------------------------- core/basepage.php | 1 - core/imageboard/image.php | 21 + ext/home/counters/femcounter/0.png | Bin 0 -> 9419 bytes ext/home/counters/femcounter/1.png | Bin 0 -> 11766 bytes ext/home/counters/femcounter/2.png | Bin 0 -> 7766 bytes ext/home/counters/femcounter/3.png | Bin 0 -> 8886 bytes ext/home/main.php | 48 +- ext/home/style.css | 2 +- ext/home/vga.ttf | Bin 0 -> 19028 bytes themes/rule34v2/header.inc | 63 +- themes/rule34v2/home.theme.php | 15 +- themes/rule34v2/page.class.php | 14 +- themes/rule34v2/rule34_logo_top.png | Bin 17886 -> 0 bytes themes/rule34v2/upload.theme.php | 10 +- 16 files changed, 167 insertions(+), 1668 deletions(-) create mode 100644 ext/home/counters/femcounter/0.png create mode 100644 ext/home/counters/femcounter/1.png create mode 100644 ext/home/counters/femcounter/2.png create mode 100644 ext/home/counters/femcounter/3.png create mode 100644 ext/home/vga.ttf delete mode 100644 themes/rule34v2/rule34_logo_top.png diff --git a/composer.json b/composer.json index 2dc778bb..803fda77 100644 --- a/composer.json +++ b/composer.json @@ -6,10 +6,6 @@ "minimum-stability" : "dev", "repositories" : [ - { - "type": "composer", - "url": "https://asset-packagist.org" - }, { "type" : "package", "package" : { @@ -25,18 +21,19 @@ ], "require" : { - "php" : ">=7.3", + "php" : "^7.3", "ext-pdo": "*", "ext-json": "*", + "ext-fileinfo": "*", "flexihash/flexihash" : "^2.0.0", "ifixit/php-akismet" : "1.*", "google/recaptcha" : "~1.1", "dapphp/securimage" : "3.6.*", - "shish/eventtracer-php" : "^1.0.0", - "shish/ffsphp" : "0.0.*", - "shish/microcrud" : "^1.0.0", - "shish/microhtml" : "^1.0.0", + "shish/eventtracer-php" : "^2.0.0", + "shish/ffsphp" : "^1.0.0", + "shish/microcrud" : "^2.0.0", + "shish/microhtml" : "^2.0.0", "enshrined/svg-sanitize" : "0.13.*", "bower-asset/jquery" : "1.12.*", @@ -46,8 +43,7 @@ }, "require-dev" : { - "phpunit/phpunit" : "8.*" - }, +}, "suggest": { "ext-memcache": "memcache caching", @@ -62,5 +58,10 @@ "ext-zlib": "anti-spam", "ext-xml": "some extensions", "ext-gd": "GD-based thumbnailing" - } + },"replace": { + "bower-asset/jquery": ">=1.11.0", + "bower-asset/inputmask": ">=3.2.0", + "bower-asset/punycode": ">=1.3.0", + "bower-asset/yii2-pjax": ">=2.0.0" } +} diff --git a/composer.lock b/composer.lock index 90687fec..c5c76a4c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,26 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b29c81be8da841653840750829153dda", + "content-hash": "ca096500833679c5fa819eb5cfbd1d80", "packages": [ - { - "name": "bower-asset/jquery", - "version": "1.12.4", - "source": { - "type": "git", - "url": "https://github.com/jquery/jquery-dist.git", - "reference": "5e89585e0121e72ff47de177c5ef604f3089a53d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/5e89585e0121e72ff47de177c5ef604f3089a53d", - "reference": "5e89585e0121e72ff47de177c5ef604f3089a53d" - }, - "type": "bower-asset", - "license": [ - "MIT" - ] - }, { "name": "bower-asset/jquery-timeago", "version": "v1.5.4", @@ -83,16 +65,16 @@ }, { "name": "dapphp/securimage", - "version": "3.6.7", + "version": "3.6.8", "source": { "type": "git", "url": "https://github.com/dapphp/securimage.git", - "reference": "1ecb884797c66e01a875c058def46c85aecea45b" + "reference": "5fc5953c4ffba1eb214cc83100672f238c184ca4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dapphp/securimage/zipball/1ecb884797c66e01a875c058def46c85aecea45b", - "reference": "1ecb884797c66e01a875c058def46c85aecea45b", + "url": "https://api.github.com/repos/dapphp/securimage/zipball/5fc5953c4ffba1eb214cc83100672f238c184ca4", + "reference": "5fc5953c4ffba1eb214cc83100672f238c184ca4", "shasum": "" }, "require": { @@ -128,7 +110,7 @@ "captcha", "security" ], - "time": "2018-03-09T06:07:41+00:00" + "time": "2020-05-30T09:43:22+00:00" }, { "name": "enshrined/svg-sanitize", @@ -230,12 +212,12 @@ "source": { "type": "git", "url": "https://github.com/google/recaptcha.git", - "reference": "2ccff6a4fde9a975b70975567c2793bdf72d3085" + "reference": "79ccf652575e138d51742d04e78a5adbb9892f9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/recaptcha/zipball/2ccff6a4fde9a975b70975567c2793bdf72d3085", - "reference": "2ccff6a4fde9a975b70975567c2793bdf72d3085", + "url": "https://api.github.com/repos/google/recaptcha/zipball/79ccf652575e138d51742d04e78a5adbb9892f9d", + "reference": "79ccf652575e138d51742d04e78a5adbb9892f9d", "shasum": "" }, "require": { @@ -269,7 +251,7 @@ "recaptcha", "spam" ], - "time": "2019-09-10T21:42:39+00:00" + "time": "2020-05-21T08:56:25+00:00" }, { "name": "ifixit/php-akismet", @@ -283,24 +265,24 @@ }, { "name": "shish/eventtracer-php", - "version": "v1.0.0", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/shish/eventtracer-php.git", - "reference": "e7816dbaa155d9552ee4e5721be799d932518a84" + "reference": "0328454c58d240667f004f3efd863b8ef521ba2a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shish/eventtracer-php/zipball/e7816dbaa155d9552ee4e5721be799d932518a84", - "reference": "e7816dbaa155d9552ee4e5721be799d932518a84", + "url": "https://api.github.com/repos/shish/eventtracer-php/zipball/0328454c58d240667f004f3efd863b8ef521ba2a", + "reference": "0328454c58d240667f004f3efd863b8ef521ba2a", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.2" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "^8" + "phpunit/phpunit": "^9.0" }, "type": "library", "autoload": { @@ -322,27 +304,27 @@ ], "description": "An API to write JSON traces as used by the Chrome Trace Viewer", "homepage": "https://github.com/shish/eventtracer-php", - "time": "2020-03-26T14:11:54+00:00" + "time": "2020-09-20T11:46:44+00:00" }, { "name": "shish/ffsphp", - "version": "v0.0.2", + "version": "v1.0.2", "source": { "type": "git", "url": "https://github.com/shish/ffsphp.git", - "reference": "16c98d57c80bb4848f20253c8c1e5fe7f6c5823f" + "reference": "82d45b2691da11c82a28f85b07752334a06b8a8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shish/ffsphp/zipball/16c98d57c80bb4848f20253c8c1e5fe7f6c5823f", - "reference": "16c98d57c80bb4848f20253c8c1e5fe7f6c5823f", + "url": "https://api.github.com/repos/shish/ffsphp/zipball/82d45b2691da11c82a28f85b07752334a06b8a8e", + "reference": "82d45b2691da11c82a28f85b07752334a06b8a8e", "shasum": "" }, "require": { - "php": ">=7.2" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "8.*" + "phpunit/phpunit": "^9.0" }, "type": "library", "autoload": { @@ -364,30 +346,30 @@ ], "description": "A collection of workarounds for stupid PHP things", "homepage": "https://github.com/shish/ffsphp", - "time": "2019-11-29T12:00:09+00:00" + "time": "2020-09-20T13:15:53+00:00" }, { "name": "shish/microcrud", - "version": "v1.0.0", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/shish/microcrud.git", - "reference": "60d501a7b21d88652af40bc0ddd964153bc16697" + "reference": "1d55c02c405fc75ad6a0e952e9333552bef492f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shish/microcrud/zipball/60d501a7b21d88652af40bc0ddd964153bc16697", - "reference": "60d501a7b21d88652af40bc0ddd964153bc16697", + "url": "https://api.github.com/repos/shish/microcrud/zipball/1d55c02c405fc75ad6a0e952e9333552bef492f0", + "reference": "1d55c02c405fc75ad6a0e952e9333552bef492f0", "shasum": "" }, "require": { "ext-pdo": "*", - "php": ">=7.2", - "shish/ffsphp": "0.0.*", - "shish/microhtml": "^1.0.0" + "php": "^7.3", + "shish/ffsphp": "^1.0", + "shish/microhtml": "^2.0.2" }, "require-dev": { - "phpunit/phpunit": "8.*" + "phpunit/phpunit": "^9.0" }, "type": "library", "autoload": { @@ -413,27 +395,27 @@ "crud", "generator" ], - "time": "2020-03-18T17:19:10+00:00" + "time": "2020-09-20T13:10:42+00:00" }, { "name": "shish/microhtml", - "version": "v1.0.2", + "version": "v2.0.2", "source": { "type": "git", "url": "https://github.com/shish/microhtml.git", - "reference": "b942fe1da33cd8889252290469ce3ed2ea329491" + "reference": "d5c393d5a47bb3b3febdfde9ebf6e91cb9b41947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shish/microhtml/zipball/b942fe1da33cd8889252290469ce3ed2ea329491", - "reference": "b942fe1da33cd8889252290469ce3ed2ea329491", + "url": "https://api.github.com/repos/shish/microhtml/zipball/d5c393d5a47bb3b3febdfde9ebf6e91cb9b41947", + "reference": "d5c393d5a47bb3b3febdfde9ebf6e91cb9b41947", "shasum": "" }, "require": { - "php": ">=7.2" + "php": "^7.3" }, "require-dev": { - "phpunit/phpunit": "8.*" + "phpunit/phpunit": "^9.0" }, "type": "library", "autoload": { @@ -459,1550 +441,20 @@ "generator", "html" ], - "time": "2019-12-09T14:15:35+00:00" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "6a1471ddbf2f448b35f3a8e390c903435e6dd5de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/6a1471ddbf2f448b35f3a8e390c903435e6dd5de", - "reference": "6a1471ddbf2f448b35f3a8e390c903435e6dd5de", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2019-12-23T19:18:31+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "a491d65139e2411c75704e871dd02bdddf5a4bdc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/a491d65139e2411c75704e871dd02bdddf5a4bdc", - "reference": "a491d65139e2411c75704e871dd02bdddf5a4bdc", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "time": "2020-03-12T21:49:07+00:00" - }, - { - "name": "phar-io/manifest", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "3d94e3b6eb309e921a100a4992f72314299bb03f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/3d94e3b6eb309e921a100a4992f72314299bb03f", - "reference": "3d94e3b6eb309e921a100a4992f72314299bb03f", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^2.0", - "php": "^7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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)", - "time": "2019-12-29T10:29:09+00:00" - }, - { - "name": "phar-io/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.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", - "time": "2018-07-08T19:19:57+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "b0843c8cbcc2dc5eda5158e583c7199a5e44c86d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/b0843c8cbcc2dc5eda5158e583c7199a5e44c86d", - "reference": "b0843c8cbcc2dc5eda5158e583c7199a5e44c86d", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2019-12-20T12:45:35+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", - "shasum": "" - }, - "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" - }, - "require-dev": { - "doctrine/instantiator": "^1", - "mockery/mockery": "^1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-02-22T12:28:44+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "d6b5291650d058fe1162a54fee9d923de19bcda2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/d6b5291650d058fe1162a54fee9d923de19bcda2", - "reference": "d6b5291650d058fe1162a54fee9d923de19bcda2", - "shasum": "" - }, - "require": { - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "^7.2", - "mockery/mockery": "~1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-03-06T17:11:40+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2020-03-05T15:02:03+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "7.0.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", - "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" - }, - "require-dev": { - "phpunit/phpunit": "^8.2.2" - }, - "suggest": { - "ext-xdebug": "^2.7.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.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 provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2019-11-20T13:55:58+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" - }, - "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": "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" - ], - "time": "2018-09-13T20:33:42+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "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" - ], - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "2.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.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": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2019-06-07T04:22:29+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2019-09-17T06:23:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "8.5.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fb668be523b1975b0fb9ee22afbfa8f5acdb840e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fb668be523b1975b0fb9ee22afbfa8f5acdb840e", - "reference": "fb668be523b1975b0fb9ee22afbfa8f5acdb840e", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2.0", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.9.1", - "phar-io/manifest": "^1.0.3", - "phar-io/version": "^2.0.1", - "php": "^7.2", - "phpspec/prophecy": "^1.8.1", - "phpunit/php-code-coverage": "^7.0.7", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.2", - "sebastian/exporter": "^3.1.1", - "sebastian/global-state": "^3.0.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", - "sebastian/version": "^2.0.1" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.5-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": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-03-25T06:16:24+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-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/", - "time": "2017-03-04T06:30:41+00:00" - }, - { - "name": "sebastian/comparator", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "shasum": "" - }, - "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2018-07-12T15:12:46+00:00" - }, - { - "name": "sebastian/diff", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "time": "2019-02-04T06:01:07+00:00" - }, - { - "name": "sebastian/environment", - "version": "4.2.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-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": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2019-11-20T08:46:58+00:00" - }, - { - "name": "sebastian/exporter", - "version": "3.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-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": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2019-09-14T09:02:43+00:00" - }, - { - "name": "sebastian/global-state", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", - "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", - "shasum": "" - }, - "require": { - "php": "^7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^8.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "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": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2019-02-01T05:30:01+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-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/", - "time": "2017-08-03T12:35:26+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-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/", - "time": "2017-03-29T09:07:27+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.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 a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" - }, - { - "name": "sebastian/type", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", - "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", - "shasum": "" - }, - "require": { - "php": "^7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "time": "2019-07-02T08:10:15+00:00" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "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": "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", - "time": "2016-10-03T07:35:21+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.15-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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" - ], - "time": "2020-02-27T09:26:54+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.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", - "time": "2019-06-13T22:48:21+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "vimeo/psalm": "<3.6.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2020-02-14T12:15:55+00:00" + "time": "2020-09-20T13:05:01+00:00" } ], + "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.3", + "php": "^7.3", "ext-pdo": "*", - "ext-json": "*" + "ext-json": "*", + "ext-fileinfo": "*" }, "platform-dev": [], "plugin-api-version": "1.1.0" diff --git a/core/basepage.php b/core/basepage.php index d92dafa4..52f5b06d 100644 --- a/core/basepage.php +++ b/core/basepage.php @@ -404,7 +404,6 @@ class BasePage $js_latest = $config_latest; $js_files = array_merge( [ - "vendor/bower-asset/jquery/dist/jquery.min.js", "vendor/bower-asset/jquery-timeago/jquery.timeago.js", "vendor/bower-asset/js-cookie/src/js.cookie.js", "ext/static_files/modernizr-3.3.1.custom.js", diff --git a/core/imageboard/image.php b/core/imageboard/image.php index 6b786472..9403093d 100644 --- a/core/imageboard/image.php +++ b/core/imageboard/image.php @@ -213,6 +213,27 @@ class Image ); } + /** + * Counts consecutive days of image uploads + */ + public static function count_upload_streak(): int + { + $now = date_create(); + $last_date = $now; + foreach (self::find_images_iterable() as $img) { + $next_date = date_create($img->posted); + if (date_diff($next_date, $last_date)->days > 0) { + break; + } + $last_date = $next_date; + } + if ($last_date === $now) { + return 0; + } + $diff_d = ($now->getTimestamp() - $last_date->getTimestamp()) / 86400; + return (int)ceil($diff_d) + 1; + } + /** * Count the number of image results for a given search * diff --git a/ext/home/counters/femcounter/0.png b/ext/home/counters/femcounter/0.png new file mode 100644 index 0000000000000000000000000000000000000000..3e385db9fad5ee666376f76668c56145536bdc40 GIT binary patch literal 9419 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 Ye~KpmPZTz!_W%F@07*qoM6N<$f*1o4kN^Mx literal 0 HcmV?d00001 diff --git a/ext/home/counters/femcounter/2.png b/ext/home/counters/femcounter/2.png new file mode 100644 index 0000000000000000000000000000000000000000..701d38198a49e18b288881f3e635ff34174cdb01 GIT binary patch literal 7766 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 literal 0 HcmV?d00001 diff --git a/ext/home/counters/femcounter/3.png b/ext/home/counters/femcounter/3.png new file mode 100644 index 0000000000000000000000000000000000000000..7363b2b6d0660c137490092f41011e353c922b3a GIT binary patch literal 8886 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 } + private function addCountToBlankImage($charId, $digit) + { + $font = realpath('ext/home/vga.ttf'); + $file = "ext/home/counters/femcounter/$charId.png"; + $img = imagecreatefrompng($file); + $black = imagecolorallocate($img, 0, 0, 0); + $x = $this->femDimensions[$charId][0]; + $y = $this->femDimensions[$charId][1]; + imagettftext($img, 20, 0, $x, $y + 20, $black, $font, $digit); + imagetruecolortopalette($img, true, 16); + imagesavealpha($img, true); + imagecolortransparent($img, imagecolorat($img, 0, 0)); + ob_start(); + imagegif($img); + $image_data = ob_get_contents(); + ob_end_clean(); + $data = base64_encode($image_data); + imagedestroy($img); + return $data; + } + private function get_body() { @@ -48,14 +83,23 @@ class Home extends Extension $counter_dir = $config->get_string('home_counter', 'default'); $total = Image::count_images(); + $streak = Image::count_upload_streak(); $strtotal = "$total"; $num_comma = number_format($total); + $streak_comma = number_format($streak); $counter_text = ""; $length = strlen($strtotal); for ($n=0; $n<$length; $n++) { $cur = $strtotal[$n]; - $counter_text .= " $cur "; + if ($counter_dir === 'femcounter') { + $charId = $n % 4; + $base64url = $this->addCountToBlankImage($charId, $cur); + $tag = $this->femTags[$charId]; + $counter_text .= " $cur "; + } else { + $counter_text .= " $cur "; + } } // get the homelinks and process them @@ -74,6 +118,6 @@ class Home extends Extension $main_links = format_text($main_links); $main_text = $config->get_string('home_text', ''); - return $this->theme->build_body($sitename, $main_links, $main_text, $contact_link, $num_comma, $counter_text); + return $this->theme->build_body($sitename, $main_links, $main_text, $contact_link, $num_comma, $counter_text, $streak_comma); } } diff --git a/ext/home/style.css b/ext/home/style.css index 234f512d..66b6dbb8 100644 --- a/ext/home/style.css +++ b/ext/home/style.css @@ -5,7 +5,7 @@ div#front-page div#links a {margin: 0 0.5em;} div#front-page li {list-style-type: none; margin: 0;} @media (max-width: 800px) { div#front-page h1 {font-size: 3em; margin-top: 0.5em; margin-bottom: 0.5em;} - #counter {display: none;} + /*#counter {display: none;}*/ } div#front-page > #search > form { margin: 0 auto; } diff --git a/ext/home/vga.ttf b/ext/home/vga.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0bb46c4508977a9e712b01559f57ce032afff753 GIT binary patch literal 19028 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 R2R8OKZ|Yxr)Un4d_$#Dl%HIG0 literal 0 HcmV?d00001 diff --git a/themes/rule34v2/header.inc b/themes/rule34v2/header.inc index cfd26bab..723e9d1d 100644 --- a/themes/rule34v2/header.inc +++ b/themes/rule34v2/header.inc @@ -1,7 +1,7 @@ @@ -11,7 +11,7 @@  Sidebar 
@@ -28,37 +28,27 @@ diff --git a/themes/rule34v2/home.theme.php b/themes/rule34v2/home.theme.php index 83604879..b6bcb860 100644 --- a/themes/rule34v2/home.theme.php +++ b/themes/rule34v2/home.theme.php @@ -15,6 +15,7 @@ class CustomHomeTheme extends HomeTheme + $hh @@ -36,12 +37,13 @@ EOD ); } - public function build_body(string $sitename, string $main_links, string $main_text, string $contact_link, $num_comma, string $counter_text) + public function build_body(string $sitename, string $main_links, string $main_text, string $contact_link, $num_comma, string $counter_text, string $streak_comma = "0") { $main_links_html = empty($main_links) ? "" : ""; $message_html = empty($main_text) ? "" : "
$main_text
"; $counter_html = empty($counter_text) ? "" : "
$counter_text
"; $contact_link = empty($contact_link) ? "" : "
Contact –"; + $streak_html = $streak_comma === "0" ? "" : "Upload streak: $streak_comma days 🔥 –"; $search_html = "