diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000..0faa952
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,52 @@
+# This file is - if you set up HUGE correctly - not needed.
+# But, for fallback reasons (if you don't route your vhost to /public), it will stay here.
+RewriteEngine on
+RewriteRule ^(.*) public/$1 [L]
+
+# Everything from is for browser caching and is totally optional
+
+# Deflate Compression by FileType
+
+ AddOutputFilterByType DEFLATE text/plain
+ AddOutputFilterByType DEFLATE text/html
+ AddOutputFilterByType DEFLATE text/xml
+ AddOutputFilterByType DEFLATE text/css
+ AddOutputFilterByType DEFLATE text/javascript
+ AddOutputFilterByType DEFLATE application/xml
+ AddOutputFilterByType DEFLATE application/xhtml+xml
+ AddOutputFilterByType DEFLATE application/rss+xml
+ AddOutputFilterByType DEFLATE application/atom_xml
+ AddOutputFilterByType DEFLATE application/javascript
+ AddOutputFilterByType DEFLATE application/x-javascript
+ AddOutputFilterByType DEFLATE application/x-shockwave-flash
+
+
+# Set browser caching to 1 month
+
+ ExpiresActive On
+ ExpiresByType text/css "access plus 1 month"
+ ExpiresByType text/javascript "access plus 1 month"
+ ExpiresByType text/html "access plus 1 month"
+ ExpiresByType application/javascript "access plus 1 month"
+ ExpiresByType image/gif "access plus 1 month"
+ ExpiresByType image/jpeg "access plus 1 month"
+ ExpiresByType image/png "access plus 1 month"
+ ExpiresByType image/x-icon "access plus 1 month"
+
+
+
+ # if you want to prevent your site from being embedded into other sites via an iframe (sometimes used for scam), then
+ # simply uncomment these lines below. you need to have apache rewrite headers activated, usually via
+ # "a2enmod rewrite headers" on the command line
+ #Header set X-Frame-Options Deny
+ #Header always append X-Frame-Options SAMEORIGIN
+
+ Header set Cache-Control "max-age=2592000, public"
+
+
+ Header set Cache-Control "max-age=604800, public"
+
+
+ Header set Cache-Control "max-age=216000, private"
+
+
\ No newline at end of file
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/copilot.data.migration.agent.xml b/.idea/copilot.data.migration.agent.xml
new file mode 100644
index 0000000..4ea72a9
--- /dev/null
+++ b/.idea/copilot.data.migration.agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.ask.xml b/.idea/copilot.data.migration.ask.xml
new file mode 100644
index 0000000..7ef04e2
--- /dev/null
+++ b/.idea/copilot.data.migration.ask.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.ask2agent.xml b/.idea/copilot.data.migration.ask2agent.xml
new file mode 100644
index 0000000..1f2ea11
--- /dev/null
+++ b/.idea/copilot.data.migration.ask2agent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copilot.data.migration.edit.xml b/.idea/copilot.data.migration.edit.xml
new file mode 100644
index 0000000..8648f94
--- /dev/null
+++ b/.idea/copilot.data.migration.edit.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/huge.iml b/.idea/huge.iml
new file mode 100644
index 0000000..7c57dc8
--- /dev/null
+++ b/.idea/huge.iml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..26e19fc
--- /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..b8c1523
--- /dev/null
+++ b/.idea/php.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml
new file mode 100644
index 0000000..af7d528
--- /dev/null
+++ b/.idea/phpunit.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..09a7b4e
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.scrutinizer.yml b/.scrutinizer.yml
new file mode 100644
index 0000000..f023049
--- /dev/null
+++ b/.scrutinizer.yml
@@ -0,0 +1,9 @@
+# This file just tells the wonderful code quality analyzer Scrutinizer (https://scrutinizer-ci.com/g/panique/huge/)
+# that we are using external services (Travis) to generate code coverage stats
+checks:
+ php:
+ code_rating: true
+ duplication: true
+# test coverage is commented out as this does not seem to work properly right now
+#tools:
+# external_code_coverage: true
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..3dccb0c
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,38 @@
+language: php
+
+php:
+ - 5.6
+ - 7.0
+ - 7.1
+ - 7.2
+ - 7.3
+ - 7.4
+
+# optional, define the environment, in this case useful to test stuff that only runs in development / production
+env:
+ global:
+ - APPLICATION_ENV=testing
+
+before_install:
+ - sudo apt-get update > /dev/null
+
+before_script:
+ - sudo apt-get install apache2
+ - sudo a2enmod rewrite
+ # configure apache virtual hosts, create vhost via travis-ci-apache file template
+ - sudo cp -f travis-ci-apache /etc/apache2/sites-available/default
+ - sudo sed -e "s?%TRAVIS_BUILD_DIR%?$(pwd)?g" --in-place /etc/apache2/sites-available/default
+ - sudo service apache2 restart
+ # composer
+ - composer self-update
+ - composer install --prefer-source --no-interaction
+ # go to tests folder
+ - cd tests
+
+# run unit tests, create result file
+script: ../vendor/bin/phpunit --configuration phpunit.xml --coverage-text --coverage-clover=coverage.clover
+
+# gets tools from Scrutinizer, uploads unit tests results to Scrutinizer (?)
+after_script:
+ - wget https://scrutinizer-ci.com/ocular.phar
+ - php ocular.phar code-coverage:upload --format=php-clover coverage.clover
diff --git a/README.md b/README.md
index 1c78838..afa4a04 100644
--- a/README.md
+++ b/README.md
@@ -1,632 +1,222 @@
-
+# HUGE – Installation und Setup
-# HUGE
+---
-[](https://scrutinizer-ci.com/g/panique/huge/?branch=master)
-[](https://codeclimate.com/github/panique/huge)
-[](https://www.codacy.com/app/panique/huge?utm_source=github.com&utm_medium=referral&utm_content=panique/huge&utm_campaign=Badge_Grade)
-[](https://travis-ci.org/panique/huge)
-[](https://www.versioneye.com/user/projects/54ca11fbde7924f81a000010)
-[](https://supporterhq.com/give/9guz00i6rep05k1mwxyquz30k)
+## Schnellstart
-Just a simple user authentication solution inside a super-simple framework skeleton that works out-of-the-box
-(and comes with an auto-installer), using the future-proof official bcrypt password hashing/salting implementation of
-PHP 5.5+, plus some nice features that will speed up the time from idea to first usable prototype application
-dramatically. Nothing more. This project has its focus on hardcore simplicity. Everything is as simple as possible,
-made for smaller projects, typical agency work and quick drafts. If you want to build massive corporate
-applications with all the features modern frameworks have, then have a look at [Laravel](http://laravel.com),
-[Symfony](http://symfony.com) or [Yii](http://www.yiiframework.com), but if you just want to quickly create something
-that just works, then this script might be interesting for you.
+- Voraussetzungen prüfen (siehe unten)
+- Abhängigkeiten installieren
+- Datenbank anlegen
+- Webserver auf `public/` zeigen lassen
+- Starten und testen
-HUGE's simple-as-possible architecture was inspired by several conference talks, slides and articles about huge
-applications that - surprisingly and intentionally - go back to the basics of programming, using procedural programming,
-static classes, extremely simple constructs, not-totally-DRY code etc. while keeping the code extremely readable
-([StackOverflow](http://www.dev-metal.com/architecture-stackoverflow/), Wikipedia, SoundCloud).
+Befehle (Beispiele):
-Some interesting Buzzwords in this context: [KISS](http://en.wikipedia.org/wiki/KISS_principle),
-[YAGNI](http://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it), [Feature Creep](https://en.wikipedia.org/wiki/Feature_creep),
-[Minimum viable product](https://en.wikipedia.org/wiki/Minimum_viable_product).
-
-#### HUGE has reached "soft End Of Life"
-
-To keep this project stable, secure, clean and minimal I've decided to reduce the development of HUGE to a
-minimum. *Don't worry, this is actually a good thing:* New features usually mean new bugs, lots of testing, fixes,
-incompatibilities, and for some people even hardcore update stress. As HUGE is a security-critical script new features
-are not as important as a stable and secure core, this is why people use it. This means:
-
-- HUGE will not get new features
-- but will be maintained, so it will get bugfixes, corrections etc for sure, maybe for years
-
-And to be honest, maintaining a framework for free in my rare free-time is also not what I want to do permanently. :)
-
-Finally a little note: The PHP world has evolved dramatically, we have excellent frameworks with awesome features and
-big professional teams behind, very well written documentations and large communities, so there's simply no reason
-to put much work into another framework. Instead, please commit to the popular frameworks, then your work will have
-much more impact and is used by much more people!
-
-Thanks to everybody around this project, have a wonderful time!
-XOXO,
-Chris
-
-#### Releases & development
-
-* stable [v3.1](https://github.com/panique/huge/releases/tag/v3.1),
-* public beta branch: [master](https://github.com/panique/huge)
-* public in-development branch (please commit new code here): [develop](https://github.com/panique/huge/tree/develop)
-
-#### Quick-Index
-
-+ [Features](#features)
-+ [Live-Demo](#live-demo)
-+ [Support](#support)
-+ [Follow the project](#follow)
-+ [License](#license)
-+ [Requirements](#requirements)
-+ [Auto-Installation](#auto-installation)
- - [Auto-Installation in Vagrant](#auto-installation-vagrant) (also useful for 100% reproducible installation of HUGE)
- - [Auto-Installation in Ubuntu 14.04 LTS server](#auto-installation-ubuntu)
-+ [Installation (Ubuntu 14.04 LTS)](#installation)
- - [Quick Installation](#quick-installation)
- - [Detailed Installation](#detailed-installation)
- - [NGINX setup](#nginx-setup)
- - [IIS setup](#iis-setup)
-+ [Documentation](#documentation)
- - [How to use the user roles](#user_roles)
- - [How to use the CSRF feature](#csrf)
-+ [Community-provided features & feature discussions](#community)
-+ [Future of the project, announcing soft EOL](#future)
-+ [Why is there no support forum anymore ?](#why-no-support-forum)
-+ [Zero tolerance for idiots, trolls and vandals](#zero-tolerance)
-+ [Contribute](#contribute)
-+ [Code-Quality scanner links](#code-quality)
-+ [Report a bug](#bug-report)
-
-### The History of HUGE
-
-Back in 2010/2011 there were no useful login solutions in the PHP world, at least not for non-experts. So I did the worst
-mistake every young developer does: Trying to build something by myself without having any clue about security basics.
-What made it even worse was: The web was (and is) full of totally broken tutorials about building user authentication
-systems, even the biggest companies in the world did this completely wrong (we are talking about SONY, LinkedIn and
-Adobe here), and also lots of major framework in all big programming languages (!) used totally outdated and insecure
-password saving technologies.
-
-However, in 2012 security expert [Anthony Ferrara](https://github.com/ircmaxell) published a [little PHP library](https://github.com/ircmaxell/password_compat),
-allowing extremely secure, modern and correct hashing of passwords in PHP 5.3 and 5.4, usable by every developer without any stress and without any knowledge
-about security internals. The script was so awesome that it was written into the core of PHP 5.5, it's the de-facto standard these days.
-
-When this came out I tried to use this naked library to build a fully working out-of-the-box login system for several private and commercial projects,
-and put the code on GitHub. Lots of people found this useful, contributed and bugfixed the project, made forks, smaller and larger versions.
-The result is this project.
-
-Please note: Now, in 2015, most major frameworks have excellent user authentication logic embedded by default. This was
-not the case years ago. So, from today's perspective it might be smarter to chose Laravel, Yii or Symfony for serious
-projects. But feel free to try out HUGE, the auto-installer will spin up a fully working installation within minutes and
-without any configuration.
-
-And why the name "HUGE" ? It's a nice combination to
-[TINY](https://github.com/panique/tiny),
-[MINI](https://github.com/panique/mini) and
-[MINI2](https://github.com/panique/mini2),
-[MINI3](https://github.com/panique/mini3),
-which are some of my other older projects. Super-minimal micro frameworks for extremely fast and simple development of simple websites.
-
-### Features
-* built with the official PHP password hashing functions, fitting the most modern password hashing/salting web standards
-* proper security features, like CSRF blocking (via form tokens), encryption of cookie contents etc.
-* users can register, login, logout (with username, email, password)
-* password-forget / reset
-* remember-me (login via cookie)
-* account verification via mail
-* captcha
-* failed-login-throttling
-* user profiles
-* account upgrade / downgrade
-* simple user types (type 1, type 2, admin)
-* supports local avatars and remote Gravatars
-* supports native mail and SMTP sending (via PHPMailer and other tools)
-* uses PDO for database access for sure, has nice DatabaseFactory (in case your project goes big)
-* uses URL rewriting ("beautiful URLs")
-* proper split of application and public files (requests only go into /public)
-* uses Composer to load external dependencies (PHPMailer, Captcha-Generator, etc.) for sure
-* fits PSR-0/1/2/4 coding guidelines
-* uses [Post-Redirect-Get pattern](https://en.wikipedia.org/wiki/Post/Redirect/Get) for nice application flow
-* masses of comments
-* is actively maintained and bug-fixed (however, no big new features as project slowly reaches End of Life)
-
-### Planned features
-
-* A real documentation (currently there's none, but the code is well commented)
-
-### Live-Demo
-
-See a [live demo of older 3.0 version here](http://104.131.8.128) and [the server's phpinfo() here](104.131.8.128/info.php).
-
-### Support the project
-
-There is a lot of work behind this project. I might save you hundreds, maybe thousands of hours of work (calculate that
-in developer costs). So when you are earning money by using HUGE, be fair and give something back to open-source.
-HUGE is totally free to private and commercial use.
-
-Support the project by renting a server at [DigitalOcean](https://www.digitalocean.com/?refcode=40d978532a20) or just tipping a coffee at BuyMeACoffee.com. Thanks! :)
-
-
-
-Also feel free to contribute to this project.
-
-### License
-
-Licensed under [MIT](http://www.opensource.org/licenses/mit-license.php).
-Totally free for private or commercial projects.
-
-### Requirements
-
-Make sure you know the basics of object-oriented programming and MVC, are able to use the command line and have
-used Composer before. This script is not for beginners.
-
-* **PHP 5.5+**
-* **MySQL 5** database (better use versions 5.5+ as very old versions have a [PDO injection bug](http://stackoverflow.com/q/134099/1114320)
-* installed PHP extensions: pdo, gd, openssl (the install guideline shows how to do)
-* installed tools on your server: git, curl, composer (the install guideline shows how to do)
-* for professional mail sending: an SMTP account (I use [SMTP2GO](http://www.smtp2go.com/?s=devmetal))
-* activated mod_rewrite on your server (the install guideline shows how to do)
-
-### Auto-Installations
-
-Yo, fully automatic. Why ? Because I always hated it to spend days trying to find out how to install a thing.
-This will save you masses of time and nerves. Donate a coffee if you like it.
-
-#### Auto-Installation (in Vagrant)
-
-If you are using Vagrant for your development, then simply
-
-1. Add the official Ubuntu 14.04 LTS box to your Vagrant: `vagrant box add ubuntu/trusty64`
-2. Move *Vagrantfile* and *bootstrap.sh* (from *_one-click-installation* folder) to a folder where you want to initialize your project.
-3. Do `vagrant up` in that folder.
-
-5 minutes later you'll have a fully installed HUGE inside Ubuntu 14.04 LTS. The full code will be auto-synced with
-the current folder. MySQL root password and the PHPMyAdmin root password are set to *12345678*. By default
-192.168.33.111 is the IP of your new box.
-
-#### Auto-Installation in a naked Ubuntu 14.04 LTS server
-
-Extremely simple installation in a fresh and naked typical Ubuntu 14.04 LTS server:
-
-Download the installer script
```bash
-wget https://raw.githubusercontent.com/panique/huge/master/_one-click-installation/bootstrap.sh
+# Composer installieren (macOS – über Homebrew)
+brew install composer
+
+# Abhängigkeiten holen (im Projektordner)
+composer install
+
+# Datenbank & Tabellen anlegen
+mysql -u root -p < application/_installation/01-create-database.sql
+mysql -u root -p < application/_installation/02-create-table-users.sql
+mysql -u root -p < application/_installation/03-create-table-notes.sql
+
+# Rechte für Avatare (je nach OS anpassen)
+# Ubuntu/Debian:
+sudo chown -R www-data:www-data public/avatars
+sudo chmod -R 775 public/avatars
+
+# macOS (Apache Standardnutzer _www):
+sudo chown -R _www:_www public/avatars
+sudo chmod -R 775 public/avatars
```
-Make it executable
+---
+
+## Voraussetzungen
+
+- PHP >= 5.5 (laut composer.json)
+- Composer
+- Apache 2.4 mit `mod_rewrite`
+- MySQL/MariaDB
+- PHP-Erweiterungen: PDO + pdo_mysql, OpenSSL, mbstring
+- Schreibrechte für `public/avatars/`
+
+---
+
+## Projekt beziehen
+
+- Repository klonen oder entpacken
+- In den Projektordner wechseln
+
+---
+
+## Abhängigkeiten installieren (Composer)
+
+- Im Projektordner ausführen:
+
```bash
-chmod +x bootstrap.sh
+composer install
```
-Run it! Give it some minutes to perform all the tasks. And yes, you can thank me later :)
-```bash
-sudo ./bootstrap.sh
-```
-### Installation
+---
-#### Quick guide:
+## Webserver konfigurieren (Apache)
-0. Make sure you have Apache, PHP, MySQL installed. [Tutorial](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/).
-1. Clone the repo to a folder on your server
-2. Activate mod_rewrite, route all traffic to application's /public folder. [Tutorial](http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/).
-3. Edit application/config: Set your database credentials
-4. Execute SQL statements from application/_installation to setup database tables
-5. [Install Composer](http://www.dev-metal.com/install-update-composer-windows-7-ubuntu-debian-centos/),
- run `Composer install` on application's root folder to install dependencies
-6. Make avatar folder (application/public/avatars) writable
-7. For proper email usage: Set SMTP credentials in config file, set EMAIL_USE_SMTP to true
+- DocumentRoot auf `.../huge/public` setzen
+- `AllowOverride All` aktivieren (damit `.htaccess` greift)
+- `mod_rewrite` aktivieren
+- Apache neu starten
-"Email does not work" ? See the troubleshooting below. TODO
+Minimalbeispiel VirtualHost:
-#### Detailed guide (Ubuntu 14.04 LTS):
-
-This is just a quick guideline for easy setup of a development environment!
-
-Make sure you have Apache, PHP 5.5+ and MySQL installed. [Tutorial here](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/).
-Nginx will work for sure too, but no install guidelines are available yet.
-
-Edit vhost to make clean URLs possible and route all traffic to /public folder of your project:
-```bash
-sudo nano /etc/apache2/sites-available/000-default.conf
-```
-
-and make the file look like
-```
+```apacheconf
- DocumentRoot "/var/www/html/public"
-
+ ServerName huge.local
+ DocumentRoot "/pfad/zu/huge/public"
+
+
AllowOverride All
Require all granted
+
+ SetEnv APPLICATION_ENV development
+ ErrorLog "${APACHE_LOG_DIR}/huge_error.log"
+ CustomLog "${APACHE_LOG_DIR}/huge_access.log" combined
```
-Enable mod_rewrite and restart apache.
+Hinweis: `.htaccess` leitet auf `public/index.php` um.
+
+---
+
+## Datenbank anlegen
+
+- SQL-Skripte in dieser Reihenfolge ausführen (`application/_installation/`):
+ - `01-create-database.sql`
+ - `02-create-table-users.sql`
+ - `03-create-table-notes.sql`
+
+Beispiel in der Shell:
+
```bash
-sudo a2enmod rewrite
-service apache2 restart
+mysql -u root -p < application/_installation/01-create-database.sql
+mysql -u root -p < application/_installation/02-create-table-users.sql
+mysql -u root -p < application/_installation/03-create-table-notes.sql
```
-Install curl (needed to use git), openssl (needed to clone from GitHub, as github is https only),
-PHP GD, the graphic lib (we create captchas and avatars), and git.
+---
+
+## Framework-Konfiguration (Entwicklung)
+
+- Datei: `application/config/config.development.php`
+- Wichtige Schlüssel:
+ - URL
+ - `URL` (Basis-URL, endet mit `/`; auto-detect möglich)
+ - Pfade
+ - `PATH_CONTROLLER`, `PATH_VIEW` (meist unverändert)
+ - Routing
+ - `DEFAULT_CONTROLLER`, `DEFAULT_ACTION`
+ - Datenbank
+ - `DB_TYPE`, `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, `DB_PASS`, `DB_CHARSET`
+ - Captcha
+ - `CAPTCHA_WIDTH`, `CAPTCHA_HEIGHT`
+ - Cookies & Session
+ - `COOKIE_RUNTIME`, `COOKIE_PATH`, `COOKIE_DOMAIN`, `COOKIE_SECURE`, `COOKIE_HTTP`
+ - `SESSION_RUNTIME`
+ - Avatare/Gravatar
+ - `USE_GRAVATAR`, `GRAVATAR_DEFAULT_IMAGESET`, `GRAVATAR_RATING`
+ - `AVATAR_SIZE`, `AVATAR_JPEG_QUALITY`, `AVATAR_DEFAULT_IMAGE`
+ - Ordner `public/avatars/` beschreibbar machen
+ - Sicherheit
+ - `ENCRYPTION_KEY`, `HMAC_SALT` (für eigene Installation ändern)
+ - E-Mail
+ - `EMAIL_USED_MAILER`, `EMAIL_USE_SMTP`
+ - `EMAIL_SMTP_HOST`, `EMAIL_SMTP_AUTH`, `EMAIL_SMTP_USERNAME`, `EMAIL_SMTP_PASSWORD`, `EMAIL_SMTP_PORT`, `EMAIL_SMTP_ENCRYPTION`
+ - `EMAIL_PASSWORD_RESET_*`, `EMAIL_VERIFICATION_*`
+
+---
+
+## Umgebungen (Environment)
+
+- Klasse: `application/core/Environment.php`
+- Ermittelt `APPLICATION_ENV` (Fallback: `development`)
+- Weitere Datei möglich: `config.production.php`
+- Apache-Variable setzen:
+
+```apacheconf
+SetEnv APPLICATION_ENV production
+```
+
+---
+
+## Verzeichnisrechte
+
+- `public/avatars/` beschreibbar
+- Optional Logs/Uploads je nach Bedarf
+
+---
+
+## Starten
+
+- Browser: `http:///`
+- Registrierung/Login testen
+- Mailversand nur mit korrekt konfiguriertem SMTP
+
+---
+
+## Tests ausführen
+
+- PHPUnit unter `vendor/bin/phpunit`
+- Konfiguration: `tests/phpunit.xml`
+
```bash
-sudo apt-get -y install curl
-sudo apt-get -y install php5-curl
-sudo apt-get -y install openssl
-sudo apt-get -y install php5-gd
-sudo apt-get -y install git
+vendor/bin/phpunit -c tests/phpunit.xml
```
-git clone HUGE
+---
+
+## Häufige Probleme
+
+- 404 bei allen Routen
+ - `mod_rewrite` aktivieren
+ - `AllowOverride All` setzen
+ - DocumentRoot auf `public/`
+- Falsche Links/Assets
+ - `URL` in der Config prüfen
+- Datenbankfehler
+ - `DB_*`-Werte und Rechte prüfen
+- E-Mails kommen nicht an
+ - `EMAIL_USE_SMTP=true` und SMTP-Daten prüfen
+- Avatare fehlen
+ - Schreibrechte für `public/avatars/`
+
+---
+
+## Option: Vagrant „One-Click-Installation“
+
+- Ordner: `_one-click-installation/`
+- Voraussetzungen: Vagrant + VirtualBox
+
```bash
-sudo git clone https://github.com/panique/huge "/var/www/html"
+cd _one-click-installation
+vagrant up
```
-Install Composer
-```bash
-curl -s https://getcomposer.org/installer | php
-mv composer.phar /usr/local/bin/composer
-```
+- Projekt über die VM nutzen (Host/Ports laut Vagrant-Ausgabe)
-Go to project folder, load Composer packages (--dev is optional, you know the deal)
-```bash
-cd /var/www/html
-composer install --dev
-```
+---
-Execute the SQL statements. Via phpmyadmin or via the command line for example. 12345678 is the example password.
-Note that this is written without a space.
-```bash
-sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/01-create-database.sql"
-sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/02-create-table-users.sql"
-sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/03-create-table-notes.sql"
-```
+## Struktur (Kurz)
-Make avatar folder writable (make sure it's the correct path!)
-```bash
-sudo chown -R www-data "/var/www/html/public/avatars"
-```
-If this doesn't work for you, then you might try the hard way by setting alternatively
-```bash
-sudo chmod 0777 -R "/var/www/html/public/avatars"
-```
-
-Remove Apache's default demo file
-```bash
-sudo rm "/var/www/html/index.html"
-```
-
-Edit the application's config in application/config/config.development.php and put in your database credentials.
-
-Last part (not needed for a first test): Set your SMTP credentials in the same file and set EMAIL_USE_SMTP to true, so
-you can send proper emails. It's highly recommended to use SMTP for mail sending! Native sending via PHP's mail() will
-not work in nearly every case (spam blocking). I use [SMTP2GO](http://www.smtp2go.com/?s=devmetal).
-
-Then check your server's IP / domain. Everything should work fine.
-
-#### NGINX setup:
-
-This is an untested NGINX setup. Please comment [on the ticket](https://github.com/panique/huge/issues/622) if you see
-issues.
-
-```
-server {
- # your listening port
- listen 80;
-
- # your server name
- server_name example.com;
-
- # your path to access log files
- access_log /srv/www/example.com/logs/access.log;
- error_log /srv/www/example.com/logs/error.log;
-
- # your root
- root /srv/www/example.com/public_html;
-
- # huge
- index index.php;
-
- # huge
- location / {
- try_files $uri /index.php?url=$uri&$args;
- }
-
- # your PHP config
- location ~ \.php$ {
- try_files $uri = 401;
- include /etc/nginx/fastcgi_params;
- fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- }
-}
-```
-
-#### IIS setup:
-
-Big thanks to razuro for this fine setup: Put this inside your root folder, but don't put any web.config in your public
-folder.
-
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-Find the original [ticket here](https://github.com/panique/huge/issues/788).
-
-#### Testing with demo users
-
-By default there are two demo users, a normal user and an admin user. For more info on that please have a look on the
-user role part of the small documentation block inside this readme.
-
-Normal user: Username is `demo2`, password is `12345678`. The user is already activated.
-Admin user (can delete and suspend other users): Username is `demo`, password is `12345678`. The user is already activated.
-
-### What the hell are .travis.yml, .scrutinizer.yml etc. ?
-
-There are several files in the root folder of the project that might be irritating:
-
- - *.htaccess* (optionally) routes all traffic to /public/index.php! If you installed this project correctly, then this
- file is not necessary, but as lots of people have problems setting up the vhost correctly, .htaccess it still there
- to increase security, even on partly-broken-installations.
- - *.scrutinizer.yml* (can be deleted): Configs for the external code quality analyzer Scrutinizer, just used here on
- GitHub, you don't need this for your project.
- - *.travis.yml* (can be deleted): Same like above. Travis is an external service that creates installations of this
- repo after each code change to make sure everything runs fine. Also runs the unit tests. You don't need this inside
- your project.
- - *composer.json* (important): You should know what this does. ;) This file says what external dependencies are used.
- - *travis-ci-apache* (can be deleted): Config file for Travis, see above, so Travis knows how to setup the Apache.
-
-*README* and *CHANGELOG* are self-explaining.
-
-### Documentation
-
-A real documentation is in the making. Until then, please have a look at the code and use your IDE's code completion
-features to get an idea how things work, it's quite obvious when you look at the controller files, the model files and
-how data is shown in the view files. A big sorry that there's no documentation yet, but time is rare and we are all
-doing this for free in our free time :)
-
- - TODO: Full documentation
- - TODO: Basic examples on how to do things
-
-#### How to use the different user roles
-
-Currently there are two types of users: Normal users and admins. There are exactly the same, but...
-
-1. Admin users can delete and suspend other users, they have an additional button "admin" in the navigation. Admin users
-have a value of `7` inside the database table field `user_account_type`. They cannot upgrade or downgrade their accounts
-(as this wouldn't make sense).
-
-2. Normal users don't have admin features for sure. But they can upgrade and downgrade their accounts (try it out via
-/user/changeUserRole), which is basically a super-simple implementation of the basic-user / premium-user concept.
-Normal users have a value of `1` or `2` inside the database table field `user_account_type`. By default all new
-registered users are normal users with user role 1 for sure.
-
-See the "Testing with demo users" section of this readme for more info.
-
-There's also a very interesting [pull request adding user roles and user permissions](https://github.com/panique/huge/pull/691),
-which is not integrated into the project as it's too advanced and complex. But, this might be exactly what you need,
-feel free to try.
-
-#### How to use the CSRF feature
-
-To prevent [CSRF attacks](https://en.wikipedia.org/wiki/Cross-site_request_forgery), HUGE does this in the most common
-way, by using a security *token* when the user submits critical forms. This means: When PHP renders a form for the user,
-the application puts a "random string" inside the form (as a hidden input field), generated via Csrf::makeToken()
-(application/core/Csrf.php), which also saves this token to the session. When the form is submitted, the application
-checks if the POST request contains exactly the form token that is inside the session.
-
-This CSRF prevention feature is currently implemented on the login form process (see *application/view/login/index.php*)
-and user name change form process (see *application/view/user/editUsername.php*), most other forms are not security-
-critical and should stay as simple as possible.
-
-So, to do this with a normal form, simply: At your form, before the submit button put:
-``
-Then, in the controller action validate the CSRF token submitted with the form by doing:
-```
-// check if csrf token is valid
-if (!Csrf::isTokenValid()) {
- LoginModel::logout();
- Redirect::home();
- exit();
-}
-```
-
-A big thanks to OmarElGabry for implementing this!
-
-#### Can a user be logged in from multiple devices ?
-
-In theory: Yes, but this feature didn't work in my tests. As it's an external feature please have a look into the
-[according ticket](https://github.com/panique/huge/pull/693) for more.
-
-#### Troubleshooting & Glitches
-
-* In 3.0 and 3.1 a user could log into the application from different devices / browsers / locations. This was intended
- behaviour as this is standard in most web applications these days. In 3.2 still feature is "missing" by default, a
- user will only be able to log in from one browser at the same time. This is a security improvement, but for sure not
- optimal for many developers. The plan is to implement a config switch that will allow / disallow logins from multiple
- browsers.
-* Using this on a sub-domain ? You might get problems with the cookies in IE11. Fix this by replacing "/" with "./" of
- the cookie location COOKIE_PATH inside application/config/config.xxx.php!
- Check [ticket #733](https://github.com/panique/huge/issues/733) for more info. Thanks to jahbiuabft for figuring this
- out. Update: There's another ticket focusing on the same issue: [ticket #681](https://github.com/panique/huge/issues/681)
-
-### Community-provided features & feature discussions
-
-There are some awesome features or feature ideas build by awesome people, but these features are too special-interest
-to go into the main version of HUGE, but have a look into these tickets if you are interested:
-
- - [Caching system](https://github.com/panique/huge/issues/643)
- - [ReCaptcha as captcha](https://github.com/panique/huge/issues/665)
- - [Internationalization feature](https://github.com/panique/huge/issues/582)
- - [Using controller A inside controller B](https://github.com/panique/huge/issues/706)
- - [HTML mails](https://github.com/panique/huge/issues/738)
- - [Deep user roles / user permission system](https://github.com/panique/huge/pull/691)
-
-### Future of HUGE: Announcing "soft End Of Life"
-
-The idea of this project is and was to provide a super-simple barebone application with a full user authentication
-system inside that just works fine and stable. Due to the highly security-related nature of this script any changes
-mean a lot of work, lots of testing, catching edge cases etc., and in the end I spent 90% of the time testing and fixing
-new features or new features break existing stuff, and doing this is really not what anybody wants to do for free in
-the rare free-time :)
-
-To keep the project stable, clean and maintainable, I would kindly announce the "soft-End of Life" for this project,
-meaning:
-
-A. HUGE will not get any new features in the future, but ...
-B. bugfixes and corrections will be made, probably for years
-
-### Coding guideline behind HUGE
-
-While HUGE was in development, there were 3 main rules that helped me (and probably others) to write minimal, clean
- and working code. Might be useful for you too:
-
-1. Reduce features to the bare minimum.
-2. Don't implement features that are not needed by most users.
-3. Only build everything for the most common use case (like MySQL, not PostGre, NoSQL etc).
-
-As noted in the intro of this README, there are also some powerful concepts that might help you when developing cool
-stuff: [KISS](http://en.wikipedia.org/wiki/KISS_principle),
-[YAGNI](http://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it), [Feature Creep](https://en.wikipedia.org/wiki/Feature_creep),
-[Minimum viable product](https://en.wikipedia.org/wiki/Minimum_viable_product).
-
-#### List of features / ideas provided in tickets / pull requests
-
-To avoid unnecessary work for all of us I would kindly recommend everybody to use HUGE for simple project that only
-need the features that already exist, and if you really need a RESTful architecture, migrations, routing, 2FA etc,
-then it's easier, cleaner and faster to simply use Laravel, Symfony or Zend.
-
-However, here are the community-suggested possible features, taken from lots of tickets. Feel free to implement them
-into your forks of the project:
-
-* OAuth2 implementation (let your users create accounts and login via 3rd party auth, like Facebook, Twitter, GitHub,
- etc). As this is a lot of work and would make the project much more complicated it might make sense to do this in a
- fork or totally skip it. (see [Ticket #528](https://github.com/panique/huge/issues/528))
-* Router (map all URLs to according controller-methods inside one file), [Ticket 727](https://github.com/panique/huge/issues/727)
-* RESTful architecture (see [ticket #488](https://github.com/panique/huge/issues/488) for discussion)
-* Horizontal MySQL scaling (see [ticket #423](https://github.com/panique/huge/issues/423) for discussion)
-* Modules / middleware
-* Logging
-* Two-Factor-Authentication (see [ticket #732](https://github.com/panique/huge/issues/732))
-* Controller-less URLs (see [ticket #704](https://github.com/panique/huge/issues/704))
-* Email-re-validation after email change (see [ticket #705](https://github.com/panique/huge/issues/705))
-* Connect to multiple databases (see [ticket #702](https://github.com/panique/huge/issues/702))
-* A deeper user role system (see [ticket #701](https://github.com/panique/huge/issues/701),
-[pull-request #691](https://github.com/panique/huge/pull/691)),
-[ticket #603](https://github.com/panique/huge/issues/603)
-* How to run without using Composer [ticket #826](https://github.com/panique/huge/issues/826)
-
-### Why is there no support forum (anymore) ?
-
-There were two (!) support forums for v1 and v2 of this project (HUGE is v3), and both were vandalized by people who
-didn't even read the readme and / or the install guidelines. Most asked question was "script does not work plz help"
-without giving any useful information (like code or server setup or even the version used). While I'm writing these
-lines somebody just asked via Twitter "how to install without Composer". You know what I mean :) - 99% of the questions
-were not necessary if the people would had read the guidelines, do a minimal research on their own or would stop making
-things so unnecessarily complicated. And even when writing detailed answers most of them still messed it up, resulting
-in rants and complaints (for free support for a free software!). It was just frustrating to deal with this every day,
-especially when people take it for totally granted that *it's the duty* of open-source developers to give detailed,
-free and personal support for every "plz help"-request.
-
-So I decided to completely stop any free support. For serious questions about real problems inside the script please
-use the GitHub issues feature.
-
-### Zero tolerance for idiots, trolls and vandals!
-
-Harsh words, but as basically every public internet project gets harassed, vandalized and trolled these days by very
-strange people it's necessary: Some simple rules.
-
-1. Respect that this is just a simple script written by unpaid volunteers in their free-time.
- This is NOT business-software you've bought for $10.000.
- There's no reason to complain (!) about free open-source software. The attitude against free software
- is really frustrating these days, people take everything for granted without realizing the work behind it, and the
- fact that they get serious software totally for free, saving thousands of dollars. If you don't like it, then don't
- use it. If you want a feature, try to take part in the process, maybe even build it by yourself and add it to the
- project! Be nice and respectful. Constructive criticism is for sure always welcome!
-
-2. Don't bash, don't hate, don't spam, don't vandalize. Please don't ask for personal free support, don't ask if
- somebody could do your work for you. Before you ask something, make sure you've read the README, followed every
- tutorial, double-checked the code and tried to solve the problem by yourself.
-
-Trolls and very annoying people will get a permanent ban / block. GitHub has a very powerful anti-abuse team.
-
-### Contribute
-
-Please commit only in *develop* branch. The *master* branch will always contain the stable version.
-
-### Code-Quality scanner links
-
-[Scrutinizer (master branch)](https://scrutinizer-ci.com/g/panique/huge/?branch=master),
-[Scrutinizer (develop branch)](https://scrutinizer-ci.com/g/panique/huge/?branch=develop),
-[Code Climate](https://codeclimate.com/github/panique/huge),
-[Codacy](https://www.codacy.com/public/panique/phplogin/dashboard?bid=789836),
-[SensioLabs Insight](https://insight.sensiolabs.com/projects/d4f4e3c0-1445-4245-8cb2-d75026c11fa7/analyses/2).
-
-### Found a bug (Responsible Disclosure) ?
-
-Due to the possible consequences when publishing a bug on a public open-source project I'd kindly ask you to send really
-big bugs to my email address, not posting this here. If the bug is not interesting for attackers: Feel free to create
-an normal GitHub issue.
-
-### Current and further development
-
-See active issues here:
-https://github.com/panique/huge/issues?state=open
-
-### Why you should use a favicon.ico in your project :)
-
-Interesting issue: When a user hits your website, the user's browser will also request one or more (!) favicons
-(different sizes). If these static files don't exist, your application will start to generate a 404 response and a 404
-page for each file. This wastes a lot of server power and is also useless, therefore make sure you always have favicons
-or handle this from Apache/nginx level.
-
-HUGE tries to handle this by sending an empty image in the head of the view/_templates/header.php !
-
-More inside this ticket: [Return proper 404 for missing favicon.ico, missing images etc.](https://github.com/panique/huge/issues/530)
-
-More here on Stackflow: [How to prevent favicon.ico requests?](http://stackoverflow.com/questions/1321878/how-to-prevent-favicon-ico-requests),
-[Isn't it silly that a tiny favicon requires yet another HTTP request? How to make favicon go into a sprite?](http://stackoverflow.com/questions/5199902/isnt-it-silly-that-a-tiny-favicon-requires-yet-another-http-request-how-to-mak?lq=1).
-
-### Useful links
-
-- [How long will my session last?](http://stackoverflow.com/questions/1516266/how-long-will-my-session-last/1516338#1516338)
-- [How to do expire a PHP session after X minutes?](http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes/1270960#1270960)
-- [How to use PDO](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)
-- [A short guideline on how to use the PHP 5.5 password hashing functions and its PHP 5.3 & 5.4 implementations](http://www.dev-metal.com/use-php-5-5-password-hashing-functions/)
-- [How to setup latest version of PHP 5.5 on Ubuntu 12.04 LTS](http://www.dev-metal.com/how-to-setup-latest-version-of-php-5-5-on-ubuntu-12-04-lts/)
-- [How to setup latest version of PHP 5.5 on Debian Wheezy 7.0/7.1 (and how to fix the GPG key error)](http://www.dev-metal.com/setup-latest-version-php-5-5-debian-wheezy-7-07-1-fix-gpg-key-error/)
-- [Notes on password & hashing salting in upcoming PHP versions (PHP 5.5.x & 5.6 etc.)](https://github.com/panique/huge/wiki/Notes-on-password-&-hashing-salting-in-upcoming-PHP-versions-%28PHP-5.5.x-&-5.6-etc.%29)
-- [Some basic "benchmarks" of all PHP hash/salt algorithms](https://github.com/panique/huge/wiki/Which-hashing-&-salting-algorithm-should-be-used-%3F)
-- [How to prevent PHP sessions being shared between different apache vhosts / different applications](http://www.dev-metal.com/prevent-php-sessions-shared-different-apache-vhosts-different-applications/)
-
-## Interesting links regarding user authentication and application security
-
-- [interesting article about password resets (by Troy Hunt, security expert)](http://www.troyhunt.com/2012/05/everything-you-ever-wanted-to-know.html)
-- Password-Free Email Logins: [Ticket & discussion](https://github.com/panique/huge/issues/674), [article](http://techcrunch.com/2015/06/30/blogging-site-medium-rolls-out-password-free-email-logins/?ref=webdesignernews.com)
-- Logging in via QR code: [Ticket & discussion](https://github.com/panique/huge/issues/290), [english article](https://www.grc.com/sqrl/sqrl.htm),
- [german article](http://www.phpgangsta.de/sesam-oeffne-dich-sicher-einloggen-im-internetcafe),
- [repo](https://github.com/PHPGangsta/Sesame), [live-demo](http://sesame.phpgangsta.de/). Big thanks to *PHPGangsta* for writing this!
-
-### My blog
-
-I'm also blogging at **[Dev Metal](http://www.dev-metal.com)**.
+- `public/` (Webroot, `.htaccess`, `index.php`)
+- `application/controller/` (Controller)
+- `application/model/` (Modelle)
+- `application/view/` (Views)
+- `application/config/` (Konfiguration je Environment)
+- `application/_installation/` (SQL-Skripte)
+- `vendor/` (Composer-Abhängigkeiten)
+- `tests/` (PHPUnit)
diff --git a/composer.lock b/composer.lock
deleted file mode 100644
index af67e06..0000000
--- a/composer.lock
+++ /dev/null
@@ -1,1374 +0,0 @@
-{
- "_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": "20821c10675bc4dd005e512556018d4f",
- "packages": [],
- "packages-dev": [
- {
- "name": "doctrine/instantiator",
- "version": "1.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
- "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9 || ^11",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.16 || ^1",
- "phpstan/phpstan": "^1.4",
- "phpstan/phpstan-phpunit": "^1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.30 || ^5.4"
- },
- "type": "library",
- "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": "https://ocramius.github.io/"
- }
- ],
- "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"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2022-12-30T00:15:36+00:00"
- },
- {
- "name": "gregwar/captcha",
- "version": "v1.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Gregwar/Captcha.git",
- "reference": "4edbcd09fde4353b94ce550f43460eba73baf2cc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Gregwar/Captcha/zipball/4edbcd09fde4353b94ce550f43460eba73baf2cc",
- "reference": "4edbcd09fde4353b94ce550f43460eba73baf2cc",
- "shasum": ""
- },
- "require": {
- "ext-fileinfo": "*",
- "ext-gd": "*",
- "ext-mbstring": "*",
- "php": ">=5.3.0",
- "symfony/finder": "*"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6.4 || ^7.0 || ^8.0 || ^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Gregwar\\": "src/Gregwar"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Grégoire Passault",
- "email": "g.passault@gmail.com",
- "homepage": "http://www.gregwar.com/"
- },
- {
- "name": "Jeremy Livingston",
- "email": "jeremy.j.livingston@gmail.com"
- }
- ],
- "description": "Captcha generator",
- "homepage": "https://github.com/Gregwar/Captcha",
- "keywords": [
- "bot",
- "captcha",
- "spam"
- ],
- "support": {
- "issues": "https://github.com/Gregwar/Captcha/issues",
- "source": "https://github.com/Gregwar/Captcha/tree/v1.3.0"
- },
- "time": "2025-06-23T12:25:54+00:00"
- },
- {
- "name": "phpdocumentor/reflection-docblock",
- "version": "2.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b",
- "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "suggest": {
- "dflydev/markdown": "~1.0",
- "erusev/parsedown": "~1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "phpDocumentor": [
- "src/"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "mike.vanriel@naenius.com"
- }
- ],
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/2.x"
- },
- "time": "2016-01-25T08:17:30+00:00"
- },
- {
- "name": "phpmailer/phpmailer",
- "version": "v6.12.0",
- "source": {
- "type": "git",
- "url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "d1ac35d784bf9f5e61b424901d5a014967f15b12"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/d1ac35d784bf9f5e61b424901d5a014967f15b12",
- "reference": "d1ac35d784bf9f5e61b424901d5a014967f15b12",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-filter": "*",
- "ext-hash": "*",
- "php": ">=5.5.0"
- },
- "require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
- "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.2",
- "yoast/phpunit-polyfills": "^1.0.4"
- },
- "suggest": {
- "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
- "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.12.0"
- },
- "funding": [
- {
- "url": "https://github.com/Synchro",
- "type": "github"
- }
- ],
- "time": "2025-10-15T16:49:08+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "v1.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7",
- "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.0.2",
- "phpdocumentor/reflection-docblock": "~2.0",
- "sebastian/comparator": "~1.1"
- },
- "require-dev": {
- "phpspec/phpspec": "~2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Prophecy\\": "src/"
- }
- },
- "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"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/master"
- },
- "time": "2015-08-13T10:07:40+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "2.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "phpunit/php-file-iterator": "~1.3",
- "phpunit/php-text-template": "~1.2",
- "phpunit/php-token-stream": "~1.3",
- "sebastian/environment": "^1.3.2",
- "sebastian/version": "~1.0"
- },
- "require-dev": {
- "ext-xdebug": ">=2.1.4",
- "phpunit/phpunit": "~4"
- },
- "suggest": {
- "ext-dom": "*",
- "ext-xdebug": ">=2.2.1",
- "ext-xmlwriter": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.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": {
- "irc": "irc://irc.freenode.net/phpunit",
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/2.2"
- },
- "time": "2015-10-06T15:47:00+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "1.4.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
- "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.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": {
- "irc": "irc://irc.freenode.net/phpunit",
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5"
- },
- "time": "2017-11-27T13:52:08+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"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
- },
- "time": "2015-06-21T13:50:34+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "1.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4|~5"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "irc": "irc://irc.freenode.net/phpunit",
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/master"
- },
- "time": "2016-05-12T18:03:57+00:00"
- },
- {
- "name": "phpunit/php-token-stream",
- "version": "1.4.12",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
- "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-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"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
- "source": "https://github.com/sebastianbergmann/php-token-stream/tree/1.4"
- },
- "abandoned": true,
- "time": "2017-12-04T08:55:13+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "4.8.36",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
- "reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "php": ">=5.3.3",
- "phpspec/prophecy": "^1.3.1",
- "phpunit/php-code-coverage": "~2.1",
- "phpunit/php-file-iterator": "~1.4",
- "phpunit/php-text-template": "~1.2",
- "phpunit/php-timer": "^1.0.6",
- "phpunit/phpunit-mock-objects": "~2.3",
- "sebastian/comparator": "~1.2.2",
- "sebastian/diff": "~1.2",
- "sebastian/environment": "~1.3",
- "sebastian/exporter": "~1.2",
- "sebastian/global-state": "~1.0",
- "sebastian/version": "~1.0",
- "symfony/yaml": "~2.1|~3.0"
- },
- "suggest": {
- "phpunit/php-invoker": "~1.1"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.8.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": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/4.8.36"
- },
- "time": "2017-06-21T08:07:12+00:00"
- },
- {
- "name": "phpunit/phpunit-mock-objects",
- "version": "2.3.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.0.2",
- "php": ">=5.3.3",
- "phpunit/php-text-template": "~1.2",
- "sebastian/exporter": "~1.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "suggest": {
- "ext-soap": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Mock Object library for PHPUnit",
- "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
- "keywords": [
- "mock",
- "xunit"
- ],
- "support": {
- "irc": "irc://irc.freenode.net/phpunit",
- "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues",
- "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/2.3"
- },
- "abandoned": true,
- "time": "2015-10-02T06:51:40+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "1.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
- "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "sebastian/diff": "~1.2",
- "sebastian/exporter": "~1.2 || ~2.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-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": "http://www.github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/1.2"
- },
- "time": "2017-01-29T09:50:25+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "1.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-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"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/master"
- },
- "time": "2015-12-08T07:14:41+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "1.3.7",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716",
- "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-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"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/1.3.7"
- },
- "time": "2016-05-17T03:18:57+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "1.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
- "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "sebastian/recursion-context": "~1.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "~4.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3.x-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"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/master"
- },
- "time": "2016-06-17T09:04:28+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
- "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.2"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.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/1.1.1"
- },
- "time": "2015-10-12T03:26:01+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "1.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
- "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.4"
- },
- "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": "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",
- "support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/master"
- },
- "time": "2016-10-03T07:41:43+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "1.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
- "shasum": ""
- },
- "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": "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/1.0.6"
- },
- "time": "2015-06-21T13:59:46+00:00"
- },
- {
- "name": "symfony/finder",
- "version": "v7.3.5",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "9f696d2f1e340484b4683f7853b273abff94421f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f",
- "reference": "9f696d2f1e340484b4683f7853b273abff94421f",
- "shasum": ""
- },
- "require": {
- "php": ">=8.2"
- },
- "require-dev": {
- "symfony/filesystem": "^6.4|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Finder\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Finds files and directories via an intuitive fluent interface",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/finder/tree/v7.3.5"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2025-10-15T18:45:57+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.33.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
- "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "provide": {
- "ext-ctype": "*"
- },
- "suggest": {
- "ext-ctype": "For best performance"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "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.33.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://github.com/nicolas-grekas",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
- },
- {
- "name": "symfony/yaml",
- "version": "v3.4.47",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "88289caa3c166321883f67fe5130188ebbb47094"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/88289caa3c166321883f67fe5130188ebbb47094",
- "reference": "88289caa3c166321883f67fe5130188ebbb47094",
- "shasum": ""
- },
- "require": {
- "php": "^5.5.9|>=7.0.8",
- "symfony/polyfill-ctype": "~1.8"
- },
- "conflict": {
- "symfony/console": "<3.4"
- },
- "require-dev": {
- "symfony/console": "~3.4|~4.0"
- },
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony Yaml Component",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/yaml/tree/v3.4.47"
- },
- "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": "2020-10-24T10:57:07+00:00"
- }
- ],
- "aliases": [],
- "minimum-stability": "stable",
- "stability-flags": {},
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": {},
- "platform-dev": {
- "php": ">=5.5.0"
- },
- "plugin-api-version": "2.9.0"
-}